外键约束与触发器
建表
主表 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 : 外键约束 触发器
网友评论