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;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容