MySQL Insert 语句详细解析

发布时间:2023-05-23

一、语法结构

INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);

INSERT语句可以插入指定的列和值,如果未指定列,那么就必须为表中的每个列提供值,插入的数据将行列一一对应。如果指定了列,则可以插入不完整的行,每种情况下,插入的数据必须是与表中定义的每个列的数据类型相匹配的。

二、插入单行数据

INSERT INTO user (id, name, age) VALUES (1, 'Lucy', 18);

以上示例中,向user表中插入了一行数据,包括id、name和age三列,分别为1、'Lucy'和18。 如果不指定列名,则需要同时插入表中每一列的值。可以使用null值占位符来占位一个或多个值。

INSERT INTO user VALUES (2, 'Jack', 20, 'male');

以上示例中,向user表中插入了一行数据,分别为2、'Jack'、20和'male'。

三、插入多行数据

INSERT INTO user (id, name, age) VALUES (3, 'Amy', 22), (4, 'Tom', 26), (5, 'Anne', 21);

以上示例中,向user表中插入了三行数据,分别为3、'Amy'、22;4、'Tom'、26;5、'Anne'、21。

四、从另一个表插入数据

INSERT INTO user SELECT * FROM temp_user;

以上示例中,从temp_user表中读取所有行和列的数据,然后将其插入到user表中。 也可以通过指定列名来插入数据。需要保证两个表的列数和数据类型匹配。

INSERT INTO user (id, name) SELECT id, name FROM temp_user;

以上示例中,从temp_user表中读取id和name列的数据,然后将其插入到user表中相应的列中。

五、忽略重复的行

当插入数据时,可能会遇到重复的行,如果不希望插入重复的行,则可以使用IGNORE关键字。

INSERT IGNORE INTO user (id, name) VALUES (1, 'Lucy');

以上示例中,如果user表中已经存在id为1的行,则插入操作会被忽略,不会产生警告或错误。

六、替换重复的行

除了忽略重复的行,还可以通过REPLACE关键字来替换重复的行。

REPLACE INTO user (id, name) VALUES (1, 'John');

以上示例中,如果user表中已经存在id为1的行,则新的数据将会替换掉旧的数据,如果表中不存在id为1的行,则插入操作会正常执行。

七、批量插入

如果需要插入大量数据,则可以将数据写入文件,然后使用LOAD DATA关键字来批量插入。

LOAD DATA INFILE '/path/to/data.txt' INTO TABLE user;

以上示例中,从/data.txt文件中读取数据,并将其插入到user表中。