索引,事务,视图,用户管理

 

//索引
    作用:提高数据检索的速度,但对增加插入删除有影响(忽略不计)
    
    添加索引
    简单:create index 索引名 on 表名(字段名);

    索引的工作原理:二叉树
    索引的类型:
    1.主键索引
    2.唯一索引(在字段上创建了unique)
        一个表中可以有多个唯一索引,唯一索引的值不能重复,效率也很高
    3.普通索引(在某个字段上使用了create index指令)
    4.全文索引(用于检索某个字段的关键字,比如查询文章关键字)

//索引的创建
    1.主键索引的创建
    两种形式:
    1在创建表时就直接指定主键索引
    id int primary key;
    primary key(id);
    alter table user3 add primary key(id);
    一张表只能有一个主键索引,但是该主键索引可以指向多列,主键索引的效率是最高的,主键索引的值不能为空也不能重复,主键索引一般在表的第一个字段创建
    2创建唯一索引
    email varchar(32) unique;
    -------创建表后
    altert table user3 add unique(email);
    create unique index 索引名 on 表名(字段名);
    create unique index inx_uni_email on user3(email);
    3.创建普通索引
    alter 
    create index inx_name on user3(name);
//索引的查询
    查询索引有5种:
    1 show index from 表名\G  表明数据是纵向排列
    2.show indexes from 表名\G
    3.show keys from 表名\G
    4.desc 表名
    5.show create table 表名;//查看表的定义
//索引的修改
    
//索引的删除
    基本语法:
    alter table 表名 drop index 索引名;
    
//事务
    start tranaction:开始一个事务
    savepoint:保存点
    rollback to 保存点:回滚到某个保存点
    rollback:回滚
    commit:提交
    细节:开始一个事务时,会默认自动创建一个保存点,存储引擎用innodb;set autocommit = false;也可以开始一个事务
    
    //在php中实现事务
    
    //链接数据库
    $conn = @mysql_connect('localhost','root','');
    if(!$conn){
        echo '
连接失败!'; exit; } mysql_select_db('itbull'); $sql1 = $sql2 = //开启事务 mysql_query('start transaction'); //加入事务控制 $res1 = mysql_query($sql1); $res2 = mysql_query($sql2); if(!$res1 || !$res2){ mysql_query('rollback'); }else{ mysql_query('commit'); }
//事务的隔离级别(了解概念)
    基本的概念:
    当不同客户端或是线程,去访问mysql数据的同一张表时,mysql提供一种机制,来控制不同客户端和线程对数据访问的权限,隔离级别定义了事务与事务之间的隔离成都,在不同的事务中,看到的数据是不一样的
    事务隔离级别的分类:
    1.读未提交 read uncommited
    2.读已提交 read commited;
    3.可重复读 repeatable read
    4.可串行   serializable
    隔离程度是从上到下,越来越强

    1脏读
    当一个事务读取另一个事务未提交的数据
    2不可重复读
    同一个查询在同一个事物中多次查询,由于其
    3幻读(虚读)
    同一个查询在同一个事物中多次查询,读到了其他事务的插入操作,每次返回不同的结果集

//事务的acid特性
    原子性(atomicity)是一个不可分割的工作单位,事务中的操作要么都发生要么都不发生
    一致性(consistency)
    隔离性(isolation)
    持久性(durability)一旦提交,对数据库的改变就是永久性的

    

    
//视图
    1.create view 视图名 as select 语句
    2.视图的显示
    show create view 视图名;
    3.视图的修改
    alter view 视图名 as 新的select 语句
    4.视图的删除
    drop view 视图名1,视图名2;
    视图案例说明:
    //只让人查询emp的名称,job;其他信息不能查询,这时我们就可以创建视图来解决这个问题
    1.创建视图:create view myview as select ename,job from emp;
    2.select * from myview;
    
    //视图的最佳实践/好处
    1安全性
    2性能提升
    3灵活性提升
用户管理
一个完整用户名是有user和host组成的'root'@'localhost'
//mysql用户创建
    mysql用户都保存在mysql数据库的user表中  
    create user 用户名@主机名 identified by 密码;  
//mysql用户删除
    基本语法:drop user'用户名'@'主机名';
//修改密码
    修改自己的密码:set password = password('密码');
    修改其他用户的密码:set password for '用户名'@'主机名' = password('密码');
//给mysql用户附权限
    当我们新创建一个用户时,该用户除了可以登录,没有其他的权限
    grant 权限列表 on 数据库.表 to '用户名'@'主机名' [identified by];
    1.权限列表可以是select,update,insert,delete,all;
    2.数据库表,可以将某个库的某个表给某个用户使用,如果希望将某个库所有的表都给用户
则可以数据库.*,如果所有库的所有表可以写成*.*
//回收mysql用户的权限
    revoke 权限列表 on 数据库.表名 from '用户名'@'主机名'
//查询mysql用户的权限
    show grants for '用户名'@'主机名';

//让权限生效
    若没有生效则:
    flush privileges;
    

 

你可能感兴趣的:(索引,事务,视图,用户管理)