0

0

MySQL如何添加语句_MySQL插入数据与SQL语句编写教程

蓮花仙者

蓮花仙者

发布时间:2025-08-31 11:10:01

|

941人浏览过

|

来源于php中文网

原创

答案:MySQL中插入数据主要使用INSERT INTO语句,可插入单行、多行或通过SELECT从其他表导入;处理主键冲突可用INSERT IGNORE或ON DUPLICATE KEY UPDATE;大批量插入时应采用批量写入、事务控制和合理批次以提升性能。

mysql如何添加语句_mysql插入数据与sql语句编写教程

MySQL中添加数据,核心就是利用SQL的

INSERT INTO
语句。它允许你将一行或多行数据写入到指定的表中,是数据库操作中最基础也最频繁的动作之一。无论是手动录入还是程序批量导入,这条语句都是我们与数据库沟通,填充其内容的主要桥梁。

解决方案: 在MySQL里,想要往表里“塞”数据,最直接的办法就是用

INSERT INTO
。这东西说起来简单,但实际用起来,根据场景不同,还是有些讲究的。

最基本的格式,就是你明确知道要给哪些列赋值:

INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);

比如,我有一个

users
表,里面有
id
,
name
,
email
三个字段。如果我想加一个新用户:

INSERT INTO users (id, name, email)
VALUES (1, '张三', 'zhangsan@example.com');

这里有个小细节,如果你的

id
是自增(
AUTO_INCREMENT
)的,或者有默认值,你甚至可以不指定它,或者给它传
NULL
,数据库会自己处理:

-- 如果id是自增的
INSERT INTO users (name, email)
VALUES ('李四', 'lisi@example.com');

-- 或者显式传入NULL让自增机制生效
INSERT INTO users (id, name, email)
VALUES (NULL, '王五', 'wangwu@example.com');

有时候,如果你打算给表的所有列都按顺序赋值,那就可以省略列名列表,直接写

VALUES

INSERT INTO 表名
VALUES (值1, 值2, 值3, ...);

但说实话,我个人不太喜欢这种写法,因为表的结构一变,比如加了个新列,你的SQL就可能出错了。还是明确指定列名更稳妥,可读性也更好。

批量插入是另一个常用场景,尤其是从文件导入数据或者一次性处理多个请求时。MySQL允许你用一条

INSERT
语句插入多行:

INSERT INTO 表名 (列1, 列2)
VALUES
(值1_行1, 值2_行1),
(值1_行2, 值2_行2),
(值1_行3, 值2_行3),
...;

这比写多条单独的

INSERT
语句效率高得多,因为减少了客户端和服务器之间的网络往返次数。比如:

INSERT INTO products (name, price)
VALUES
('笔记本电脑', 7999.00),
('机械键盘', 599.00),
('无线鼠标', 199.00);

在实际开发中,你可能还会遇到从另一个表查询数据然后插入的情况,这时可以用

INSERT INTO ... SELECT ...

INSERT INTO new_users (name, email)
SELECT username, email_address
FROM old_users
WHERE status = 'active';

这在我做数据迁移或者数据清洗时特别好用,可以很方便地把符合条件的数据从一个地方“搬”到另一个地方。

需要特别注意的是数据类型匹配。如果你试图把一个字符串塞进一个数字列,MySQL可能会尝试转换,但如果转换失败或者不兼容,就会报错。还有就是非空约束(

NOT NULL
)、唯一约束(
UNIQUE
)和外键约束(
FOREIGN KEY
),这些都会在你插入数据时进行校验。一旦不符合,数据库会毫不留情地拒绝你的操作。所以,在编写
INSERT
语句之前,对目标表的结构和约束有个清晰的了解是至关重要的。

沁言学术
沁言学术

你的论文写作AI助理,永久免费文献管理工具,认准沁言学术

下载

MySQL插入数据时,如何处理主键冲突?

在数据库操作中,尤其是在并发环境或者数据同步时,主键(或其他唯一索引)冲突是个老生常谈的问题。你尝试插入一条记录,但它的主键值已经存在了,这时怎么办?MySQL提供了几种优雅的处理方式,远比简单地让程序报错然后回滚要灵活得多。

一种是

INSERT IGNORE
。顾名思义,它会“忽略”错误。如果插入的行会导致唯一索引(包括主键)冲突,MySQL会简单地跳过这条记录,不插入,也不报错。听起来很方便,对吧?但它的缺点也很明显:你不知道哪些数据被忽略了,除非你额外去检查受影响的行数。

INSERT IGNORE INTO products (id, name, price)
VALUES (101, '新产品A', 123.45);

如果

id
为101的记录已经存在,这条语句不会插入新数据,也不会抛出错误。对于某些日志记录或者幂等操作,这可能是一个不错的选择,但如果你需要精确控制每一条记录的插入状态,就要慎重了。

另一种,也是我个人更倾向于使用的,是

ON DUPLICATE KEY UPDATE
。这个语句强大得多。当插入操作遇到唯一索引冲突时,它不会直接失败,而是转而执行一个
UPDATE
操作,更新现有记录的某些字段。

INSERT INTO products (id, name, price)
VALUES (101, '新产品A', 123.45)
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    price = VALUES(price);

这里

VALUES(name)
VALUES(price)
指的是你尝试插入的新值。这样一来,如果
id
为101的记录不存在,就插入;如果存在,就用新值更新
name
price
。这对于实现“存在即更新,不存在即插入”(Upsert)逻辑简直是神器,省去了你先查询再判断是
INSERT
还是
UPDATE
的麻烦。我经常在缓存同步或者用户配置更新的场景下用到它,能大大简化代码逻辑。当然,用的时候也要注意,
ON DUPLICATE KEY UPDATE
只能更新那些在
INSERT
语句中提供的列,或者你可以指定其他列进行更新。

选择哪种方式,真的取决于你的业务逻辑和对数据一致性的要求。

IGNORE
简单粗暴,适合不那么在乎具体哪条被跳过的情况;
ON DUPLICATE KEY UPDATE
则提供了更精细的控制,让你能优雅地处理冲突,确保数据最终状态是你想要的。

MySQL插入大量数据时,性能优化有哪些考量?

插入大量数据,比如几十万、几百万甚至上亿条记录,这可不是简单地跑几个

INSERT
语句就能搞定的事。不加优化,轻则慢如蜗牛,重则直接把数据库搞崩。这方面,我踩过不少坑,也总结了一些经验。

首先,批量插入是王道。前面提到过,用一条

INSERT
语句插入多行数据比多条单行
INSERT
效率高得多。这是因为减少了客户端和服务器之间的网络通信开销,也减少了SQL解析、事务提交的次数。我通常会把数据分批,比如每1000到5000条记录组成一个大的
INSERT
语句。具体批次大小需要根据你的网络环境、服务器性能和数据大小进行测试。

其次,关闭自动提交(

AUTOCOMMIT
)并使用事务。默认情况下,MySQL的每个
INSERT
语句都是一个独立的事务。这意味着每次插入都会涉及到日志写入、磁盘同步等操作,开销巨大。如果在插入大量数据前,先执行`START

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

682

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

347

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

676

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

575

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

417

2024.04.29

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 4.7万人学习

Node.js 教程
Node.js 教程

共57课时 | 8.9万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号