# mysql高级:视图、事务、索引
* 视图
* 事务
* 索引
* 账户管理
* 主从
## 1.视图
动态抽象出虚拟表,是为了适应数据库的改动升级,方便查数据,相当于函数,封装,重用
create view view_name as SQL查询语句
NAT 路由器 iTerm
视图不能改数据,提高了安全性
让数据更清晰
每查一次都会重复执行一次重构视图,会降低效率,有的公司禁止使用视图
删除视图,drop view view_name
## 2.事务
python操作mysql就默认开启了事务,所以才需要conn.commit()
四个原则特性ACID,面试笔试重要
事务是操作序列,要么都执行完,要么都不执行完,是一个不可分割的工作单位
原子、一致、隔离、持久;
打包一致性数据操作在一个事务中,任何一个操作失败,回滚所有的操作步骤;
### 步骤
* start transaction/begin
* 。。。SQLS 数据操作s
* commit
错误回滚就是rollback;
***
A:原子性:事务被视为不可分割的最小工作单位
C:一致性:数据库总是从一个状态到另一个状态,如果成功两张表的状态是一致的,不成功也是一致的;就像转账,不会因为中途发生故障一边扣了钱,一边没有增加余额
I:隔离性:给数据上了锁,一个事务在最终提交前,对其他事务是不可见的。看到的还是未改动状态,上了锁,别的改动要等这个锁;就想12306抢票
D:持久性:一旦事务提交,会永久保存到数据库里。数据库保存到硬盘里,就算断电也不会改变
**
## 3.索引
面试重要,为了解决数据库数据量较大,查找变得慢
是一种特殊的数据结构(文件),都存的是其他的数据的引用,包含了对表里所有记录的引用指针,放在了数据表里
好比一本书的目录,能加快数据库的查找速度
B-tree:完全二叉树,把数据分段,分为三段,分段查询,一下子就去除了百分之90的无效数据
B-tree:完全二叉树一种(叶节点右边不允许为空),左边的节点总是小于右边的节点;
### 索引的使用
查看:show index from table_name;
创建:create index index_name on table_name(字段名称(长度));
删除:drop index index_name on table_name;
表的主键和外键都是索引
建立索引会影响更新和插入的速度,所以都是用来查询就可建立索引,如果更新频率高就不要建
## 4.账户管理
权限的管理
### 4.1授予权限
%任何地方登录
mysql表里存储管理用户信息
authentication_string字段是密码
创建用户,给予权限:
grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码';
### 4.2远程连接
mysql -uxxx -p -hxxx
## 5.主从
专机专用,主从就是有多台服务器,多台服务器联合使用
优点:备份,负载均衡
从服务器自动向主服务器请求数据,字段来备份
写在主服务器的数据库,读可以分配给从服务器数据库们,从服务器们实时从主服务器请求数据备份,实现读写分离,负载均衡,数据备份的优点
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
### 怎么实现?
有很多种配置主从同步的方法,可以总结为如下的步骤:
在主服务器上,必须开启二进制日志机制和配置一个独立的ID
在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号
在开始复制进程前,在主服务器上记录二进制文件的位置信息
如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出数据库,或者直接复制数据文件)
配置从服务器要连接的主服务器的IP地址和登陆授权,二进制日志文件名和位置
1.备份主服务器原有数据到从服务器
mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql
2.在从服务器上还原
mysql –uroot –pmysql < master_db.sql
3. 配置主服务器master
编辑设置mysqld的配置文件,设置log_bin和server-id
4.在主服务器创建slave账户
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
5.获取主服务器的二进制日志信息
show master status; 获取file,position字段数据
6.配置从服务器配置的slave,和主服务器一样设置log_bin和server-id
7.设置从服务器的监听
change master to master_host='10.211.55.5', master_user='slave', master_password='slave',master_log_file='mysql-bin.000006', master_log_pos=590;
master_host:主服务器Ubuntu的ip地址
master_log_file: 前面查询到的主服务器日志文件名
master_log_pos: 前面查询到的主服务器日志文件位置
8.开启同步
start slave;
查看show slave status \G 看得到slave状态