即:要求全部都满足,才算是满足;
进一步解释:
假设表1(tab1)有数据为:
id name
1 ‘aa’,
5 ‘bb’
11 ‘cc’
假设表2(tab2)有数据为:
f1 f2
3 ‘x1’
6 ‘x2’
12 ‘x3’
则:
select * from tab2 where f1 > all ( select id from tab1 );
结果是:
12 ‘x3’

举例1:
查询出所有非最高价的商品;
思考第一步:
select price from product;
思考第二步:这些非最高价的商品的价格,只是会小于上述“所有价格”中的某一个;
select * from product where price < any ( select price from product );
举例2:
查询出所有最高价的商品;
思考:最高价的商品价格,有一个特征:大于等于“所有价格”:
select * from product where price >= all ( select price from product );
--------------------------------------------------------------------------------------
使用some的子查询
一句话:some是any的同义词。
--------------------------------------------------------------------------------------
使用exists的查询
形式:where exists( 子查询 )
含义:该子查询如果“有数据”,则exists的结果是true,否则就是false
--------------------------------------------------------------------------------------
联合查询union
语法形式
select 语句1
union【all|distinct】
select 语句2;
此联合查询语句,默认会“自动消除重复行”,即默认是distinct
如果想要将所有数据都显示(允许重复行),就使用all
即,这里,写all才有意义;

实现“全外连接”:
select * f rom 表1 left join 表2 on 条件
union
select * f rom 表1 right join 表2 on 条件
--------------------------------------------------------------------------------------
用户管理
用户数据所在位置 服务器:localhost>数据库:mysql>表:user
--------------------------------------------------------------------------------------
创建用户:
形式:create user ‘用户名’@’允许登录的地址/服务器’ identified by ‘密码’;
删除用户:
drop user ‘用户名’@’允许登录的地址或服务器名’;
修改用户密码:
修改自己的密码:
set password = password('密码');
修改他人的密码(前提是有权限):
set password for '用户名'@'允许登录的地址' = password('密码');
--------------------------------------------------------------------------------------
授予权限:
形式:
grant 权限列表 on 某库.某个对象 to ‘用户名’@’允许登录的位置’【identified by ‘密码’】;
说明:
1,权限列表,就是,多个权限的名词,相互之间用逗号分开,比如: select, insert, update
也可以写:all
2,某库.某个对象,表示,给指定的某个数据库中的某个“下级单位”赋权;
下级单位有:表名,视图名,存储过程名; 存储函数名;
其中,有2个特殊的语法:
*.*: 代表所有数据库中的所有下级单位;
某库.* :代表指定的该库中的所有下级单位;
3,【identified by ‘密码’】是可省略部分,如果不省略,就表示赋权的同时,也去修改它的密码;
但:如果该用户不存储,此时其实就是创建一个新用户;并此时就必须设置其密码了
--------------------------------------------------------------------------------------
剥夺权限:
形式:revoke 权限列表 on 某库.某个对象 from ‘用户名’@’允许登录的位置’
--------------------------------------------------------------------------------------
事务控制语言
事务模式是指:
在我们的cmd命令行模式中,是否开启了“一条语句就是一个事务”的这个开关:
默认情况下(安装后),这个模式是开启的,称为“自动提交模式”;
set autocommit = 1;
这样之后,每条增删改语句,都会立即生效;
我们可以把它关闭,那就是“人为提交模式”——即需要人为提交;
set autocommit = 0;
这样之后,所有增删改语句,都必须使用commit之后,才能生效;
--------------------------------------------------------------------------------------
事务执行的基本流程
1,开启一个事务:
start transaction; //也可以写成:begin;
2,执行多条增删改语句; //也就是相当于希望这多条语句要作为一个“不可分割”的整体去执行的任务
3,判断这些语句执行的结果情况,并进行提交或回滚:
if( 没有出错 ){
commit; //提交事务;此时就是一次性完成;
}
else{
rollback; //回滚事务;此时就是全部撤销;
}
--------------------------------------------------------------------------------------
mysql编程中语句块包含符:
其实就是相当于js或php中大括号语法:
[标识符:]begin
//语句。。。。
end [标识符];
标识符就是定义定义的任意的名字而已,比如:
if (条件判断)
begin
//。。。。
end;
end if;

