<div class="htmledit_views" id="content_views">html
<p><span style="font-size:18px;"><br></span></p> <p><span style="font-size:18px;"><span></span>在MySQL數據庫中,常常會碰到因爲業務須要添加惟一鍵約束,惟一鍵約束,能夠在一個列上添加約束,也能夠在多個列上添加惟一約束。</span></p> <p><span style="font-size:18px;"><br></span></p> <p><span style="font-size:18px;"><span></span><strong>1、單列惟一約束</strong></span></p> <p><span style="font-size:18px;"><span></span>在一列上添加惟一約束,主要是讓該列在表中只能有惟一的一行,例如註冊郵箱時的郵箱名、手機號等信息,相關操做以下:</span></p> <p></p> <pre style="color:rgb(51,51,51);line-height:26px;"><span style="font-size:18px;">1.建表時加上惟一性約束:</span></pre> <span style="font-size:18px;">CREATE TABLE `t_user` (<br> `Id` int(11) NOT NULL AUTO_INCREMENT, <br> `username` varchar(18) NOT NULL unique, <br> `password` varchar(18) NOT NULL, <br> PRIMARY KEY (`Id`) <br> ) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk; <br></span> <p></p> <p><span style="font-size:18px;"><br></span></p> <p><span style="font-size:18px;">2.<span style="color:rgb(51,51,51);line-height:26px;">給已經建好的表加上惟一性約束:</span></span></p> <p><span style="font-size:18px;">ALTER TABLE `t_user` ADD unique(`username`);<br></span></p> <p><span style="font-size:18px;">或者:</span></p> <p><span style="font-size:18px;">create unique index UserNameIndex on 't_user' ('username');<br></span></p> <p><span style="font-size:18px;"><br></span></p> <p><span style="font-size:18px;"><span></span><strong>2、多列聯合惟一約束</strong></span></p> <p><span style="font-size:18px;">若是業務中要求兩個字符聯合起了是惟一的,好比「地址」+「名稱」是惟一的,這就須要對兩列,甚至多列添加聯合惟一約束,具體命令以下:</span></p> <p><span style="font-size:18px;"><span></span>1.確認表結構</span></p> <p><span style="font-size:18px;">mysql> <span style="color:#ff0000;">show create table jw_resource;</span></span></p> <p><span style="font-size:18px;">FIELD TYPE COLLATION NULL KEY DEFAULT Extra PRIVILEGES COMMENT<br> ------------- ------------ -------------- ------ ------ ------- -------------- -------------------- -------<br> id BIGINT(20) (NULL) NO PRI (NULL) AUTO_INCREMENT SELECT,INSERT,UPDATE <br> resource_name VARCHAR(128) gbk_chinese_ci YES (NULL) SELECT,INSERT,UPDATE <br> resource_type TINYINT(4) (NULL) YES (NULL) SELECT,INSERT,UPDATE <br><br><br><span></span>2.給resource_name和resource_type添加聯合惟一約束:</span></p> <p><span style="font-size:18px;">mysql><span style="color:#ff0000;"> show index from jw_resource;</span></span></p> <p><span style="font-size:18px;">mysql><span> </span><span style="color:#ff0000;">ALTER TABLE jw_resource<br> ADD UNIQUE KEY(resource_name, resource_type);</span><br><br><br><span></span>3.確認表結構添加約束後結果:</span></p> <p><span style="font-size:18px;">mysql> <span style="color:#ff0000;">show create table jw_resource;</span><br> CREATE TABLE `jw_resource` (<br> `id` BIGINT(20) NOT NULL AUTO_INCREMENT,<br> `resource_name` VARCHAR(128) DEFAULT NULL,<br> `resource_type` TINYINT(4) DEFAULT NULL,<br> PRIMARY KEY (`id`),<br><strong> UNIQUE KEY `resource_name` (`resource_name`,`resource_type`)</strong><br> ) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;</span></p> <p><span style="font-size:18px;"><span></span>mysql> <span style="color:#ff0000;"> show index from jw_resource;</span></span></p> <p><span style="font-size:18px;"><span></span><strong><span style="color:#ff0000;">注意:</span></strong>惟一鍵約束添加後,在建表的元數據中,默認的惟一鍵約束名稱爲第一列的名稱。<br><br><span></span>4.添加約束後,進行插入測試效果:</span></p> <p><span style="font-size:18px;">msyql> INSERT INTO `jw_resource`(`resource_name`,'resource_type') values('aa','11');</span></p> <p><span style="font-size:18px;">msyql> INSERT INTO `jw_resource`(`resource_name`,'resource_type') values('aa','22');</span></p> <p><span style="font-size:18px;">msyql> INSERT INTO `jw_resource`(`resource_name`,'resource_type') values('bb','11');</span></p> <p><span style="font-size:18px;">msyql> INSERT INTO `jw_resource`(`resource_name`,'resource_type') values('aa','11');<br><br><span></span>5.刪除惟一約束<br> mysql> <span style="color:#ff0000;"><strong>ALTER TABLE jw_resource DROP INDEX `resource_name`;</strong></span><br></span></p> <p><span style="font-size:18px;">mysql><span style="color:#ff0000;"> show index from jw_resource;</span></span></p> <p><span style="font-size:18px;"><span></span><strong><span style="color:#ff0000;">注意:</span></strong>惟一鍵約束添加後,實際上創建了一個索引,將該索引刪除後,就等於刪除了聯合惟一約束。</span></p> <p><br></p> 原文地址:https://blog.csdn.net/yumushui/article/details/38960619 </div>mysql