Mysql #1503-唯一索引必须包括表中的所有列';s分配函数
我正在尝试为我的数据库表在MySQL数据库表模式上添加分区,如下所示Mysql #1503-唯一索引必须包括表中的所有列';s分配函数,mysql,sql,partitioning,Mysql,Sql,Partitioning,我正在尝试为我的数据库表在MySQL数据库表模式上添加分区,如下所示 CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_group_id` tinyint(3) unsigned NOT NULL DEFAULT '2', `username` varchar(50) NOT NULL, `email` varchar(80) NOT NULL,
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_group_id` tinyint(3) unsigned NOT NULL DEFAULT '2',
`username` varchar(50) NOT NULL,
`email` varchar(80) NOT NULL,
`password` varchar(50) NOT NULL,
`first_name` varchar(25) DEFAULT NULL,
`last_name` varchar(25) DEFAULT NULL,
`gender` enum('m','f','u') NOT NULL DEFAULT 'u' COMMENT 'm=>Male, f=>Female, u=>Unspecified',
`profile_image` varchar(255) DEFAULT NULL,
`reset_key` varchar(50) DEFAULT NULL,
`block` enum('y','n') NOT NULL DEFAULT 'n' COMMENT 'y=>blocked, n=>notblocked',
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
当我在表上运行以下分区查询时
ALTER TABLE users PARTITION BY RANGE(id) (
PARTITION p0 VALUES LESS THAN (200000),
PARTITION p1 VALUES LESS THAN (400000),
PARTITION p2 VALUES LESS THAN (600000),
PARTITION p3 VALUES LESS THAN (800000),
PARTITION p4 VALUES LESS THAN (1000000),
PARTITION p5 VALUES LESS THAN (1200000),
PARTITION p6 VALUES LESS THAN (1400000),
PARTITION p7 VALUES LESS THAN (1600000),
PARTITION p8 VALUES LESS THAN (1800000),
PARTITION p9 VALUES LESS THAN (2000000)
);
它给我的错误信息是
#1503-唯一索引必须包括表分区函数中的所有列
我正在使用MySQL社区服务器-5.5.16
有谁能告诉我我的查询中有什么错误吗?答案一目了然:
本节讨论分区键与
主键和唯一键。管理这种关系的规则可以
表示如下:分区中使用的所有列
分区表的表达式必须是每个唯一键的一部分
桌子上可能有
报告说:
本节讨论分区键与
主键和唯一键。管理这种关系的规则可以
表示如下:分区中使用的所有列
分区表的表达式必须是每个唯一键的一部分
桌子上可能有
更改表上的索引后,它开始工作
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_group_id` tinyint(3) unsigned NOT NULL DEFAULT '2',
`username` varchar(50) NOT NULL,
`email` varchar(80) NOT NULL,
`password` varchar(50) NOT NULL,
`first_name` varchar(25) DEFAULT NULL,
`last_name` varchar(25) DEFAULT NULL,
`gender` enum('m','f','u') NOT NULL DEFAULT 'u' COMMENT 'm=>Male, f=>Female, u=>Unspecified',
`profile_image` varchar(255) DEFAULT NULL,
`reset_key` varchar(50) DEFAULT NULL,
`modify_username` enum('0','1') DEFAULT '0',
`block` enum('y','n') NOT NULL DEFAULT 'n' COMMENT 'y=>blocked, n=>notblocked',
`status` enum('0','1') DEFAULT '0',
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `id_username_email` (`id`,`username`,`email`),
KEY `username` (`username`)
KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
更改表上的索引后,它开始工作
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_group_id` tinyint(3) unsigned NOT NULL DEFAULT '2',
`username` varchar(50) NOT NULL,
`email` varchar(80) NOT NULL,
`password` varchar(50) NOT NULL,
`first_name` varchar(25) DEFAULT NULL,
`last_name` varchar(25) DEFAULT NULL,
`gender` enum('m','f','u') NOT NULL DEFAULT 'u' COMMENT 'm=>Male, f=>Female, u=>Unspecified',
`profile_image` varchar(255) DEFAULT NULL,
`reset_key` varchar(50) DEFAULT NULL,
`modify_username` enum('0','1') DEFAULT '0',
`block` enum('y','n') NOT NULL DEFAULT 'n' COMMENT 'y=>blocked, n=>notblocked',
`status` enum('0','1') DEFAULT '0',
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `id_username_email` (`id`,`username`,`email`),
KEY `username` (`username`)
KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
您缺少错误消息的哪些方面?
id
字段需要位于email
和username
的索引中。谢谢你的回答,它现在可以工作了,但是你能告诉我,这是添加索引的好方法吗?有点晚了,但是由于id是自动递增的,如果你按范围(id)分区,这可能是一个不使用分区的好例子
您遗漏了错误消息的哪些方面?id
字段需要位于email
和username
的索引中。谢谢你的回答,它现在可以工作了,但是你能告诉我,这是添加索引的好方法吗?有点晚了,但是由于id是自动递增的,如果你按范围(id)分区,这可能是一个不使用分区的好例子
谢谢你的回答,它正在运行,但是你能告诉我,下面答案中的索引是正确的。谢谢你的回答,它正在运行,但是你能告诉我,下面答案中的索引是正确的。这个创建
是错误的<代码>用户名和电子邮件
将不强制唯一。此创建
错误<代码>用户名和电子邮件
将不强制唯一。