视图
- 将查询命令查到的数据作为一个虚拟表
- 本质是一条被封装的sql语句
- 本身不存储数据,且会随着视图的基准表变化而变化
- 创建:create view v_t1t2 as select * from t_table1 t1 left join t_table2 t2 on t1.id=t2.tid; 这里创建一个视图,表名为v_t1t2,可以对该表进行查询:select * from v_t1t2;
- 删除视图:drop view v_t1t2;
事务
- 在必须需要有一个完整的流程时使用,作为一个最小单元去执行,只能完全执行或完全不执行。并不是所有的引擎都支持事务,InnoDB引擎支持事务操作
- 比如转账时,此时如果有任一一步无法完成,则要求数据可以回到没有发生任何操作的状态
- 1.检查余额
- 2.扣除转出账户资金
- 3.增加转入账户资金
- 事务执行步骤:
- 1.begin或start transaction开始
- 2.检查并执行扣除操作
- 3.执行增加操作
- 4.commit; 确认提交以上所有操作,事务结束
- 回滚:rollback; 在以上第4步执行之前,如果发生意外或其他情况,均可执行回滚操作,执行后begin后的所有操作均取消
- 事务的四大特性(ACID):
- 原子性,一个完整的事务不可分割,只能按最小的单元执行
- 一致性,事务开始到结束是一个完整的流程,符合预设的开始状态和结束状态
- 隔离性,事务执行完以前,对其他事务或客户端是不可见的
- 持久性,事务执行完成提交后既在数据库持久存储
索引
- 索引是为了更快的检索数据,就像汉语字典的索引一样,但是索引并不适合需要做频繁增删的表,因为建立索引时会增加资源的使用,所以索引一般只适合频繁查询的表
- 查看表中已有索引:show index from t_table1;
- 创建索引:create index idx_name on t_table1 (name(10)); idx_name为索引名 name(10)为要加索引的字段,10为字符串长度,应与定义字段时长度一致,如果字段为非字符串类型,可以不写长度
- 删除索引:drop index idx_name on t_table1;
用户管理
- mysql的用户均存储在mysql数据库的user表中,该表主要字段
- Host 为允许访问的主机,localhost代表本机, % 代表任何主机,要使用客户端软件远程连接数据库时,Host可以给%
- User 为允许访问的用户名
- authentication_string 为对应用户名的密码,为加密后的值
- 创建新的mysql用户:
- grant all privileges on . to 'dbuser1'@'localhost' identified by '123111';
- all privileges 表示所有权限,其他权限可以分开给:select,insert,update,alter等
- . 表示所有数据库的所有表,可以指定表:dbname.t_table1
- 'dbuser1'@'localhost'表示该权限所要给的用户名和允许访问的主机,任何主机均可连接可用'dbuser1'@'%'
- identified by '123111'表示给定该用户的登陆密码
- 修改用户权限:
- grant select,update on dbname.t_table1 to 'dbuser1'@'%' with grant option;
- flush privileges; 刷新权限,修改完后需要该操作使权限生效
- 查看权限:show grants for 'dbuser'@'%';
- 删除用户:drop user 'dbuser'@'%';
数据库远程连接时可能连不上的问题(ubuntu):
- 防火墙没关,关闭:sudo ufw disable 开启:sudo ufw enable 查看状态:sudo ufw status
- 数据库配置3306端口绑定了localhost:先查看3306端口: netstat -an|grep 3306 如下显示则说明绑定了3306端口绑定了本地地址
> tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
- 此时修改mysql配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf 将文件中bind-address注释掉,保存后重启mysql服务,此时再查看3306端口,显示如下时即可
> tcp6 0 0 :::3306 :::* LISTEN
数据库无密码用户设置密码及设置使用密码登陆
- 1.use mysql;
2.(无password字段的版本)update user set authentication_string=PASSWORD("密码") where user='root';
(有password字段的版本)update user set password=password('密码') where user='root';
3.update user set plugin="mysql_native_password";
4.flush privileges;
5.quit;
6.重启mysql服务