菜鸟科技网

MySQL写入命令有哪些基础语法?

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

MySQL写入命令有哪些基础语法?-图1
(图片来源网络,侵删)

基础写入命令:INSERT

INSERT 命令用于向数据库表中插入新的数据行,根据需求不同,INSERT 命令的语法也有所区别,最常用的形式是单行插入和多行插入。

单行插入

单行插入是最基本的用法,语法如下:

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

table_name 是目标表的名称,column1, column2, ... 是要插入数据的列名,value1, value2, ... 是对应列的值,如果插入的值与表的列顺序完全一致,可以省略列名,但这种方式不推荐,因为一旦表结构发生变化,SQL 语句可能会出错。

多行插入

多行插入允许在一次操作中插入多行数据,语法如下:

MySQL写入命令有哪些基础语法?-图2
(图片来源网络,侵删)
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

MySQL写入命令有哪些基础语法?-图3
(图片来源网络,侵删)
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);

写入操作的注意事项

  1. 事务管理:对于重要的写入操作,建议使用事务(BEGIN, COMMIT, ROLLBACK)来确保数据的一致性。

    BEGIN;
    INSERT INTO students VALUES (1003, 'Charlie', 20);
    UPDATE students SET age = 21 WHERE student_id = 1001;
    COMMIT;

    如果中间某一步失败,可以执行 ROLLBACK 回滚操作。

  2. 主键与唯一约束:插入数据时需确保不违反主键或唯一约束,否则会导致错误。

  3. 性能优化:批量插入时,可以关闭索引和唯一性检查以提高速度,完成后再重新开启:

    ALTER TABLE students DISABLE KEYS;
    -- 执行批量插入
    ALTER TABLE students ENABLE KEYS;

相关问答 FAQs

问题 1:如何确保 INSERT 操作不重复插入数据?
解答:可以通过以下方式避免重复插入:

  1. 使用 INSERT IGNORE:如果插入的数据违反唯一约束,MySQL 会忽略错误而不插入。
    INSERT IGNORE INTO students (student_id, name) VALUES (1001, 'Alice');
  2. 使用 ON DUPLICATE KEY UPDATE:如果主键或唯一键已存在,则更新数据。
    INSERT INTO students (student_id, name, age)
    VALUES (1001, 'Alice', 18)
    ON DUPLICATE KEY UPDATE age = 18;
  3. 使用 REPLACE INTO:如果主键或唯一键已存在,先删除旧数据再插入新数据。
    REPLACE INTO students (student_id, name, age) VALUES (1001, 'Alice', 18);

问题 2:批量插入大量数据时如何提高效率?
解答:提高批量插入效率的方法包括:

  1. 使用 INSERT INTO ... VALUES (), (), ... 的多行插入语法,减少网络往返次数。
  2. 临时关闭索引和外键检查:
    SET unique_checks = 0;
    SET foreign_key_checks = 0;
    -- 执行批量插入
    SET unique_checks = 1;
    SET foreign_key_checks = 1;
  3. 使用 LOAD DATA INFILE 替代逐行插入,其速度比普通 INSERT 快 20 倍以上。
  4. 调整 MySQL 配置参数,如 bulk_insert_buffer_size,优化批量插入的内存缓冲区大小。
分享:
扫描分享到社交APP
上一篇
下一篇