当前位置: 首页 > news >正文

学习MySQL的第十一天

逆风执炬,向光而行

一、补充

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

        1.1 check约束

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

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

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时添加约束

ALTER TABLE gardens
MODIFY `name` VARCHAR(255) DEFAULT 'Me'DESC gardens

        1.3 在 CREATE TABLE时删除约束

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 查询语句

        准备工作:

    CREATE DATABASE test1;USE test1;CREATE TABLE empsASSELECT *FROM emp.departments;CREATE TABLE deptsASSELECT *FROM emp.department_position;SELECT * FROM emps;SELECT * FROM depts;

        2.3 创建视图

	CREATE VIEW empss ASSELECT emps.id,emps.`name`,depts.positionFROM emps,depts# 因为这里只是为了展示一下单表的情况,所以就没有加入多表的连接条件

        2.4 针对于多表

	CREATE VIEW empsssASSELECT emps.id,emps.`name`,depts.positionFROM emps,deptsWHERE emps.id = depts.id

        2.5 添加视图字段的别名

	CREATE VIEW empsss(emp1_id,depts_position)ASSELECT emps.id,depts.positionFROM emps,deptsWHERE emps.id = depts.id;SELECT * FROM empsss;

        2.6 视图的优化

	CREATE VIEW emp_deptASSELECT CONCAT(emp1.`name`,'(',depts.position,')') '姓名(部门)',emp1.salaryFROM emp1 JOIN depts ON emp1.id = depts.id;SELECT * FROM emp_dept;

        2.7 基于视图创建视图

 CREATE VIEW f_emp_deptASSELECT emp_dept.salaryFROM emp_dept;SELECT * FROM emp_dept;

        2.8  查看视图

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

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

        2.9 更新视图中的数据

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

 UPDATE emp_deptSET salary = 1000WHERE salary IS NULL;SELECT * FROM emp_dept;

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

 USE testCREATE VIEW avgASSELECT student.Sname,avg(sc.grade)FROM student,sc,courseWHERE student.Sno = sc.Sno AND sc.`课程号` = course.`课程号`GROUP BY student.Sname

        在这里进行错误展示

 UPDATE avgSET avg(sc.grade) = 100WHERE Sname = '周九'SELECT * FROM avg;

三、结语

        风起青萍,浪成微澜

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

相关文章:

  • 把dll模块注入到游戏进程的方法_挂起进程注入
  • c加加学习之day06->STL标准库->day01
  • 从零开始在Win上添加一块QEMU开发板(四)实现简单USART
  • AD16如何对同值元件进行排序
  • 2024武汉邀请赛B.Countless Me
  • 【Java 数据结构】泛型
  • 【银河麒麟高级服务器操作系统】磁盘只读问题分析
  • X0405-ASEMI电源AI器件专用X0405
  • C#中实现JSON解析器
  • SSH 反向隧道访问内网服务
  • 【网络】TCP/IP协议学习
  • 【蓝桥杯】可分解的正整数
  • Linux学习笔记之动静态库
  • Java基础 — 运算符与输入器
  • css3新特性第七章(3D变换)
  • OpenBMC:BmcWeb login认证
  • vscode插件系列-2、认识vscode
  • Golang 闭包学习
  • 数论知识啊
  • 电子处方模块开发避坑指南:从互联网医院系统源码实践出发
  • 中国海警登临铁线礁开展维权行动并展示五星红旗
  • 临汾攻坚PM2.5:一座曾经“爆表”城市的空气治理探索
  • 外交部回应菲律宾涉仁爱礁言论:菲方7轮运补均提前通报中方
  • 金湘军辞去山西省省长职务
  • 新“出差三人组”亮相!神二十乘组简历来了
  • 匈牙利总理投票反对乌克兰加入欧盟