首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mysql约束

是用来实现参照完整性的,不同的约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。...如果表试图UPDATE或者DELETE任何子表中存在匹配的键值,最终动作取决于约束定义中的ON UPDATE和ON DELETE选项。...CASCADE: 从父表中删除更新对应的,同时自动的删除更新自表中匹配的。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。 2....SET NULL: 从父表中删除更新对应的,同时将子表中的列设为空。注意,这些在外列没有被设为NOT NULL时才有效。...约束使用最多的两种情况: 1)更新时子表也更新删除时如果子表有匹配的项,删除失败; 2)更新时子表也更新删除时子表匹配的项也删除

5.8K81
您找到你想要的搜索结果了吗?
是的
没有找到

第13章_约束

(3)创建 (CREATE) 表时就指定约束的话,先创建主表,再创建从表 (4)删表时,先删从表(删除约束),再删除主表 (5)当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据...(约束失败) (`atguigudb`....did=1001; #删除主表失败 ERROR 1451 (23000): Cannot delete删除) or update(修改) a parent row(表记录): a foreign...,要求主表必须存在 删除主表时,要求从表从表先删除将从表中外引用该主表的关系先删除 # 6.7 约束等级 Cascade方式 :在表上 update/delete 记录时,同步 update...与级联更新适用于 单机低并发 ,不适合 分布式 、 高并发集群 ;级联更新是强阻塞,存在数据库 更新风暴 的风险;影响数据库的 插入速度 。 # 7.

32630

mysql中的FOREIGN_KEY_CHECKS方法

错误: 在MySQL中删除一张表一条数据的时候,可能提示以下错误: [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint...原因: 这是因为MySQL中设置了foreign key关联,造成无法更新删除数据。 解决方法: 可以通过设置FOREIGN_KEY_CHECKS避免这种情况。...删除数据后可以在开启约束:SET FOREIGN_KEY_CHECKS=1;比如: SELECT @@FOREIGN_KEY_CHECKS; //查询约束 SET FOREIGN_KEY_CHECKS...=0; //关闭约束检查 DELETE FROM TABLE_NAME_; SET FOREIGN_KEY_CHECKS=1; //开启约束检查 关闭约束检查使用场景: 删除更新数据库数据时...新数据库在初始化建表时,关闭约束检查,可以不用关心建表语句执行的先后顺序。 数据库执行完毕后,要记得开启约束检查。

23310

mysql学习笔记(四)约束与索引

KEY约束约束表之间的关系 一、主键约束(primary key constraint)  主键创建时默认会自动生成约束,也可通过显示声明。 ...alter table 表名 add constraint 约束名 primary key (列名)  一个表有且只有一个主键约束 主键约束意味着唯一且非空 创建主键会自动创建对应的索引,删除主键也会删除对应的索引...二、约束(foreign key constraint)  创建时默认会自生成约束,也可通过显示声明。 ...一个表可以有很多的约束 约束需要一个表的两个字段或者两个表的两个字段之间建立约束 约束一定是在从表、子表中建立的。...ID值有自动递增的特性,当语句执行失败事务回滚时,ID值不会回滚,这会导致ID列的值不连续。

1.9K00

MySQL实战七:你不知道的约束使用!

学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新表(子表)中也更新,主键表(表)中的记录被删除表(子表)中改行也相应删除。...如果没有使用`on delete/update cascade`,不能删除更新表数据,当删除表的数据时候报错!...cascade 不能更新表主键子表删除表主键数据会将子表联同删除删除子表数据不影响表。...而on update只能删除子表数据,不能删除表主键数据,只能更新表的主键,同时父子表数据都会被更新,但是在子表的上做更新操作无效。...如果没有使用on delete/update cascade,不能删除更新表数据。

4.3K20

MySQL 的3个小知识点,你知道吗?

01 MySQL 约束关键字 如果你经常使用MySQL的约束,可能对外约束的关键字并不陌生。...常见的约束关键字有:cascade、restrict、no action和set default和set null,其中, cascade:表示级联,表的动作会级联到主表中; restrict:表示严格模式...,它是MySQL特有的关键字,表示表的上不能直接删除或者更新关联的记录; no action:表示严格模式,标准SQL关键字,在MySQL中,它和restrict的意思相同; set default...:表上的记录删除后,关联的子表记录会设置成默认值; set null:表上的记录删除后,关联的子表记录会设置成null值。...mysql> delete from parent where id=1; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign

61520

Mysql基础7-约束

alter table 表名 add constraint 键名称 foreign key (字段名) references 表 (表字段)on update 更新行为 on delete...,不能删除或者修改表中的数据,因为有存在   5、数据的更新删除行为 no action:当在表中删除/更新对应记录时,首先检查该记录是否有对应的,如果有则不允许删除/更新(与restrict...一致) restrict:当在表中删除/更新对应记录时,首先检查该记录是否有对应的,如果有则不允许删除/更新(与 no action一致) cascade:当在表中删除/更新对应记录时,首先检查该记录是否有对应的...,如果有,则也删除/更新在子表中的记录 set null:当在表中删除/更新对应记录时,首先检查该记录是否有对应的,如果有则设置子表中该的值为null,这就要求该记录允许null set...8、验证set null的更新删除行为     需求1:同样先删除《student》和《teacher》表然后重新建立新的表,重新建立约束测试 mysql> select * from teacher

30640

SQL基础--> 约束(CONSTRAINT)

FOREIGN KEY: 在表级指定子表中的列 REFERENCES: 标示在表中的列 ON DELETE CASCADE: 当表中的列被删除时,子表中相对应的列也被删除 ON DELETE...SET NULL: 子表中相应的列置空 如果子表在建时,该列的数据并不在表,则无法创建该约束。...约束delete语句的影响: 删除主表数据时,如果从表有对该数据的引用,要先将从表中的数据处理好。主表才有可能违反约束。...ON DELETE SET NULL 和 ON DELETE CASCADE对外约束的影响 ON DELETE SET NULL 子句的作用是,当主表中的一数据被删除时,ORACLE自动将从表中依赖于...CASCADE 子句的作用是,当主表中的一数据被删除时,ORACLE自动将从表中依赖于它的记录删除

1.7K20

【MySQL】04_约束

从以下四个方面考虑: 实体完整性(Entity Integrity) :例如,同一个表中,不能存在两条完全相同无法区分的记录 域完整性(Domain Integrity) :例如:年龄范围0-120,性别范围...创建(CREATE)表时就指定约束的话,先创建主表,再创建从表 删表时,先删从表(删除约束),再删除主表 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据...添加了约束后,从表的添加和修改数据受约束 在从表上建立,要求主表必须存在 删除主表时,要求从表从表先删除将从表中外引用该主表的关系先删除 约束等级 Cascade方式 :在表上update.../delete记录时,同步update/delete掉子表的匹配记录 Set null方式 :在表上update/delete记录时,将子表上匹配记录的列设为null,但是要注意子表的列不能为not...与级联更新适用于 单 机低并发 ,不适合 分布式 、 高并发集群 ;级联更新是强阻塞,存在数据库 更新风暴 的风险;影响 数据库的 插入速度 。

2.4K20

【MySQL】约束介绍

官方文档: https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html 1.作用: MySQL通过约束来保证表与表之间的数据的完整性和准确性...ON DELETE、ON UPDATE表示事件触发限制,可设参数: RESTRICT(限制外表中的改动) CASCADE(跟随改动) SET NULL(设空值) SET DEFAULT(设默认值...) NO ACTION(无动作,默认的) CASCADE:表示表在进行更新删除时,更新删除子表相对应的记录 RESTRICT和NO ACTION:限制在子表有关联记录的情况下,表不能单独进行删除更新操作...SET NULL:表示表进行更新删除的时候,子表的对应字段被设为NULL 4.案例演示 以CASCADE(级联)约束方式 1....因此表中不可删除相对应记录,即兵种表还有属于西欧的兵种,因此不可单独删除表中的西欧势力 update country set id=8 where id=1; #错误,子表中有相关记录,因此表中无法修改

5K20

SQL命令 INSERT(三)

尝试为具有列级ReadOnly (SELECTREFERENCES)权限的字段插入值将导致SQLCODE -138错误:无法为只读字段插入/更新值。...此设置不适用于用NOCHECK关键字定义的。 在INSERT操作期间,对于每个引用,都会在引用表中相应的上获得一个共享锁。 在执行引用完整性检查和插入该行时,此行被锁定。...这确保了引用的不会在引用完整性检查和插入操作完成之间发生更改。 但是,如果指定了%NOLOCK关键字,则不会对指定的表引用表中相应的执行锁操作。...分片表始终没有自动事务模式,这意味着对分片表的所有插入、更新删除都是在事务范围之外执行的。...w "DELETE失败会导致数据库不一致",!

2.4K10

SQL命令 CREATE TABLE(五)

当试图从引用表中删除时,ON DELETE子句定义应该对引用表中的采取什么操作。 ON UPDATE子句定义被引用表的更新规则。...SQL支持以下引用操作: NO ACTION SET DEFAULT SET NULL CASCADE NO ACTION-删除更新被引用表中的键值时,将检查所有引用表,以查看是否有任何引用要删除更新...如果是,则删除更新失败。(如果引用自身,则此约束不适用。)。默认情况下不执行任何操作。无操作是切片表支持的唯一引用操作。...SET NULL-删除更新被引用表中的键值时,将检查所有引用表,以查看是否有任何引用要删除更新。如果是,则该操作会导致引用要删除更新字段设置为NULL。字段必须允许空值。...SET DEFAULT-删除更新被引用表中的键值时,将检查所有引用表,以查看是否有任何引用要删除更新。如果是,则该操作会导致引用要删除更新字段设置为该字段的默认值。

1.7K50

MySQL 约束

从以下四个方面考虑: 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录。...expr 将约束条件指定为布尔表达式,对于表的每一,该表达式的计算结果必须为 TRUE UNKNOWN(对于 NULL 值)。 如果条件计算结果为 FALSE,则失败并发生约束冲突。...这意味着在插入、更新删除数据时,MySQL 将检查约束条件(expr)是否满足,如果条件不满足,则不允许进行相应的操作。 如果指定为 NOT ENFORCED,则创建约束但不强制执行。...这意味着约束冲突将被记录下来,但不会影响插入、更新删除数据的操作。 CHECK 约束可指定为表约束约束: 表约束不会出现在列定义中,并且可以引用任何表列。...-- 添加新的唯一约束 ALTER TABLE table_name ADD UNIQUE (new_unique_column); 修改约束 若要修改约束,通常需要删除原来的约束,然后再添加新的约束

17510

DML Error Logging 特性

二、使用限制 下列情形使得DML error logging 特性失效 延迟约束特性 Direct-path INSERT MERGE 引起违反唯一约束唯一索引...CODE") 2 rows selected. 2、UPDATE 操作 下面的代码将尝试去更新1-10的code列,其中8的code值设置为自身,而第9与第10设置为NULL。...CODE") 3、MERGE 操作 下面的代码从dest表删除一些,然后尝试从source 表合并数据到dest表 DELETE FROM dest WHERE id > 50000...--更新操作失败以及失败原因同样被记录在ERR$_DEST 表中 COLUMN ora_err_mesg$ FORMAT A70 SELECT ora_err_number$, ora_err_mesg...CODE") 2 rows selected. 4、DELETE 操作 DEST_CHILD 表有一个到dest表的约束,因此如果我们基于DEST表添加一些数据到dest_child

50620

【Java】已解决com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException异常

这个异常通常表明在执行数据库操作时违反了数据完整性约束,例如主键冲突、约束不满足、唯一约束冲突等。这类问题往往出现在插入、更新删除数据库记录的场景中。...约束不满足:尝试插入更新一个记录,但其外键值在相关表中不存在。 唯一约束冲突:尝试插入一个违反唯一约束的记录,如某列被定义为UNIQUE,但新插入的值已经存在。...System.err.println("Integrity constraint violation: " + e.getMessage()); } else {...四、正确代码示例 为了避免这个异常,我们应该在插入更新记录之前进行校验,确保不违反任何完整性约束。...五、注意事项 数据校验:在插入更新数据库记录之前,始终进行必要的数据校验,以确保不违反任何完整性约束

12210

SQL约束

: ALTER TABLE 表名 DROP FOREIGN KEY 键名称; 删除/更新行为: 行为 说明 NO ACTION 当在表中删除/更新对应记录时,首先检查该记录是否有对应,如果有则不允许删除更新...(与RESTRICT一致) RESTRICT 当在表中删除/更新对应记录时,首先检查该记录是否有对应,如果有则不允许删除更新。...(与NO ACTION一致) CASCADE 当在表中删除/更新对应记录时,首先检查该记录是否有对应,如果有,则也删除/更新在子表中的记录。...SET NULL 当在表中删除对应记录时,首先检查该记录是否有对应,如果有则设置子表中该键值为ul(这就要求该允许取null) SET DEFAULT 表有变更时,子表将列设置成一个默认的值...ON DELETE CASCADE; ALTER TABLE 表名 ADD CONSTRAINT 键名称 FOREIGN KEY (字段) REFERENCES 主表名(主表字段名)ON UPDATE

17940

【MySQL】约束删除更新总结

约束删除/更新行为 行为 说明 NO ACTION 当在表中删除/更新对应记录时,首先检查该记录是否有对应,如果有则不允许删除/更新。...(与RESTRICT一致) RESTRICT 当在表中删除/更新对应记录时,首先检查该记录是否有对应,如果有则不允许删除/更新。...(与NOT ACTION一致) CASCADE 当在表中删除/更新对应记录时,首先检查该记录是否有对应,如果有,则也删除/更新在子表总的记录。...主表字段名) on update cascade on delete cascade -- 添加约束并指定删除更新行为 alter table emp add constraint...-- 添加约束并指定删除更新行为 alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references

