INSERT数据插入
- 插入完整的行;
INSERT INTO 表名
VALUES(各列的值);
如果某个列没有值,应该使用NULL值(假定表允许对该列指定空值)。
各个列必须以它们在表定义中出现的次序填充。
- 插入行的一部分;
INSERT INTO 表名(部分列名)
VALUES(对应的列值);
省略的列必须满足:该列定义为允许NULL值(无值或空值);在表定义中给出默认值
如需优先检索,然后插入语句,可以使用 INSERT LOW_PRIORITY INTO语句
- 插入多行;
INSERT INTO 表名(部分列名)
VALUES (对应的列值集合1)<,(对应的列值集合2)>;
- 插入某些查询的结果:将一条SELECT语句的结果插入表中
INSERT INTO 表名(部分列名)
SELECT (相应个数的列名且对应数据类型相同)
FROM 表名
[WHERE 子句];
UPDATE、DELETE语句可以使用子查询,使得能用SELECT语句检索出的数据更新列数据
UPDATE 表名
SET 列名1 = 表达式/值[,列名2 = 表达式/值 ...]
[WHERE 子句];
部分删除:UPDATE使某列值为NULL
整行删除:如无WHERE子句,删除所有行
DELETE FROM 表名
[WHERE 子句];
如果想从表中删除所有行,不要使用DELETE。
可使用TRUNCATE TABLE语句,它完成相同的工作,但速度更快
(TRUNCATE实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。
表
- 创建表
CREATE TABLE 表名(
列名 数据类型 [列级完整性数据约束条件:UNSIGNED、ZEROFILL、[NOT] NULL、AUTO_INCREMENT
、DEFAULT 常量、COMMENT ''、UNIQUE、PRIMATY KEY],
表级完整性约束条件:主键PRIMARY KEY(,)、外键FOREIGN KEY() REFERENCE 外表(主键)、
唯一性约束UNIQUE()、列约束CHECK(判断表达式)
) ENGINE=[InooDB | MyISAM | MEMORY ...],.... ;
表级约束可以给约束起名字(方便以后通过这个名字来删除这个约束)
CONSTRAINT 约束名 约束
返回最后一个AUTO_INCREMENT值: SELECT last_insert_id();
- 修改表
数据库表的更改不能撤销,使用ALTER TABLE要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份)。
比较有意义的操作是定义外键(约束):
ALTER TABLE 表名
ADD CONSTRAINT 约束名 FOREIGN KEY(列名) REFERENCES 外表(主键)[,其他修改];
单个表进行多个更改,可以使用单条ALTER TABLE语句,每个更改用逗号分隔
DROP 列名
MODIFY 列名 数据类型 列级完整性约束
复杂的表结构更改一般需要手动删除过程,它涉及以下步骤:
1.用新的列布局创建一个新表;
2.使用INSERT INTO 新表(列名) SELECT语句从旧表复制数据到新表。如果有必要,可使用转换函数和计算字段;
3.检验包含所需数据的新表;
4.重命名旧表(如果确定,可以删除它);
5.用旧表原来的名字重命名新表;
6.根据需要,重新创建触发器、存储过程、索引和外键。
- 删除表
DROP TABLE 表名; - 重命名表
RENAME TABLE 旧名 TO 新名<,旧名 TO 新名>;
视图
MySQL 5添加了对视图的支持。
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
视图仅仅是用来查看存储在别处的数据的一种设施。
视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。
为什么使用视图:
1.重用SQL语句。
2.简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。
3.使用表的组成部分而不是整个表。
4.保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
5.更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
在视图创建之后,可以用与表基本相同的方式利用它们。
可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,
甚至能添加和更新数据(有限制)
规则:
与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。
对于可以创建的视图数目没有限制。
为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。
视图不能索引,也不能有关联的触发器或默认值。
视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。
- 使用视图:
视图用CREATE VIEW语句来创建。
使用SHOW CREATE VIEW viewname;来查看创建视图的语句。
用DROP删除视图,其语法为DROP VIEW viewname;。
更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR REPLACE VIEW。
如果要更新的视图不存在,则第2条更新语句会创建一个视图;
如果要更新的视图存在,则第2条更新语句会替换原有视图 - 利用视图简化复杂的联结
订购了任意产品的客户
CREATE VIEW productcustomers AS
SELECT cust_name,cust_contact,prod_id
FROM customers,orders,orderitems
WHERE customers.cust_id = orders.cust_id
AND orderitems.order_num = orders.order_num;
编写好后根据条件取出需要的行,SELECT语句就像对表的操作
SELECT 列名
FROM productcustomers
[WHERE 子句];
- 用视图过滤不想要的数据
CREATE VIEW customeremaillist AS
SELECT cust_id,cust_name,cust_email
FROM customers
WHERE cust_email IS NOT NULL;
导出列作为视图:
- 使用视图与 计算 字段
CREATE VIEW vendorlocations AS
SELECT prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM orderitems
WHERE order_num = 20005;
- 使用视图重新格式化检索出的数据——拼接
CREATE VIEW orderitemsexpanded AS
SELECT Concat(RTrim(vend_name),'(',RTrim(vend_country),')') AS vend_title
FROM vendors
ORDER BY vend_name;
- 视图定义中有以下操作,则不能进行视图的更新:
分组(使用GROUP BY和HAVING);
联结;
子查询;
并;
聚集函数(Min()、 Count()、 Sum()等);
DISTINCT;
导出(计算)列
存储过程:
- 一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。
- 执行:
CALL 存储过程;
CALL productpricing(@pricelow,@pricehigh,@priceaverage); @开头的为定义的变量
执行名为productpricing的存储过程,它计算并返回产品的最低、最高和平均价格。 - 创建
CREATE PROCEDURE productpricing()
BEGIN
SELECT AVG(prod_price) AS priceaverage
FROM products;
END;
CALL productpricing();
显示结果 priceaverage : xxxxx.xxxxxx
命令行中;为结束,创建存储过程会有多个;导致语句提前结束出现错误
利用DELIMITER暂时修改结束符号,如 DELIMITER //
END // 完成创建
然后 DELIMITER ; 恢复;结束
使用参数:
CREATE PROCEDURE productpricing(
OUT pl DECIMAL(8,2),
OUT ph DECIMAL(8,2),
OUT pa DECIMAL(8,2)
)
BEGIN
SELECT MIN(prod_price)
INTO pl
FROM products;
SELECT MAX(prod_price)
INTO ph
FROM products;
SELECT AVG(prod_price)
INTO pa
FROM products;
END;
CALL productpricing(@pricelow,@pricehigh,@priceaverage);
不显示结果,将结果存在3个变量
SELECT @pricelow,@pricehigh,@priceaverage;
显示变量的值(存在其中的结果)
关键字
OUT:相应的参数用来从存储过程传出一个值(返回给调用者)
IN:传递给存储过程
INOUT:对存储过程传入和传出(?)
关键字使用:
CREATE PROCEDURE ordertotal(
IN onumber INT,
OUT ototal DECIMAL(8,2)
)
BEGIN
SELECT SUM(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO ototal;
END;
CALL ordertotal(20005,@total);
SELECT @total;
案例:包含业务规则和智能处理的存储过程:
业务场景:
获得订单合计,但需要对合计增加营业税,不过只针对某些顾客。
细节:
获得合计(与以前一样);
把营业税有条件地添加到合计;
返回合计(带或不带税)。
实现: --为注释,COMMENT 为备注
-- NAME: ordertotal
-- PARAMETERS: onumber = '订单编号'
-- taxable = '0为不带税,1为带税'
-- ototal = '订单合计变量'
CREATE PROCEDURE ordertotal (
IN onumber INT,
IN taxable BOOLEAN,
OUT ototal DECIMAL(8,2)
) COMMENT '获取订单总结,可选的附加税'
BEGIN
-- 为订单总结声明变量
DECLEAR total DECIMAL(8,2);
-- 声明税率
DECLEAR taxrate INT DEFAULT 6;
-- 获取订单总价
SELECT SUM(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO ototal;
-- 判断是否带税
IF tabable THEN
-- 加税
SELECT total+(total/100*taxrate) INTO total;
END IF;
-- 存入输出变量
SELECT total INTO ototal;
END;
执行和获得结果
CALL ordertotal(20005,0,@total);
SELECT @total;
4.删除和检查
DROP PROCEDURE [IF EXISTS] 存储过程名;
SHOW CREATE PROCEDURE 存储过程名; 显示创建存储过程名的CREATE语句
SHOW PROCEDURE STATUS 存储过程名 [LIKE 子句]; 显示(所有或者有限制的)存储过程的创建时间、由谁创建等详细信息的列表
游标cursor
一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的 结果集。
MySQL中游标只能用于存储过程(和函数)。
存储过程处理完成后,游标就消失(因为它局限于存储过程)。
- 创建游标
CREATE PROCEDURE processorders()
BEGIN
DECLEAR ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
END;
- 打开和关闭游标
OPEN 游标名; 处理OPEN语句时执行查询,存储检索出的数据以供浏览和滚动。
在一个游标关闭后,如果没有重新打开,则不能使用它。但是,使用声明过的游标不需要再次声明,用OPEN语句打开它就可以了。
CLOSE 游标名; CLOSE释放游标使用的所有内部内存和资源,因此在每个游标不再需要时都应该关闭。
如果你不明确关闭游标, MySQL将会在到达END语句时自动关闭它。
CREATE PROCEDURE processorders()
BEGIN
-- 声明游标
DECLEAR ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
-- 打开游标
OPEN ordernumbers;
-- 关闭游标
CLOSE ordernumbers;
END;
- 使用游标数据
游标被打开后,可以使用FETCH语句分别访问它的每一行。
访问一行后,向前移动游标中的内部行指针,可以继续检索下一行
1.访问一行
CREATE PROCEDURE processorders()
BEGIN
-- 声明局部变量
DECLEAR o INT;
-- 声明游标
DECLEAR ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
-- 打开游标
OPEN ordernumbers;
-- 获取订单编号,存入变量o
FETCH ordernumbers INTO o;
-- 关闭游标
CLOSE ordernumbers;
END;
- 循环访问所有行
CREATE PROCEDURE processorders()
BEGIN
-- 声明局部变量
DECLEAR o INT;
DECLEAR done BOOLEAN DEFAULT 0;
-- 声明游标
DECLEAR ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
-- 声明CONTINUE HANDLER SQLSTATE '02000'是一个未找到条件
DELEAR CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
-- 打开游标
OPEN ordernumbers;
-- 开始循环访问所有行
REPEAT
-- 获取订单编号,存入变量o
FETCH ordernumbers INTO o;
-- 结束循环
UNTILE done END REPEAT;
-- 关闭游标
CLOSE ordernumbers;
END;
- 实现功能
CREATE PROCEDURE processorders()
BEGIN
-- 声明局部变量
DECLEAR o INT;
DECLEAR done BOOLEAN DEFAULT 0;
DECLEAR t DECIMAL(8,2);
-- 创建用于存储结果的表
CREATE TABLE IF NOT EXISTS ordertotals(
order_num INT,
total DECIMAL(8,2)
);
-- 声明游标
DECLEAR ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
-- 声明CONTINUE HANDLER SQLSTATE '02000'是一个未找到条件
DELEAR CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
-- 打开游标
OPEN ordernumbers;
-- 开始循环访问所有行
REPEAT
-- 获取订单编号,存入变量o
FETCH ordernumbers INTO o;
-- 执行计算是否的带税的订单总价的存储过程 (IN,IN,OUT 某个订单的总价)
-- 具体代码看上一章
CALL ordertotal(o,1,t);
-- 插入结果表中
INSERT INTO ordertotals(order_num,order_total)
VALUES (o,t);
-- 结束循环
UNTILE done END REPEAT;
-- 关闭游标
CLOSE ordernumbers;
END;
//执行
CALL processorders();
//查看结果表
SELECT * FROM ordertotals;
触发器
- 定义:MySQL响应任意DELETE/INSERT/UPDATE语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句)
- 注意点:
与其他DBMS相比, MySQL 5中支持的触发器相当初级。未来的MySQL版本中有一些改进和增强触发器支持的计划。
触发器名必须在每个表中唯一,但不是在每个数据库中唯一。现在最好是在数据库范围内使用唯一的触发器名。
每个表最多支持6个触发器(每条INSERT、 UPDATE和DELETE的之前和之后)。
单一触发器不能与多个事件或多个表关联。
创建触发器可能需要特殊的安全访问权限,但是,触发器的执行是自动的。
如果INSERT、 UPDATE或DELETE语句能够执行,则相关的触发器也能执行。
BEFORE触发器或语句本身失败, MySQL将不执行AFTER触发器(如果有的话)。
应该用触发器来保证数据的一致性(大小写、格式等)。
在触发器中执行这种类型的处理的优点是它总是进行这种处理,而且是透明地进行,与客户机应用无关。
触发器的一种非常有意义的使用是创建审计跟踪。
使用触发器,把更改(如果需要,甚至还有之前和之后的状态)记录到另一个表非常容易。
触发器仅支持表,不支持视图和临时表。
MySQL触发器中不支持CALL语句。这表示不能从触发器内调用存储过程。所需的存储过程代码需要复制到触发器内。 - 创建触发器
在创建触发器时,需要给出4条信息:
1.唯一的触发器名;
2.触发器关联的表;
3.触发器应该响应的活动(DELETE、 INSERT或UPDATE);
4.触发器何时执行(处理之前或之后)。
通常,将BEFORE用于数据验证和净化(目的是保证插入表中的数据确实是需要的数据)
CREATE TRIGGER 触发器名 [ BEFORE | AFTER ] [ INSERT | UPDATE | DELETE ] ON 表名
FOR EACH ROW 触发处理语句;
- 删除触发器
触发器不能更新或覆盖。为了修改一个触发器,必须先删除它,然后再重新创建。
DROP TRIGGER newproduct; - 触发器类型
1.INSERT触发器
在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;
在BEFORE INSERT触发器中, NEW中的值也可以被更新(允许更改被插入的值);
对于AUTO_INCREMENT列, NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。
获取(返回)新的自动生成的订单号:
CREATE TRIGGER neworder AFTER INSERT ON orders
FOR EACH ROW SELECT NEW.order_num;
此触发器必须按照AFTER INSERT执行,因为在BEFORE INSERT语句执行之前,新order_num还没有生成。
//测试这个触发器
INSERT INTO orders(order_date,cust_id)
VALUES (NOW(),10001);
返回order_num 20010 自增的结果
2.DELETE触发器
在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行;
OLD中的值全都是只读的,不能更新。
使用OLD保存将要被删除的行到一个存档表中:
CREATE TRIGGER deleteorder BEFORE DELETE ON orders
FOR EACH ROW
BEGIN
INSERT INTO ahchive_orders(order_num,order_date,cust_id)
VALUES(OLD.order_num,OLD.order_date,OLD.cust_id)
END;
BEGIN和END语句标记触发器体:容纳多条SQL语句(在BEGIN END块中一条挨着一条)
3.UPDATE触发器
在UPDATE触发器代码中,可引用一个名为OLD的虚拟表访问以前(UPDATE语句前)的值,OLD中的值全都是只读的,不能更新;
引用一个名为NEW的虚拟表访问新更新的值,
在BEFORE UPDATE触发器中, NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值);
保证更新的某字段总是大写:
CREATE TRIGGER deleteorder BEFORE UPDATE ON vendors
FOR EACH ROW SET NEW.vend_state = Upper(NEW.vend_state);
事务处理
MyISAM和InnoDB,前者不支持明确的事务处理管理,而后者支持。
事务处理(transaction processing)可以用来维护数据库的完整性,
它保证成批的MySQL操作要么完全执行,要么完全不执行。
管理事务处理的关键:
将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。
只是对简单的事务处理才能这样做(直接使用COMMIT和ROLLBACK),
更复杂的事务处理可能需要部分提交或回退。
案例:添加订单事务处理过程
(1) 检查数据库中是否存在相应的客户,如果不存在,添加他/她。
(2) 提交客户信息,添加新行到customers表。
(3) 检索客户的ID。
(4) 添加一行到orders表。
(5) 如果在添加行到orders表时出现故障,回退。
(6) 检索orders表中赋予的新订单ID。
(7) 对于订购的每项物品,添加新行到orderitems表。
(8) 如果在添加新行到orderitems时出现故障,回退所有添加的orderitems行和orders行。
(9) 提交订单信息。
部分提交或回退:
如果发生错误,只需要返回到添加orders行之前即可,不需要回退到customers表(如果存在的话)。
为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符。
这样,如果需要回退,可以回退到某个占位符。
这些占位符称为保留点。
设置任意多的保留点,越多越好,能灵活地进行回退。
概念 | 操作 |
更改MySQL默认的自动提交行为:SET autocommit = 0; autocommit标志是针对每个连接而不是服务器的。 | |
事务(transaction) 指一组/批SQL语句; | START TRANSACTION; 开启事务 (当COMMIT或ROLLBACK语句执行后,事务会自动关闭(将来的更改会隐含提交)) |
回退(rollback)指撤销指定SQL语句的过程; | ROLLBACK; |
提交(commit)指将未存储的SQL语句结果写入数据库表; | COMMIT; |
保留点(savepoint)指事务处理中设置的临时占位符(placeholder) | 创建保留点:SAVEPOINT 保留点名; |
对保留点发布回退(与回退整个事务处理不同)。 | 回退到指定给出的保留点:ROLLBACK TO 保留点名; |
释放保留点:保留点在事务处理完成(执行一条ROLLBACK或COMMIT)后自动释放。 | |
显式释放 :RELEASE SAVEPOINT 保留名; |
全球化和本地化
字符集为字母和符号的集合;
编码为某个字符集成员的内部表示;
校对为规定字符如何比较的指令。
查看所支持的字符集完整列表:SELECT CHARACTER SET;
查看所支持校对的完整列表:SELECT COLLATION;
查看系统使用的字符集和校对:
SHOW VARIABLES LIKE ‘%character%’;
SHOW VARIABLES LIKE ‘%collation%’;
修改使用的字符集和校对:命令行(临时)和文件(永久)
如果指定CHARACTER SET和COLLATE两者,则使用这些值。
如果只指定CHARACTER SET,则使用此字符集及其默认的校对
(如SHOW CHARACTER SET的结果中所示)。
如果既不指定CHARACTER SET,也不指定COLLATE,则使用数据库默认。
给表指定字符集和校对:
CREATE TABLE 表名(
列声明
) DEFAULT CHARACTER SET 字符集
COLLATION 校对;
给列指定字符集和校对:
CREATE TABLE 表名(
column1 VARCHAR(10) CHARACTER SET 字符集 COLLATION 校对,
列声明
) DEFAULT CHARACTER SET 字符集
COLLATION 校对;
校对在对用ORDER BY子句检索出来的数据排序时起重要的作用
如果你需要用与创建表时不同的校对顺序排序特定的SELECT语句,可以在SELECT语句自身中进行:
SELECT * FROM customers
ORDER BY lastname,firstname COLLATION latin1_general_cs; //为区分大小写的校对
如果绝对需要,串可以在字符集之间进行转换。
为此,使用Cast()或Convert()函数。
CAST(expression AS TYPE);将任何类型的值转换为指定类型
CAST()也可以转化字符集,并且同时强制改变数据类型:
CAST(串 AS 指定数据类型 CHARACTER SET 指定字符集);
CONVERT (数据类型[(length)], 表达式或列名 [, 样式]) ;
CONVERT(字符串 USING 字符集);
ORDER BY CONVERT(列名 USING GBK) 根据汉字首字母排序
安全管理
- 访问控制
可能有的情况:
多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表;
某些用户需要读表,但可能不需要更新表;
你可能想允许用户添加数据,但不允许他们删除数据;
某些用户(管理员)可能需要处理用户账号的权限,但多数用户不需要;
你可能想让用户通过存储过程访问数据,但不允许他们直接访问数据;
你可能想根据用户登录的地点限制对某些功能的访问。
日常工作中,决不能使用root。应该创建一系列的账号,有的用于管理,有的供用户使用,有的供开发人员使用,等等。
访问控制是为了保证用户不能执行他们不应该执行的语句 - 管理用户
查看所有用户账号列表:
USE mysql;
SELECT user FROM user;
创建用户账号:
CREATE USER 用户名 IDENTIFIED BY '密码';
重命名用户:
RENAME USER 旧 TO 新;
更改口令(密码):
SET PASSWORD [FOR 用户名] = Password('密码'); //不加用户名是改当前用户
//Password()函数为了加密
删除用户账号 以及相关的权限:
DROP USER 用户名;
查看用户访问权限:
SHOW GRANTS FOR 用户;
结果:USAGE ON *.* TO '用户'@'%'
1.USAGE ON *.* : USAGE表示根本没有权限
2.用户定义为user@host
MySQL的权限用用户名和主机名结合定义。
如果不指定主机名,则使用默认的主机名%(授予用户访问权限而不管主机名)。
为设置权限,使用GRANT语句。 GRANT要求你至少给出以下信息:
要授予的权限;
被授予访问权限的数据库或表;
用户名。
GRAND 权限[,权限] ON 数据库名.* TO 用户 [WITH GRANT OPTION:该用户可以转授其他用户该权限];
允许用户在数据库的所有表上使用某权限(数据库的所有表的某权限授予该用户)。
GRANT的反操作为REVOKE,用它来撤销特定的权限:
REVOKE 权限[,权限] ON 数据库名.* FROM 用户;
被撤销的访问权限必须存在,否则会出错。
GRANT和REVOKE可在几个层次上控制访问权限:
整个服务器 使用GRANT ALL和REVOKE ALL;
整个数据库 使用ON database.*;
特定的表 使用ON database.table;
(数据库或表不存在时也可以设置,好处可提前设置,
坏处删除原先的建立同名新库或表,原先的权限还在,如果没撤销的话)
特定的列;
特定的存储过程。
权 限 | 说 明 |
ALL | 除GRANT OPTION外的所有权限 |
ALTER | 使用ALTER TABLE |
ALTER ROUTINE | 使用ALTER PROCEDURE和DROP PROCEDURE |
CREATE | 使用CREATE TABLE |
CREATE ROUTINE | 使用CREATE PROCEDURE |
CREATE TEMPORARYTABLES | 使用CREATE TEMPORARY TABLE |
CREATE USER | 使用CREATE USER、 DROP USER、 RENAME USER和REVOKEALL PRIVILEGES |
CREATE VIEW | 使用CREATE VIEW |
DELETE | 使用DELETE |
DROP | 使用DROP TABLE |
EXECUTE | 使用CALL和存储过程 |
FILE | 使用SELECT INTO OUTFILE和LOAD DATA INFILE |
GRANT OPTION | 使用GRANT和REVOKE |
INDEX | 使用CREATE INDEX和DROP INDEX |
INSERT | 使用INSERT |
LOCK TABLES | 使用LOCK TABLES |
PROCESS | 使用SHOW FULL PROCESSLIST |
RELOAD | 使用FLUSH |
REPLICATION CLIENT | 服务器位置的访问 |
REPLICATION SLAVE | 由复制从属使用 |
SELECT | 使用SELECT |
SHOW DATABASES | 使用SHOW DATABASES |
SHOW VIEW | 使用SHOW CREATE VIEW |
SHUTDOWN | 使用mysqladmin shutdown(用来关闭MySQL) |
SUPER | 使用CHANGE MASTER、 KILL、 LOGS、 PURGE、 MASTER和SET GLOBAL。还允许mysqladmin调试登录 |
UPDATE | 使用UPDATE |
USAGE | 无访问权限 |