假设我的MySQL表中还没有插入行。
CREATE TABLE Users (
SerialNo INT(9) NOT NULL AUTO_INCREMENT,
UserID INT(9) NOT NULL,
PRIMARY KEY (SerialNo)
);
当我运行以下MySQL语句时:
INSERT INTO Users(UserID) SELECT MAX(UserID)+1 FROM Users;
该表如下图所示:
图片链接:https://s1.postimg.org/4r2xcc7ajj/z_Ii_A-_KUp_Tzio_-00_PBL0_KQ.png
有人可以告诉我为什么MAX(UserID)+1
设置 0 而不是 1 ?
答案 0 :(得分:3)
编辑:要在这种情况下插入1,请使用IFNULL(MAX(UserId),0)+1
答案 1 :(得分:0)
正如max()上的mysql手册所说:max()
如果没有匹配的记录则返回null。如果表中根本没有记录,则max(userid)
返回null。
null + 1
也将为空。因此,您查询尝试将null插入表中。
您的mysql配置为strict mode已关闭,因此当您尝试将空值插入非空字段时,mysql会以静默方式将null转换为字段隐式默认值。对于整数字段,这恰好为0。
如果启用了严格模式,那么您将收到一条错误消息,指示您尝试在表中插入非法值。这样,您只会收到警告。
顺便说一句,你应该打开严格模式。