创建class表
CREATE TABLE CLASS
(
classid INT PRIMARY KEY,
`subject` VARCHAR(20),
deptname VARCHAR(30) unique,
enrolltime INT not null,
num INT not null,
FOREIGN KEY (deptname) REFERENCES DEPARTMENT(deptname)
)
在修改deptname列从unique到不唯一时,发现由于有外键依赖不能直接删除unique index。
- 首先要删除外键,删除外键有两步:
- 先要找到外键的约束名称:
-- 找出约束名: SHOW CREATE TABLE 表名; -- 在我的情况下: SHOW CREATE TABLE class;
执行该命令后会显示
将Create Table列的内容复制下来:
CREATE TABLE `class` ( `classid` int(11) NOT NULL, `subject` varchar(20) COLLATE utf8_bin DEFAULT NULL, `deptname` varchar(30) COLLATE utf8_bin DEFAULT NULL, `num` int(11) NOT NULL, `enrolltime` int(11) DEFAULT NULL, PRIMARY KEY (`classid`), UNIQUE KEY `deptname` (`deptname`), CONSTRAINT `class_ibfk_1` FOREIGN KEY (`deptname`) REFERENCES `department` (`deptname`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
可以在倒数第二行找到外键约束的名称:`class_ibfk_1`
- 删除外键约束:
-- 删除外键 alter table 表名 drop FOREIGN key 外键约束名称 -- 在我的情况下 alter table class drop FOREIGN key class_ibfk_1
- 先要找到外键的约束名称:
- 删除unique index:
-- 删除index alter table 表名 drop index index名称; -- 在我的情况下 alter table class drop index deptname;
- 重新加上外键约束:
-- 添加外键约束: alter table 表名 add CONSTRAINT 约束名 FOREIGN key (外键名) REFERENCES 依赖表(依赖项) -- 在我的情况下: alter table class add CONSTRAINT `class_ibfk_1` FOREIGN key (deptname) REFERENCES department(deptname)