Mysql foreign key and trigger

外键约束与触发器

建表

主表 users

CREATE TABLE `user` (
    `id`  int UNSIGNED NOT NULL AUTO_INCREMENT ,
    `name`  varchar(255) NOT NULL DEFAULT '' ,
    PRIMARY KEY (`id`)
)
ENGINE=InnoDB;

副表 user_info

CREATE TABLE `user_info` (
    `user_id`  int UNSIGNED NOT NULL DEFAULT 0 ,
    `address`  varchar(255) NOT NULL DEFAULT '' ,
    PRIMARY KEY (`user_id`)
)
ENGINE=InnoDB;

外键约束

副表 user_info 添加外键约束
当修改 user.id 时同时修改 user_info.user_id
当删除 user 时同时删除 user_info

ALTER TABLE `user_info` 
ADD CONSTRAINT `user` 
FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) 
ON DELETE CASCADE ON UPDATE CASCADE;

约束类别

  • CASCADE :从父表删除或更新且自动删除或更新字表中的匹配的内容;
  • SET NULL :从父表删除或更新且子表中相匹配的内容设置为NULL,使用此功能必须保证字表列没有指定为NOT NULL;
  • RESTRICT :拒绝对父表的删除或更新操作;
  • NO ACTION:标准SQL关键字,在mysql中与restrict相同;

触发器

主表 user 创建触发器

CREATE TRIGGER `create_info` AFTER INSERT ON `user` 
FOR EACH ROW INSERT INTO user_info (user_id) VALUES (NEW.id)
CREATE TRIGGER `delete_info` BEFORE DELETE ON `user` 
FOR EACH ROW DELETE FROM user_info where user_id = OLD.id

备注

MyISAM : 触发器
InnoDB : 外键约束 触发器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。