1
2
3
4
5
6
7
8
9
10
11
12
CREATE user'u3' IDENTIFIED by 'root'
grant all on fly.car to 'u3' WITH GRANT OPTION#可以使u3拥有的权限给别人授权、
DROP user 'user01'@'localhost'
SELECT * FROM mysql.user; #查询用户所有的信息
FLUSH PRIVILEGES;#刷新权限
-- (1)ALL PRIVILEGES 表示所有权限,你也可以使用select、update等权限。
-- (2)ON 用来指定权限针对哪些库和表。
-- (3)*.* 中前面的号用来指定数据库名,后面的号用来指定表名。
-- (4)TO 表示将权限赋予某个用户。
-- (5)@ 前面表示用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。
-- (6)IDENTIFIED BY 指定用户的登录密码。
-- (7)WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人
  • image-20230414080926785

RESTRICT(默认) 当父表删除|更新记录时,首先检查记录是否有对应的外键,有,报错。
NO ACTION 同RESTRICT
SET NULL 当父表删除|更新记录时,首先检查记录是否有对应的外键,有,则设置子表对应的外键值为null(外键允许为null)。
CASCADE 当父表删除|更新记录时,首先检查记录是否有对应的外键, 有,则设置子表对应的外键值跟随(父表)外键来源表相应的值而变化。

image-20230414091127734

ANY

1
2
select sname,sage from student where sage < any (SELECT sage from student where sdept = 'cs') and sdept <> 'cs'
SELECT Sname,Sage FROM Student WHERE Sage < ALL (SELECT Sage FROM Student WHERE Sdept= 'CS') AND Sdept <> 'CS';

**ANY:**只要比其中的某一个值小就显示

**ALL:**要比全部的值都小

1
2
3
4
5
CREATE table dept_age(
sdept char(15),
avg_age SMALLINT);
INSERT into dept_age(sdept,avg_age) select sdept , avg(sage)from student GROUP BY sdept;
# 创建一个新表 吧查询出来的数据插入进去
1
2
3
# with check OPTION 不能修改where后面的列的数据,不带这个可以修改
create VIEW is_student as select sno, sname , sage from student where sdept='is'
create VIEW is_student4 as select *from student where sdept='is' with check OPTION

数据库

四种数据库:Mysql,Oracle,SQLServer,PostgreSQL

结构化查询语言

1
2
3
创建表
create table dept(not null是不能为空值,numeric(a,b)精确取值,总位数a,小数点后位数b)
create table emmployees()

insert用法

第一种用法

1
2
insert into 表名 values(字段一的值,字段二的值.....);

第二种用法

1
insert into 表名(字段一,字段二,字段三,....)values(字段一的值,字段二的值....);

Select

1
2
select * from employees;
select name,salary from employeses;

使用distinct可以去重复的值

1
select distinct 字段名 from 表名;

Where

image-20230307212626495

例如

1
select name,salary from employees where hiredata<'2000-01-01';

and和or

and和or可以用在where子句中把两个或多个条件结合起来。

and运算符要求两个条件都成立

or运算符有一个条件成立就行了

1
select 字段名 from 表名 字段n 运算符 值n and|or 字段m 运算符 值m;

like

在where中使用,like后%匹配多个字符

1
select 字段名 from 表名 where 字段 like 字符串;

in

in相当于or条件

1
select 字段名 from 表名 字段名 in(值1,值2);相当于查询字段名=1 or 2 的值

between …… and

是选取两个值之间的数据(相当于 >= and <=)

1
select 字段名 from 表名 where 字段名 between1 and2

注:not between 是不在这两个值之间的

order by

对于结果进行排序,默认选择升序(asc)排序,也可以指定desc降序进行排序

1
select 字段名 from 表名 字段一,字段二,......asc|desc;

update

用法

1
2
3
update 表名 set 字段1=?,字段二=where 字句
#如果不指明where就是所有的记录都得更新
#修改全部数据

delete

1
2
delete from 表名 where 字句
如果不指明where就是所有的记录都得删除

index

索引可以提高访问数据的速度

1
create index 索引名 on 表名 (多字段);

view

1
create view 视图名 as select 语句;

修改视图同时修改底层数据

字段值NULL判断要用is null 或者 is not null

字段名和表名的别名

1
2
3
select 字段名 as 别名 from 表名 as  别名;

as可省略

image-20230307220250097

join连接

image-20230307220343057

1
2
3
4
5
6
7
8
9
10
//内连接
1. select * from 表名 join 表名 on 条件 where 表达式
2. select * from 表名 表名 where 表达式
查询“3001”课程比“3003”课程成绩高的所有学生的学号与分数;
SELECT a.sid,a.score FROM (SELECT sid,score FROM sc WHERE cid="3001") a,

(SELECT sid,score FROM sc WHERE cid="3003") b

WHERE a.score>b.score AND a.sid=b.sid

image-20230307220528897

SubQuery

1
select 字段1,字段2.... from 表名 where 字段名 操作符  (子查询);
image-20230307220736009

常用函数

image-20230307220830620

1
2
max(字段名)min(字段名)avg(字段名)sum(字段名)
例如:select sum(salary) from employee

group by分组

image-20230307221049745

having 过滤分组

image-20230307221118356

image-20230307221138167

1
2
3
4
5
6
//统计每个城市的人口数量
select city, count(*) num from 表名 group by city;
//统计每个城市的人口数量而且数量大于三个的
select city, count(*) num from 表名 group by city having num > 3;
//统计每个城市年龄最大的人
select max(age) from 表名 group by city;

如果预估数据量比较大,我们使用SQL_BIG_RESULT 这个提示直接用磁盘临时表

1
select SQL_BIG_RESULT city, count(*) as num from 表名 group by city;

like

1
2
select * fromwhere lie like binary '%_'
%是多少个都可以 _只能是一个 binary 是开启区分大小写

Limit

1
2
3
4
#前面的0可以省略
select * from 表 limit 5;
select * from 表 limit 0,5;
#不够的话有几条显示几条