一、(1)DCL(数据控制语言)主要是数据库管理员用来管理其他用户权限时使用的语句;可以授予的权限包括以下:
列权限:和表中的一个具体列相关、表权限:和一个具体数据表中的所有数据相关、数据库权限:和一个具体数据库中的所有数据表相关、全局权限:和MySQL的所有数据库相关(低级权限会被高级权限覆盖)
(2)、数据库管理员使用GRANT语句进行授权
语法:GRANT 权限 ON 数据库对象 TO 用户名@用户地址 IDENTIFIED BY 用户口令
注意语法中的用户名、用户地址、用户口令需要用引号括起来,并且口令不能为空;例子:
列权限GRANT SELECT(id) ON test.test_table1 TO 'a'@'localhost' IDENTIFIED BY '123456';
表权限GRANT SELECT ON test.test_table1 TO 'b'@'localhost' IDENTIFIED BY '123456';
数据库权限GRANT SELECT ON test.* TO 'c'@'localhost' IDENTIFIED BY '123456';
全局权限GRANT SELECT ON *.* TO 'd'@'localhost' IDENTIFIED BY '123456';
通过GRANT语句可以授予的权限包括:SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER等
如果要授予所有权限,可以使用ALL代表所有;例子:
GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY '123456';
查看当前用户权限:SHOW GRANTS SHOW GRANTS FOR CURRENT_USER()
查看指定用户权限:SHOW GRANTS FOR 用户名@用户地址
也可使用USE命令切换到系统数据库information_schema;SELECT * FROM user_privileges查看更为详细的用户权限
(3)、数据库管理员使用REVOKE语句取消授权
语法:REVOKE 权限 ON 数据库对象 FROM 用户名@用户地址(注意需要根据用户对应权限进行取消);
例子:REVOKE ALL ON *.* FROM 'user'@'localhost';
在数据库管理员授予或取消授予权限时,用户地址可以使用%表示所有
例子:REVOKE ALL ON *.* FROM 'user'@'%';
在数据库管理员授予或取消授予权限后,需要刷新系统权限表:FLUSH PRIVILEGES
或者重新启动数据库服务:
停止服务命令 net stop mysql、启动服务命令 net start mysql
(4)、数据库管理员可以使用DDL(数据定义语句)中的CREATE创建用户
语法:CREATE USER 用户名@用户地址 IDENTIFIED BY 用户口令
例子:CREATE USER zhangsan@'192.168.1.100' IDENTIFIED BY '123456';
如果要查看用户信息,需要使用USE命令切换到系统数据库mysql中:SELECT * FROM user;
需要注意的是,使用CREATE命令创建的用户默认没有任何权限,需要使用前面的GRANT命令授权
(5)、数据库管理员可以使用DDL(数据定义语句)中的DROP来删除用户
语法:DROP USER 用户名@用户地址
例子:DROP USER zhangsan@'192.168.1.100';
如果需要修改用户的密码,需要到系统数据库mysql中修改表user
例子:UPDATE user SET password=password('123456') WHERE user='zhangsan';
也可以直接在表user中删除用户
例子:DELETE FROM user WHERE user='zhangsan';
二、(1)、变量定义:在MySQL数据库的函数和存储过程中可以使用DECLARE关键字来定义变量,这些变量的作用范围是BEGIN…END程序体中
语法:DECLARE 变量名 变量类型 DEFAULT 默认值 例子:DECLARE abc INT DEFAULT 10;
变量赋值:给BEGIN…END程序体中的变量赋值有两种方法
语法:SET 变量名=值; 语法:SELECT 属性 INTO 变量名 FROM 表名;
例子:SET abc=10; SELECT id INTO abc FROM table;
(2)IF语句
IF语句主要用于条件判定,根据条件成立与否,后续执行不同的命令
语法:IF 条件 THEN …
ELSEIF 条件 THEN …
ELSE …
END IF
例子:
CREATE PROCEDURE pro(IN x INT)
BEGIN
IF x=1 THEN SELECT 'x is 1';
ELSEIF x=2 THEN SELECT 'x is 2';
ELSE SELECT 'WRONG';
END IF;
END;
(3)CASE语句:为多分枝语句结果,从WHEN后面查找与CASE后的变量相等的值,如果找到,执行该分支语句,否则执行ELSE语句
语法:CASE 变量
WHEN 值1 THEN …
WHEN 值2 THEN …
ELSE …
END CASE
例子:
CREATE PROCEDURE pro(IN x INT)
BEGIN
CASE x
WHEN 1 THEN SELECT 'x is 1';
WHEN 2 THEN SELECT 'x is 2';
ELSE SELECT 'WRONG';
END CASE;
END;
(4)CASE语句:为多分枝语句结果,从WHEN后面查找与CASE后的变量相等的值,如果找到,执行该分支语句,否则执行ELSE语句
语法:CASE 变量
WHEN 值1 THEN …
WHEN 值2 THEN …
ELSE …
END CASE
例子:
CREATE PROCEDURE pro(IN x INT)
BEGIN
CASE x
WHEN 1 THEN SELECT 'x is 1';
WHEN 2 THEN SELECT 'x is 2';
ELSE SELECT 'WRONG';
END CASE;
END;
(5)WHILE语句:判断条件成立与否,如果成立则循环执行程序体
语法:WHILE 条件 DO
…
END WHILE
例子:
CREATE PROCEDURE pro(IN x INT)
BEGIN
WHILE x<5 DO
SELECT 'OK';
SET x=x+1;
END WHILE;
END;
(6)LOOP语句:循环结构,但没有循环条件判定,无限循环,直至使用LEAVE退出;在LOOP循环中,还可以使用ITERATE跳过本次循环
语法:LOOP
…
END LOOP
例子:
CREATE PROCEDURE pro(IN x INT)
BEGIN
label:LOOP
SELECT 'OK';
SET x=x+1;
IF x>3 THEN LEAVE label;
END IF;
END LOOP;
END;
(7)REPEAT语句 :先执行一次循环体,之后判断条件成立与否,如果成立退出循环 ( 需要注意UNTIL语句后面不能有分号 )
语法:REPEAT
…
UNTIL 条件
END REPEAT
例子:
CREATE PROCEDURE pro(IN x INT)
BEGIN
REPEAT
SELECT 'OK';
SET x=x+1;
UNTIL x>3
END REPEAT;
END;
网友评论