mysql增删改查要用事务吗_数据库的增删改查、事务与索引
数据库的增删改查、事务与索引
增删改查
一、查询(SELECT)
二、添加(INSERT)
三、删除(DELETE)
四、更改(UPDATE)
事务
一、事务的概念
二、MySQL数据库中操作事务命令
三、JDBC中使用事务
四、事务的四大特性(ACID)
索引
一、创建索引的好处
二、创建索引的坏处
三、应该在哪些列上创建索引
四、不应该在哪些列上创建索引
五、数据库索引在什么情况下失效
增删改查
一、查询(SELECT)
select 的语法:
select 列名称 from 表名称 (其中 * 代表选择显示全部的列)
Distinct (防止重复输出数据)
语法 SELECT DISTINCT 列名称 FROM 表名称
带有条件的查询 where
语法 : select 列名称 from 表名称 where 列 运算符 值
(运算符有=、<=、!=、>=、、<>、like、between)
例如:
select name,sex from empolyee where age=19 and sex="女" or name like '李%'
排序(ORDER BY)、分组(GROUP BY)
二、添加(INSERT)
语法: INSERT INTO 表的名称 values(值1,值2,值3…)
或者可以指定特定的列来进行插入数据操作
INSERT INTO table_name (列1,列2,…) VALUES (值1,值2,…)
INSERT INTO table_name (列1,列2,…) VALUES (值1,值2,…),(值3,值4),(值5,值6)
例如:
insert into empolyee (name,sex,age) values ('李四','男',21)
添加通过SELECT查询出来的数据:
insert into Employees (FirstName,LastName)/*给特定的两列添加数据,此表的主键已经设置为自增,所以不需要添加值*/
select FirstName,LastName
from Employees
where EmployeeID=1
三、删除(DELETE)
语法:DELETE FROM 表的名称 WHERE 条件
例如:
delete from empolyee where id=2
四、更改(UPDATE)
语法: update 表的名称 set 列名称=新值 where 列名称=某值
例如:
update empolyee set name='李四',sex='女' where name='张三'
事务
一、事务的概念
事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
例如:A——B转帐,对应于如下两条sql语句:
update from account set money=money+100 where name='B';
update from account set money=money-100 where name='A';
二、MySQL数据库中操作事务命令
开启事务(start transaction)
提交事务(commit)
回滚事务(rollback)
三、JDBC中使用事务
当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。 若想关闭这种默认提交方式,让多条SQL在一个事务中执行,可使用下列的JDBC控制事务语句
Connection.setAutoCommit(false);
//开启事务(start transaction)
Connection.rollback();
//回滚事务(rollback)
Connection.commit();
//提交事务(commit)
设置事务回滚点
在开发中,有时候可能需要手动设置事务的回滚点,在JDBC中使用如下的语句设置事务回滚点
Savepoint sp = conn.setSavepoint();
Conn.rollback(sp);
Conn.commit();
//回滚后必须通知数据库提交事务
四、事务的四大特性(ACID)
1. 原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。 比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败
2.一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
以转账为例子,A向B转账,假设转账之前这两个用户的钱加起来总共是2000,那么A向B转账之后,不管这两个账户怎么转,A用户的钱和B用户的钱加起来的总额还是2000,这个就是事务的一致性。
3.隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
4.持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
索引
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据.索引的实现通常使用B树和变种的B+树(mysql常用的索引就是B+树) 除了数据之外,数据库系统还维护为满足特定查找算法的数据结构,这些数据结构以某种方式引用数据.这种数据结构就是索引
一、创建索引的好处
通过创建索引,可以在查询的过程中,提高系统的性能
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
在使用分组和排序子句进行数据检索时,可以减少查询中分组和排序的时间
二、创建索引的坏处
创建索引和维护索引要耗费时间,而且时间随着数据量的增加而增大
索引需要占用物理空间,如果要建立聚簇索引,所需要的空间会更大
在对表中的数据进行增加删除和修改时需要耗费较多的时间,因为索引也要动态地维护
三、应该在哪些列上创建索引
经常需要搜索的列上
作为主键的列上
经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度
经常需要根据范围进行搜索的列上
经常需要排序的列上
经常使用在where子句上面的列上
四、不应该在哪些列上创建索引
查询中很少用到的列
对于那些具有很少数据值的列.比如人事表的性别列,bit数据类型的列
对于那些定义为text,image的列.因为这些列的数据量相当大
当对修改性能的要求远远大于搜索性能时.因为当增加索引时,会提高搜索性能,但是会降低修改性能
五、数据库索引在什么情况下失效
条件中用or(这就是为什么少用or的原因)
//使用or,又想索引生效,只能将or条件中的每个列都加上索引
对于多列(复合、联合)索引,不是使用的第一部分,则不会使用索引。(最左匹配原则或者叫做最左前缀原则)
like的模糊查询以%开头,索引失效
如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不会使用索引
如果MySQL预计使用全表扫描要比使用索引快,则不使用索引
判断索引列是否不等于某个值时。‘!=’操作符
对索引列进行运算。这里运算包括±*/等运算
索引字段进行判空查询时。也就是对索引字段判断是否为NULL时
【mysql增删改查要用事务吗_数据库的增删改查、事务与索引】范围列可以用到索引(联合索引必须是最左前缀),但是范围列后面的列无法用到索引
推荐阅读
- SQL数据库的增删改查
- koa2|koa2 mysql增删改查_手把手教你基于koa2,mongoose实现增删改查
- 数据库的基本认识|MySQL数据库基本操作创建数据库增删改查
- 如何解决MySQL异常SQLSTATE [HY000](常规错误:1364字段”field_name”没有默认值)
- 如何使用MySQL Workbench将MS SQL Server数据库(从SQL Server Management Studio)迁移到MySQL
- 如何从PHP中的2个值计算百分比变化(增加和减少)
- 如何解决MySQL常规错误(1030从存储引擎得到了139错误)
- 如何使用Doctrine和Symfony 3实现Soundex搜索(在MySql中)
- 在Plesk中创建MySQL Server数据库的非增量(逻辑备份)自动备份外壳脚本(sh)
- logstash|使用Logstash将MySQL数据导入Elasticsearch