学习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;

三、结语

风起青萍,浪成微澜

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

相关推荐
Han.miracle18 小时前
数据结构——排序的学习(一)
java·数据结构·学习·算法·排序算法
摇滚侠18 小时前
Spring Boot 3零基础教程,WEB 开发 通过配置类代码方式修改静态资源配置 笔记32
java·spring boot·笔记
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ18 小时前
mapper.xml sql动态表查询配置
xml·java·sql
元闰子18 小时前
怎么让程序更高效地连起来?
数据库·redis·mysql
洲覆18 小时前
Redis 内存淘汰策略
开发语言·数据库·redis·缓存
电子云与长程纠缠18 小时前
Blender入门学习01
学习·blender
胖头鱼的鱼缸(尹海文)18 小时前
数据库管理-第376期 Oracle AI DB 23.26新特性一览(20251016)
数据库·人工智能·oracle
麦聪聊数据19 小时前
浅谈SQL审核(一):SQL审核实现方式与常见工具的选择
数据库·sql
ajassi200019 小时前
开源 Linux 服务器与中间件(七)数据库--MySQL
linux·服务器·数据库·ubuntu·开源
qiuiuiu41319 小时前
正点原子RK3568学习日志12-注册字符设备
linux·开发语言·单片机·学习·ubuntu