Mysql基础(4)约束

1、概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

2、目的:保证数据库中数据的正确性、有效性、完整性。

3、分类:

(1)非空约束 not null               非空数据                                     常用于必要性信息数据

(2)唯一约束 unique                唯一数据,不可重复                   常用于手机号、身份证号            

(3)主键约束 primary key        唯一标识,非空且唯一               常用于 ID

(4)默认约束 default                设置默认值                                 常用于初始化数据

(5)检查约束 check                 设置条件,mysql 8 新增特性      常用于年龄、分数、积分

(6)外键约束 foreign key        连接两张表,确保数据一致性、完整性       常用于银行、军事数据

4、常用约束示例:

(1)id                primary &&  auto_increment

(2)name          unique  &&  not null

(3)age             check   &&  value > 0  &&  value < 120  

(4)status          default &&  default  ' 1 '

5、外键约束

------------------------------------------优点------------------------------------------

(1)保证数据的完整性和一致性

(2)级联操作方便

(3)将数据完整性判断托付给了数据库完成,减少了程序的代码量

外键约束增强了数据的稳定性和准确性,适用于银行和军工行业,不允许丝毫的数据误差

------------------------------------------缺点------------------------------------------

(1)查询子表往往导致查询父表,衍生冗余查询,降低数据库性能

(2)为确保准确,子表操作可能会锁定父表数据,引发意外的锁等待,甚至导致死锁

(3)分库分表困难

(4)降低开发测试的效率

目前很多互联网公司,特别是大厂对于外键的态度都是要求一般禁用外键约束。这其实不单单因为性能问题,主要也因为互联网的业务变化快,会间接导致表结构容易发生变动,很可能会因为外键约束的存在导致导意想不到的问题和开发效率的降低。

作为补偿,会选择建立代码逻辑上的外键约束。增加代码开销,以换取开发质量。


#    1、新增子表唯一约束 ;
ALTER TABLE my_database.son_table ADD CONSTRAINT son_table_UN UNIQUE KEY (column);

#    2、新增父表外键约束

ALTER TABLE my_database.parent_table
ADD CONSTRAINT parent_table_FK FOREIGN KEY (column) 
REFERENCES my_database.son_table(column) 
ON DELETE RESTRICT ON UPDATE RESTRICT;

ALTER TABLE my_database.parent_table
ADD CONSTRAINT parent_table_FK FOREIGN KEY (column) 
REFERENCES my_database.son_table(column) 
ON DELETE SET NULL ON UPDATE SET NULL;

ALTER TABLE my_database.parent_table
ADD CONSTRAINT parent_table_FK FOREIGN KEY (column) 
REFERENCES my_database.son_table(column) 
ON DELETE CASCADE ON UPDATE CASCADE;

#    3、删除外键约束 ;
ALTER TABLE my_database.parent_table DROP FOREIGN KEY parent_table_FK;


#    4、删除子表唯一约束 ;
ALTER TABLE my_database.son_table DROP KEY son_table_UN;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值