当前位置:首页 > 编程技术 > 正文内容

MySQL 添加数据 insert 命令及优化

yc8881年前 (2023-01-21)编程技术358

1. insert 语法格式


完整格式

insert [into] 表名[字段名1[, 字段名2]] value[s](值1, 值2),(值3, 值4);

省略字段名

省略字段名时,必须依次添加所有段的值

insert [into] 表名 value(值1, 值2[, ...]);

只添加一条数据时,也可以使用 insert ... set 命令

此方式无法插入空值

insert into 表名 set 字段名1=值[,字段名2=值];

2. insert 使用示例


a. 省略字段名

CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID,主键且自增',  `nickname` varchar(60) DEFAULT NULL COMMENT '用户昵称',  `gender` tinyint(1) DEFAULT NULL COMMENT '性别',  `age` mediumint(9) DEFAULT NULL COMMENT '年龄',  `status` tinyint(1) DEFAULT '1' COMMENT '状态 0 关闭 1 开启 默认为 1',  `create_time` int(11) DEFAULT NULL COMMENT '注册时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';

特别注意:因为字段id会自动增长,设置为null即可

如果没有写出所有字段的值,会出现以下错误

1136 - Column count doesn’t match value count at row 1(列计数与行的值计数不匹配)

insert into user value(null, '张三', 1, 20, null, 1602295286);

b. 给指定的字段添加数据,则没有被指定的字段必须有默认值

CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID,主键且自增',  `nickname` varchar(60) NOT NULL COMMENT '用户昵称',  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 0 关闭 1 开启 默认为 1',  `create_time` int(11) DEFAULT NULL COMMENT '注册时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';

没有默认值的字段必须给值:nickname 字段设置了 not null 且没有设置 default

insert into user(`status`, `create_time`) value(1, 1602295286);

c. 一次添加多条数据

CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID,主键且自增',  `nickname` varchar(60) NOT NULL COMMENT '用户昵称',  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 0 关闭 1 开启 默认为 1',  `create_time` int(11) DEFAULT NULL COMMENT '注册时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
insert into user(`nickname`, `status`) value('张大民', 1), ('小新', 0), ('小刚同学', 1);

d. 添加一条数据的两种写法

CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID,主键且自增',  `nickname` varchar(60) NOT NULL COMMENT '用户昵称',  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 0 关闭 1 开启 默认为 1',  `create_time` int(11) DEFAULT NULL COMMENT '注册时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
insert into user(`nickname`, `status`) value('小王', 1);
insert into user set `nickname` = '大王', `status` = '0';

3. insert 常见用法


不指定字段名,所有字段必须给值

insert into user value(null, '张三', '123456', '男', 20, 1602295286);

into 可以省略,但是一般都不省略

insert user value(null, '张三', '123456', '男', 20, 1602295286);

指定部分字段添加,没有被指定的字段 要么会自动增长,要么允许为 null,要么有默认值

insert into user(`nickname`, `password`, `gender`, `age`) value('张三', '123456', '男', 20);

添加一条数据时也可以用 insert ... set

insert into user set `nickname` = '大王', `status` = '0';

添加多条数据

insert into user(`nickname`, `status`) value('张大民', 1), ('小新', 0), ('小刚同学', 1);

4. 优化 insert 语句


当进行数据的 insert 操作时,可以考虑以下几种优化方案

方案一:

如果需要同时对一张表插入很多行数据时,应该尽量使用多个值的 insert 语句,这种方式将大大缩减客户端与数据库之间的连接、关闭等消耗,使得效率比分开执行的单个 insert 语句快

原始方式: 使用多个 insert 语句

insert into `user` values(1, 'Tom');insert into `user` values(2, 'Cat');insert into `user` values(3, 'Herry');

优化后的方案为: 一个 insert 语句插入多个值

insert into `user` values(1, 'Tom'),(2, 'Cat'),(3, 'Herry');

方案二:

数据的有序插入: 能有序应尽量有序插入,可以降低数据库频繁构建索引次数,进而提高效率

原始方式: 主键索引值大小参差不齐,导致插入数据后会频繁构建索引,效率较低

insert into `user` values(4, 'Rose');insert into `user` values(3, 'Herry');insert into `user` values(5, 'Tim');insert into `user` values(1, 'Tom');<spa

本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://www.10zhan.com/biancheng/10412.html

标签: MySQL
分享给朋友:

“MySQL 添加数据 insert 命令及优化” 的相关文章

【说站】Thymeleaf报错Error resolving template “XXX”

【说站】Thymeleaf报错Error resolving template “XXX”

修改了一下开源项目的目录结构访问突然报错Error resolving template “XXX”可能原因有如下三种:第一种可能:原因:在使用springboot的过程中,如果使用thymeleaf...

【说站】用一句话就可以去除宝塔面板操作上的二次验证

【说站】用一句话就可以去除宝塔面板操作上的二次验证

用过宝塔的朋友应该都会发现,现在宝塔面板有些鸡肋的功能,删除文件、删除数据库、删除站点等操作都需要做计算题!不仅加了几秒的延时等待,还无法跳过!这时候就会有朋友在想,如何去除宝塔面板的二次验证,此篇文...

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

这篇文章主要介绍了详解Centos8 配置静态IP的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来学习一下!1. 查看自己的网关地址点击虚...

【说站】利用Webhook实现Java项目自动化部署

【说站】利用Webhook实现Java项目自动化部署

用webhook就能实现Java项目自动部署,其实原理很简单。费话不多说,直接往下看教程。1. 创建gitee仓库并初始化2. 在linux安装git3. 在宝塔的软件的商店里下载Webhook4....

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

今天在安装MySQL时出现starting the server失败,经过查询分析得出以下结论,记录一下操作步骤。原因分析:如果电脑是第一次安装MySQL,一般不会出现这样的报错。如下图所示。star...

【说站】vagrant实现linux虚拟机的安装并配置网络

【说站】vagrant实现linux虚拟机的安装并配置网络

一、VirtualBox的下载和安装1、下载VirtualBox官网下载:https://www.virtualbox.org/wiki/Downloads我的电脑是Windows的,所以下载Wind...