php mysql赋值_php学习 13 数据库的操作--mysql编程

一、数据控制语言

数据控制语言,就是对mysql的用户及其权限进行管理的语句;

1.用户管理

用户数据所在位置

在mysql中的所有用户,都存储在系统数据库mysql中的user表中;

b86bf2d63d68e8e523ff09a81e7e262a.png

创建用户

形式: create user  ‘用户名’@‘允许登录的地址/服务器’  identified  by ‘密码’;

说明:

1.允许登录的地址服务器就是允许该设定的位置,来使用该设定的为用户名和密码登录,其他位置不行

2.可见,mysql的安全什么验证需要三个信息。

3a53830b67c508691c3b63ba64b22030.png

1a221a6ced3d9efcb82f96cfde302010.png

删除用户

drop  user  ‘用户名’@‘允许登录的地址或服务器名’;

b226397f58ddc7f644ba9e3555165729.png

修改用户密码

修改自己的密码:

set password = password(‘密码’);

1b38c3875be460bedebd1dcdbc45cd10.png

修改他人的密码(要有权限):

set password  for ‘用户名’@‘允许登录的地址’ = password(‘密码’);

f7676b35df2667de28de7bb179f5e8eb.png

2.权限管理

权限是什么呢?

mysql数据库,将其中所能做的所有事情,都分门别类分配到大约30个权限中去了,其中每个权限都是一个“单词”而已!比如:

select  代表可以查询数据;

update  代表可以修改的数据;

delete  代表可以删除数据;

......

其中有一个权限叫做all,其代表所有权限

3eb6e02bb474870de0a73e8056060311.png

另一个表现形式:

156c774b7f399dbc29a5961cd5bc3cdd.png

授予权限

形式:

grant  权限列表  on 某库.某对象  to  ‘用户名’@‘登录位置’ [identified by '密码'];

说明:

1.权限列表就是多个权限的名词,相互之间逗号分开;

2.某库.某对象,表示给指定的某个数据库的某个下级单位附权;

3.identified by 可以省略,如果不省略,就可以表示赋权限的同时也去修改它的密码;但是该用户不存在,此时就是在创建一个新用户,密码就必须要设置了。

debb575f2047fd874f6a3451dfe9148c.png

26b9239fbe7cc19b3b8d588095dcaa72.png

剥夺权限

形式:

revoke  权限列表  on  某库.某对象  from ‘用户名’@‘允许登录的位置’;

1212c273dfa7591f88320442d25fd3d6.png

二、事务控制语言

1.什么叫做“事务”

事物就是来保证多条增删改语句的执行的一致性:要么执行,要么不执行,只有这两种情况;

2.事务的特点

原子性:一个事物中的所有语句,应该做到:要么全做,要么一个都不做;

一致性:让数据保持逻辑上的‘合理性’,比如:在一个商品出库的时候,既让商品库中的该商品数量-1,又要让对应用户的购物车中的该商品+1;

隔离性:如果多个事物同时并发执行,但每个事物就像各自独立执行一样;

持久性:一个事物执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。

3.事务模式

事务模式是指:

在我们的cmd命令行模式中,是否开启了“一条语句就是一个事务”的这个开关;

默认情况下,这个模式是开启的,称为“自动提交模式”;

set autocommit = 1;

这样之后,每条增删改语句,就会立即生效;

我们可以把它关闭,那就是‘人为提交模式’------即需要人为提交;

set autocommit = 0;

在这样更改之后,所有增删改语句,都必须使用commit时候才能生效;

b836cf3edbeb317c9d93bf2314c6e640.png

0bc978e111ce4cf3183ccf4d334b8a9b.png

4.事务执行的基本流程

1.开启一个事物

start transaction;//这里也可以写成begin

2.执行多条增删改语句;

3.判断这些语句执行的结果情况,并进行提交或回滚;

if(没有出错){

commit;//这里是提交事务;此时就是一次性完成;

}else{

rollback;//回滚事务;此时就是全部撤销;

}

56aee34548928e0c21a318e67d8d90a0.png

三、mysql编程

1.mysql编程语句中语句块包含符

mysql语句中的语句包含符其实就相当于js或者php中的大括号;

[标示符] begin

要执行的语句.......

end [标示符]

举例: if(条件判断)

begin

//......

end;

end if;

2.流程控制语句

if语句

207358809db96407eb812822924e7816.png

case语句

它相当于php中的switch;

717d2933615e09625b6e2d1dffeb3784.png

loop循环语句

c1160e3e1840f6482f3b37bf5855b46c.png

while循环

080fbb2dd9b583f634125a4ccf9184fa.png

