继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

mysql外键约束的参照我是来充字数的

落子鸢
关注TA
已关注
手记 9
粉丝 2
获赞 64

1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。

2.数据表的存储引擎只能为InnoDB。

3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。

4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。

根据父表的参照列创建子表的外键列:
父表:
CREATE TABLE province(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
pname VARCHAR(20) NOT NULL
);
子表:
CREATE TABLE users(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(10) NOT NULL,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES province (id)
);

外键约束的参照操作

  1. CASCADE 需要在两张表中插入记录,必须先在父表中插入记录再在子表中插入记录
    因为子表参照的是父表中的信息,若父表中没有则无法参照
    2、SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子列表没有指定NOT NULL。
    3、RESTRICT:拒绝对父表的删除或更新操作。
    4、NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。

NO ACTION:与RESTRICT相同
所以说,我们在实际的项目开发中,我们不去定义物理的外键,所谓的逻辑外键指的是就是我们在定义两张表的结构的时候,我们是按照存在的某种结构的方式去定义,但是不去使用FOREIGN KEY这个关键词来定义。

FOREIGN KEY (子表列名) REFERENCES FROM 父表名(父表列名)[ON DELETE|UPDATE CASCADE|SET NULL|RESTRICT|NO ACTION];

在实际开发中,存储引擎不为INNODB,无法使用FOREIGN KEY,普遍使用逻辑方法。

创建子表:users1;

CREATE TABLE users(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(10) NOT NULL,
pid(外键) SMALLINT(与参照键类型相同) UNSIGNED(与参照键有无符号类型也要相同),//外键的作用体现在这:如果我们要添加一个省份的字段,需要添加个char型的,现在有了关系型数据库,我们只需要存储省份的id即可;
FOREIGN KEY (pid) PREFERENCES provinces (id) ON DELETE CASCADE,
);

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP