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

三、结语

风起青萍,浪成微澜

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

相关推荐
Y3815326622 小时前
MySQL 慢查询排查实战:EXPLAIN 看懂 type 与 Extra,一个字段定位性能问题
数据库·mysql
mykj15512 小时前
英语单词APP解锁学习新方式,智能高效背单词
学习·英语单词app
知识分享小能手3 小时前
深度学习学习教程,从入门到精通,深度学习中的正则化 — 完整知识点与代码示例(7)
人工智能·深度学习·学习
Logintern093 小时前
PostgreSQL 的 ORDER BY 多列排序
数据库·postgresql
今天AI了吗3 小时前
DeepSeek Harness 深度解析:从评测架构到实战落地
java·网络·数据库·人工智能·架构·java-ee
~kiss~4 小时前
Agent 的 未来吗?String: An Agentic OS Where Every App Is a Markdown File
学习
数据库小学妹4 小时前
为什么MySQL索引用B+树?从存储底层讲透原理
数据库·mysql·b+树·索引优化·磁盘io·数据库原理
BestHeaker4 小时前
制造业 MES 开发入门:和互联网业务开发的 5 个本质差异(一)
数据库·经验分享·制造业·mes
HugoStudio_SWAN4 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
自动化监测Learner5 小时前
Navicat Premium 17 中文版安装教程(2026最新版)
java·linux·数据库