在MySQL中,InnoDB
表支持检查外键约束。请参见 第15章,InnoDB存储引擎,以及 第1.7.2.3节“外键约束差异”。
仅仅连接两个表并不需要外键约束。对于除以外的存储引擎 InnoDB
,可以在定义列时使用 没有实际作用的子句,该子句仅作为对您的备忘录或注释,您当前定义的该列打算引用其中的列。另一张桌子。使用此语法时,必须意识到: REFERENCES
tbl_name
(col_name
)
-
MySQL不执行任何形式的检查来确保它
col_name
确实存在tbl_name
(甚至tbl_name
本身存在)。 -
MySQL不执行任何类型的操作,
tbl_name
例如响应定义的表中的行而删除行。换句话说,这种语法不引起ON DELETE
或ON UPDATE
行为的任何责任。(尽管您可以将ON DELETE
orON UPDATE
子句编写为该REFERENCES
子句的一部分,但也将其忽略。) -
此语法创建一列;它并 不会创建任何类型的索引或关键的。
您可以使用这样创建的列作为联接列,如下所示:
CREATE TABLE person (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE shirt (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
PRIMARY KEY (id)
);
INSERT INTO person VALUES (NULL, 'Antonio Paz');
SELECT @last := LAST_INSERT_ID();
INSERT INTO shirt VALUES
(NULL, 'polo', 'blue', @last),
(NULL, 'dress', 'white', @last),
(NULL, 't-shirt', 'blue', @last);
INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');
SELECT @last := LAST_INSERT_ID();
INSERT INTO shirt VALUES
(NULL, 'dress', 'orange', @last),
(NULL, 'polo', 'red', @last),
(NULL, 'dress', 'blue', @last),
(NULL, 't-shirt', 'white', @last);
SELECT * FROM person;
+----+---------------------+
| id | name |
+----+--------------------