如果为空,则自动递增非PK列(MySQL 5.5)

如果为空,则自动递增非PK列(MySQL 5.5),mysql,Mysql,我有一个桌子使用者 CREATE TABLE IF NOT EXISTS `user` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, `clientid` ??? ); 我希望指定clientid(许多家族成员可以具有相同的clientid),或者如果未指定,则从最大clientid开始自动递增 我尝试了不同的类型,但得到一个错误:表定义不正确;只能有一个自动列,必须将其定义为键 我希望使查询和数据库尽

我有一个桌子使用者

CREATE TABLE IF NOT EXISTS `user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `clientid`  ???
);
我希望指定
clientid
(许多家族成员可以具有相同的
clientid
),或者如果未指定,则从最大clientid开始自动递增

我尝试了不同的类型,但得到一个错误:表定义不正确;只能有一个自动列,必须将其定义为键


我希望使查询和数据库尽可能简单(如果可能的话,不要使用触发器或复杂查询,因为我的ORM不支持它们)

这对于注释来说太长了

您的数据模型似乎不正确。如果您有一个名为
clientid
的列,那么我希望您的表有一个名为
Clients
的表(我的表通常是复数名称)。表
Clients
将具有自动递增的id。上表将使用外键关系引用它:

CREATE TABLE `clients` (
    clientid int not null auto_increment primary key,
    . . .
);

CREATE TABLE IF NOT EXISTS `user` (
  userid bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  clientid int,
  constraint fk_user_client foreign key (clientid) references clients(clientid)
);

这篇评论太长了

您的数据模型似乎不正确。如果您有一个名为
clientid
的列,那么我希望您的表有一个名为
Clients
的表(我的表通常是复数名称)。表
Clients
将具有自动递增的id。上表将使用外键关系引用它:

CREATE TABLE `clients` (
    clientid int not null auto_increment primary key,
    . . .
);

CREATE TABLE IF NOT EXISTS `user` (
  userid bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  clientid int,
  constraint fk_user_client foreign key (clientid) references clients(clientid)
);

这样就更干净了。好的!这是一个干净的解决方案,但为了使请求保持简单,出于性能原因,我希望将所有数据保存在一个数据库中table@IggY . . . 混乱的数据模型通常会导致(更多)混乱的代码。使用几个连接来连接不同的实体基本上不会对性能造成影响,特别是如果您有索引并且数据量不是很大(比如数百万行),这会使它更干净。好的!这是一个干净的解决方案,但为了使请求保持简单,出于性能原因,我希望将所有数据保存在一个数据库中table@IggY . . . 混乱的数据模型通常会导致(更多)混乱的代码。使用几个连接来连接不同的实体基本上不会对性能造成影响,特别是如果您有索引并且数据量不是很大(比如数百万行)。