本篇文章,主要对DCL、 函数、 约束和多表查询进行知识总结和学习。
期待和大家一起学习进步。
DCL
DCL-介绍
数据控制语言,用来管理数据库用户、控制数据库的访问权限。
DCL-管理用户
查询用户
USE mysql;
SELECT * FROM user;
创建用户
CREATE USER ‘用户名’@’主机名’IDENTIFIED BY ’密码’;
修改用户密码
ALTER USER ’用户名’@’主机名’ IDENTIFIED WITH mysql_password BY ‘新密码’;
删除密码
DROP USER ‘用户名’@’主机名’;
注意:
本机名可以使用%统配
这类SQL开发人员操作较少,主要是数据库管理人员使用。
DCL-权限控制
MySQL常用
ALL,ALL PRIVILEGES 所有权限
SELECT 查询
INSERT 插入
UPDATE 修改
DELETE 删除
ALTER 修改表
DROP 删除数据库/表/视图
CREATE 创建数据库/表
![在这里插入图片描述](https://img-blog.csdnimg.cn/dd8da57d2b434e9285b643dde136af36.png)
查询权限
SHOW CRANTS FOR‘用户名’@’主机名’;
授予权限
CREATE 权限列表 ON 数据库名.表名 TO ‘用户名’@’主机名’;
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM‘用户名’@’主机名’;
注意:
多个权限之间,使用逗号分割
授权时,数据库名和表名可以使用*进行通配,代表所有。
函数
是指一段可以直被另一段程序调用的程序或代码
分类
字符串函数、数值函数、日期函数、流程函数
常用字符串函数
CONCAT(S1,S2,...Sn)字符串拼接,将S1,S2...Sn拼接成一个字符串
LOWER(str)将字符串str全部转为小写
UPPER(str)将字符串str全部转为大写
LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
RPAD(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头部和尾部的空格
SUBSTRING(str,start,len)返回从字符串str从start位置起的len个长度的字符串
常用的数值函数
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x,y)返回x/y的模
RAND()返回0~1内的随机数
ROUND(x,y)求参数x的四舍五入的值,保留y位小数
常用的日期函数
CURDATE() 返回当前日期
CURTIME() 返回当前时间
NOW()返回当前日期和时间
YEAR(date)获取指定date的年份
MONTH(date)获取指定date的月份
DAY(date)获取指定date的日期
DATE_ADD(date,INTERVAL expr type)返回一个日期/时间值加上一个时间
间隔expr后的时间值
DATEDIFF(date1,date2)返回起始日期date1和结束时间date2之间的天数
流程函数
IF(value,t,f)如果value为true,返回t,否则返回f
IFNULL(value1,value2)如果value1不为空,返回value1,否则返回value2
CASE WHEN [val]THEN[res1]...ELSE[default] END 如果val1为true,返
回res1,...否则返回default默认值
CASE[exper] WHEN[val1] THEN[res1]...ELSE[default] END 如果expr的值
等于val1返回res1,..否则返回default默认值
约束:
概念
约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的
保证数据库中数据的正确,有效性和完整性。
分类:
非空约束:NOT NULL 限制该字段的数据不能为null
唯一约束: UNIQUE 保证该字段的所有数据都是唯一、不重复的
主键约束:PRRIMARY KEY 主键是一行数据的唯一标识,要求非空且唯一
默认约束:DEFAULT 保存数据时,如果未指定该字段的值,则采用默认值
检查约束:CHECK 保证字段值满足某一个条件
外键约束:FOREIGN KEY 用来让两张表的数据之间建立连接,保证数据的一致性
和完整性
外键约束:
概念
外键用来让两张表中的数据之间建立连接,从而保证数据的一致性和完整性。
语法:
添加外键
CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT][外键名称]FOREIGN(外键字段名)REFERENCES 主表(主表列名)
);
ALTER TABLE 表名ADD CONSTRAINT 外键名称 FOREING KEY(外键字段名) REFERENCES 主表(主表列名);
删除外键
ALTER TABLE 表名DROP FOREIGN KEY 外键名称;
删除/更新行为
NO ACTION
RESTRICT
CASCADE
SET NULL
SET DEFAULT
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREING KEY (外键名称)REFERNCES 主表名(主表名段名)ON UPDATE CASCADE ON DELETE CASCADE;
多表关系
概述
各个表结构之间相互存在联系有:一对多,多对多,一对一
一对多(多对一)
实现:在多的一方建立外键,指向一的一方的主键
举例:员工和部门
多对多
实现:建立第三张中间表,中间表至少包含两个外键,费别关联两方的主键
案例:学生于课程
一对一
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
案例:用户与用户详细信息的关系
多表查询
概述:指从多张表中查询数据
笛卡尔积:在多表查询时,需要消除无效的笛卡尔积
分类
连接查询
内连接:相当于查询A,B交集部分数据
外连接
左外连接:查询左表所有数据,以及两张表交集部分数据
右外连接:查询游标所有数据,以及两张表交集部分数据
自连接:当前表与自身的连接查询,自连接必须使用表别名
子查询
多表查询-内连接
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件...;
显示内连接
SELECT 字段列表 FROM 表1[INNER]JOIN表2 ON连接条件...;
注意
内连接查询时两张表交集的部分
多表查询-外连接
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER]JOIN表2 ON条件...;
相当于查找表1(左表)的所有数据,包含表1和表2交集部分的数据
右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER]JOIN表2 ON条件...;
相当于查找表2(右表)的所有数据,包含表1和表2交集部分的数据
多表查询-自连接
语法
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON条件...;
自连接查询,可以是内连接查询,也可以是外连接查询。
联合查询-union,union all
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集
语法:
SELECT 字段列表 FROM 表A...
UNION[ALL]
SELECT 字段列表 FROM 表B...;
注意:
对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。
子查询
概念
SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
SELECT * FROM t1 WHERE column1=(SELECT column1 FROM t2);
子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个。
根据子查询结果不同,分为:
标量子查询(子查询结果为单个值)
列子查询(子查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列)
根据子查询位置,分为
WHERE之后
FROM之后
SELECT之后