mysql插入多条数据的方法:1、使用“INSERT INTO 表名 字段列表 VALUES (值1) … , (值n);”语句插入数据;2、使用“INSERT INTO 表名 SET 字段1=值1,字段2= 值2,…”语句插入数据。

数据库与表创建成功以后,需要向数据库的表中插入数据。在 MySQL 中可以使用 INSERT 语句向数据库已有的表中插入一行或者多行元组数据。

基本语法

INSERT 语句有两种语法形式,分别是 INSERT…VALUES 语句和 INSERT…SET 语句。

1) INSERT…VALUES语句

INSERT VALUES 的语法格式为:INSERT INTO [ [ , … ] ]

VALUES (值1) [… , (值n) ];

语法说明如下。:指定被操作的表名。

:指定需要插入数据的列名。若向表中的所有列插入数据,则全部的列名均可以省略,直接采用 INSERTVALUES(…) 即可。

VALUES 或 VALUE 子句:该子句包含要插入的数据清单。数据清单中数据的顺序要和列的顺序相对应。

2) INSERT…SET语句

语法格式为:INSERT INTO

SET = ,

= ,

此语句用于直接给表中的某些列指定对应的列值,即要插入的数据的列名在 SET 子句中指定,col_name 为指定的列名,等号后面为指定的数据,而对于未指定的列,列值会指定为该列的默认值。

由 INSERT 语句的两种形式可以看出:使用 INSERT…VALUES 语句可以向表中插入一行数据,也可以插入多行数据;

使用 INSERT…SET 语句可以指定插入行中每列的值,也可以指定部分列的值;

INSERT…SELECT 语句向表中插入其他表的数据。

采用 INSERT…SET 语句可以向表中插入部分列的值,这种方式更为灵活;

INSERT…VALUES 语句可以一次插入多条数据。

在 MySQL 中,用单条 INSERT 语句处理多个插入要比使用多条 INSERT 语句更快。

当使用单条 INSERT 语句插入多行数据的时候,只需要将每行数据用圆括号括起来即可。

向表中的全部字段添加值

在 test_db 数据库中创建一个课程信息表 tb_courses,包含课程编号 course_id、课程名称 course_name、课程学分 course_grade 和课程备注 course_info,输入的 SQL 语句和执行结果如下所示。mysql> CREATE TABLE tb_courses

-> (

-> course_id INT NOT NULL AUTO_INCREMENT,

-> course_name CHAR(40) NOT NULL,

-> course_grade FLOAT NOT NULL,

-> course_info CHAR(100) NULL,

-> PRIMARY KEY(course_id)

-> );

Query OK, 0 rows affected (0.00 sec)

向表中所有字段插入值的方法有两种:一种是指定所有字段名;另一种是完全不指定字段名。

【实例 1】在 tb_courses 表中插入一条新记录,course_id 值为 1,course_name 值为“Network”,course_grade 值为 3,info 值为“Computer Network”。

在执行插入操作之前,查看 tb_courses 表的SQL语句和执行结果如下所示。mysql> SELECT * FROM tb_courses;

Empty set (0.00 sec)

查询结果显示当前表内容为空,没有数据,接下来执行插入数据的操作,输入的 SQL 语句和执行过程如下所示。mysql> INSERT INTO tb_courses

-> (course_id,course_name,course_grade,course_info)

-> VALUES(1,'Network',3,'Computer Network');

Query OK, 1 rows affected (0.08 sec)

mysql> SELECT * FROM tb_courses;

+-----------+-------------+--------------+------------------+

| course_id | course_name | course_grade | course_info |

+-----------+-------------+--------------+------------------+

| 1 | Network | 3 | Computer Network |

+-----------+-------------+--------------+------------------+

1 row in set (0.00 sec)

可以看到插入记录成功。在插入数据时,指定了 tb_courses 表的所有字段,因此将为每一个字段插入新的值。

INSERT 语句后面的列名称顺序可以不是 tb_courses 表定义时的顺序,即插入数据时,不需要按照表定义的顺序插入,只要保证值的顺序与列字段的顺序相同就可以。

【实例 2】在 tb_courses 表中插入一条新记录,course_id 值为 2,course_name 值为“Database”,course_grade 值为 3,info值为“MySQL”。输入的 SQL 语句和执行结果如下所示。mysql> INSERT INTO tb_courses

-> (course_name,course_info,course_id,course_grade)

-> VALUES('Database','MySQL',2,3);

Query OK, 1 rows affected (0.08 sec)

mysql> SELECT * FROM tb_courses;

+-----------+-------------+--------------+------------------+

| course_id | course_name | course_grade | course_info |

