我有兩個表:如何在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]>
所以,我試圖指定密鑰長度是這樣的:
ALTER TABLE second_table
ADD FOREIGN KEY (my_id(6))
REFERENCES first_table(my_id)
ON DELETE CASCADE ON UPDATE CASCADE;
而且我得到了這個錯誤:
ERROR 1005 (HY000): Can't create table `base_ventas`.`#sql-1a08_23c`
(errno: 150 "Foreign key constraint is incorrectly formed")
這不會與數字ID發生,但我需要有字符串類型ID,是可以做到的,或者我失去了一些東西?
這裏'TEXT(6)'的含義是什麼?使用這些id值,外鍵,是一個非常糟糕的計劃。 – tadman
@tadman我在大學和我的數據庫教授做了結構,現在我試圖實現它,我的選擇可能是一個數字ID中等或int也許 – Alcides
這種模式是很簡單*錯誤*在這麼多水平。使用'TEXT'作爲標識符是任何理智的代碼審查自動失敗。如果它們是數字,則使用'INT',否則使用'VARCHAR(6)'。 – tadman