32910

MySql数据库约束

) (3)如果before触发器失败,则MySQl将不执行请求的操作,此外如果before触发器语句本身失败,MySql将不执行after触发器(如果有的话) 3.1.2 触发器的删除   DROP...TRIGGER trigger_name; 注:触发器不能更新覆盖,为了修改一个触发器,必须先删除它,然后再重新创建 3.2 触发器约束   假设有张用户消费表,每次用户购买一样物品后其金额都是减的...约束 用来保证参照完整性,MySQL数据库的MyIsAM存储引擎本身并不支持,对于的定义只是起到一个注释的作用,而InonoDB存储引擎则完整支持约束。...一般来说,称被引用的表为表,引用的表称为子表,定义时的on delete和on update表示在对表进行delete和updata操作时,对子表所做的操作。...(4)RESTRICT   表示表发生deleteupdate操作时,抛出错误,不允许这类操作发生,如果定义时没有指定on deleteon update,RESTRICT就是默认的设置

1.1K10

【MySQL 系列】MySQL 语句篇_DDL 语句

相对于主键而言,用来引用其他表。通过子表的一个多个列对应到表的主键唯一键值,将子表的建立起关联关系。 例如,Sakila 示例数据库中的 country 表和 city 表。...它是可选的; 位于 FOREIGN KEY 关键字之后的是作为的列名; 位于 REFERENCES 关键字之后的是被引用的表和列; ON DELETE 和 ON UPDATE 指定了删除更新被引用的表中的数据时要采取的约束策略...我们可以使用以下 3 个策略中的一个: CASCADE:如果被引用的表中的一删除更新,该表中匹配的值会自动删除更新。...它可以通过名字删除任何约束,并不仅仅是; 3.2.4、CASCADE 策略 如果的 ON DELETE 和 ON UPDATE 使用了 CASCADE 策略: 当表的删除的时候,子表中匹配的也会被删除...当表的的键值更新的时候,子表中匹配的的字段也会被更 3.3、唯一约束 唯一约束与主键约束有一个相似的地方,就是它们都能够确保列的唯一性。

13010
领券