Mysql数据库 - 增删改
一、 Create
1. 单条插入, sql格式: insert into (列名) values(列值);
INSERT INTO test.tch_teacher ( Sex, BId, NO, NAME, IsDoublePosition, CreateDate )
VALUES ( 1, '123123123', '123123123', 'Insert', 0, NOW() );
对于自增的 Id, 是不需要写的, 数据库会自动生成, 但是如果一不小心写上去了, 只要你的Id值, 在数据库中不存在, 是可以插入进去的.
在mysql中, 就算你插入的 id 为负数, 也是可以插入成功的. 如果数据库中已存在你想插入的 id 值, 则会直接报错.

2. 多条插入, sql格式: insert into (列名) values(列值),(列值),(列值);
INSERT INTO test.tch_teacher ( Sex, BId, NO, NAME, IsDoublePosition, CreateDate )
VALUES
( 2, '123123123', '123123123', 'Insert', 0, NOW() ),
( 3, '123123123', '123123123', 'Insert', 0, NOW() ),
( 4, '123123123', '123123123', 'Insert', 0, NOW() );

新增多条的时候, 也可以循环调用单条插入语句去插入, 不过, 这种方式并不推荐使用, 因为, 这种方式, 消费更多性能和时间.
3. 表插入
可以新建一张临时表: tch_teacher_temp

CREATE TABLE `tch_teacher_temp` (
`Sex` smallint(6) DEFAULT NULL,
`BId` varchar(36) CHARACTER SET utf8 DEFAULT NULL,
`No` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
`Name` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
`IsDoublePosition` bit(1) DEFAULT NULL,
`CreateDate` datetime DEFAULT NULL,
PRIMARY KEY (`Id`)
)

这里有一个取巧的方式, 来获取建表sql
show create table tch_teacher;
然后修改一下表名,删除主键(也可不删)就可以了.
insert into tch_teacher (Sex, BId, NO, NAME, IsDoublePosition, CreateDate)
select * from tch_teacher_temp;
-- 或者
insert into tch_teacher (Sex, BId, NO, NAME, IsDoublePosition, CreateDate)
select Sex, BId, NO, NAME, IsDoublePosition, CreateDate from tch_teacher_temp;
4. 性能比较
我粗略测试了一下, 十万级和百万级的数据量, 插入1000条数据. tch_teacher表, 我建了三个索引:Sex, BId, IsDoublePosition
1). 不使用事务, 一条一条插入, 循环以下这条语句, 1000次
for (int i = 0; i < 1000; i++)
{
var param = new { BId = Guid.NewGuid(), Name = names[ran.Next(9)] + names[ran.Next(9)] + i, IsDoublePosition = i % 2, CreateDate = DateTime.Now, Sex = i % 2, No = ran.Next(100000, 9999999) };
conn.Execute(insertSql, param);
}
2). 在使用事务的情况下, 还是循环这条语句, 不同的是, 在循环结束处, 加入事务提交(这次的插入是在上次的数据量基础上, 也就是说, 这次插入前, 数据比上次多1000条)

var tran = conn.BeginTransaction();
for (int i = 0; i < 1000; i++)
{
var param = new { BId = Guid.NewGuid(), Name = names[ran.Next(9)] + names[ran.Next(9)] + i, IsDoublePosition = i % 2, CreateDate = DateTime.Now, Sex = i % 2, No = ran.Next(100000, 9999999) };
conn.Execute(insertSql, param, tran);
}
tran.Commit();

3). 拼接sql语句的情况下, 由于是"(),(),();"格式的, 所以参数我全做入sql中了, 这里参数化的方式, 不好做. (这次的插入也是在上次的数据量基础上, 也就是说, 这次插入前, 数据比上次多1000条)

StringBuilder sb = new StringBuilder("insert into tch_teacher(BId,Sex,No, Name, IsDoublePosition, CreateDate) values ", 10000);
for (int i = 0; i < 1000; i++)
{
sb.Append(string.Format("('{0}', {1}, '{2}', '{3}', {4}, '{5}'),",
Guid.NewGuid(),
i % 2,
ran.Next(100000, 9999999),
names[ran.Next(9)] + names[ran.Next(9)] + i,
i % 2,
DateTime.Now.ToString("yyyy-MM-dd")));
}
sb.Remove(sb.Length - 1, 1);
conn.Execute(sb.ToString());

这种方式, 有两个不好的地方, 一个是不能参数化, 另一个是如果插入数据较多, 会导致sql语句太长, 所以并不推荐
4). 建临时表的方式, 这里我是事先吧临时表建好的, 在代码里面就没有建了

var insertSql = @"insert into tch_teacher_temp(BId,Sex,No, Name, IsDoublePosition, CreateDate) values(@BId, @Sex, @No, @Name, @IsDoublePosition, @CreateDate);";
var tran = conn.BeginTransaction();
for (int i = 0; i < 1000; i++)
{
var param = new { BId = Guid.NewGuid(), Name = names[ran.Next(9)] + names[ran.Next(9)] + i, IsDoublePosition = i % 2, CreateDate = DateTime.Now, Sex = i % 2, No = ran.Next(100000, 9999999) };
conn.Execute(insertSql, param, tran);
}
conn.Execute(@"insert into tch_teacher (Sex, BId, NO, NAME, IsDoublePosition, CreateDate) select Sex, BId, NO, NAME, IsDoublePosition, CreateDate from tch_teacher_temp;", null, tran1);
tran.Commit();

