十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1.外键的作用,主要有两个:
创新互联建站网络公司拥有十年的成都网站开发建设经验,近1000家客户的共同信赖。提供网站建设、成都做网站、网站开发、网站定制、友情链接、建网站、网站搭建、成都响应式网站建设、网页设计师打造企业风格,提供周到的售前咨询和贴心的售后服务
一个是让数据库自己通过外键来保证数据的完整性和一致性
一个就是能够增加ER图的可读性
2.外键的配置
1)先创建一个主表,代码如下:
#创建表student,并添加各种约束
create
table
student
(
id
int
primary
key
,
#主键约束
name
varchar(20)
,
#唯一约束
age
int
NOT
NULL,
#非空约束
sex
varchar(2)
,
address
varchar(20)
default
'重庆'
#默认约束
)
;
再通过一个外键,创建一个分数表,这样的话,就可以方便查询。代码如下:
#创建分数表
create
table
score
(
id
int
primary
key
,
sid
int
,
china
int
,
history
int,
english
int,
constraint
FK_sid
foreign
key(sid)
references
student(id)
#通过外键创建链接
)
;
创建外键的方法有很多,其中最常见创建外键的格式是:constraint
FK_***
foreign
key(**)
references
链接的外表
删除外键:
alter
table
drop
foreign
key
'外键名'.
注意:
只有在定义外键时,用constraint
外键名
foreign
key
....
方便进行外键的删除
一、Mysql支持以下约束:
※ 主键约束 :primary key
※ 唯一性约束:unique key
※ 外键约束:foreign key
※ 非空约束:not null
※ 默认值约束:default
二、主键约束:
一个表只能有一个主键,当建表时忘记设置主键约束时.设置为主键的列查询速度会非常快,所以一般会用聚集索引,这个我们后面会讲到。
添加主键约束:设置myself表的age为主键
语法:alter table 表名 add primary key;(列名)※ 可以有多个列名。
三、外键约束:
何为外键,当建表时需要用到另外一个表的主键作为本表的的主键时,需要设置外键。设置外间后,若想在删除本表数据时会级联删除或者默认删除其他方式。
添加外键约束:设置本表的cno为外键
语法:alter table 表名称 add foreign key (列名称) references 关联表名称(列名称);
四、非空约束:
当插入新数据时对应的列为不能空。非空约束是相对于默认值约束而说的。
添加非空约束:
语法:alter table 表名 modify 列名 列类型 not null;
五、默认值约束:default:
当插入时没有插入值时,会自动插入默认值。默认值约束相对于非空约束而说。
添加默认值约束:
语法:alter table 表名 add 列名 列类型 not null default '默认值';
六、唯一性约束:
本列的内容只能唯一不能重复。
添加唯一约束:
语法:alter table 列名 add unique(列名称) ※可以有多个列名称,用逗号隔开。
这是一项新功能,用于指定在插入或更新到一行之前检查值的条件。如果表的任何行的搜索条件的结果为 FALSE,则约束可能返回错误(但如果结果为 UNKNOWN 或 TRUE,则约束不会返回错误)。此功能开始在 MySQL 8.0.16 上运行,在以前的版本中,我们可以创建它,但它不起作用,这意味着支持语法,但不起作用。要牢记的使用规则:
AUTO_INCREMENT 自增列不允许使用
引用另一个表中的另一列不允许使用
存储的函数和用户定义的函数不允许使用
存储过程和函数参数不允许使用
子查询不允许使用
在外键中用于后续操作(ON UPDATE,ON DELETE)的列不允许使用
为下一条语句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 评估此次监测。此外,还会为 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 评估此监测约束。对于这些语句,如果约束的评估结果为 FALSE,则会发生警告。插入或更新被跳过。
我们可以使用此功能在表中添加更多的逻辑,但是根据我以前作为程序员的经验,我不建议在表中添加逻辑,因为除非您无法访问应用程序代码,否则很难找到或调试错误。
不可以。
约束是创建在列级的,用来约束取值范围一非空唯一等限制的。
表中的数量是由数据库引擎自动设置的。
4.4.7添加约束
语句格式:ALTER TABLE 表名ADD CONSTRAINT 约束名 约束类型(字段名)
上面语句格式中,“表名”指定要添加约束的是哪个表,“ADD CONSTRAINT”表示要在表中增加约束,其后的“约束名”是拟增加约束的名字,“约束类型”是拟增加约束的类型,其后括号里的“字段名”是指约束是在哪一个字段上建立起来的。
下面截图中的“ALTER TABLE”语句在t_dept表中新增加了一个约束名为unidept的约束,它是在对字段deptno进行的唯一性约束。
这是一项新功能,用于指定在插入或更新到一行之前检查值的条件。如果表的任何行的搜索条件的结果为 FALSE,则约束可能返回错误(但如果结果为 UNKNOWN 或 TRUE,则约束不会返回错误)。此功能开始在 MySQL 8.0.16 上运行,在以前的版本中,我们可以创建它,但它不起作用,这意味着支持语法,但不起作用。要牢记的使用规则:
AUTO_INCREMENT 自增列不允许使用
引用另一个表中的另一列不允许使用
存储的函数和用户定义的函数不允许使用
存储过程和函数参数不允许使用
子查询不允许使用
在外键中用于后续操作(ON UPDATE,ON DELETE)的列不允许使用
为下一条语句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 评估此次监测。此外,还会为 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 评估此监测约束。对于这些语句,如果约束的评估结果为 FALSE,则会发生警告。插入或更新被跳过。
我们可以使用此功能在表中添加更多的逻辑,但是根据我以前作为程序员的经验,我不建议在表中添加逻辑,因为除非您无法访问应用程序代码,否则很难找到或调试错误。