day48数据库 视图 和 约束

二、视图

  • 什么是视图: 数据库中的表和视图都是其内部的对象,视图可以理解成一张虚拟的表,视图本质就是取代了一条SQL查询语句。

  • 为什么使用视图:因为有些数据的查询需要书写大量的SQL语句,每次书写效率太低,使用视图可以起到SQL重用的作用,视图可以隐藏敏感信息

  • 创建视图的格式:

    create view 视图名 as 子查询; 
    create table 表名 as 子查询

  • 创建一个10号部门员工的视图

    create view v_emp_10 as 
    (select * from emp where deptno=10); 
    ​
    -- 从视图中查询数据 
    select * from v_emp_10;

  • 创建一个没有工资的员工表视图

    create view v_emp_nosal as 
    (select empno,ename,comm,deptno from emp); 
    ​
    -- 查询 
    select * from v_emp_nosal

视图的分类
  1. 简单视图:创建视图的子查询中不包含:去重,函数,分组,关联查询。可以对视图中的数据进行增删改查操作

  2. 复杂视图:和简单视图相反,只能对视图中的数据进行查询操作

  • 创建一个复杂视图

    create view v_emp_info as 
    (select avg(sal),max(sal),min(sal) from emp); 
    ​
    -- 查询 
    select * from v_emp_info;

对简单视图进行增删改查,操作方式和table一样
  1. 插入数据

    insert into v_emp_10 (empno,ename,deptno) values
    (10011,'刘备',10); 
    ​
    select * from v_emp_10; 
    ​
    select * from emp;

  • 如果插入一条在视图中不可见,但是原表中却可见的数据称为 数据污染。

    insert into v_emp_10 (empno,ename,deptno) values
    (10012,'关羽',20); 
    ​
    select * from v_emp_10; 
    select * from emp;

  • 通过 with check option 解决数据污染问题

    create view v_emp_20 as 
    (select * from emp where deptno=20) 
    with check option; 
    ​
    insert into v_emp_20 (empno,ename,deptno) values
    (10013,'赵云',20); //成功 
    ​
    insert into v_emp_20 (empno,ename,deptno) values
    (10014,'黄忠',30); //失败

  • 修改和删除视图中的数据(只能修改删除视图中有的数据)

     update v_emp_20 set ename='赵云2' where ename='赵云'; update v_emp_20 set ename='刘备2' where ename='刘备';//修改失败 delete from v_emp_20 where deptno=10;//没有数据被删除

  • 创建或替换视图

    create or replace view v_emp_10 as 
    (select * from emp where deptno=10 and sal>2000);

  • 删除视图 drop view 视图名;

    drop view v_emp_10;
    ​
    show tables;

  • 如果创建视图的子查询中使用了别名 则对视图操作时只能使用别名

    create view v_emp_10 as 
    (select ename name from emp where deptno=10); 
    ​
    select name from v_emp_10;//成功 
    select ename from v_emp_10;//失败

视图总结:
  1. 视图是数据库中的对象,代表一段SQL语句,可以理解成一张虚拟的表

  2. 作用: 重用SQL,隐藏敏感信息

  3. 分类:简单视图(创建视图时不使用去重、函数、分组、关联查询,可以对数据进行增删改查)和复杂视图(和简单视图相反,只能对数据进行查询操作)

  4. 插入数据时有可能出现数据污染,可以通过with check option解决

  5. 删除和修改只能操作视图中存在的数据

  6. 起了别名后只能用别名

三、约束

  • 什么是约束: 约束就是给表字段添加的限制条件

主键约束+自增 primary key auto_increment
  • 作用:唯一且非空

非空约束 not null
  • 作用:该字段的值不能为null

    create table t_null(id int,age int not null
    ); insert into t_null values(1,18); //成功 
    ​
    insert into t_null values(2,null);//失败

唯一约束 unique
  • 作用: 该字段的值不能重复

    create table t_unique(id int,age int unique
    ); 
    ​
    insert into t_unique values(1,28);//成功 
    insert into t_unique values(2,28);//失败 不能重复

