MySQl 5 事务
事务
要么都执行 要么不执行
事务原则:ACID 原子性 一致性 隔离性 持久性 (幻读 脏读)
隔离性:多事务并发访问,数据库为每一个用户开启事务,不被其他事务所扰
一致性:事务前后数据一致
原子性:要么都成功 要么都失败
持久性:事务提交 就不可逆
脏读:一个事务读取了另一个事务未提交的事务
不可重复读:在一个事务内读取表中的数据,多次结果不同(不一定是错误)
幻读:一个事务读取了别的事务插入的数据,导致前后不一致
set autocommit=0 /*关闭*/
set autocommit=1 /*开启*/ 默认 可以手动关闭
-----事务开启----
START TRANSACTION 标记事务开始 从这个之后的sql都在同一个事务
insert xx
----------提交------------------------
commit
---------回滚-----------------
rollback
----------------------事务结束-------------------
set autocommit=1 -----------开启自动提交
-------了解
savefoint 保存点
rollback to savepoint 保存点名 -----回滚到保存点
release savapoint 保存点名 ----撤销保存点·
索引
MySQL官方对索引的定义为:索引是帮助mysql高效获取数据结构的 提取句子主干 索引就是数据结构
索引的分类:
主键索引:唯一标识 主键不重复 只有一个列作为主键(PRIMARY KEY)
唯一索引:避免重复的列出现,唯一索引可以重复(UNIQUE KEY)
常规索引:默认的,index key关键字设置
全文索引:特定的数据库引擎下才有 MyISAM(fullTEXT)
快速定位数据
索引原则:
索引不是越多越好
不要对变动的数据加索引
小数据量的表不需要加
索引一般加在常用来查询的字段上
权限管理和备份
用户管理
SQL可视化管理
用户表: mysql。user
-------创建用户
create user kuagshen identified by ‘123456’
----------修改密码(修改当前用户密码)
set password=password(‘12346’)
----------修改指定用户密码
set password for 狂神=password(‘12346’)
-----------重命名
rename user 狂神 to 狂神2
-----------授权
all privileges 除了授权都能干
grant all privileges on *.* to kuangshen2
查询权限
show grants for kaungshen2 查看指定用户权限
show grants for root@localhost
----root用户权限 : grant all privileges on*。* to'@'localhost‘ with grant option
---撤销权限 remove 哪些权限,在哪个撤销,给谁撤销
remove all privileges on *。* from kuangshen2
----删除用户
Drop user kuangshen
Mysql备份
保证重要的数据不丢失
数据转移
1.直接拷贝物理磁盘
2.可视化工具
3.命令行导出 mysqdump ss
规范数据库设计
当数据库比较复杂时 我们就需要设计了
糟糕的数据库设计
数据冗余 浪费空间
数据库插入和删除都 会麻烦,异常、
良好的数据库设计
节省内存空间
保证数据库的完整性
方便开发系统
软件开发中,关于数据库的设计
分析需求:分析业务和需要处理的数据库需求
概要设计:设计关系图 er
三大范式:
信息重复
更新异常 插入异常 删除异常
第一范式: 原子性 保证每一列不可再分
第二范式:满足第一范式 每张表一件事
第三范式:满足第一 第二 第三范式每一列都和主键直接相关 不能间接相关