repeat 循环

fda25e85d9d293cce21511a3d2db7dc7.png

leave语句

leave 标示符;

其作用是用来退出begin...end结构或其他局有标示符的结构。

3.mysql中的变量

mysql中,有两种变量形式;

普通变量:不带“@”符号;

定义形式:

delare  变量  类型名 [default 默认值];//普通变量必须先这样定义;

赋值形式:

set  变量名 = 值;

取值就直接使用变量名;

使用“场所”:只能在“编程环境”中使用;

什么是编程环境?只有3个:

1.定义函数的内部;

2.定义存储过程的内部;

3.定义触发器;

会话变量:带“@”符号:

定义形式:

set  @变量名 = 值; //跟php类似,无需定义,直接赋值;

基本上在任何地方都可以使用

变量赋值有如下形式:

语法1(针对普通变量)

set  变量名 = 表达式; 此语法中的变量必须先使用declare声明

语法2(针对会话变量)

set  变量名 = 表达式; 此方式无需要declare语法声明,而是直接赋值,类似php定义变量并赋值。

语法3(针对会话变量)

select @ 变量名 = 表达式;#此一举会给变量赋值,同时会作为一个select语句输出结果集;

语法4(针对会话变量)

select 表达式 into @变量名;此句虽然看起来是select语句,但其实并不输出结果集,而只是给变量赋值。

e7f9f4d98ec8e1a52dcff9d840a16f70.png

4.存储(函数)过程procedure

函数,也被说成“储存函数”,其实就是js或者php中所述的函数,但是其唯一的区别就是:这里的函数必须有一个返回值;

定义形式:

60288b04299c6cb7a4264ecee874fbf8.png

注意:

在函数内部,可以使用各种变量和流程控制的使用;

在函数内部,也可以有各种增删改语句;

在函数内部,不可以有select或其他“返回结果集”的查询类语句;

f421c062837c94330cde64188ebcabd5.png

调用形式

跟调用内部函数一样,比如:

select now();

或如果在编程语句中:

a74fac01a694a52065f44d036b01d354.png

删除函数

drop  function 函数名;

存储过程 procedure

存储过程,其本质还是函数-----但是:不能有返回值

定义形式:

6e4a0e2583d15aeaecb043fa8e4579e4.png

说明:

in:用于设定该变量是用来接受实参数据的,即传入数据;默认不写就是in

out:用于设定该变量是用来“存储存储过程中的数据”的,即传出,即函数中必须对他赋值;

inout:是in 和out 的结合,具有双向作用;

对于,out和in设定,对应的实参,就是“必须”是一个变量,因为该变量是用于“传出传入数据”;

调用存储过程

call 存储过程名(实参1,实参2......)

它应该是在“非编程环境中”调用,即增删改查的场景下:

举例:

创建一个存储过程

该存储过程的目标就是将三个数据存入数据表中;并返回该表的值

dc6ca9271e0d252ff03f0dc6997aa422.png

举例(使用in ,out, inout)

d1630760a3cbb6e7bf0cc115e8e8f2af.png

7715c063f792a6bd4e0974bef79718ee.png

删除存储过程

drop procedure  存储过程名;

5.在php中使用存储函数或者存储过程的示意

ea99c36433569589ecfacc9b6b904526.png

6.触发器

含义

触发器,也就是预先定义好的编程代码(跟存储过程和存储函数一样),并右一个名字。它不能调用,而是在某个表发生某个事件(增删改)的时候会自动调用起来。

定义形式

create trigger 触发器名  触发时机 触发事件  on  表名  for  each  row as

begin

//触发的语句

end;

说明:触发时机只有两个:before   ,after

触发事件,只有三个:insert,update,delete

在某个表进行insert 之前或之后,回去执行其中写好 的代码;即每个表只有6个情形会可能调用该触发器;

通常,触发器用于对某个表进行增删改操作的时候,需要同时去做另外一件事的情形;

在触发器的内部,有两个关键字代表某种特殊的含义,可以用于获取有关数据:

new  它代表当前正要执行的insert或update的时候的“新行”数据;通过他,可以获取这一新行数据的任意一个字段的值,形式为:

set @vq = new.id//获得该新插入获update行的id字段值

old:它代表当前正要执行的delete的时候的“旧行”数据,通过它,可以获取这一旧行数据的任意一个字段的值,形式为:

set @va = old.id //获得该新插入获update行的id字段的值(前提是有id)

a4db39ce021f1e3e7db4c841f778c8ae.png

e49bb61f60f7768987fab6d2ca0ceedc.png

25facb435cdf82a5fbf5c1bc8c443731.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值