【发布时间】:2022-01-21 07:19:03
【问题描述】:
以下面的查询为例,我将数据插入到teams表中,teamId(类型:INT)是主键,自增设置为true。
'INSERT INTO `teams` (`teamId`,`teamName`,`referralCommission`,`createdAt`,`updatedAt`,`companyId`) VALUES (DEFAULT,?,?,?,?,?);'
此查询在 MySQL 上运行良好,但在 MariaDB 上,默认值被转换为 null,我知道这是未为列设置默认值时的正常行为。但在我的例子中,teamId 是自动递增的,所以默认值应该指向下一个可用的 id。相反,所有条目的 teamId 都设置为 0(从 null 转换),并且由于 teamId 是主键,我无法向表中添加新条目。
有什么方法可以在 mariadb 中使用 MySQL 的默认功能?或任何其他解决此问题的方法。
P.S 我知道我可以从查询中完全删除 teamId 字段,它会起作用,但我需要上述查询才能正常工作。
【问题讨论】:
-
如果您有一个自动增量列,您通常不需要在插入查询中为其添加值,即
INSERT into teams (teamname, referralCommission, ..) values (?,?..)请注意缺少的teamId和DEFAULT值。如果这不起作用,请分享您的表定义。 -
如果该列 真的 是自动增量列,即使您明确指定
NULL作为值,它也会插入下一个int。即像insert into team(teamid, ...) values (NULL, ...)这样的东西仍然会插入下一个数字而不是空 -
@derpirscher 是的,你提到的工作,删除 teamId 和 DEFAULT 工作正常。但我需要让查询按原样运行。我正在使用 Sequelize 通过 Express.JS 连接到 MariaDB。不幸的是,每当 Sequelize 运行 create 函数时,它都会发送主键设置为 DEFAULT 的查询。
-
DEFAULT也可以正常工作。看到这个小提琴(dbfiddle.uk/…)因此我要求提供确切的表定义。因为如果你的查询不起作用,很可能是你的表定义有问题。 -
@derpirscher 我尝试在 sequelize create 函数中将 teamId 显式设置为 null 并且它有效!以前,我没有将 teamId 的值提供给 sequelize 函数,默认情况下,它会添加 DEFAULT。现在它正在工作。谢谢。