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 : 外键约束 触发器

你可能感兴趣的:(Mysql foreign key and trigger)