SQL |插入忽略语句
我们知道表的主键不能重复。例如,学生表中学生的卷号必须始终是不同的。同样,EmployeeID 在员工表中应该是唯一的。当我们尝试将元组插入到主键重复的表中时,会导致错误。但是,使用 INSERT IGNORE 语句,我们可以防止弹出此类错误,尤其是在批量插入条目时,此类错误会中断插入流程。相反,只会生成警告。
INSERT IGNORE 避免错误的情况
- 在插入重复键时,列必须包含 PRIMARY KEY 或 UNIQUE 约束
- 在列具有 NOT NULL 约束的情况下插入 NULL 值。
- 在将行插入分区表时,插入的值与分区格式不符。
例子:
假设我们有一个关系,员工。
员工表:
EmployeeID | Name | City |
---|---|---|
15001 | Aakash | Delhi |
15003 | Sahil | Bangalore |
15010 | John | Hyderabad |
15008 | Shelley | Delhi |
15002 | Ananya | Mumbai |
15004 | Sia | Pune |
我们可以注意到,条目没有根据它们的主键(即 EmployeeID)进行排序。
示例查询:
INSERT IGNORE INTO Employee (EmployeeID, Name, City)
VALUES (15002, 'Ram', 'Mumbai');
输出:
没有插入条目。
示例查询:
插入多条记录
一次插入多条记录时,任何不能插入的都不会,但可以插入的将是:
INSERT IGNORE INTO Employee (EmployeeID, Name, City)
VALUES (15007, 'Shikha', 'Delhi'), (15002, 'Ram', 'Mumbai'), (15009, 'Sam', 'Ahmedabad');
输出:
第一个和最后一个条目被插入;中间条目被简单地忽略。没有错误闪烁。
坏处
大多数用户不喜欢 INSERT IGNORE 而不是 INSERT,因为有些错误可能会被忽视。这可能会导致表中的不一致,从而导致在用户没有机会更正它们的情况下无法插入一些元组。因此,INSERT IGNORE 必须在非常具体的条件下使用。