这种方式, 每次都要新建表, 删除表. 也是挺麻烦的, 这里的测试, 就没有包含新建表和删除表了
结果:
十万(ms) 百万(ms)
sql拼接 230 359
事务提交 412 511
临时表 661 1424
一条一条 27606 36620
除了一条一条提交方式, 其他的在时间上, 还是能接受的, 但是推荐使用第2种, 事务提交方式, 易用, 清晰, 省事.
二、Delete
删除就相对简单多了. 删除sql的格式: delete from 表名 where 条件
删除的时候, 如果不加where条件, 就是删除整张表的数据, 相当于 where 1=1 ;
delete from tch_teacher where id=1;
这是一条最简单的语句了.
删除的时候, 对于主键的自增没有影响. 比如主键为 1,2,3
这时候删除了3, 再插入一条数据, 主键为从4开始.
如果想要让主键又从1开始的话, 需要使用truncate
truncate table tch_teacher ;
这样, 表回归初始状态.
有时候, 通过where查找后, 能得出很多条数据, 但是我只想删除其中的前几条, 那怎么办呢. 有办法
delete from tch_teacher where isDoublePosition=1 order by id limit 6;
这条语句, 就是删除 满足条件的, 前6条数据
三、Update
sql格式: update 表名 set 列=值 where 条件
update的where条件也是可以不加的, 不加的情况下, 修改的就是全部数据.
update tch_teacher set name='黑茶' where id=3;
修改的时候, 也是可以通过连表的方式, 去修改数据的.
update tch_teacher , tch_contact set tch_teacher.`Name`='红茶' where tch_teacher.Id=tch_contact.TId and tch_contact.Id=1003;
Mysql数据库 - 增删改的更多相关文章
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- MySQL数据库(增删改查语句)
MySQL数据库(增删改查语句)一.登录数据库:----> mysql -uroot -proot;(对应用户名和密码)二.SQL语句: 数据定义语言DDL 用来定义数据库.表.列,关 ...
- python操作mysql数据库增删改查的dbutils实例
python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...
- Asp.Net操作MySql数据库增删改查
Asp.Net操作MySql数据库增删改查,话不多说直接步入正题.git源码地址:https://git.oschina.net/gxiaopan/NetMySql.git 1.安装MySQL数据库 ...
- Python实现mysql数据库增删改查
利用python操作mysql数据库用法简单,环境配置容易,本文将实现对库增.删.改.查的简易封装! 1. 环境配置 安装第三方包 ,导入模块 mysql.connector pip inst ...
- jsp-2 简单的servlet连接mysql数据库 增删改查
连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...
- 安卓版php服务器的mysql数据库增删改查简单案例
界面: index.php文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- python2.7入门---操作mysql数据库增删改查
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: G ...
- MySQL数据库增删改查等常用命令介绍
MySQL可以说是最常用的小型数据库,加上现在越来越流行的分布式架构,哪怕是一般的中大型项目也可以用MySQL来进行部署. 数据库的操作最常用的就是增删改查,还有一些切换数据库等操作.以下命令不加说明 ...
- Golang原生sql操作Mysql数据库增删改查
Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...
随机推荐
- windows7命令帮助大全
有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.BCDEDIT 设置启动数据库 ...
- DevOps的基本原则与介绍
DevOps的基本原则与介绍 DevOps这个术语是developer与operations的合并简写.实现还有QA.DevOps描述与精简软件交付流程,在今天已经开始广泛的使用.强调从生 ...
- entityframework学习笔记--007-实体数据建模基础之继承关系映射TPT
Table per Type Inheritance (TPT)建模 1.假设你有两张表与一张公共的表密切相关,如图7-1所示,Businiss表与eCommerce表.Retail表有1:0...1 ...
- 菜鸟快飞之JavaScript对象、原型、继承(一)
有前辈说过,在JavaScript中,一切皆对象.由此可见,作为JavaScript的核心之一,对象是有多么重要.虽然今天走亲戚有点累,但还是得写写这个对象,免得吃几天好的,就又忘光了. 1.创建对象 ...
- 初探React,将我们的View标签化
前言 我之前喜欢玩一款游戏:全民飞机大战,而且有点痴迷其中,如果你想站在游戏的第一阶梯,便需要不断的练技术练装备,但是腾讯的游戏一般而言是有点恶心的,他会不断的出新飞机.新装备.新宠物,所以,很多时候 ...
- iOS之17个提升iOS开发效率的必用工具
时间就是金钱.编码效率的提升意味着更多的收入.可是当我们的开发技巧已经到达一定高度时,如何让开发效率更上一层楼呢?答案就是使用开发工具!在这篇文章中,我会向你介绍一些帮助我提升编码速度和工作效率的工具 ...
- ListView之点击展开菜单
一.概述 ListView点击item显示菜单是要实现这样的效果: 需要实现的逻辑如下: 1)点击一个普通item,展开当前菜单,同时关闭其他菜单 2)点击一个已展开的菜单,隐藏当前菜单 3)将展开菜 ...
- 如何写出高质量的技术博客 这边文章出自http://www.jianshu.com/p/ae9ab21a5730 觉得不错直接拿过来了 好东西要大家分享嘛
如何写出高质量的技术博客?答案是:如果你想,就一定能写出高质量的技术博客.看起来很唯心,但这就是事实.有足够愿力去做一件目标明确,有良好反馈系统的事情往往很简单.就是不停地训练,慢慢地,你自己 ...
- SQL Server中删除重复数据
delete from A ) )
- JavaScript基本知识
如何把 JavaScript 放入 HTML 页面 如果需要把一段 JavaScript 插入 HTML 页面,我们需要使用 <script> 标签(同时使用 type 属性来定义脚本语言 ...