mysql高级:视图、事务、索引

# 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状态

你可能感兴趣的:(mysql高级:视图、事务、索引)