Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql #1503-唯一索引必须包括表中的所有列';s分配函数_Mysql_Sql_Partitioning - Fatal编程技术网

Mysql #1503-唯一索引必须包括表中的所有列';s分配函数

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,

我正在尝试为我的数据库表在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,
  `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)分区,这可能是一个不使用分区的好例子
谢谢你的回答,它正在运行,但是你能告诉我,下面答案中的索引是正确的。谢谢你的回答,它正在运行,但是你能告诉我,下面答案中的索引是正确的。这个
创建
是错误的<代码>用户名和
电子邮件
将不强制唯一。此
创建
错误<代码>用户名和
电子邮件
将不强制唯一。