我不确定,但我是否需要在 SQL 命令中显式创建外键?
这个人做了这个:
CREATE TABLE languages (
lang_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
lang VARCHAR(60) NOT NULL,
lang_eng VARCHAR(20) NOT NULL,
PRIMARY KEY (lang_id),
UNIQUE (lang)
);
CREATE TABLE threads (
thread_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
lang_id TINYINT(3) UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
subject VARCHAR(150) NOT NULL,
PRIMARY KEY (thread_id),
INDEX (lang_id),
INDEX (user_id)
);
在这种情况下,是否意味着 INDEX(lang_id) 自动成为 FOREIGN KEY?我知道 INDEX 使搜索速度更快,但我不明白有关外键的部分
非常感谢您的回答
最佳答案
没有。索引就是……字段上的索引。外键告诉 MySQL“这个特定字段必须在那边的那个表中有匹配的记录”。
MySQL 的内部设计要求对所有用作外键的字段进行索引,但现代版本会自动为您创建该索引。
反之则不然。向字段添加索引不会将其变成外键 - 外键定义还必须包括外表/字段是什么,而简单的索引声明没有这些信息。
对于您的示例表,您需要有
...
INDEX (lang_id),
FOREIGN KEY (lang_id) REFERENCES languages (lang_id),
...
生成外键。
关于mysql - SQL中的主键和外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7882148/