Mysql外键的应用

Mysql外键的应用

我们建立外键还有一个要求便是两个表的类型必须是InnoDB的才行。

表2中的外键aa_id指向的是表1中的id。

表2对于外键中存储数据时要求表1中的主键必须存在。

外键的类型:

Mysql外键的应用

        1. RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。

Mysql外键的应用

Mysql外键的应用(修改父表主键被拒绝,因为子表外键设置为Restrict)

Mysql外键的应用

        2. NO ACTION: InnoDB拒绝删除或者更新父表。

Mysql外键的应用

Mysql外键的应用

Mysql外键的应用

 

       3. CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。

Mysql外键的应用

Mysql外键的应用

Mysql外键的应用

Mysql外键的应用


         4. SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET NULL都被InnoDB所支持。

Mysql外键的应用

 

Mysql外键的应用

Mysql外键的应用

Mysql外键的应用
       5. SET DEFAULT: InnoDB目前不支持。


上述中NO ACTION 和RESTRICT表面看起来是一样的,restrict是在修改或者删除之前去检查从表中是否有对应的数据,如果有,拒绝操作,而no action这个是ANSI SQL-92标准,从mysql4.0.8开始支持,在有些数据库中,会延迟检查,即在修改或者删除完以后去检查从表中是否有对应的数据,如果有,拒绝操作,但是在MySQL中,外键约束都会立即检查,所以两者等价。需要注意的是,set default只是MySQL 解析器认可,但是InnoDB和NDB 拒绝在定义表时,出现ON DELETE SET DEFAULT or ON UPDATE SET DEFAULT 语句。