select max(id)在空表中返回null而不是0

vbkedwbf  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(859)

这个问题在这里已经有答案了

当max函数为空时,如何用max函数设置0(2个答案)
两年前关门了。
我需要纠正一个关于失败插入的无效自动增量的问题,以防某些唯一字段被复制。
数据库

id : primary key(11) NOT NULL  // !important: doesn't have auto increment
field : varchar(25) NOT NULL

查询

$field = 'field1';
try{
    $conn = new PDO("....");
    $stmt = $conn->prepare("INSERT INTO table (id,field) VALUES (((SELECT MAX(id) FROM table as table_max_id)+1),:field)");
    $stmt->bindParam(':field', $field, PDO::PARAM_STR);
    if(!$stmt->execute())
        print_r($stmt->errorInfo());//Column id cannot be null;
 }
 ...

发现的错误是:
列id不能为空;
仅当表为空时,如果表中有记录,则不会发生此验证错误。
我可以用一个假的来解决这个问题 id = 1 ,但我真的不喜欢它作为解决方案,有什么想法吗?

00jrzges

00jrzges1#

使用 COALESCE 要用其他内容替换空表达式,请执行以下操作:

SELECT COALESCE(MAX(id), 0) + 1 FROM table

我建议使用 AUTO_NUMBER 字段而不是生成id。

相关问题