首页 > 代码库 > MySql -- UNIQUE唯一约束

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唯一约束