mysql中的用户信息都存储在系统数据库mysql的user表中
创建用户:
create user ‘用户名’@’允许其登录的地址’ identified by ‘密码’;
注:创建的用户需同时指定该用户可以在哪个地址进行登录(例:localhost) ,“%”代表任何地址
删除用户:
drop user ‘用户名’@’允许其登录的地址’;
修改用户密码:
修改自己密码: set password = password(‘新密码’);
修改他人密码(必须有修改权限):
set password for ‘用户名’@’允许其登录的地址’ = password(‘新密码’);
分配权限:、
grant 权限名1,权限名2, .... on 数据库名.对象名 to ‘用户名’@’允许其登录的地址’ identified by
注:1.ALL 表示“所有权限”
2.对象名:就是一个数据库中“装”的东西,表是最常见的,也可以是视图,存储过程,存储函数等。
其中:*.*表示所有数据中的所有对象
3.密码可以不写
4.如果用户不存在密码必须写
删除权限:
revoke 权限名1,权限名2, .... on 数据库名.对象名 from ‘用户名’@’允许其登录的地址’ ;
事务:
“事务”是一种可以保证“多条语句一次性执行完成”或“一条都不执行”的机制。
用法:
事务可以看作是一个“容器”,将多条语句,放入该容器,最后,只要一个命令行,来决定其中的所有语句是否“执行”。
运用场景:
现在,test1突然需要一笔钱,买iPhone6,向test2借钱4000。
银行转账:
第一步: update cunkuan set 存款=存款-4000 where id=2;
第一步做完,突然断电了!
第二步: update cunkuan set 存款=存款+4000 where id=1;
则如果没有事务,就可能发生这种事情(惨案)。
特点:
mysql默认安装好之后,其事务模式是:一条语句当作一个事务。
事务设定:
set autocommit = 0; //false,关闭该模式,即此时不再是一条语句一个事务了。
//结果是:必须使用commit语句才能够生效。
注意:autocommit的设置值,只是影响通常情况下都每条语句的默认行为(自动提交还是等着commit提交)
判断流程
if( 判断是否有错误){
//执行——才针对执行了物理性改变——即生效。
commit;
}
eslse{
//回滚——不执行任何语句。
rollback;
}
mysql编程:
if语句:与php中用法类似
case语句:(类似php中的switch)
while循环语句:
[标识符,用于退出] while 条件 do
语句块
end whilep[标识符,用于退出]
MySQL变量
普通变量的声明语法:
declare 变量名 变量类型 [default 初始值]
变量的赋值语法
set 变量名 = 变量值
mysql还有一种变量形式,可以称为“会话变量”
会话变量的形式为: @变量名;
会话变量无需单独声明,而是直接赋值就可以,类似php
会话变量的赋值: set 变量名 = 值;
会话变量可以在普通命令行环境中或编程环境中使用。
语法1:set 变量名 = 表达式; #此语法中的变量必须先使用declare声明
语法2:set @变量名 = 表达式; #此方式可以无需declare语法声明,而是直接赋值,类似php定义变量并赋值。
语法3:select @变量名 := 表达式;#此语句会给该变量赋值,同时还会作为一个select语句输出“结果集”
语法4:select 表达式 into @变量名;#此语句虽然看起来是select语句,但其实并不输出“结果集”,而只是给变量赋值
MySQL函数
create function 函数名 (形参 类型)
returns 返回类型
begin
语句块;
return 值;
end;
调用:
select 3, now(), f1(); //f1为自定义的存储函数。
select 3, now(), f2(3, ‘abc’, @v1); //带3个实参,其中@v1是一个前面赋值了的变量。
删除函数:
drop function [if exists] 存储函数名;
实际,在php中,其实是这样:
$sql = “call pro1(8, ‘dd‘) ”;
mysql_query( $sql );
触发器:
其实只是预先定义好的一段代码。该段代码无需人工调用,而是会在‘预计’好的某个情形下自动执行。
定义:
create trigger 触发器名字 before(或after) insert(或update或delete) on 表名 for each row begin
注:要执行的代码,语句块,编程环境,但这里也不能使用select语句。
在触发器内部,其中有两个关键字具有特定含义和数据获取作用:
new:代表新插入的一条数据,在insert事件的时候有效。
old:代表旧的一条数据,在update或delete的时候有效。
删除触发器: drop trigger 触发器名