references创建表时关键字是如何使用的?
假设我想创建两个表person,hobby并且我希望业余爱好者表ID引用人的ID?
person table
- id
- name
hobby
- id
- person_id
- hobby_name
Run Code Online (Sandbox Code Playgroud)
我怎么做?
Håv*_*d S 33
与此类似地创建爱好表:
CREATE TABLE hobby (
id INT NOT NULL AUTO_INCREMENT,
person_id INT NOT NULL,
hobby_name VARCHAR(255),
PRIMARY KEY(id),
FOREIGN KEY(person_id) REFERENCES person(id))
Run Code Online (Sandbox Code Playgroud)
这是一个直接来自MySQL网站的例子:
CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE person (person_id INT NOT NULL,
PRIMARY KEY (person_id));
CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL,
PRIMARY KEY(hobby_id),
FOREIGN KEY(person_id) REFERENCES person(person_id));
Run Code Online (Sandbox Code Playgroud)
references关键字用于定义在外键关系中使用的表和列.这意味着爱好表中的记录必须具有person表中存在的person_id,否则在插入时您将收到该键不存在的错误.
要回答上面关于"ON DELETE CASCADE"的内容的问题,它允许您删除父键记录(亲自)及其相应的子记录(爱好),而不必先删除所有子记录.
为了澄清,如果您有子记录附加到主键条目,并且您尝试删除主键条目,如:
DELETE FROM person where person_id = 1;
Run Code Online (Sandbox Code Playgroud)
没有DELETE ON CASCADE,如果业余爱好中的任何记录的person_id为1,您将收到错误.在执行上述删除之前,您将首先删除所有这些记录.使用DELETE ON CASCADE时,上述删除将成功并自动删除链接到从主键表中删除的person_id的表爱好表中的任何和所有记录.
| 归档时间: |
|
| 查看次数: |
55001 次 |
| 最近记录: |