1、视图
视图就是一条SELECT语句执行后返回的结果集,视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变)
1、定义视图
建议以v开头
create view 视图名称 as select语句;
2、查看视图
查看表会将所有的视图也列出来
show tables;
3、使用视图
视图的用途就是查询
select * from v_stu_score;
4、删除视图
drop view 视图名称;
例:
drop view v_stu_sco;
5、视图的作用
提高了重用性,就像一个函数
对数据库重构,却不影响程序的运行
提高了安全性能,可以对不同的用户
让数据更加清晰
2、事务
事务广泛的运用于订单系统、银行系统等多种场景
例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事务。可以用START TRANSACTION语句开始一个事务,然后要么使用COMMIT提交将修改的数据持久保存,要么使用ROLLBACK撤销所有的修改。事务SQL的样本如下:
1、start transaction;
2、select balance from checking where customer_id = 10233276;
3、update checking set balance = balance - 200.00 where customer_id = 10233276;
4、update savings set balance = balance + 200.00 where customer_id = 10233276;
commit;
(1)事务四大特性(简称ACID)
- 原子性(atomicity)
一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性
- 一致性(consistency)
数据库总是从一个一致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,即使在执行第三、四条语句之间时系统崩溃,支票账户中也不会损失200美元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。)
- 隔离性(isolation)
通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。(在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外的一个账户汇总程序开始运行,则其看到支票帐户的余额并没有被减去200美元。)
- 持久性(durability)
一旦事务提交,则其所做的修改会永久保存到数据库。(此时即使系统崩溃,修改的数据也不会丢失。)
(2)事务命令
表的引擎类型必须是innodb类型才可以使用事务,这是mysql表的默认引擎
开启事务,命令如下:
- 开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中
begin;
或者
start transaction;
提交事务,命令如下
- 将缓存中的数据变更维护到物理表中
commit;
回滚事务,命令如下:
- 放弃缓存中变更的数据
rollback;
3、索引
索引是一种特殊的数据结构,主流的RDBMS都是把平衡树当做数据表默认的索引数据结构的。它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度,但建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。
索引能让数据库查询数据的速度上升, 而使写入数据的速度下降,原因很简单的, 因为平衡树这个结构必须一直维持在一个正确的状态, 增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 因此,在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。
(1)索引的使用
- 查看索引
show index from 表名;
- 创建索引
- 如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
- 字段类型如果不是字符串,可以不填写长度部分
create index 索引名称 on 表名(字段名称(长度))
- 删除索引:
drop index 索引名称 on 表名;
4、账户管理
在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然后连接进行操作,主要的操作就是数据的crud。
在进行账户管理操作时都必须使用root权限登录。
使用root登录
mysql -uroot -p
回车后写密码,然后回车
创建账户&授权
grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码';
例如:
grant select on jing_dong.* to 'laowang'@'localhost' identified by '123456';
查看用户有哪些权限
show grants for laowang@localhost;
1. 修改权限
grant 权限名称 on 数据库 to 账户@主机 with grant option;
2. 修改密码
使用root登录,修改mysql数据库的user表
-
使用password()函数进行密码加密
update user set authentication_string=password('新密码') where user='用户名'; 例: update user set authentication_string=password('123') where user='laowang';
注意修改完成后需要刷新权限
刷新权限:flush privileges
5、主从机制
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。
- 通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
- 提高数据安全,因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
- 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能
备份
- 运行mysqldump命令
mysqldump –uroot –p 数据库名 > python.sql;
# 按提示输入mysql的密码
恢复
- 连接mysql,创建新的数据库
- 退出连接,执行如下命令
mysql -uroot –p 新数据库名 < python.sql
# 根据提示输入mysql密码