【发布时间】:2020-10-26 15:15:11
【问题描述】:
MariaDB INSERT IGNORE... SELECT 语法在 https://mariadb.com/kb/en/insert/ 中定义。
我还依赖于假设在这种情况下每个INSERT 都将按照SELECT 子句结果集的顺序执行。
测试用例:
DROP TEMPORARY TABLE IF EXISTS index_and_color;
CREATE TEMPORARY TABLE index_and_color (`index` INT PRIMARY KEY, color TEXT);
INSERT IGNORE INTO index_and_color SELECT 5, "Red" UNION ALL SELECT 5, "Blue";
SELECT * FROM index_and_color;
直观地说,我看到SELECT 子句结果集中的“第一”行有(5, "Red"),然后“第二”行被忽略,包含与“蓝色”相同的键。
据我所知,这是未定义的行为,因为实现相同文档的另一台服务器可以以不同的顺序处理行。
我在这里的使用确实依赖于未定义的行为吗?
【问题讨论】:
-
我在stackoverflow.com/questions/56841179/… 上问过关于 MySQL 的同样问题。严格来说,这是未定义的行为。
标签: sql duplicates mariadb sql-order-by sql-insert