if (条件判断)
A:begin
//。。。。
end A;
end if;

A就是标识符,它的作用是“标识”该语句块,以期可以在该语句块中“使用它”——其实就是退出;
--------------------------------------------------------------------------------------
case语句:
语法1示意代码:
case @v1
when 1 then //如果@v1 等于 1,则表示满足条件,进入这个分支;
begin
//.......
end;
when 2 then
begin
//........
end;
else
begin
//......
end;
end case;
说明:
@v1表示一个变量;后面都这样。

语法2示意代码:
case
when @v1 > 0 then //如果该条件满足,就执行这个分支,否则就继续判断下一个条件。。。
begin
//......
end;
when @v1 < 0 then
begin
//.....
end;
else
begin
//......
end;
end case;
--------------------------------------------------------------------------------------
loop循环语句
标识符:loop
begin
//这里就是循环的语句块。。。
//注意:这里必须有一个“退出循环”的逻辑机制;否则该循环就是死循环,其基本形式类似这样:
if (条件) then
leave 标识符; //退出;
end if;
end;
end loop 标识符
--------------------------------------------------------------------------------------
while 循环
举例:
set @v1 = 1; //赋值语句;
while @v1 < 10 do
begin
insert into tab1 (id, num) values ( null, @v1 );
set @v1 = @v1 + 1;
end;
end while;
--------------------------------------------------------------------------------------
repeat 循环
举例:
set @v1 = 1; //赋值语句;
repeat
begin
insert into tab1 (id, num) values ( null, @v1 );
set @v1 = @v1 + 1;
end;
until @v1 >= 10
end repeat;
--------------------------------------------------------------------------------------
leave语句:
语法:leave 标识符;
作用:用来退出begin...end结构或其他具有标识符的结构。
--------------------------------------------------------------------------------------
mysql中,有两种变量形式:
普通变量: 不带“@”符号;
定义形式:
declare 变量名 类型名 【default 默认值】; //普通变量必须先这样定义
赋值形式:
set 变量名 = 值;
取值:就直接使用变量名;

使用“场所”:只能在“编程环境”中使用;
什么是编程环境?只有3个:
1,定义函数的内部;
2,定义存储过程的内部;
3,定义触发器的内部;

会话变量: 带“@”符号;
定义形式(其实也是赋值形式):
set @变量名 = 值; //跟php类似,无需定义,直接赋值,第一次就算是定义
取值:就直接使用变量名;
使用“场所”:基本上哪里都可以用;
--------------------------------------------------------------------------------------
变量赋值有如下形式:
语法1(针对普通变量):
oset 变量名 = 表达式;#此语法中的变量必须先使用declare声明
语法2(针对会话变量):
oset @变量名 = 表达式; #此方式可以无需declare语法声明,而是直接赋值,类似php定义变量并赋值。
语法3(针对会话变量):
oselect @变量名 := 表达式;#此语句会给该变量赋值,同时还会作为一个select语句输出“结果集”。
语法4(针对会话变量):
oselect 表达式 into @变量名;#此语句虽然看起来是select语句,但其实并不输出“结果集”,而只是给变量赋值。
--------------------------------------------------------------------------------------
(存储)函数:
create function 函数名(形参1 类型1,形参2 类型2,。。。)
returns 返回类型
begin
#这里写完整的函数中语句
return xx值;
end

类型可以是mysql中的各种数据类型,比如int,float,date,char,varchar,等等
--------------------------------------------------------------------------------------
调用形式:
跟调用内部函数一样!比如:
select now(), 8+3 as f2, func1(); //这里,now()是系统函数; func1()是自定义函数。
或如果在编程语句中:
set @v1 = now();
set @v2 = func1();

删除函数:
drop function 函数名;
--------------------------------------------------------------------------------------
create procedure 存储过程名([in|out|inout]形参1 类型1,[in|out|inout]形参2 类型2,。。。)
begin
#完整的过程中语句
#各种流程控制
#增 删 改 查
#查询语句(select)会作为存储过程调用的结果,跟执行select语句一样,返回结果集
end

说明:
1,in:用于设定该变量是用来“接收实参数据”的,即“传入”;默认不写,就是in

Prev | Next
Pg.: 1 2 3 4 5 6 7 8 9


Back to home | File page

Subscribe | Register | Login | N