Mysql 中Sql控制流语句_DCL语句/控制流语句

一、(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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值