原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处
记得在第十三章左联,创建student表的时候说了句,字段class_i是当做一个外键,并不是一个真的外键。那么真的外键又是个啥?
外键属于一种约束,限制你对数据库的操作,它是为了防止因为操作不当产生冗余数据/脏数据的一种约束。删掉几个新增的class_id为3的数据,右键student表,选择设计表。然后创建一个外键,将class_id设为一个外键:
然后保存。
然后,我们去class表删除id为1的数据:
这时候刷新student表,你会发现,student表中的class_id为1的数据一起被删除了:
我们可以找到,设置外键的时候,删除时和新增时都有四个选项:
没错,造成student表中数据被删除的就是删除时的这个CASCADE。这四个选项是事件触发限制,意思分别是:
以上是通过软件来创建外键,如果通过语句,应该是这样:
CREATE TABLE student(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(5) NOT NULL,
gender VARCHAR(1) NOT NULL,
stu_no VARCHAR(10) NOT NULL,
class_id INT NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(class_id) REFERENCES class(id)
);
这句话是说引用class表的id字段到student表的class_id字段作为外键,查看外键,可以发现创建出来的外键删除时和更新时都是默认的:
如果想要修改触发限制可以这么做:
CREATE TABLE student(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(5) NOT NULL,
gender VARCHAR(1) NOT NULL,
stu_no VARCHAR(10) NOT NULL,
class_id INT NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(class_id) REFERENCES class(id) ON DELETE CASCADE ON UPDATE CASCADE
);
之所以把外键放到最后,是因为平时写程序不太喜欢使用这种方式,用得非常少,我也不是太会,因为有时候觉得数据库限制得太强了不太自由,相比之下我本人更喜欢在程序中维护数据的一致性。那个,对于外键这块,我先干了,你们随意。
emmm,mysql的基础到此结束了,还有啥索引什么的,以后遇到了讲讲。后面的内容不定期更新,也都是零散讲一些技巧。