TRANSACTION
事务必须具备的属性,简称 ACID 属性
ACID | 属性描述 |
---|---|
原子性:Atomicity | 事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行 |
一致性:Consistency | 当事务完成时,数据必须处于一致状态 |
隔离性:Isolation | 并发事务之间彼此隔离、独立,不应以任何方式依赖于或影响其他事务 |
持久性:Durability | 事务完成后,它对数据库的修改被永久保持 |
MySQL中支持事务的存储引擎
InnoDB支持事务操作
通过UNDO日志和REDO日志实现对事务的支持
UNDO日志
REDO日志
MyISAM不支持事务操作
实现事务的方式
在执行命令SET autocommit=0,禁止当前会话的自动提交后,后面的SQL语句将作为事务中的语句一同提交
开始事务
BEGIN ;
或
START TRANSACTION;
提交事务
COMMIT ;
回滚(撤销)事务
ROLLBACK ;
使用事务实现小王和小张之间的转账操作
USE paycorp;
BEGIN;
UPDATE account SET balance=balance-2000 WHERE accountName='小王';
UPDATE account SET balance=balance+2000 WHERE accountName='小张';
COMMIT;
小王和小张的总账户余额和转账前保持一致,数据库中数据从一个一致性状态更新到另一个一致性状态
默认情况下,每条单独的SQL语句视为一个事务
关闭默认提交状态后,可手动开启、关闭事务
关闭/开启自动提交
SET autocommit = 0|1;
关闭自动提交后,从下一条SQL语句开始将会开启新事务,需使用COMMIT或ROLLBACK语句结束该事务
事务尽可能简短
事务中访问的数据量尽量最少
查询数据时尽量不要使用事务
在事务处理过程中尽量不要出现等待用户输入的操作
是对数据库表中一列或多列值进行排列的一种结构
作用
大大提高数据库的检索速度
改善数据库性能
MySQL索引按存储类型分类
B-树索引(BTREE)
哈希索引(HASH)
数据存储在数据表中,而索引是创建在数据库表对象上
由表中的一个字段或多个字段生成的键组成
Indexes Use Key Values to Locate Data
(根据索引键查找定位数据行)
普通索引
唯一索引
主键索引
复合索引
全文索引
创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name (column_name [length] …);
-- 唯一索引、全文索引或空间索引,可选
如果创建索引是未指定创建索引的类型,则创建的索引为普通索引通过CREATE INDEX语句无法创建主键索引,主键索引的创建语句
删除索引
ALTER TABLE tablename ADD PRIMARY KEY(column)
删除表时,该表的所有索引同时会被删除
按照下列标准选择建立索引的列
不要使用下面的列创建索引
查询时减少使用*
返回表的全部列,不要返回不需要的列
索引应该尽量小,在字节数小的列上建立索引
WHERE 子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
避免在 ORDER BY 子句中使用表达式
根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理
查看已创建的索引信息
SHOW INDEX FROM table_name;
删除索引
DROP INDEX index_name ON table_name;
删除表时,该表的所有索引将同时被删
除删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除
如果组成索引的所有列都被删除,则整个索引将被删除
不同的人员关注不同的数据
保证信息的安全性
视图是一张虚拟表
视图中不存放数据
一个原始表,根据不同用户的不同需求,可以创建不同的视图
开发人员
最终用户
使用SQL语句创建视图
CREATE VIEW view_name
AS
使用SQL语句删除视图
DROP VIEW [IF EXISTS] view_name;
-- 删除前先判断 视图是否存在
使用SQL语句查看视图
SELECT 字段1, 字段2, …… FROM view_name;
视图中可以使用多个表
一个视图可以嵌套另一个视图,但最好不要超过3层
对视图数据进行添加、更新和删除操作会直接影响所引用表中的数据
当视图数据来自多个表时,不允许添加和删除数据
查看所有视图
USE information_schema;
SELECT * FROM views;
使用视图修改数据会有许多限制,一般在实际开发中视图仅用作查询
可能导致数据丢失的意外状况
数据备份
数据恢复
mysqldump命令——MySQL的客户端常用逻辑备份工具
mysqldump [options] database [table1,[table2]…] > [path]/filename.sql
mysqldump是DOS系统下的命令
在使用时,无须进入mysql命令行;否则,将无法执行
示例
以root账户登录到MySQL服务器,使用mysqldump命令备份hospital数据库,将SQL脚本保存到e:\hospital.sql中
mysqldump -uroot -proot hospital > e:\hospital.sql
导出的SQL脚本中两种注释
--
开头:关于SQL语句的注释信息/*!
开头, */
结尾:是关于MySQL服务器相关的注释为保证账户密码安全,命令中可不写密码
但是,参数
-p
必须有,回车后根据提示写密码
常用参数选项
参数 | 描述 |
---|---|
-add-drop-table | 在每个CREATE TABLE语句前添加DROP TABLE语句,默认是打开的,可以用-skip-add-drop-table取消 |
–add-locks | 该选项会在INSERT 语句中捆绑一个LOCK TABLE 和UNLOCK TABLE 语句 |
好处:防止记录被再次导入时,其他用户对表进行的操作 | |
-t或-no-create-info | 只导出数据,而不添加CREATE TABLE语句 |
-c或–complete-insert | 在每个INSERT语句的列上加上列名,在数据导入另一个数据库时有用 |
-d或–no-data | 不写表的任何行信息,只转储表的结构 |
备份文件包含的主要信息
Navicat也可以用于导出数据库的备份脚本
在需要恢复数据库数据时,对导出的SQL备份脚本执行导入操作
mysql为DOS命令
mysql –u username –p [dbname] < filename.sql
-- –u 用户名
-- –p 数据库名
-- filename.sql 备份文件名
在执行该语句之前,必须在MySQL服务器中创建新数据库
因为导出的备份文件中只包含表的备份,而不包含创建的库的语句
因此执行导入操作时必须指定数据库名,且该数据库必须存在
除了在命令行中导入数据以外,还可以在数据库已连接状态下导入数据
source filename;
登录MySQL服务后使用
执行该命令前,先创建并选择恢复后的目标数据库
CREATE DATABASE hospitalDB; #创建数据库
USE hospitalDB; #选择要导入数据库的数据库
source e:\hospital.sql #导入数据
# SQL脚本文件后面不要加字符 ;
Navicat中导入数据的操作步骤
运行SQL文件…
快捷菜单项开始
按钮开始导入数据BCSP-玄子JAVA开发之JAVA数据库编程CH-06_MySQL数据库企业开发技术 3.27