外键约束对子表的含义:
如果在父表中找不到候选键,则不允许在子表上进行insert/update
外键约束对父表的含义:
在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于
:在定义子表的外键时指定的on update/on delete子句, InnoDB支持5种方式, 分列如下
. cascade方式
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用
. set null方式
在父表上update/delete记录时,将子表上匹配记录的列设为null
要注意子表的外键列不能为not null
On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用
. No action方式
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
这个是ANSI SQL-92标准,从mysql4.0.8开始支持
. Restrict方式
同no action, 都是立即检查外键约束
. Set default方式
解析器认识这个action,但Innodb不能识别,不知道是什么意思...
注意:trigger不会受外键cascade行为的影响,即不会解发trigger
在mysql中,与SQL标准相违背的三点
1. 如果在父表中有多个key值相同,那么在进行外键check时,会当成有相同key值的其他行不存在; 比
如当定义了一个restrict行为外键时,一个子表行对应到多个父表行(具有相同key值), Innodb不允许删除父表
上的所有这些行
2. 父子表是同一个表,自我参照时不允许指定on update cascade, on update set null
从mysql4.0.13开始,允许同一个表上的on delete set null
从mysql4.0.21开始,允许同一个表上的on delete cascade
但级联层次不能超出15
3, Innodb在检查unique,constraint约束时,是row by row而不是语句或事务结束;
SQL标准中对constraint的检查是在语句执行完成时
分享到:
相关推荐
3. **RESTRICT/NO ACTION限制**: RESTRICT或NO ACTION意味着当试图删除或更新主表中的记录时,如果从表中存在相关联的记录,则操作将被阻止。这是最保守的策略,可以防止无意中破坏数据的完整性。如果尝试的操作会...
在 MySQL 中,外键的规则可以使用 RESTRICT、CASCADE、SET NULL、NO ACTION 等关键字来指定。 8. 设置外键禁用,对(7)做相应操作后,说明现象和原因。 在实验中,我们设置了外键禁用,并对学生表中学号执行了增...
ON DELETE {CASCADE | RESTRICT | SET NULL | NO ACTION} ON UPDATE {CASCADE | RESTRICT | SET NULL | NO ACTION} ); ``` 其中,`child_table`是子表,`parent_table`是父表,`column_name`是子表中作为外键的列...
在创建索引时,可以指定在删除、更新父表时,对子表进行的相应操作,包括 RESTRICT、NO ACTION、SET NULL 和 CASCADE。其中 RESTRICT 和 NO ACTION 相同,是指在子表有关联记录的情况下父表不能更新;CASCADE 表示父...
[ON DELETE {CASCADE | RESTRICT | SET NULL | NO ACTION}] [ON UPDATE {CASCADE | RESTRICT | SET NULL | NO ACTION}] ); ``` 这里,`child_table`是子表,`parent_table`是父表,`foreign_key_column`是子表中...
在创建索引时, 可以指定在删除、更新父表时,对子表进行的相应操作,包括 RESTRICT、CASCADE、SET NULL 和 NO ACTION。 RESTRICT和NO ACTION相同, 是指限制在子表有关联记录的情况下, 父表不能更新; CASCADE...
[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}] [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}] 其中,on delete/on update 用于定义 delete、update 操作。 三、外键的约束类型 外键的...
- **RESTRICT/NO ACTION**:不允许父表更新或删除与子表有关联的数据行。 - **SET NULL**:当父表的外键关联列被更新或删除时,子表中的外键值将被设置为NULL。 #### 四、外键的注意事项 - **前提条件**: - ...
4. **NO ACTION**:类似于RESTRICT,但只在删除或更新操作之前检查是否有相关行存在。 5. **SET DEFAULT**:将子表中的外键字段设置为其默认值。 #### 五、示例代码解析 1. **插入数据**: ```sql INSERT INTO ...
[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}] [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]; ``` 其中: - `yourtablename`:指需要添加外键约束的表名。 - `index_col_name`:指被...
在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括RESTRICT、NO ACTION、SET NULL和CASCADE。其中RESTRICT和NO ACTION相同,是指在子表有关联记录的情况下父表不能更新;CASCADE表示父表在...
2. **禁止操作(No Action 或 Restrict)**:这是默认的行为,如果试图在主表中删除或更新会导致子表中相关记录违反外键约束的操作,那么这个操作会被阻止。这样可以避免破坏数据的完整性。 3. **子表设为空(Set ...
4. NO ACTION(在MySQL中等同于RESTRICT):遵循同样的规则。 表级约束和列级约束的差异在于作用范围。列级约束是在创建或修改列时定义的,而表级约束则独立于列,可以应用于多个列或表的特定条件。 修改数据表...
- 当父表中的记录被删除时,可以选择几种操作方式(如CASCADE、SET NULL、NO ACTION、RESTRICT)来维护子表数据的完整性。 #### 数据操纵语言(DML) DML(Data Manipulation Language)用于数据的操作,主要包括...
[ON DELETE { CASCADE | SET NULL | NO ACTION | RESTRICT }] [ON UPDATE { CASCADE | SET NULL | NO ACTION | RESTRICT }]; ``` - **建表时添加外键**: ```sql CREATE TABLE infos ( Name CHAR(10) ...
不加参数时,默认行为是NO ACTION。 接下来,我们来探讨如何在建表后为表添加外键。首先,可以使用CREATE TABLE语句直接在创建表的时候定义外键,如示例中的语句: ```sql CREATE TABLE subtb ( id INT GUD ...
ON DELETE {CASCADE | RESTRICT | SET NULL | NO ACTION} ON UPDATE {CASCADE | RESTRICT | SET NULL | NO ACTION} ); ``` 例如,创建一个名为`temp`的表,其`id`字段为外键,引用`outTable`表的`id`字段: ```sql...
禁止(No Action / Restrict)方式是指当主表中的记录被删除或更新时,从表中的相关记录将不受影响。这种方式可以确保数据的一致性,但可能会导致数据不正确。例如,在用户表和用户组表中,如果删除了某个用户组,...
外键设置还包括级联操作(CASCADE)、限制操作(RESTRICT、NO ACTION)和设为NULL(SET NULL)。 10. **数据库语言深入**:理解SQL语句的优化策略,提高查询效率,如合理使用索引、避免全表扫描、减少子查询等。 ...