视图
对于复杂的问题,往往是有多个数据表进行关联查询而得到,如果数据库因为需求等原因发生了改变,为了保证查询出来的数据与之前相同,则需要在多个地方进行修改,维护起来非常困难。
解决办法:定义视图
视图定义
通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们再创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);
方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性。
定义视图
create view 视图名称 as select语句; # 建议以v_开头
查看视图
-- 查看表会将所有的视图也列出来
show tables;
使用视图
select * from v_stu_score;
删除视图
drop view 视图名称
drop view v_stu_sco;
事物
事物广泛的运用于订单系统,银行系统等多种场景
所谓事物,他是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位;
例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事物。事物是数据库维护数据一致性的单位,在每个事物结束时,都能保持数据一致性。
事物四大特性(简称ACID)
- 原子性(Atomicity)
一个事物必须被视为一个不可分割的最小工作单元,整个事物中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事物来说,不可能只执行其中的一部分。
- 一致性(Consistency)
数据库总不是从一个一致性的状态转换到另一个一致性的状态。
- 隔离性(Isolation)
通常来说,一个事物所做的修改在最终提交以前,对其他事物是不可见的。
- 持久性(Durability)
一旦事物提交,则其所做的修改会永久保存到数据库。
事物命令
表的引擎类型必须是innodb类型才可以使用事物,这是mysql表的默认引擎。
开启事物
- 开启事物后执行修改命令,变更会维护到本地缓存中而不会维护到物理表中
begin;
或者
start transaction;
提交事物
commit;
回滚事物
rollback;
索引
当数据库中数据量很大时,查找数据会变得很慢
优化方案:索引
索引定义
索引式一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),他们包含着对数据表里所有记录的引用指针。
更通俗的讲,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
索引的使用
- 查看索引
show index from 表名
- 创建索引
create index 索引名称 on 表明(字段名称(长度))
- 删除索引
drop index 索引名称 on 表名
-- 开启运行时间检测
set profiling=1;
-- 查询第10万条数据
select * from text_index where title="ha-99999";
-- 查询执行时间
show profiles;
-- 为表title_index的title列创建索引
create index title_index on text_index(title(10));
-- 执行查询语句
select * from text_index where title="ha-99999";
账户管理
- 在生产环境下操作数据库时,绝对不可以使用root账户链接,而是创建特定的账户,授权这个账户特定的操作权限,然后链接进行操作,主要的操作是数据的crud
- MySQL账户体系:根据账户所具有的权限的不同,MySQL的账户可以分为以下几种
-- 服务实例级账号:启动了一个mysqlld,即为一个数据库实例,如果某用户如root,拥有服务实例级分配的权限,那么该账号就可以删除所有的数据库,连同这些库的表
-- 数据库级别账号:对特定数据库执行增删改查的所有操作
-- 数据表级别账号:对特定表执行增删改查等所有操作
-- 字段级别的权限:对某些表的特定地段进行操作
-- 存储程序级别的账号:对存储程序进行增删改查的操作 - 账户的操作主要包括创建账号、删除账号、修改密码、授权权限等
注意
进行账号操作时,需要使用root账户登录,这个账户拥有最高的实例级权限
通常都使用数据库级操作权限
1.查看所有用户
- 所有用户及权限信息存储在mysql数据库的user表中
- 查看user表的结构
desc user;
- 主要字段说明:
Host表示允许访问的主机
User表示用户名
authentication_string表示密码,为加密后的值
查看所有用户
select host,user,authentication_string from user;
2.创建账户、授权
- 需要使用实例级账户登录后操作,以root为例
- 常用权限主要宝库欧:create、drop、update、delete、select
- 如果分配所有权限,可以使用all privileges
2.1创建账户&授权
grant 权限列表 on 数据库 to '用户名'@'访问主机' indentified by '密码'
setp1:使用root登录
mysql -uroot -p;
回车后输入密码
setp2:创建账户并授权所有权限
grant select on jingdong.* to 'laowang'@'localhost' identified by '123456';
说明
- 可以操作python数据库表的所有表,方式为jingdong.*
- 访问主机通常使用百分号%表示此账户可以使用任何ip的主机登录访问次数据库
- 访问主机可以设置成localhost或具体的ip,表示只允许本机或特定的主机访问
- 查看用户有哪些权限
show grants for laowawng@localhost
grant all privileges on jingdong.* to 'laoli'@'%' identified by '123456';
- all privileges 表示可以任意电脑进行连接访问,并且对京东数据库中的所有表拥有所有权限
3.修改权限
grant 权限名称 on 数据库 to 账户@主机 with grant option;
grant select ,insert on jingdong.* to laowang@localhost with grant option;
flush privileges; # 刷新权限
4.修改密码
- 使用password()函数进行密码加密
update user set authentication_string=password('新密码') where user='用户名';
# 例子
update user set authentication_string=password('123') where user='laowang';
- 注意修改完成后需要刷新权限
flush privileges; # 刷新权限
4.远程登录
5.删除账户
语法1:使用root登录
drop user '用户名'@’主机'
例如:
drop user 'laowang'@"%'语法2:使用root登录,删除mysql数据库user表中数据
delete from user where user='用户名'
例如
delete from user where user='laowang';
操作结束后需要刷新权限
flush privileges;
推荐使用第一种方法
忘记root账户密码
[查阅]http://blog.csdn.net/lxpbs8851/article/details/10895085
MySQL主从
master 和 slave
读写分离
数据备份
-- 备份
-- 运行mysqldump命令
mysqldump -uroot -p 数据库名 > python.sql # 备份
-- 恢复
-- 连接mysql,创建新的数据库
-- 退出连接,执行如下命令
mysql -uroot -p 新数据库名 < python.sql