MySQL-FailedtoopenthereferencedtableXXX
问题复现
CREATE TABLE `master_role` (
`id` INTEGER NOT NULL AUTO_INCREMENT COMMENT 'ID',
`role` VARCHAR(50) CHARACTER SET latin1 NOT NULL COMMENT 'Role',
`active` TINYINT NOT NULL COMMENT 'Active',
PRIMARY KEY (`id`)
)
ENGINE = InnoDB
DEFAULT CHARSET=utf8mb4
COMMENT = 'Master Role';
CREATE TABLE `user_role` (
`id` INTEGER NOT NULL AUTO_INCREMENT COMMENT 'ID',
`email` VARCHAR(150) NOT NULL COMMENT 'Email',
`role_id` INTEGER NOT NULL COMMENT 'Role ID',
PRIMARY KEY (`id`),
KEY `fk_user_role_idx` (`role_id`),
CONSTRAINT `fk_user_role` FOREIGN KEY (`role_id`) REFERENCES `master_role` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
)
ENGINE = InnoDB
DEFAULT CHARSET=utf8mb4
COMMENT = 'User Role';
step1: create table master_role
step2: create table user_role
step3: DROP TABLE IF EXISTS master_role;
Error Code: 3730. Cannot drop table 'master_role' referenced by a foreign key constraint 'fk_user_role' on table 'user_role'.解决⽅案
⽅案⼀:关闭外键检查rolton乐廷怎么使用
SET foreign_key_checks=0; # 关闭外键检查
DROP TABLE Course;
网站内容页面设计SET foreign_key_checks=1; # 开启外键检查
关闭检查之后,如果下次还要使⽤外键就要再次打开检查,较为繁琐。
⽅案⼆:删除外键
#user_role表删除外键
ALTER TABLE user_role DROP FOREIGN KEY fk_user_role;
#删表
DROP TABLE IF EXISTS master_role;
外键
阿⾥规范jquery特效下雨
--- 源⾃《阿⾥巴巴开发⼿册》
实例:假设删除微博某V,其粉丝关系表中的百万条数据如果有外键约束,就会影响性能。
来⾃知乎的回答
外键约束是物理上的“硬绑定”,⽽表的关联只是⼀种逻辑概念,即数据间存在⼀定的联系。数据库通过
外键建⽴的“硬绑定”会带来额外的资源消耗来进⾏⼀致性和完整性校验,尽管有时候⽆需这些校验。因此,⼀般不建议使⽤外键约束来保证数据的⼀致性和完整性。
--- 源⾃知乎
外键作⽤:维护数据⼀致性和完整性,避免借助外部资源(例如:启⽤事务)。
何时使⽤:⾼并发⼤流量事务场景使⽤外键容易造成死锁,数据库资源会更容易出现瓶颈。⼀般互联⽹很少使⽤外键。
tuxedo中间件--- 源⾃知乎
⼩结
实际建表时,不建外键。表之间的关联可以通过建⽴索引(咨询同事得到的答案,后续会就此问题写博客解答)。不小心删除的文件怎么回
更新user_role表的创建语句,删除外键。
CREATE TABLE `user_role` (
mysql面试题 知乎
`id` INTEGER NOT NULL AUTO_INCREMENT COMMENT 'ID',
`email` VARCHAR(150) NOT NULL COMMENT 'Email',
`role_id` INTEGER NOT NULL COMMENT 'Role ID',
PRIMARY KEY (`id`)
)
ENGINE = InnoDB
DEFAULT CHARSET=utf8mb4
COMMENT = 'User Role';
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论