码迷,mamicode.com
首页 > 数据库 > 详细

MySql -- UNIQUE唯一约束

时间:2017-07-19 20:35:54      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:测试   组合   val   nod   logs   mysq   varchar   撤销   prim   

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

标签:测试   组合   val   nod   logs   mysq   varchar   撤销   prim   

原文地址:http://www.cnblogs.com/lixingwu/p/7206658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!