对于复杂的查询,往往是有多个数据表进行关联查询而得到,如果数据库因为需求等原因发生了改变,为了保证查询出来的数据与之前相同,则需要在多个地方进行修改,维护起来非常麻烦,这时就需要借助视图进行操作。
什么是视图
定义视图
create view 视图名称 as select语句;
查看视图
show tables;
使用视图
select * from v_stu_score;
删除视图
drop view 视图名称;
视图的作用
所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
事务广泛的运用于订单系统、银行系统等多种场景
事务四大特征(简称ACID)
事务命令
表的引擎类型必须是innodb类型才可以使用事务,这是mysql表的默认引擎
查看表的创建语句,可以看到engine=innodb
-- 选择数据库
use jing_dong;
-- 查看goods表
show create table goods;
开启事务,命令如下:
开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中
begin;
或者
start transaction;
提交事务,命令如下
将缓存中的数据变更维护到物理表中
commit;
回滚事务,命令如下:
放弃缓存中变更的数据
rollback;
当数据库中数据量很大时,查找数据会变得很慢,这是就需要使用索引进行优化。
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度
索引目的
索引的目的在于提高查询效率
索引原理
把数据分成段,然后分段查询
B-tree 算法
索引的使用
常用的索引有三种 主键索引、普通索引和唯一索引
索引不是越多越好,哪些字段需要建索引呢?主键百分之百用到了索引,就是主键索引;
普通索引key
create index 索引名称 on 表名(字段名称(长度))
alter table 表名 add index 索引名称(字段名称(长度))
唯一索引,unique,保证这个字段只会有一个值;
create unique index 索引名称 on 表名(字段名称(长度))
alter table 表名 add unique index 索引名称(字段名称(长度))
查看索引
show index from 表名;
创建索引
create index 索引名称 on 表名(字段名称(长度))
删除索引
drop index 索引名称 on 表名;
建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
建立索引会占用磁盘空间
在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然后连接进行操作,主要的操作就是数据的crud
MySQL账户体系:根据账户所具有的权限的不同,MySQL的账户可以分为以下几种
服务实例级账号:,启动了一个mysqld,即为一个数据库实例;如果某用户如root,拥有服务实例级分配的权限,那么该账号就可以删除所有的数据库、连同这些库中的表
数据库级别账号:对特定数据库执行增删改查的所有操作
数据表级别账号:对特定表执行增删改查等所有操作
字段级别的权限:对某些表的特定字段进行操作存储程序级别的账号:对存储程序进行增删改查的操作
账户的常用操作主要包括创建账户、删除账户、修改密码、授权权限等
进行账户操作时,需要使用root账户登录,这个账户拥有最高的实例级权限
通常都使用数据库级操作权限
查看所有用户
所有用户及权限信息存储在mysql数据库的user表中
查看user表的结构
desc user;
主要字段说明:
Host 表示允许访问的主机
User 表示用户名
authentication_string 表示密码,为加密后的值
查看所有用户
select host,user,authentication_string from user;
创建账户&授权
grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码';
修改权限
grant 权限名称 on 数据库 to 账户@主机 with grant option;
修改密码
使用root登录,修改mysql数据库的user表
使用password()函数进行密码加密
update user set authentication_string=password('新密码') where user='用户名';
例:
update user set authentication_string=password('123') where user='laowang';
修改完成后需要刷新权限
flush privileges;
远程登录
修改 /etc/mysql/mysql.conf.d/mysqld.cnf 文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释 bind-addr = 127.0.0.1
重启msyql
service mysql restart
使用root登录
drop user '用户名'@'主机';
例:
drop user 'laowang'@'%';
或
delete from user where user='用户名';
例:
delete from user where user='laowang';
-- 操作结束之后需要刷新权限flush privileges
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
使用主从同步的好处:
主从同步的机制
Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。
在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的一个副本。从服务器可以指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据),默认会执行日志中的所有语句。
每一个从服务器会记录关于二进制日志的信息:文件名和已经处理过的语句,这样意味着不同的从服务器可以分别执行同一个二进制日志的不同部分,并且从服务器可以随时连接或者中断和服务器的连接。主服务器和每一个从服务器都必须配置一个唯一的ID号(在my.cnf文件的[mysqld]模块下有一个server-id配置项),另外,每一个从服务器还需要通过CHANGE MASTER TO语句来配置它要连接的主服务器的ip地址,日志文件名称和该日志里面的位置(这些信息存储在主服务器的数据库里)
配置主从同步的基本步骤
exit(?)