MySQL 的 INSERT(插入数据)详解

MySQL 的 INSERT(插入数据)详解

在 MySQL 中,INSERT 语句用于向数据库表中添加新的记录。INSERT 语句非常灵活,支持多种语法形式,可以根据具体需求选择合适的用法。以下是 INSERT 语句的详细语法和使用示例。

1. 插入单行数据
1.1 指定列名和值

这是最常见的 INSERT 语法,适用于插入单行数据。你需要指定列名和对应的值。

复制代码
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

示例

假设我们有一个名为 users 的表,包含 id, username, email, birthdate, is_active 字段。我们想插入一条新记录:

复制代码
INSERT INTO users (username, email, birthdate, is_active)
VALUES ('test', 'test@runoob.com', '1990-01-01', true);
1.2 省略列名

如果你要插入的值涵盖了表中的所有列,可以省略列名部分。但请注意,值的顺序必须与表中列的顺序相同。

复制代码
INSERT INTO table_name
VALUES (value1, value2, value3, ...);

示例

假设 users 表的列顺序是 id, username, email, birthdate, is_active,并且 id 是自增列:

复制代码
INSERT INTO users
VALUES (NULL, 'test', 'test@runoob.com', '1990-01-01', true);
2. 插入多行数据
2.1 使用多个 VALUES 子句

你可以在 VALUES 子句中指定多组值,从而一次性插入多行数据。

复制代码
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...),
       (value1, value2, value3, ...),
       (value1, value2, value3, ...);

示例

复制代码
INSERT INTO users (username, email, birthdate, is_active)
VALUES ('test1', 'test1@runoob.com', '1985-07-10', true),
       ('test2', 'test2@runoob.com', '1988-11-25', false),
       ('test3', 'test3@runoob.com', '1993-05-03', true);
3. 使用 SELECT 语句插入数据
3.1 插入查询结果

你可以使用 SELECT 语句从其他表中选择数据并插入到目标表中。这对于数据迁移和归档非常有用。

复制代码
INSERT INTO target_table (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM source_table
WHERE condition;

示例

假设我们有两个表 employeessenior_employees,我们想将 employees 表中年龄大于 30 的员工信息插入到 senior_employees 表中:

复制代码
INSERT INTO senior_employees (id, name, age)
SELECT id, name, age
FROM employees
WHERE age > 30;
4. 条件插入
4.1 使用 INSERT IGNORE

如果你希望在插入数据时忽略已经存在的记录(即不抛出错误),可以使用 INSERT IGNORE

复制代码
INSERT IGNORE INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

示例

复制代码
INSERT IGNORE INTO users (username, email, birthdate, is_active)
VALUES ('test', 'test@runoob.com', '1990-01-01', true);
4.2 使用 ON DUPLICATE KEY UPDATE

如果你希望在插入数据时遇到主键或唯一键冲突时更新现有记录,可以使用 ON DUPLICATE KEY UPDATE

复制代码
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...)
ON DUPLICATE KEY UPDATE
column1 = VALUES(column1),
column2 = VALUES(column2),
column3 = VALUES(column3);

示例

复制代码
INSERT INTO users (id, username, email, birthdate, is_active)
VALUES (1, 'test', 'test@runoob.com', '1990-01-01', true)
ON DUPLICATE KEY UPDATE
username = VALUES(username),
email = VALUES(email),
birthdate = VALUES(birthdate),
is_active = VALUES(is_active);
5. 使用 SET 语法插入数据
5.1 插入部分列的值

你可以使用 SET 语法来插入数据,这种方式更适用于需要明确指定列名和值的场景。

复制代码
INSERT INTO table_name
SET column1 = value1,
    column2 = value2,
    column3 = value3;

示例

复制代码
INSERT INTO users
SET username = 'test',
    email = 'test@runoob.com',
    birthdate = '1990-01-01',
    is_active = true;
6. 高级用法
6.1 使用 LOW_PRIORITY 修饰符

LOW_PRIORITY 修饰符会使 INSERT 语句延迟执行,直到没有其他客户端从表中读取数据。

复制代码
INSERT LOW_PRIORITY INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
6.2 使用 DELAYED 修饰符

DELAYED 修饰符适用于 MyISAM, MEMORYARCHIVE 表,使得 INSERT 语句立即返回,但实际插入操作可能稍后执行。

复制代码
INSERT DELAYED INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
注意事项
  1. 数据类型匹配:确保插入的数据类型与列定义一致,否则可能会导致错误。
  2. 唯一约束冲突 :插入的数据如果违反了唯一约束,可以使用 INSERT IGNOREON DUPLICATE KEY UPDATE 来处理。
  3. 性能优化 :对于大量数据的插入,可以采用批量插入的方式,并适当调整 MySQL 的配置参数,如 bulk_insert_buffer_size,以提高性能。

通过以上详细的介绍和示例,基本上能够熟练地使用 INSERT 语句在 MySQL 中插入数据。无论是基础的单行插入,还是高级的插入否则更新和数据迁移。

相关推荐
想摆烂的不会研究的研究生11 小时前
每日八股——Redis(1)
数据库·经验分享·redis·后端·缓存
码熔burning11 小时前
MySQL 8.0 新特性爆笑盘点:从青铜到王者的骚操作都在这儿了!(万字详解,建议收藏)
数据库·mysql
xiaolizi56748911 小时前
安卓远程安卓(通过frp与adb远程)完全免费
android·远程工作
阿杰1000111 小时前
ADB(Android Debug Bridge)是 Android SDK 核心调试工具,通过电脑与 Android 设备(手机、平板、嵌入式设备等)建立通信,对设备进行控制、文件传输、命令等操作。
android·adb
猫头虎11 小时前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
梨落秋霜11 小时前
Python入门篇【文件处理】
android·java·python
哈库纳玛塔塔12 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
@LetsTGBot搜索引擎机器人13 小时前
2025 Telegram 最新免费社工库机器人(LetsTG可[特殊字符])搭建指南(含 Python 脚本)
数据库·搜索引擎·机器人·开源·全文检索·facebook·twitter
计算机毕设VX:Fegn089513 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
冉冰学姐14 小时前
SSM校园排球联赛管理系统y513u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架应用·开题报告、