mysql 建表 1075_关于主键:MySQL:#1075-错误的表定义; 自动增量与另一个键?...

这是MySQL 5.3.X + db中的表:

CREATE TABLE members` (

`id` int(11)  UNSIGNED NOT NULL AUTO_INCREMENT,

`memberid` VARCHAR( 30 ) NOT NULL ,

`Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,

`firstname` VARCHAR( 50 ) NULL ,

`lastname` VARCHAR( 50 ) NULL ,

UNIQUE (memberid),

PRIMARY KEY (id)

) ENGINE = MYISAM;

id列从未在查询中使用,只是为了视觉方便(因此很容易看到表的增长方式)。 Memberid是一个实际键,是唯一的,并且在查询中使用memberid来标识任何成员(WHERE memberid ='abcde')。

我的问题是:如何保留auto_increment,但将memberid作为主键? 那可能吗?

当我尝试使用PRIMARY KEY(成员ID)创建此表时,出现错误消息:

1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

如果性能非常重要(尽管磁盘空间不是很重要),那么最佳选择是什么(希望有一种方法可以保留id列,从而使性能良好,并且查询可以通过memberid而不是id来标识任何用户)?

您可以有一个不是PRIMARY KEY的自动递增列,只要它上有一个索引(键)即可:

这将使ENGINE => MYISAM成为INNODB

@KanagaveluSugumar我不确定我是否关注你。 问题中的表格是MyISAM。

@ypercube? 我正在使用AWS Aurora,并在尝试stackoverflow.com/questions/5416548/时遇到1075问题。 然后尝试添加KEY(id)的建议,然后得到1 warning(s): 1266 Using storage engine InnoDB for table MYTABLE的警告,这意味着尽管DDL中提到了该表,但我无法使用MYISAM引擎创建该表

@KanagaveluSugumar请参阅aws.amazon.com/rds/aurora/faqs:Amazon Aurora不提供某些MySQL功能,例如MyISAM存储引擎。 欢迎来到2018,MyISAM已死;)

@ypercube? 谢谢! 是的; 您的解决方案已经在我的本地mysql数据库中工作了。

首先创建没有auto_increment的表,

将ID设置为索引后,

将id设置为auto_increment之后,

要么

谢谢,首先设置索引有助于我将Auto_increment手动添加到现有表中的列。

您可以将id作为主键,并将member_id设置为NOT NULL UNIQUE。 (您已经完成了。)NOT NULL UNIQUE的列可以作为外键引用的目标,就像主键一样。 (我很确定所有SQL平台都是如此。)

从概念上讲,PRIMARY KEY和NOT NULL UNIQUE之间没有区别。从物理层面上讲,这是一个MySQL问题。其他SQL平台将允许您使用序列而不将其作为主键。

但是,如果性能确实很重要,那么您应该三思而行,将表格每行扩大四个字节,以实现极小的视觉方便。另外,如果为了强制执行外键约束而切换到INNODB,MySQL将在聚簇索引中使用主键。由于您没有使用主键,因此我认为这可能会损害性能。

我想我了解您的错误原因。

首先,单击自动AUTO INCREMENT字段,然后将其选择为主键。

The Right way is First You have to select it as a primary key then you

have to click auto AUTO INCREMENT field.

很容易。

谢谢

对于上述问题,首先,如果假设表包含多个主键,则首先删除所有那些主键,然后将第一个AUTO INCREMENT字段添加为主键,然后添加另一个必需的主键,该主键将在前面删除。在选项区域中为必填字段设置"自动增加"选项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值