MySql -- UNIQUE唯一约束

Posted 喵喵扑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql -- UNIQUE唯一约束相关的知识,希望对你有一定的参考价值。

3、UNIQUE 约束

  约束唯一标识数据库表中的每条记录。

创建一张测试表:

CREATE TABLE `test`.`info`(  
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `idCard` VARCHAR(18) UNIQUE NOT NULL, -- 直接在字段上添加唯一约束
  `mobile` VARCHAR(11),
  PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_estonian_ci;

 

添加唯一约束UNIQUE:

/*
除了上面的添加唯一约束的方法以外,
如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,写法如下:
uc_idCard约束由mobile和idCard组合成唯一约束。
*/
CREATE TABLE `test`.`info`(  
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `idCard` VARCHAR(18) UNIQUE,
  `mobile` VARCHAR(11),
  PRIMARY KEY (`id`),
  CONSTRAINT uc_idCard UNIQUE (mobile,idCard) 
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_estonian_ci;


如果在存在表的情况下,添加唯一约束
-- 无名字的约束 ALTER TABLE `info` ADD UNIQUE (`idCard`);
-- uc_idCard约束由mobile和idCard组合成唯一约束 ALTER TABLE `info` ADD CONSTRAINT uc_idCard UNIQUE (mobile,idCard);

 

撤销 UNIQUE 约束

-- 移除指定字段的约束
ALTER TABLE `info` DROP INDEX `idCard`; 

-- 移除有名字的约束
ALTER TABLE `info` DROP INDEX uc_idCard; 

 

向 UNIQUE 约束添加数据:

-- 添加一条基础数据
INSERT INTO `info`(`idCard`,`mobile`) VALUES(99999,1111);

-- 添加一条idCard重复的记录
INSERT INTO `info`(`idCard`,`mobile`) VALUES(99999,2222);

结果:
错误代码: 1062
DUPLICATE entry 99999 FOR KEY idCard;

-- 在唯一约束中添加 NULL
INSERT INTO `info`(`idCard`,`mobile`) VALUES(NULL,1111);
-- 再次添加NULL
INSERT INTO `info`(`idCard`,`mobile`) VALUES(NULL,2222);

结果:
    id  idCard  mobile  
-------------------------
     6  (NULL)  1111    
     7  (NULL)  2222
原因:因为 NULL != NULL

 




以上是关于MySql -- UNIQUE唯一约束的主要内容,如果未能解决你的问题,请参考以下文章

MySql -- UNIQUE唯一约束

MySQL 表字段唯一性约束设置方法unique

MySQL-UNIQUE

mysql唯一约束

mysql-约束概览

mysql 中UNIQUE KEY 到底是约束还是索引?