如果为空,则自动递增非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 . . . 混乱的数据模型通常会导致(更多)混乱的代码。使用几个连接来连接不同的实体基本上不会对性能造成影响,特别是如果您有索引并且数据量不是很大(比如数百万行)。