MySQL 添加数据 insert 命令及优化
2023-06-13 09:17:01 时间
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
相关文章
- 构建MySQL数据字典的必要性(mysql数据字典工具)
- MySQL处理大数据的去重策略(mysql大数据去重)
- 横向扩展MySQL 分库技术实现横向扩展(mysql分库实现)
- MySQL优化:快速查询语句提升性能(mysql优化查询语句)
- MySQL 文件存储:让每一项数据都安全保存(mysql存入文件)
- 概括MySQL数据导出实用技巧(mysql导出一句话)
- MySQL优化表:轻松实现数据运算速度快(mysql优化表)
- 驱动qt编译MySQL驱动程序:从入门到精通(qt编译mysql)
- 类型精通MySQL中的二进制数据类型(mysql二进制数据)
- MySQL中的二进制储存系统(mysql二进制数据)
- 提高效率!MySQL调试触发器技巧分享(mysql调试触发器)
- 如何通过root用户启动MySQL(root启动mysql)
- 安装MySQL服务の前に必要なコマンド概要(安装mysql服务命令)
- MySQL镜像:提高数据传输速度和备份效率(mysql镜像)
- MySQL实现:行数据变列式查询(mysql行变列)
- MySQL排错指南:快速实现故障解决免费下载(mysql排错指南下载)
- MySQL安装失败,困惑不已(mysql 安装不上)
- C语言提升MySQL数据库性能指南(c 与mysql数据性能)
- MySQL中用FROM关键字查询主表数据(mysql中from主表)
- MySQL中DIS命令简单而又强大的数据库管理工具(mysql 中dis)
- MySQL中删除数据删除数据表中的记录的方法和注意事项(mysql中delect)
- 破解MySQL利用CD命令进入MySQL(cd命令进入mysql)
- 轻松实现MySQL去重简单方法详解(mysql中去除重复值)
- MySQL出现1130错误的解决办法(mysql中出现1130)
- MySQL存储多语言数据的首选数据库系统(mysql 一个汉字多岁)
- MySQL数据补0,保证位数完整(mysql不够位数的补0)
- 如何安装MySQL下载好后怎样操作(mysql下载好怎样安装)
- 极致速度MySQL实现上亿数据快速同步(mysql上亿数据同步)