MySQL 版本 5.5.13-1
摘自SHOW ENGINE INNODB STATUS\G
:
LATEST DETECTED DEADLOCK
------------------------
111218 10:22:34
*** (1) TRANSACTION:
TRANSACTION 1318D95B, ACTIVE 0 sec starting index read
mysql tables in use 6, locked 6
LOCK WAIT 53 lock struct(s), heap size 14776, 77 row lock(s)
MySQL thread id 60933, query id 124472414 192.168.6.31 thanhnt Copying to tmp table
INSERT INTO usertmp(userid,npayvalue,balance)
SELECT B.`userid`, SUM(C.`moneyv`) a,(B.`balance` + B.`promotions`+ B.`promotions1`+ B.`overdraft`) b
FROM `ox_campaigns` A
INNER JOIN `v3_cam_date` C ON C.`campaignid` = A.`campaignid` …
Run Code Online (Sandbox Code Playgroud) 在 InnoDB 表的多列索引中缺少对 AUTO_INCREMENT 列的支持是一个广为人知的限制,就像需要时的触发器解决方法一样(参见例如这篇文章)。然而,昨天,我遇到了这个帖子,声称早在 5.1 就添加了对该功能的支持。我在我的 5.7 安装 (mysql-community-server-5.7.19-1.el7.x86_64) 上尝试了以下语句,它似乎完美地工作:
CREATE TABLE `tbl1` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`data` datetime NOT NULL,
PRIMARY KEY (`id`,`data`)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
我的问题是,在我的一生中,我无法在 MySQL 的文档站点或其他地方找到对该功能的支持的肯定声明。我对在生产中部署一些未经宣布的东西(可能是实验性的)相当谨慎,所以我希望有人能指出我的官方状态。
编辑:事实证明,该手册在不相关的部分包含了这个相当间接的声明:
“……带有 AUTO_INCREMENT 列的 InnoDB 表至少需要一个键,其中自动增量列是唯一或最左边的列。”
这表明但没有说明支持。
编辑 2:使用下面来自@rolandoMYSQLDBA 的信息,我还找到了这个附加片段:“AUTO_INCREMENT 列必须作为 InnoDB 表索引中的第一列出现。” . 因此,我接受他的回答。
如果有人想知道,表分区需要多列索引 - 客户在所有表上都有 auto_increment PK 并且他们想要在日期列上进行分区。