<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/post//</link>
<title><![CDATA[Mysql分区键和唯一索引主键的关系]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[数据库]]></category>
<pubDate>Tue, 18 Jan 2022 02:00:56 +0000</pubDate> 
<guid>https://www.heckjj.com/post//</guid> 
<description>
<![CDATA[ 
	今天主要介绍下面这几个错误:<br/><br/><span style="color: #DC143C;">ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table&#039;s partitioning</span><br/><br/><span style="color: #DC143C;">ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table&#039;s partitioning function</span><br/><br/>主键必须包括表的分区函数中的所有列，一个惟一的索引必须包括表的分区函数中的所有列，是不是不太好理解意思<br/><br/>其实就是这么个意思：表上的每一个唯一性索引必须用于分区表的表达式上（其中包括主键索引） <br/><br/>下面我来举几个例子：<br/><br/><br/>CREATE TABLE t1 (&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; id INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; aid DATE NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; bid INT NOT NULL,&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (id)&nbsp;&nbsp;<br/>)&nbsp;&nbsp;<br/>PARTITION BY KEY(bid)&nbsp;&nbsp;<br/>PARTITIONS 10;<br/>[Err] 1503 - A PRIMARY KEY must include all columns in the table&#039;s partitioning function<br/><br/><br/>CREATE TABLE t1 (&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; id INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; aid DATE NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; bid INT NOT NULL,&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; UNIQUE KEY (id)&nbsp;&nbsp;<br/>)&nbsp;&nbsp;<br/>PARTITION BY KEY(bid)&nbsp;&nbsp;<br/>PARTITIONS 10;<br/>[Err] 1503 - A PRIMARY KEY must include all columns in the table&#039;s partitioning function<br/><br/><br/>CREATE TABLE t1 (&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; id INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; aid DATE NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; bid INT NOT NULL,&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (id,bid)&nbsp;&nbsp;<br/>)&nbsp;&nbsp;<br/>PARTITION BY KEY(bid)&nbsp;&nbsp;<br/>PARTITIONS 10;<br/>Query OK, 0 rows affected (0.535 sec)<br/><br/><br/>CREATE TABLE t1 (&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; id INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; aid DATE NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; bid INT NOT NULL,&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; UNIQUE KEY (id,bid)&nbsp;&nbsp;<br/>)&nbsp;&nbsp;<br/>PARTITION BY KEY(bid)&nbsp;&nbsp;<br/>PARTITIONS 10;<br/>Query OK, 0 rows affected (0.625 sec)<br/><br/>这一组例子说明了如果要用bid作为分区key，则bid至少要包含在主键或者唯一键。<br/><br/>再来看一组例子：<br/><br/><br/>CREATE TABLE t1 (&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; id INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; aid DATE NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; bid INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (id,aid),<br/>&nbsp;&nbsp;&nbsp;&nbsp; UNIQUE KEY (bid)&nbsp;&nbsp;&nbsp;&nbsp;<br/>)&nbsp;&nbsp;<br/>PARTITION BY KEY(bid)&nbsp;&nbsp;<br/>PARTITIONS 10;<br/>[Err] 1503 - A PRIMARY KEY must include all columns in the table&#039;s partitioning function<br/><br/><br/><br/>CREATE TABLE t1 (&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; id INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; aid DATE NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; bid INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (id,aid),<br/>&nbsp;&nbsp;&nbsp;&nbsp; UNIQUE KEY (bid)&nbsp;&nbsp;&nbsp;&nbsp;<br/>)&nbsp;&nbsp;<br/>PARTITION BY KEY(aid)&nbsp;&nbsp;<br/>PARTITIONS 10;<br/>[Err] 1503 - A PRIMARY KEY must include all columns in the table&#039;s partitioning function<br/><br/>这2个分区表是无法建立的，因为没有一个分区键，可以同时属于两个唯一性索引的键。<br/><br/>下面再来看一组例子：<br/><br/><br/>CREATE TABLE t1 (&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; id INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; aid DATE NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; bid INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (id,aid,bid)&nbsp;&nbsp; <br/>)&nbsp;&nbsp;<br/>PARTITION BY KEY(bid)&nbsp;&nbsp;<br/>PARTITIONS 10;<br/>Query OK, 0 rows affected (0.475 sec)<br/><br/><br/>CREATE TABLE t1 (&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; id INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; aid DATE NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; bid INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; UNIQUE KEY (id,aid,bid)&nbsp;&nbsp; <br/>)&nbsp;&nbsp;<br/>PARTITION BY KEY(bid)&nbsp;&nbsp;<br/>PARTITIONS 10;<br/>Query OK, 0 rows affected (0.532 sec)<br/><br/><br/>CREATE TABLE t1 (&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; id INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; aid DATE NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; bid INT NOT NULL,&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (id,aid,bid),<br/>&nbsp;&nbsp;&nbsp;&nbsp; UNIQUE KEY (bid)&nbsp;&nbsp;&nbsp;&nbsp;<br/>)&nbsp;&nbsp;<br/>PARTITION BY KEY(bid)&nbsp;&nbsp;<br/>PARTITIONS 10;<br/>Query OK, 0 rows affected (0.526 sec)<br/><br/>这三个都建立分区表成功了，因为bid同时属于一个或以上的唯一性索引的键<br/><br/>通过上面这些例子，大家可以深入的理解Mysql分区中分区键和唯一索引主键的关系了，希望对大家有所帮助。
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post//#blogcomment</link>
<title><![CDATA[[评论] Mysql分区键和唯一索引主键的关系]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>