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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM