mysql主键重复怎么解决
我们知道,mysql 如果设置了主键或者唯一约束,再插入相同的值会报错。假设表中设置name字段为唯一索引,在存在 name = ‘张三‘ 的情况下,再插入"张三", insert into sc (...
2024.11.21Cannot delete or update a parent row:a foreign key constraint fails...... ON delete NO ACTION ON update NO ACTION
报错为外键约束失败
外键约束外键(FOREIGN KEY)为表的一个特殊字段,常与主键约束同时使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。定义外键时,需要遵守下列规则:
主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
必须为主表定义主键。
主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
外键中列的数目必须和主表的主键中列的数目相同。
外键中列的数据类型必须和主表主键中对应列的数据类型相同。
处理方式1.临时禁用外键检查Bash
mysql> SET FOREIGN_KEY_CHECKS = 0;# 临时禁用mysql>需要执行的mysql语句(delete/update...)mysql> SET FOREIGN_KEY_CHECKS = 1;#恢复2.删除与此表外键关联的表(不推荐)直接drop 表名
3.将表更新方式设置为级联(根治)撤销原有的外键约束
Bash
ALTER TABLE table1DROP FOREIGN KEY 外键名重新设置约束,注意设置成CASCADE
Bash
ALTER TABLE tablenameADD CONSTRAINT 外键名FOREIGN KEY (s_id)REFERENCES student(s_Id) ON delete CASCADE ON update CASCADE;最后执行修改删除的sql语句,此时主表更新后从表也会同步更新
mysql表更新方式1.cascade:级联,当父表更新、删除,子表会同步更新和删除
2.set null:置空,当父表更新、删除的时候,字表会把外键字段变为null,所以这个时候设计表的时候该字段要允许为null,否则会出错
3.restrict:父表在删除和更新记录的时候,要在子表中检查是否有有关该父表要更新和删除的记录,如果有,则不允许删除个更改
4.no action:和restrict一样
我们知道,mysql 如果设置了主键或者唯一约束,再插入相同的值会报错。假设表中设置name字段为唯一索引,在存在 name = ‘张三‘ 的情况下,再插入"张三", insert into sc (...
2024.11.21作者:Walter Garcia翻译:管长龙本文来源:https://www.percona.com/blog/2020/10/02/how-to-use-check-constraint-in-my...
2024.11.201、问题现象描述昨天上线一个活动,有个排行榜的功能,刚开始打开很流畅,晚上的时候突然打开很慢,排行榜基本是打不开,猜想估计是服务器出了问题2、登录服务器后使用top命令查看资源占用信息# toptop...
2024.11.20什么是安全模式?mysql安全模式什么意思?在mysql中,如果在update和delete没有加上where条件,数据将会全部修改。不只是初识mysql的开发者会遇到这个问题,工作有一定经验的工程师...
2024.11.20通过给mysql的表字段添加外键约束,可以有效的保持数据的一致性和完整性,数据就不会很容易出问题。1、创建表时直接创建外键约束create table books( bookid number(10)...
2024.11.21