是否为 INSERT IGNORE ... SELECT 指定了插入顺序?
Is the order of inserts specified for INSERT IGNORE ... SELECT?
我有一个 table 喜欢:
CREATE TABLE {
email VARCHAR PRIMARY,
last_login DATE
}
我可以填充 select 结果集,例如:
("a@b.c", "2019-01-01"),
("a@b.c", "2019-02-01")
如果我将使用 INSERT IGNORE ... SELECT
插入到 table 中,是否指定了插入哪一行以及忽略哪一行?
找到规范:
- "Specify IGNORE to ignore rows that would cause duplicate-key violations." 来自 https://dev.mysql.com/doc/refman/5.5/en/insert-select.html。但这并没有说明哪个是重复的,哪个是不重复的。
insert
语句未指定行的插入顺序 - select
语句指定。但是,除非您使用 order by
子句显式定义顺序,否则 select
returns 行的顺序完全取决于数据库,不应被信任。
换句话说,如果您关心插入哪一行以及忽略哪一行,请在 select
语句中添加一个 order by
子句,并确保要插入的行排在第一位。
我有一个 table 喜欢:
CREATE TABLE {
email VARCHAR PRIMARY,
last_login DATE
}
我可以填充 select 结果集,例如:
("a@b.c", "2019-01-01"),
("a@b.c", "2019-02-01")
如果我将使用 INSERT IGNORE ... SELECT
插入到 table 中,是否指定了插入哪一行以及忽略哪一行?
找到规范:
- "Specify IGNORE to ignore rows that would cause duplicate-key violations." 来自 https://dev.mysql.com/doc/refman/5.5/en/insert-select.html。但这并没有说明哪个是重复的,哪个是不重复的。
insert
语句未指定行的插入顺序 - select
语句指定。但是,除非您使用 order by
子句显式定义顺序,否则 select
returns 行的顺序完全取决于数据库,不应被信任。
换句话说,如果您关心插入哪一行以及忽略哪一行,请在 select
语句中添加一个 order by
子句,并确保要插入的行排在第一位。