+-----------+-------------+--------------+------------------+

| 1 | Network | 3 | Computer Network |

| 2 | Database | 3 | MySQL |

+-----------+-------------+--------------+------------------+

2 rows in set (0.00 sec)

使用 INSERT 插入数据时,允许列名称列表 column_list 为空,此时值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同。

【实例 3】在 tb_courses 表中插入一条新记录,course_id 值为 3,course_name 值为“Java”,course_grade 值为 4,info 值为“Jave EE”。输入的 SQL 语句和执行结果如下所示。mysql> INSERT INTO tb_courses

-> VLAUES(3,'Java',4,'Java EE');

Query OK, 1 rows affected (0.08 sec)

mysql> SELECT * FROM tb_courses;

+-----------+-------------+--------------+------------------+

| course_id | course_name | course_grade | course_info |

+-----------+-------------+--------------+------------------+

| 1 | Network | 3 | Computer Network |

| 2 | Database | 3 | MySQL |

| 3 | Java | 4 | Java EE |

+-----------+-------------+--------------+------------------+

3 rows in set (0.00 sec)

INSERT 语句中没有指定插入列表,只有一个值列表。在这种情况下,值列表为每一个字段列指定插入的值,并且这些值的顺序必须和 tb_courses 表中字段定义的顺序相同。

注意:虽然使用 INSERT 插入数据时可以忽略插入数据的列名称,若值不包含列名称,则 VALUES 关键字后面的值不仅要求完整,而且顺序必须和表定义时列的顺序相同。如果表的结构被修改,对列进行增加、删除或者位置改变操作,这些操作将使得用这种方式插入数据时的顺序也同时改变。如果指定列名称,就不会受到表结构改变的影响。

向表中指定字段添加值

为表的指定字段插入数据,是在 INSERT 语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。

【实例 4】在 tb_courses 表中插入一条新记录,course_name 值为“System”,course_grade 值为 3,course_info 值为“Operating System”,输入的 SQL 语句和执行结果如下所示。mysql> INSERT INTO tb_courses

-> (course_name,course_grade,course_info)

-> VALUES('System',3,'Operation System');

Query OK, 1 rows affected (0.08 sec)

mysql> SELECT * FROM tb_courses;

+-----------+-------------+--------------+------------------+

| course_id | course_name | course_grade | course_info |

+-----------+-------------+--------------+------------------+

| 1 | Network | 3 | Computer Network |

| 2 | Database | 3 | MySQL |

| 3 | Java | 4 | Java EE |

| 4 | System | 3 | Operating System |

+-----------+-------------+--------------+------------------+

4 rows in set (0.00 sec)

可以看到插入记录成功。如查询结果显示,这里的 course_id 字段自动添加了一个整数值 4。这时的 course_id 字段为表的主键,不能为空,系统自动为该字段插入自增的序列值。在插入记录时,如果某些字段没有指定插入值,MySQL 将插入该字段定义时的默认值。

使用 INSERT INTO…FROM 语句复制表数据

INSERT INTO…SELECT…FROM 语句用于快速地从一个或多个表中取出数据,并将这些数据作为行数据插入另一个表中。

SELECT 子句返回的是一个查询到的结果集,INSERT 语句将这个结果集插入指定表中,结果集中的每行数据的字段数、字段的数据类型都必须与被操作的表完全一致。

在数据库 test_db 中创建一个与 tb_courses 表结构相同的数据表 tb_courses_new,创建表的 SQL 语句和执行过程如下所示。mysql> CREATE TABLE tb_courses_new

-> (

-> course_id INT NOT NULL AUTO_INCREMENT,

-> course_name CHAR(40) NOT NULL,

-> course_grade FLOAT NOT NULL,

-> course_info CHAR(100) NULL,

-> PRIMARY KEY(course_id)

-> );

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM tb_courses_new;

Empty set (0.00 sec)

【实例 5】从 tb_courses 表中查询所有的记录,并将其插入 tb_courses_new 表中。输入的 SQL 语句和执行结果如下所示。mysql> INSERT INTO tb_courses_new

-> (course_id,course_name,course_grade,course_info)

-> SELECT course_id,course_name,course_grade,course_info

-> FROM tb_courses;

Query OK, 4 rows affected (0.17 sec)

Records: 4 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM tb_courses_new;

+-----------+-------------+--------------+------------------+

| course_id | course_name | course_grade | course_info |

+-----------+-------------+--------------+------------------+

| 1 | Network | 3 | Computer Network |

| 2 | Database | 3 | MySQL |

| 3 | Java | 4 | Java EE |

| 4 | System | 3 | Operating System |

+-----------+-------------+--------------+------------------+

