学习MySQL的第十一天

逆风执炬,向光而行

一、补充

我们首先对之前的文章进行一下补充

1.1 check约束

我们通过具体的案例来对这check约束进行一下讲解

sql 复制代码
CREATE TABLE gardens(
  id INT CHECK(id<10),
  name VARCHAR(255) UNIQUE,
  garden INT DEFAULT 100
);

DESC gardens;

INSERT INTO gardens
VALUES(1,'t',100)

此时,如果你要添加的数据中,id 大于等于10,将会显示插入失败;如果garden没有具体数据,则garden默认为是100

sql 复制代码
INSERT INTO gardens(id,name)
VALUES(2,'p')

INSERT INTO gardens(id,name)
VALUES(40,'t')

SELECT * FROM gardens


Check constraint 'gardens_chk_1' is violated

1.2 在 ALTER TABLE时添加约束

sql 复制代码
ALTER TABLE gardens
MODIFY `name` VARCHAR(255) DEFAULT 'Me'

DESC gardens

1.3 在 CREATE TABLE时删除约束

sql 复制代码
ALTER TABLE gardens
MODIFY `name` VARCHAR(255);
 
DESC gardens

这里的删除其实同样是一种修改

二、视图

2.1 视图的理解

1.视图是一种虚拟表,本身是不具有数据的,占用很少的内存空间,它是SQL中的一个重要概念,可以将视图理解为存储起来的SELECT 语句

2.视图中的select语句涉及到的表,称为基表,针对视图做DML操作,会影响到对应的基表中的数据,反之亦然

3.视图本身的删除,不会导致基表中数据的删除

4.视图的应用场景:针对小型项目,不推荐使用视图

5.视图的优点:简化查询、控制数据访问权限

2.2 创建视图

在 CREATE VIEW语句中嵌入子查询

方式为:CREATE VIEW 视图名称

AS 查询语句

准备工作:

sql 复制代码
    CREATE DATABASE test1;
	USE test1;
	CREATE TABLE emps
	AS
	SELECT *
	FROM emp.departments;
	
	CREATE TABLE depts
	AS
	SELECT *
	FROM emp.department_position;

	SELECT * FROM emps;
	SELECT * FROM depts;

2.3 创建视图

sql 复制代码
	CREATE VIEW empss 
	AS
	SELECT emps.id,emps.`name`,depts.position
	FROM emps,depts

    # 因为这里只是为了展示一下单表的情况,所以就没有加入多表的连接条件

2.4 针对于多表

sql 复制代码
	CREATE VIEW empsss
	AS
	SELECT emps.id,emps.`name`,depts.position
	FROM emps,depts
	WHERE emps.id = depts.id

2.5 添加视图字段的别名

sql 复制代码
	CREATE VIEW empsss(emp1_id,depts_position)
	AS
	SELECT emps.id,depts.position
	FROM emps,depts
	WHERE emps.id = depts.id;

    SELECT * FROM empsss;

2.6 视图的优化

sql 复制代码
	CREATE VIEW emp_dept
	AS
	SELECT CONCAT(emp1.`name`,'(',depts.position,')') '姓名(部门)',emp1.salary
	FROM emp1 JOIN depts ON emp1.id = depts.id;

    SELECT * FROM emp_dept;

2.7 基于视图创建视图

sql 复制代码
 CREATE VIEW f_emp_dept
 AS
 SELECT emp_dept.salary
 FROM emp_dept;

 SELECT * FROM emp_dept;

2.8 查看视图

sql 复制代码
 # 查看数据库的表对象、视图对象
 SHOW TABLES;
 # 查看视图结构
 DESC emp_dept;
 # 查看视图属性信息
 SHOW TABLE STATUS LIKE 'emp_dept'; 
 # 查看视图的详细定义信息
 SHOW CREATE VIEW emp_dept;

查看数据库的表对象、视图对象
查看视图结构


查看视图属性信息
查看视图的详细定义信息

2.9 更新视图中的数据

更新表中的数据会导致视图中的数据改变;同理,更新视图中的数据也会导致表中的数据改变

sql 复制代码
 UPDATE emp_dept
 SET salary = 1000
 WHERE salary IS NULL;
 
 SELECT * FROM emp_dept;

当视图中的字段在及原表中不存在,则不更新视图中的数据

sql 复制代码
 USE test
 CREATE VIEW avg
 AS
 SELECT student.Sname,avg(sc.grade)
 FROM student,sc,course
 WHERE student.Sno = sc.Sno AND sc.`课程号` = course.`课程号`
 GROUP BY student.Sname

在这里进行错误展示

sql 复制代码
 UPDATE avg
 SET avg(sc.grade) = 100
 WHERE Sname = '周九'
 SELECT * FROM avg;

三、结语

风起青萍,浪成微澜

须知少日拏云志,曾许人间第一流。我们还年轻,我们还有无限可能!

相关推荐
知识分享小能手1 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
luckys.one1 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
言之。3 小时前
Django中的软删除
数据库·django·sqlite
汇能感知4 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun4 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao4 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾4 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
阿里嘎多哈基米4 小时前
SQL 层面行转列
数据库·sql·状态模式·mapper·行转列
抠脚学代码5 小时前
Ubuntu Qt x64平台搭建 arm64 编译套件
数据库·qt·ubuntu
jakeswang5 小时前
全解MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析
数据库·mysql