Mysql修改字段值不唯一,去掉unique约束,删除外键

创建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。

  1. 首先要删除外键,删除外键有两步:
    1. 先要找到外键的约束名称:
      -- 找出约束名:
      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`

    2. 删除外键约束:
      -- 删除外键
      alter table 表名 drop FOREIGN key 外键约束名称
      -- 在我的情况下
      alter table class drop FOREIGN key class_ibfk_1
  2. 删除unique index:
    -- 删除index
    alter table 表名 drop index index名称;
    -- 在我的情况下
    alter table class drop index deptname;
  3. 重新加上外键约束: 
    -- 添加外键约束:
    alter table 表名 add CONSTRAINT 约束名 FOREIGN key (外键名) REFERENCES 依赖表(依赖项)
    -- 在我的情况下:
    alter table class add CONSTRAINT `class_ibfk_1` FOREIGN key (deptname) REFERENCES department(deptname)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值