默认约束 default
  • 作用: 给字段设置默认值

    create table t_default(id int,age int default 20
    ); 
    ​
    insert into t_default (id) values(1); //默认值会生效 
    insert into t_default values(2,null);//默认值不会生效 
    insert into t_default values(3,30);//可以赋值其它值

外键约束
  • 外键:用来建立关系的字段称为外键

  • 外键约束: 添加外键约束的字段,值可以为null,可以重复,但是值不能是关联表中不存在的数据,外键指向的数据不能先删除,外键指向的表也不能先删除

  • 如何使用外键约束

  1. 创建部门表

    create table dept(id int primary key auto_increment,name varchar(10)
    );
  2. 创建员工表

    create table emp(id int primary key auto_increment,name varchar(10),dept_id int,constraint fk_dept foreign key(dept_id) references dept(id)); -- 格式介绍:
    constraint 约束名称 foreign key(外键字段名) references 依赖的表名(依赖的字段名)
    ​
    -- 测试插入数据 
    insert into dept values
    (null,'神仙'),
    (null,'妖怪'); 
    ​
    insert into emp values
    (null,'悟空',1); 
    ​
    insert into emp values
    (null,'赛亚人',3);//失败 
    ​
    delete from dept where id=1;//失败 
    ​
    drop table dept; //失败
  • 由于添加外键约束后 会影响测试效率,所以工作中很少使用,一般都是通过java代码实现逻辑外键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144070.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

培养现货黄金投资的盈利能力

在现货黄金市场中,如何定义投资能否成功,关键的就是看现货黄金投资者的盈利能力,简单来说,就是投资者在市场中能够赚多少钱,这是可以量化的指标。所以每一个现货黄金投资者都渴望提升自己的盈利能力,一方面…

xss原理分析

插入法,弹窗法,事件法 绕过HttpOnly通过找到phpinfo的方式,可以看到cookie

【redis总结】

