MySQL中添加惟一約束和聯合惟一約束

<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> &nbsp; &nbsp; `Id` int(11) NOT NULL AUTO_INCREMENT,&nbsp;<br> &nbsp; &nbsp; `username` varchar(18) NOT NULL unique,&nbsp;<br> &nbsp; &nbsp; `password` varchar(18) NOT NULL,&nbsp;<br> &nbsp; &nbsp; PRIMARY KEY (`Id`)&nbsp;<br> ) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;&nbsp;<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&gt; <span style="color:#ff0000;">show create table jw_resource;</span></span></p> <p><span style="font-size:18px;">FIELD &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TYPE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;COLLATION &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp;KEY &nbsp; &nbsp; DEFAULT &nbsp;Extra &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PRIVILEGES &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;COMMENT<br> ------------- &nbsp;------------ &nbsp;-------------- &nbsp;------ &nbsp;------ &nbsp;------- &nbsp;-------------- &nbsp;-------------------- &nbsp;-------<br> id &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BIGINT(20) &nbsp; &nbsp;(NULL) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NO &nbsp; &nbsp; &nbsp;PRI &nbsp; &nbsp; (NULL) &nbsp; AUTO_INCREMENT &nbsp;SELECT,INSERT,UPDATE &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br> resource_name &nbsp;VARCHAR(128) &nbsp;gbk_chinese_ci &nbsp;YES &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (NULL) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SELECT,INSERT,UPDATE &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br> resource_type &nbsp;TINYINT(4) &nbsp; &nbsp;(NULL) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;YES &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (NULL) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SELECT,INSERT,UPDATE&nbsp;<br><br><br><span></span>2.給resource_name和resource_type添加聯合惟一約束:</span></p> <p><span style="font-size:18px;">mysql&gt;<span style="color:#ff0000;"> show index from jw_resource;</span></span></p> <p><span style="font-size:18px;">mysql&gt;<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&gt; &nbsp;<span style="color:#ff0000;">show create table jw_resource;</span><br> CREATE TABLE `jw_resource` (<br> &nbsp; `id` BIGINT(20) NOT NULL AUTO_INCREMENT,<br> &nbsp; `resource_name` VARCHAR(128) DEFAULT NULL,<br> &nbsp; `resource_type` TINYINT(4) DEFAULT NULL,<br> &nbsp; PRIMARY KEY (`id`),<br><strong>&nbsp; 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&gt; <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&gt; INSERT INTO&nbsp;`jw_resource`(`resource_name`,'resource_type') values('aa','11');</span></p> <p><span style="font-size:18px;">msyql&gt; INSERT INTO&nbsp;`jw_resource`(`resource_name`,'resource_type') values('aa','22');</span></p> <p><span style="font-size:18px;">msyql&gt; INSERT INTO&nbsp;`jw_resource`(`resource_name`,'resource_type') values('bb','11');</span></p> <p><span style="font-size:18px;">msyql&gt; INSERT INTO&nbsp;`jw_resource`(`resource_name`,'resource_type') values('aa','11');<br><br><span></span>5.刪除惟一約束<br> mysql&gt; <span style="color:#ff0000;"><strong>ALTER TABLE&nbsp;jw_resource&nbsp;DROP INDEX&nbsp;`resource_name`;</strong></span><br></span></p> <p><span style="font-size:18px;">mysql&gt;<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

相關文章
相關標籤/搜索