当我将一些数据插入表中然后在同一个表上运行SELECT查询时,我看到了一种奇怪的行为。此表有一个自动增量主键(uid),当我尝试选择“uid为空”的结果时会出现此问题。
我已将其归结为以下SQL命令:
DROP TABLE IF EXISTS test_users;
CREATE TABLE test_users (uid INTEGER PRIMARY KEY AUTO_INCREMENT, name varchar(20) NOT NULL);
INSERT INTO test_users(name) values('foo');
SELECT uid FROM test_users WHERE uid IS NULL;
SELECT uid FROM test_users WHERE uid IS NULL; -- no output from this query
我希望SELECT uid FROM test_users WHERE uid IS NULL
永远不会返回任何内容,但有时会这样做。这是我发现的:
答案 0 :(得分:0)
此行为是设计使然。
它明显等同于SELECT * FROM t1 WHERE id = LAST_INSERT_ID();
,它也只能用于您刚刚插入的连接,正如您所描述的那样。
这显然是一种解决方法,您可以在某些环境中使用,这使得难以以更传统的方式获取最后插入的(通过您的连接)行的自动增量值。
准确地说,它实际上是分配给连接的 last 插入语句插入的第一个行的auto_increment值。当你只插入一行时,这是同样的事情,但当你用一个插入语句插入多行时,这是不一样的。