文章目录 1、redis简介2、为什么要选择redis做缓存3、数据结构4、redis多线程模型redis6.0的变化 5、redis持久化AOF的实现过程RDB的实现过程 6、redis集群的搭建7、 redis过期删除和淘汰策略8、redis的内存淘汰策略 1、redis简介 Redis(Remote Dictionary Server&…

华为再放大招!联合伙伴发布AI新人类,助力场景化大模型商用落地

原创 | 文 BFT机器人 随着人工智能技术的不断发展,我们正迎来一个全新的智能时代。在这个时代里,人工智能将在各个领域发挥重要作用,为人类带来更智能、便捷和高效的生活体验。为了加速人工智能的商用落地,华为联合伙伴发布了系列…

无需公网IP,实现公网SSH远程登录MacOS【内网穿透】

目录 前言 1. macOS打开远程登录 2. 局域网内测试ssh远程 3. 公网ssh远程连接macOS 3.1 macOS安装配置cpolar 3.2 获取ssh隧道公网地址 3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址 4.1 保留一个固定TCP端口地址 4.2 配置固定TCP端口地址 5. 使用固定TCP端…

git 过滤不需要提交的目录和文件

项目根目录下(.git同级目录)添加.gitignore文件 .DS_Store .idea npm-debug.log yarn-error.log /node_modules /log/**.log /config.js

十九,镜面IBL--BRDF积分贴图

再回顾下镜面部分的分割求和近似法 现在关注第二部分 最后可化为 也就是说,这两部分积分可以获得F0的系数和F0的偏差。 这两个值可以存储到BRDF积分贴图的RG部分。void main() { vec2 integratedBRDF IntegrateBRDF(TexCoords.x, TexCoords.y); FragColor …

加速企业AI实施:成功策略和效率方法

文章目录 写在前面面临的挑战MlOps简介好书推荐 写作末尾 写在前面 作为计算机科学领域的一个关键分支,机器学习在当今人工智能领域中占据着至关重要的地位,广受瞩目。机器学习通过深入分析大规模数据并总结其中的规律,为我们提供了解决许多…

修改switch Nand无线区码 以支持高频5G 信道

环境:NS switch 问题:日版,港版无法连接大于44信道的5G WIFI 解决办法:修改PRODINFO.dec的WIFI 区域码 背景:我的switch是最早买的港版的一批,WIFI 只能连接日本的信道,家里的路由器是国行的&am…

推荐一个好用的电商开源项目yudao源码

1、项目下载cloneruoyi-vue-pro: 🔥 官方推荐 🔥 RuoYi-Vue 全新 Pro 版本,优化重构所有功能。基于 Spring Boot MyBatis Plus Vue & Element 实现的后台管理系统 微信小程序,支持 RBAC 动态权限、数据权限、SaaS 多租户、…

使用c++实现输出爱心(软件:visual Studio)

#include <iostream> using namespace std;int main() {//爱心曲线方程(x^2y^2-a)^3-x^2*y30double a 0.5;//定义绘图边界double bound 1.3 * sqrt(a);//x,y坐标变化步长double step 0.05;//二维扫描所有点,外层逐层扫描for (double y bound; y > -bound; y - ste…

计算摄像技术01 - 摄像技术基础知识

一些计算摄像技术知识内容的整理&#xff1a;传统摄像技术中的快门和曝光、图像信号格式。 目录 一、传统摄像技术中的快门和曝光 &#xff08;1&#xff09;快门速度 &#xff08;2&#xff09;光圈 &#xff08;3&#xff09;景深 &#xff08;4&#xff09;曝光 二、图…

NLP 项目:维基百科文章爬虫和分类 - 语料库阅读器

塞巴斯蒂安 一、说明 自然语言处理是机器学习和人工智能的一个迷人领域。这篇博客文章启动了一个具体的 NLP 项目&#xff0c;涉及使用维基百科文章进行聚类、分类和知识提取。灵感和一般方法源自《Applied Text Analysis with Python》一书。 在接下来的文章中&#xff0c;我将…

基于SSM的实习管理系统

基于SSM的实习管理系统、前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 管理员界面 教师 学生 研究背景 基于SSM的实习管理系统是一个基于Spring、Spring…

【JVM】并发可达性分析-三色标记算法

欢迎访问&#x1f44b;zjyun.cc 可达性分析 为了验证堆中的对象是否为可回收对象&#xff08;Garbage&#xff09;标记上的对象&#xff0c;即是存活的对象&#xff0c;不会被垃圾回收器回收&#xff0c;没有标记的对象会被垃圾回收器回收&#xff0c;在标记的过程中需要stop…

9月全国元宇宙政策一览,从全国层面到省市呼应

截至目前全国出炉的元宇宙相关政策超过120项&#xff0c;仅仅在过去一年就多达60余项。9月初&#xff0c;五部委联合印发《元宇宙产业创新发展三年行动计划(2023-2025年)》&#xff0c;标志着元宇宙产业在全国层面上有了相对统一的行动纲领。随着元宇宙产业的迅猛发展&#xff…

MacBook Pro 电池电量限制充电怎么设置AlDente Pro for Mac最大充电限制工具

通过充电电量限制工具可以更好的保护MacBook Pro的电池&#xff0c;通过 AlDente Pro 您可以设置电池的最大充电百分比设置为 20&#xff05; 至 100&#xff05;&#xff0c;然后&#xff0c;它将保持在所需的电池百分比&#xff0c;然后再次使用电源适配器进行充电。 AlDent…

锋利的开罐器-Arthas

官网&#xff1a;https://arthas.aliyun.com/ github&#xff1a;https://github.com/alibaba/arthas 做什么的&#xff1f; Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&a…

Facebook耐用号养成攻略!如何实现自动化高效养号

在跨境电商领域&#xff0c;Facebook 已经成为一个不可或缺的推广和营销平台。然而&#xff0c;想要在 Facebook 上取得成功&#xff0c;有一批耐用的 Facebook 账号是必不可少的。养出一批 Facebook 耐用号可以不仅可以大幅度提高推广效率&#xff0c;更能有效降低营销成本&am…

基于DTW算法的命令字识别

DTW算法介绍 DTW(Dynamic Time Warping)&#xff1a;按距离最近原则&#xff0c;构建两个序列之间的对应的关系&#xff0c;评估两个序列的相似性。 要求&#xff1a; 单向对应&#xff0c;不能回头&#xff1b;一一对应&#xff0c;不能有空&#xff1b;对应之后&#xff0…