MySQL: 一:
    DML:DML是Data Manipulation Language的缩写,意思是数据操纵语言,是指在SQL语言中,负责对数据库对象运行数据访问工作的指令集,
    以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除,是开发以数据为中心的应用程序必定会使用到的指令。
    在执行INSERT、UPDATE、DELETE指令时,InnoDB 性能更优。
    执行select指令时,MyISAM 性能更优。

    二: InnoDB MyISAM优缺点
    1、MySQL默认存储引擎的变迁

    在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5。5之后的版本中,默认的搜索引擎变更为InnoDB。

    2、MyISAM与InnoDB存储引擎的主要特点

    MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发、重负荷生产系统上,表锁结构的特性就显得力不从心;

    InnoDB存储引擎的特点是:行级锁、事务安全(ACID兼容)、支持外键、不支持FULLTEXT类型的索引(5.6.4以后版本开始支持FULLTEXT类型的索引)。
    InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎。InnoDB是为处理巨大量时拥有最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。

    InnoDB和MyISAM的最大不同点有两个:一,InnoDB支持事务(transaction);二,默认采用行级锁。加锁可以保证事务的一致性;

    我们先简单了解一下事务知识。
    MySQL 事务属性
    事务是由一组SQL语句组成的逻辑处理单元,事务具有ACID属性。

    原子性(Atomicity):事务是一个原子操作单元。在当时原子是不可分割的最小元素,其对数据的修改,要么全部成功,要么全部都不成功。

    一致性(Consistent):事务开始到结束的时间段内,数据都必须保持一致状态。

    隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的”独立”环境执行。

    持久性(Durable):事务完成后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。

    常见的锁:
    间隙锁
    当我们用范围条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做”间隙(GAP)”。
    InnoDB也会对这个”间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)。
    排他锁
    排他锁,也称写锁,独占锁,当前写操作没有完成前,它会阻断其他写锁和读锁。
    共享锁
    共享锁,也称读锁,多用于判断数据是否存在,多个读操作可以同时进行而不会互相影响。当如果事务对读锁进行修改操作,很可能会造成死锁。
    行锁与表锁
    当插入数据时,就锁定表,这叫做”锁表”;当更新数据时,就锁定行,这叫做”锁行”。

    三:mysql权限
    1、DCL
    1-1、DCL的概述
    DCL(Data Control Language 数据控制语句)的操作是数据库对象的权限,这些操作的确定使数据更加的安全。
    1-2、DCL的主要语句(操作)
    Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。
    Revoke语句:可以废除某用户或某组或所有用户访问权限
    1-3、DCL的操作对象(用户)
    此时的用户指的是数据库用户。


    语法:
    增加权限

    grant 权限名1, 权限名2, … on 数据库名.对象名 to ‘用户名’@’允许其登录的地址’ identified by ‘密码’;
    权限名就是:‘select’,‘update’, ‘delete’等等,ALL/all privileges代表“所有权限”
    表示所有数据中的所有对象
    某数据库名.表示该数据库中的所有对象
    identified by ‘密码’用于给一个用户在此时修改密码,不写就不修改密码
    该语句也可以创建用户(如果不存在),此时identified by ‘密码’必须写
    eg:
    mysql> grant all on
    . to wang@’192.168.1.150’ identified by “password”; //all等同于all privilege,其中的privileges可以省略
    mysql> grant all privileges on
    . to wang@’192.168.1.%’ identified by “123456”; //192.168.1.%表示一个网段
    mysql> grant insert,select on testdb.
    to wang@’%’ identified by “123456”;
    mysql> flush privileges; //授权之后,需要手动更新权限表
    查询权限
    查询当前用户的权限
    mysql> show grants;
    查询指定用户下的权限
    mysql> show grants for wang@’192.168.1.%’;
    删除权限
    revoke 权限名1,权限名2, …. on 数据库名.对象名 from ‘用户名’@’允许其登录的地址’;
    eg:
    mysql> revoke create on test.test from ‘user1’@’%’;
    mysql> flush privileges;