mysql学习笔记3(高级相关)

视图

  • 将查询命令查到的数据作为一个虚拟表
  • 本质是一条被封装的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服务
posted @ 2019-01-25 14:43  heyeege  阅读(233)  评论(0编辑  收藏  举报