在MYSQL中使用引用
我在这里得到了另一个问题的答案: 这是一个很好的答案,但我不理解关于参考资料的一点。我可以使用SQL语句,但我从未使用过引用在MYSQL中使用引用,sql,mysql,foreign-keys,Sql,Mysql,Foreign Keys,我在这里得到了另一个问题的答案: 这是一个很好的答案,但我不理解关于参考资料的一点。我可以使用SQL语句,但我从未使用过引用 它们是用来干什么的 它们是如何使用的 请举个例子 REFERENCES关键字是的一部分,它使MySQL要求引用表的指定列中的值也存在于引用表的指定列中 这可以防止外键引用不存在或已删除的ID,并且可以选择性地防止您在仍引用行时删除行 一个具体的例子是,如果每个员工都必须属于某个部门,则可以从employee.departmentid引用department.id添加外键
REFERENCES关键字是的一部分,它使MySQL要求引用表的指定列中的值也存在于引用表的指定列中 这可以防止外键引用不存在或已删除的ID,并且可以选择性地防止您在仍引用行时删除行 一个具体的例子是,如果每个员工都必须属于某个部门,则可以从
employee.departmentid
引用department.id
添加外键约束
运行以下代码创建两个测试表tablea
和tableb
,其中tableb
中的列a\u id
引用了tablea
的主键<代码>表格a填充了几行
CREATE TABLE tablea (
id INT PRIMARY KEY,
foo VARCHAR(100) NOT NULL
) Engine = InnoDB;
INSERT INTO tablea (id, foo) VALUES
(1, 'foo1'),
(2, 'foo2'),
(3, 'foo3');
CREATE TABLE tableb (
id INT PRIMARY KEY,
a_id INT NOT NULL,
bar VARCHAR(100) NOT NULL,
FOREIGN KEY fk_b_a_id (a_id) REFERENCES tablea (id)
) Engine = InnoDB;
现在尝试以下命令:
INSERT INTO tableb (id, a_id, bar) VALUES (1, 2, 'bar1');
-- succeeds because there is a row in tablea with id 2
INSERT INTO tableb (id, a_id, bar) VALUES (2, 4, 'bar2');
-- fails because there is not a row in tablea with id 4
DELETE FROM tablea WHERE id = 1;
-- succeeds because there is no row in tableb which references this row
DELETE FROM tablea WHERE id = 2;
-- fails because there is a row in tableb which references this row
重要提示:两个表都必须是InnoDB表,否则将忽略该约束。引用的
关键字显示外键约束,这意味着:
FOREIGN KEY (`chat_id` ) REFERENCES `chats`.`chat` (`id` )
…当前表中的chat\u id
列只能包含chat
表、id
列中已经存在的值
例如,如果CHAT.id列包含:
id
----
a
b
c
…您不能将a/b/c以外的任何值添加到chat\u id
列中。当您使用引用时,我认为它还希望表必须存在于关系一侧。