N天爆肝数据库——MySQL(3)

本篇文章,主要对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之后

猜你喜欢

转载自blog.csdn.net/weixin_74888502/article/details/131673448