나는 두 개의 테이블이 있습니다MariaDB 또는 MySQL에서 텍스트 유형의 외래 키를 만들려면 어떻게해야합니까?
CREATE TABLE first_table(
my_id TEXT(6) NOT NULL,
content VARCHAR(30) NOT NULL,
PRIMARY KEY(my_id(6))
) Engine=InnoDB charset utf8mb4 collate utf8mb4_general_ci;
CREATE TABLE second_table(
another_id TEXT(6) NOT NULL,
my_id TEXT(6) NOT NULL,
another_content VARCHAR(30) NOT NULL,
PRIMARY KEY(another_id(6))
) Engine=InnoDB charset utf8mb4 collate utf8mb4_general_ci;
그러나 두 번째 테이블에서 내가 첫 번째 테이블을 참조하는 외래 키를 만들 수 없습니다를 먼저 나는이 시도했다 :
ALTER TABLE second_table
ADD FOREIGN KEY (my_id)
REFERENCES first_table(my_id)
ON DELETE CASCADE ON UPDATE CASCADE;
을 그리고이있어 오류 :
: 그래서ERROR 1170 (42000): BLOB/TEXT column 'my_id' used in key specification without a key length
MariaDB [base_ventas]>
,이 같은 키 길이를 지정하려
그리고이 오류가 발생했습니다 :
ERROR 1005 (HY000): Can't create table `base_ventas`.`#sql-1a08_23c`
(errno: 150 "Foreign key constraint is incorrectly formed")
이 숫자 ID가 발생하지 않습니다하지만 난 문자열 형식 ID, 그것을 할 수있는, 또는 내가 뭔가를 놓친 거지가 필요?
여기 '텍스트 (6)'의 요점은 무엇입니까? id 값에 외래 키를 사용하면 정말 나쁜 계획입니다. – tadman
@tadman 나는 대학에 있고 DB 교수는 구조를 만들었지 만 지금은 그것을 구현하려고하고있다. 나의 선택은 숫자 id mediumint 또는 int 일 수도있다 – Alcides
이 스키마는 너무 단순하다. 레벨. 식별자에 'TEXT'를 사용하면 모든 정상적인 코드 검토에서 자동 실패가 발생합니다. 이것이 숫자라면,'INT'를 사용하고, 그렇지 않으면'VARCHAR (6)'을 사용하십시오. – tadman