MySQL 作为最流行的关系型数据库管理系统之一,其写入操作是数据管理中的核心环节,掌握 MySQL 的写入命令不仅能够帮助用户高效地管理数据,还能确保数据的一致性和完整性,本文将详细介绍 MySQL 中常用的写入命令,包括 INSERT
、UPDATE
、DELETE
以及 LOAD DATA INFILE
等,并通过实例和表格说明其用法和注意事项。

基础写入命令:INSERT
INSERT
命令用于向数据库表中插入新的数据行,根据需求不同,INSERT
命令的语法也有所区别,最常用的形式是单行插入和多行插入。
单行插入
单行插入是最基本的用法,语法如下:
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
table_name
是目标表的名称,column1, column2, ...
是要插入数据的列名,value1, value2, ...
是对应列的值,如果插入的值与表的列顺序完全一致,可以省略列名,但这种方式不推荐,因为一旦表结构发生变化,SQL 语句可能会出错。
多行插入
多行插入允许在一次操作中插入多行数据,语法如下:

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...), (value4, value5, value6, ...), ... (valueN, valueN+1, valueN+2, ...);
多行插入的优势在于减少了与数据库的交互次数,提高了插入效率,尤其适合批量数据的导入。
插入默认值
如果某些列有默认值(通过 DEFAULT
关键字或 DEFAULT
约束定义),可以使用 DEFAULT
关键字显式插入默认值:
INSERT INTO table_name (column1, column2, column3) VALUES (value1, DEFAULT, value3);
更新命令:UPDATE
UPDATE
命令用于修改表中已存在的数据,其基本语法如下:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
SET
子句指定要更新的列及其新值。WHERE
子句用于筛选需要更新的行,如果不使用WHERE
子句,表中所有行的指定列都会被更新,这可能导致数据丢失,因此必须谨慎使用。
示例:
假设有一个 students
表,需要将学号为 1001
的学生的年龄更新为 20
:

UPDATE students SET age = 20 WHERE student_id = 1001;
删除命令:DELETE
DELETE
命令用于从表中删除数据行,其基本语法如下:
DELETE FROM table_name WHERE condition;
与 UPDATE
类似,WHERE
子句是必需的,否则会删除表中的所有数据。DELETE
操作会逐行删除数据,对于大数据量的表,可能需要较长时间。
示例:
删除 students
表中学号为 1002
的学生记录:
DELETE FROM students WHERE student_id = 1002;
批量导入数据:LOAD DATA INFILE
LOAD DATA INFILE
是 MySQL 提供的高效批量数据导入命令,适用于从文本文件(如 CSV、TXT)中快速加载数据到表中,其语法如下:
LOAD DATA INFILE 'file_path' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (column1, column2, ...);
FIELDS TERMINATED BY
指定字段分隔符(如逗号、制表符)。LINES TERMINATED BY
指定行分隔符(如\n
表示换行)。column1, column2, ...
指定文件中的列与表中列的对应关系。
示例:
假设有一个 students.csv
文件,内容如下:
1001, Alice, 18
1002, Bob, 19
将其导入 students
表:
LOAD DATA INFILE '/path/to/students.csv' INTO TABLE students FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (student_id, name, age);
写入操作的注意事项
-
事务管理:对于重要的写入操作,建议使用事务(
BEGIN
,COMMIT
,ROLLBACK
)来确保数据的一致性。BEGIN; INSERT INTO students VALUES (1003, 'Charlie', 20); UPDATE students SET age = 21 WHERE student_id = 1001; COMMIT;
如果中间某一步失败,可以执行
ROLLBACK
回滚操作。 -
主键与唯一约束:插入数据时需确保不违反主键或唯一约束,否则会导致错误。
-
性能优化:批量插入时,可以关闭索引和唯一性检查以提高速度,完成后再重新开启:
ALTER TABLE students DISABLE KEYS; -- 执行批量插入 ALTER TABLE students ENABLE KEYS;
相关问答 FAQs
问题 1:如何确保 INSERT 操作不重复插入数据?
解答:可以通过以下方式避免重复插入:
- 使用
INSERT IGNORE
:如果插入的数据违反唯一约束,MySQL 会忽略错误而不插入。INSERT IGNORE INTO students (student_id, name) VALUES (1001, 'Alice');
- 使用
ON DUPLICATE KEY UPDATE
:如果主键或唯一键已存在,则更新数据。INSERT INTO students (student_id, name, age) VALUES (1001, 'Alice', 18) ON DUPLICATE KEY UPDATE age = 18;
- 使用
REPLACE INTO
:如果主键或唯一键已存在,先删除旧数据再插入新数据。REPLACE INTO students (student_id, name, age) VALUES (1001, 'Alice', 18);
问题 2:批量插入大量数据时如何提高效率?
解答:提高批量插入效率的方法包括:
- 使用
INSERT INTO ... VALUES (), (), ...
的多行插入语法,减少网络往返次数。 - 临时关闭索引和外键检查:
SET unique_checks = 0; SET foreign_key_checks = 0; -- 执行批量插入 SET unique_checks = 1; SET foreign_key_checks = 1;
- 使用
LOAD DATA INFILE
替代逐行插入,其速度比普通INSERT
快 20 倍以上。 - 调整 MySQL 配置参数,如
bulk_insert_buffer_size
,优化批量插入的内存缓冲区大小。