学习MySQL的第十一天

打印 上一主题 下一主题

主题 1728|帖子 1728|积分 5184



逆风执炬,向光而行

一、补充

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

        我们通过具体的案例来对这check约束进行一下讲解
  1. CREATE TABLE gardens(
  2.   id INT CHECK(id<10),
  3.   name VARCHAR(255) UNIQUE,
  4.   garden INT DEFAULT 100
  5. );
  6. DESC gardens;
  7. INSERT INTO gardens
  8. VALUES(1,'t',100)
复制代码
        此时,假如你要添加的数据中,id 大于即是10,将会表现插入失败;假如garden没有具体数据,则garden默认为是100
  1. INSERT INTO gardens(id,name)
  2. VALUES(2,'p')
  3. INSERT INTO gardens(id,name)
  4. VALUES(40,'t')
  5. SELECT * FROM gardens
复制代码

      
       Check constraint 'gardens_chk_1' is violated               1.2 在 ALTER TABLE时添加约束

  1. ALTER TABLE gardens
  2. MODIFY `name` VARCHAR(255) DEFAULT 'Me'
  3. DESC gardens
复制代码

        1.3 在 CREATE TABLE时删除约束

  1. ALTER TABLE gardens
  2. MODIFY `name` VARCHAR(255);
  3. DESC gardens
复制代码
     
       这里的删除着实同样是一种修改       二、视图

        2.1 视图的理解

        1.视图是一种虚拟表,本身是不具有数据的,占用很少的内存空间,它是SQL中的一个告急概念,可以将视图理解为存储起来的SELECT 语句
        2.视图中的select语句涉及到的表,称为基表,针对视图做DML操纵,会影响到对应的基表中的数据,反之亦然
        3.视图本身的删除,不会导致基表中数据的删除
        4.视图的应用场景:针对小型项目,不保举使用视图
        5.视图的优点:简化查询、控制数据访问权限
        2.2 创建视图

        在 CREATE VIEW语句中嵌入子查询
        方式为:CREATE VIEW 视图名称
        AS 查询语句
        预备工作:
  1.     CREATE DATABASE test1;
  2.         USE test1;
  3.         CREATE TABLE emps
  4.         AS
  5.         SELECT *
  6.         FROM emp.departments;
  7.        
  8.         CREATE TABLE depts
  9.         AS
  10.         SELECT *
  11.         FROM emp.department_position;
  12.         SELECT * FROM emps;
  13.         SELECT * FROM depts;
复制代码

        2.3 创建视图

  1.         CREATE VIEW empss
  2.         AS
  3.         SELECT emps.id,emps.`name`,depts.position
  4.         FROM emps,depts
  5.     # 因为这里只是为了展示一下单表的情况,所以就没有加入多表的连接条件
复制代码

        2.4 针对于多表

  1.         CREATE VIEW empsss
  2.         AS
  3.         SELECT emps.id,emps.`name`,depts.position
  4.         FROM emps,depts
  5.         WHERE emps.id = depts.id
复制代码
        2.5 添加视图字段的别名

  1.         CREATE VIEW empsss(emp1_id,depts_position)
  2.         AS
  3.         SELECT emps.id,depts.position
  4.         FROM emps,depts
  5.         WHERE emps.id = depts.id;
  6.     SELECT * FROM empsss;
复制代码

        2.6 视图的优化

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

        2.7 基于视图创建视图

  1. CREATE VIEW f_emp_dept
  2. AS
  3. SELECT emp_dept.salary
  4. FROM emp_dept;
  5. SELECT * FROM emp_dept;
复制代码

        2.8  查察视图

  1. # 查看数据库的表对象、视图对象
  2. SHOW TABLES;
  3. # 查看视图结构
  4. DESC emp_dept;
  5. # 查看视图属性信息
  6. SHOW TABLE STATUS LIKE 'emp_dept';
  7. # 查看视图的详细定义信息
  8. SHOW CREATE VIEW emp_dept;
复制代码
  
     查察数据库的表对象、视图对象         
       查察视图结构      

      
       查察视图属性信息         
     查察视图的详细定义信息            2.9 更新视图中的数据

        更新表中的数据会导致视图中的数据改变;同理,更新视图中的数据也会导致表中的数据改变
  1. UPDATE emp_dept
  2. SET salary = 1000
  3. WHERE salary IS NULL;
  4. SELECT * FROM emp_dept;
复制代码

        当视图中的字段在及原表中不存在,则不更新视图中的数据
  1. USE test
  2. CREATE VIEW avg
  3. AS
  4. SELECT student.Sname,avg(sc.grade)
  5. FROM student,sc,course
  6. WHERE student.Sno = sc.Sno AND sc.`课程号` = course.`课程号`
  7. GROUP BY student.Sname
复制代码

        在这里进行错误展示
  1. UPDATE avg
  2. SET avg(sc.grade) = 100
  3. WHERE Sname = '周九'
  4. SELECT * FROM avg;
复制代码

三、结语

        风起青萍,浪成微澜
须知少日拏云志,曾许人间第一流。我们还年轻,我们还有无限大概!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表