Mysql的事务,视图,索引以及用户管理

事务


概念:

是用户定义的一个数据库操作序列,这些操作是一个不可分割的单位,如果要做每个操作都要做,如果不做每个操作都不做

  • 特性(ACID)

A原子性:要么做要么不做

C一致性:从上一个状态变为下一个状态必须是一致性的

I隔离性:一个事务执行时不能被另一个或者其他任何事务干扰

D持续性:一个事务一旦提交就是就是永久性的,后续的任何操作都对其不产生影响

由于事务在执行时可能会由于一些因素造成事务中断,事务中断必须保证该事务中断对其他事务不产生任何影响,因此就产生了事务恢复机制和事务并发控制机制

脏读:一个客户端读取到另一个客户端没有提交的修改数据

不可重复读:同一提交事务个查询在同一个事务中多次进行,但是每次读取的结果都不同,因为可能每次都有用户进行修改或删除。

幻读:每次读取数据时,返回的结果都不一样,可能是由其他用户的插入操作导致的

基本使用

  • 事务开始:

start  transaction

  • 做一个保存点

savepoint   保存点名

如果操作错误,可以会滚到上一个保存点

rollback  to  保存点的名字

mysql> create table stu (id int,name varchar(20),age int);
Query OK, 0 rows affected (0.80 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> savepoint aa;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into stu values(1,'Jack',19);
Query OK, 1 row affected (0.33 sec)

mysql> savepoint bb;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into stu values(2,'Smith',190);
Query OK, 1 row affected (0.00 sec)

mysql> select * from stu;

+------+-------+------+

| id   | name  | age  |

+------+-------+------+

|    1 | Jack   |   19 |

|    2 | Smith  |  190 |

+------+-------+------+
2 rows in set (0.00 sec)

mysql> rollback to bb;
Query OK, 0 rows affected (0.06 sec)


mysql> select * from stu;
+------+------+------+

| id   | name | age  |

+------+------+------+

|    1 | Jack |   19 |

+------+------+------+
1 row in set (0.00 sec)

rollback ----直接回滚到开始点,数据不再生效

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from stu;
Empty set (0.00 sec)

当事务一旦被提交后不可以再进行回滚

  • 事务结束:

commit--------事务提交,提交即结束

commit  之后rollback不再生效

update  count  Set  动作  where  XX;

mysql默认隔离级别为可重复读

视图


概念:视图是从一个或几个基本表中导出来的表,是一个虚表。可以进行增删查改但是有限制。

组成视图的列名要么全部省略要么全部指定。

  • 创建视图

create view 视图名 as  select  语句;

mysql> create view v_ename_dname as  select ename, dname  from emp,dept where emp.deptno=dept.deptno;

mysql> show tables;
+-----------------+

| Tables_in_scott |

+-----------------+

| dept            |

| emp             |

| salgrade        |

| tmp             |

| v_ename_dname   |

| view_emp_for_hr |

+-----------------+

mysql> select * from v_ename_dname;

+--------+------------+

| ename  | dname      |

+--------+------------+

| SMITH  | RESEARCH   |

| ALLEN  | SALES      |

| WARD   | SALES      |

| JONES  | RESEARCH   |

| MARTIN | SALES      |

| MILLER | ACCOUNTING |

+--------+------------+
6 rows in set (0.00 sec)

注意:不管修改基表还是视图中的任何一个互相都有影响。

  • 删除视图

drop view 视图名

如果删除的是视图,必须指明是view ,否则不识别。

mysql> drop table v_ename_dname;
ERROR 1051 (42S02): Unknown table 'v_ename_dname'

mysql> drop view v_ename_dname;
Query OK, 0 rows affected (0.00 sec)
  • 更新视图:

update  视图名  更新语句

视图的作用:(摘自《数据库系统概论》)

     能够简化用户的操作

     对重构数据库提供了一定程度的逻辑独立性

     对机密数据提供安全保护

视图和表的区别:

        视图不占用磁盘空间

        视图不能添加索引

索引


分类:主键索引,唯一索引,普通索引,全文索引

功能:提高数据库检索的性能。

磁盘中采用的是B+树索引,Hash索引,这种索引在性能上可能会不符合数据库的需求,那么就产生了一种新的索引方法,以二叉树搜索进行索引,性能会比前两种较高。

缺点是只能存储一个数据,存储效率降低。

所以索引的特点是以空间换时间。

索引创建的规则:

         尽量创建频繁使用的字段

         不常更新的字段应该作为索引 

        不会出现在where子句中的字段不该创建索引。

  • 创建主键索引

在表中指定主键,该主键就作为索引的字段

特点:

        一个表中最多有一个主键索引,因为不重复,索引的效率较高,创建主键索引的列,值不能为空,不能重复。

  • 创建唯一索引

       指定表中的字段为unique,指定个数可以为1个也可以为多个

特点:一个表中可以存在多个唯一索引,查询效率较高,若某列建立唯一索引,则该列不能有重复数据

  •  创建普通索引

使用关键字index去指定字段为索引

mysql> create table user8(id int primary key, name varchar(20),
-> email varchar(30),index(name) --在表的定义最后,指定某列为索引
-> );

特点:

允许存在重复的值,一个表中可以有多个普通索引。

  • 创建全文索引

建表:

CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,title VARCHAR(200),
body TEXT,FULLTEXT (title,body))engine=MyISAM;

插入数据

insert into articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
  • 使用全文索引检索
select * from articles  where match (title,body) against ('database');
  • 查看查询索引

三种方法:

  • show keys from 表名

  • show index from 表名

  • desc 表名

演示一种:

Mysql> show keys from articles\G
*************************** 1. row ***************************
        Table: articles
   Non_unique: 0
     Key_name: PRIMARY
Seq_in_index: 1
  Column_name: id
    Collation: A
  Cardinality: 6
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
*************************** 2. row ***************************
        Table: articles
   Non_unique: 1
     Key_name: title
Seq_in_index: 1
  Column_name: title
    Collation: NULL
  Cardinality: NULL
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: FULLTEXT
      Comment:
Index_comment:
*************************** 3. row ***************************
        Table: articles
   Non_unique: 1
     Key_name: title
Seq_in_index: 2
  Column_name: body
    Collation: NULL
  Cardinality: NULL
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: FULLTEXT
      Comment:
Index_comment:
  • 删除索引

方法一:alter table 表名 drop  primary

方法二:alter table 表名 drop index  索引名

方法三:drop index 索引名  on  表名 

用户管理


  • 创建用户

create user '要设置的用户名' @ '要允许的登录主机' identitied by '你要设置的密码'

mysql> create user 'haha'@'localhost' identified by '111111';
Query OK, 0 rows affected (0.39 sec)

  • 删除用户

drop  user '用户名'@'主机'

mysql> drop user 'haha'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> select host from mysql.user where user='haha';
Empty set (0.01 sec)

select user()--------------查看当前用户

select database()-------查看当前数据库

  • 赋权限

grant all on   *.*  ...

grant select on..   to ..

grant delete on ..  to ..

grant create on ..  to  ..

  • 回收权限

revoke  select on..  from ..

  • tips:

chkconfig mysqld off----关闭开机自启动

chkconfig mysqld on---开启开机自启动

猜你喜欢

转载自blog.csdn.net/qq_36474990/article/details/81347240