4 rows in set (0.00 sec)

php mysql 插入多条数据_mysql如何插入多条数据?相关推荐

  1. mysql插10万条数据_MySQL数据库插入100w条数据要花多久?

    MySQL数据库插入100w条数据要花多久? 1.多线程插入(单表) 2.多线程插入(多表) 3.预处理SQL 4.多值插入SQL 5.事务(N条提交一次) # 多线程插入(单表) 问:为何对同一个表 ...

  2. mysql日志恢复数据_Mysql 通过binlog日志恢复数据

    Binlog日志,即binary log,是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即主节点维护一个binlog日志文件,从节点从binlog中同步数据,也可以通过binlog日 ...

  3. mysql 导入主键冲突_MySQL 处理插入过程中的主键唯一键重复值的解决方法

    本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE:接下来就分别看看这三种方式的处理办法. IG ...

  4. mysql如何添加整行数据_mysql如何添加多行数据?

    mysql可以通过insert语句一次性插入多条记录,但是这一条语句是个事务,所以要成功都成功,要失败都失败.语句中每条记录都是通过()括起来.且该语法是mysql自身的,不是标准语法,无法通用. m ...

  5. mysql 删除不了数据_MySQL不建议delete删除数据

    InnoDB存储架构 从这张图可以看到,InnoDB存储结构主要包括两部分:逻辑存储结构和物理存储结构. 逻辑上是由表空间tablespace -> 段segment或者inode -> ...

  6. mysql选出重复的字段_mysql查询表里的重复数据方法:

    INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test  ...

  7. mysql 拼接sql批量执行_MySql 学习之 一条更新sql的执行过程

    上一篇文章咱们说了一条查询sql的执行过程. https://zhuanlan.zhihu.com/p/156155783​zhuanlan.zhihu.com 今天咱们说说一条更新sql的执行过程. ...

  8. mysql 删除重复数据_MySQL查找和删除重复数据

    如何从MySQL中删除重复数据,只保留一条呢? 假设有如下一个数据表: mysql > SELECT * FROM users; +----+--------+ | id | name | +- ...

  9. mysql中如何去除重复数据_mysql数据库如何去除重复数据

    mysql数据库去除重复数据的方法:1.查询需要删除的记录,会保留一条记录:2.删除重复记录,只保留一条记录,代码为[delete a from test1 a, (...)as bid from t ...

  10. mysql查询表里面重复的数据_mysql查询表里的重复数据方法

    这篇文章主要介绍了mysql查询表里的重复数据方法,需要的朋友可以参考下 INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),( ...

最新文章

  1. git配置global信息
  2. 【Bootstrap】 框架 栅格布局系统设计原理
  3. excel实战应用案例100讲(十四)-Excel可直接分析的大数据语义层
  4. 关于vue中Cannot read property 'length' of undefined 导致:数据不显示问题【自己经验参考】
  5. IOS图标 HTML规范,IOS用户界面(UI)设计规范图表——APP设计师必看!
  6. 酷狗php 技术题目,广州酷狗php面试题(赋答案)
  7. python计算机视觉编程——sift特征提取和ransac减少错配
  8. 用单片机c51电子秤的c语言,原创基于51单片机的电子秤设计 带源代码,原理图毕业设计论文...
  9. HDU 2000 Java 奇怪的jio
  10. iterator的用法 | reverse_iterator的封装实现
  11. 淘宝官方订单 API 接口,获取购买到的商品订单列表
  12. cassandra权威指南
  13. Snell法则的推导
  14. matlab ccd驱动,CCD常见驱动比较
  15. 20145204张亚军《网络对抗技术》恶意代码分析
  16. 《The one!》团队作业五:团队项目需求改进与系统设计
  17. layer日期和时间组件限制最大日期和 js获取昨天日期
  18. [灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划
  19. 如何快速为没有书签pdf制作书签
  20. 在CentOS 5里使用 vault.centos.org 作为yum源

热门文章

  1. string与stream互相转换
  2. 巧用margin/padidng的百分比值占位,避免闪烁
  3. Nginx 限制某 IP 在一段时间内对服务器发起请求的连接数
  4. 利用 Zabbix 监控 mysqldump 定时备份数据库是否成功
  5. Ubuntu卸载图形界面
  6. Linux 环境下安装 GitLab 与配置
  7. kibana报错:No default index pattern. You must select or create one to continue.
  8. Excel VBA 循环读取一个目录下面多个文件的内容,放到另外一个文件中
  9. 个人宏工作簿PERSONAL.XLSB 保存位置 启动加载项
  10. 调查作业时,注意 【 调查深度 】 ,以及总结 【 中间成果物 】