数据库部分(MySql)_3
表设计之关联关系
一对一:有两张表A和B,A表中有一条数据对应B表中的一条数据称为一对一;
应用场景:用户表和用户扩展表,商品表和商品信息扩展表;
如何建立关系:在从表中添加一个外键字段指向主表的主键。
SELECT * FROM user u JOIN userinfo us ON u.id=us.uid WHERE u.name='Tom';
一对多:AB两张表,A表中一条数据对应B表中的多条数据,同时B表中的一条数据对应A表中的一条数据;
应用场景:员工表和部门表,分类表和商品表;
如何建立关系:一对多张表,在多的表里添加外键指向另外一个表主键;
多对多:AB两张表,A表中一条数据对应B表中的多条数据,同时B表中的一条数据对应A表中的多条数据;
如何健立关系:需要创建单独的关系表,表中两个字段分别指向两个表的主键;
SELECT t.name,s.name FROM student s JOIN t_s z ON s.id=z.sid JOIN teacher t ON t.id=z.tid;
自关联:在表中有一个外键字段指向当前表的主键值;
应用场景:需要保存层级关系,但又不确定有多少层的时候使用自关联;如:员工的上级领导、部门的上级部门、分类的上级分类;
连接方式:关联查询的查询方式包括等值连接、内连接、外连接;
关联关系:指设计表的时候两个表之间存在的逻辑关系,包括一对一、一对多、多对多;(当查询存在关联关系的表时,使用某一种连接方式进行查询);
视图VIEW
数据库中存在多种对象,表和视图都是数据库中的对象,可以理解成是一张虚拟的表,视图没有自己独立的数据,数据会随着原表的改变而改变;因为有些数据的查询需要书写大量的SQL语句,每次书写比较麻烦,使用视图可以起到SQL重用的作用,可以隐藏敏感信息。
格式: CREATE VIEW 视图名 AS (子查询);
简单视图:创建视图的子查询中不包含去重、函数、分类、分组、关联查询的视图;可对视图中的数据进行增删改查操作;
CREATE VIEW v_emp_nosalary AS (SELECT name,manager,deptno FROM emp);
复杂视图(对原表进行查询操作):和简单视图相反,只能对复杂视图的数据进行查询操作。
CREATE VIEW v_emp_salary AS (SELECT deptno,sum(salary),avg(salary),max(salary),min(salary) FROM emp GROUP BY deptno);
对简单视图中的数据进行增删改查操作
案例:create view v_emp_A as (select * from emp where deptno='A');
//、在不改变视图创建条件的前提下添加数据
insert into v_emp_A (empno,ename,deptno,salary) values (,'小白','A',);
//数据在原表中可见,在v_view_A中可见 //、在改变视图创建条件下添加数据
insert into v_emp_A (empno,ename,deptno,salary) values (,'小白','B',);
// 数据在v_view_A中不可见,但在原表中可见
数据污染
往视图中插入一条视图中不可见,但是在原表中存在的数据;如果需要避免污染的出现,可以使用with check option 关键字。
CREATE VIEW v_emp_a AS (SELECT * FROM emp WHERE deptno='a') with check option;
在视图中修改和删除数据
修改和删除不会出现类似数据污染问题,修改和删除只能操作视图中存在的数据;
修改
UPDATE v_emp_A set salary=salary+5;//仕途中存在可以修改并同步到原表;
UPDATE v_emp_A sat salary=salary+5 WHERE deptno='B'; //修改失败;
删除
DELETE FROM v_emp_A WHERE empno=1;//成功
DELETE FROM v_emp_A WHERE empno=2;//失败;
修改视图(替换)
CREATE OR REPLACE VIEW 视图名 AS 子查询;
删除视图
DROP VIEW 视图名;
视图别名
如果创建视图的子查询中使用了别名,则对视图进行的各种操作都必须使用别名;
CREATE VIEW 视图名 as (SELECT 字段名 别名,字段名 FROM emp);
测试:
UPDATE 视图名 SET salary=10 WHERE 别名='A';//成功
UPDATE 视图名 SET salary=10 WHERE 字段名='A';//失败
数据库部分(MySql)_3的更多相关文章
- 数据库 之MySQL 简单教程
So Easy系列之MySQL数据库教程 1. 数据库概述 1.1. 数据库概述 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和 ...
- Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数
mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...
- 迁移应用数据库到MySQL Database on Azure
by Rong Yu 有用户问怎么把他们应用的数据库迁移到MySQL Database on Azure上,有哪些方式,有没有需要注意的地方.今天我们来概括介绍一下迁移应用数据库到MySQL Data ...
- Cobar是提供关系型数据库(MySQL)分布式服务的中间件
简介 Cobar是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明. 产品在阿里巴巴稳定运行3年以上. 接管了3000+ ...
- Mysql数据库的mysql Schema 究竟有哪些东西& 手工注入的基础要领
#查看数据库版本号 mysql> select @@version; +------------+ | @@version | +------------+ | 5.5.16-log | +- ...
- 2、ABPZero系列教程之拼多多卖家工具 更改数据库为Mysql
因为要部署项目到云服务器,不想在服务器上装SqlServer,所以需要把项目改为Mysql. 项目初始化 1.下载项目压缩包,前面文章已经说到,可以加群到群文件里下载.解压缩下载的项目源码,使用VS2 ...
- 关于数据库管理系统DBMS--关系型数据库(MySQL/MariaDB)
数据库的结构(3种):层次,网状,关系型(用的最多): DBMS的三层模型: 视图层:面向最终用户: 逻辑层:面向程序员或DBA: 物理层:面向系统管理员: 关系型数据库管理系统——RDBMS: 主要 ...
- 数据库【mysql篇】学习笔记
Windows服务 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意 ...
- 数据库之数据库管理篇[mysql]
管理数据库 1.mysql开闭使用篇 mariadb在Linux中首次进入mysql(因为此时还没有创建任何用户,mysql的root并不等效于linux中的root用户) sudo mysql 进入 ...
- 数据库之mysql篇(1)—— 数据库管理系统简介/mysql的安装、配置
说mysql之前,还是先说说数据库. 什么是数据库: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后 ...
随机推荐
- Visual Studio Code and local web server
It is the start of a New Year and you have decided to try Visual Studio Code, good resolution! One o ...
- 无知小子踏入python web大门
学习python flask的第一天,费劲我小白的脑子,总算完成了环境配置 详情如下,其他小白误走弯路,希望和我一样爱好python的人坚信:python或许是最好的语言! 那么,开始喽,有不对的地方 ...
- Lombok轮子
前提 自从进公司实习后,项目代码中能用 Lombok 的都用了,毕竟这么好的轮子要充分利用好.也可以减少一些 get/set/toString 方法的编写,虽说 IDEA 的插件可以自动生成 get/ ...
- 6-使用requests库封装类处理get/post请求
1.request安装 1)pip安装,直接pip install requests 2)下载离线包安装,加压后,命令行进入路径,执行python setup.py install 2.创建工程 注意 ...
- Android中RecyclerView出现java.lang.IndexOutOfBoundsException
在RecyclerView更细数据时出现java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder ...
- 调用接口,发送https请求
调用https接口有两种方式 一:是导入证书; 证书调用https请求本人还不知道,希望看见此博客的大神给我回复. 二:是创建信任管理器. 第一步:实现X509TrustManager接口,里面的方法 ...
- Windows 10 IoT Core 17093 for Insider 版本更新
新特性: General bug fixes Enabled Miracast on Dragonboard. 已知的一些问题: F5 driver deployment from Visual ...
- 使用MXNet的NDArray来处理数据
NDArray.ipynb NDArray介绍 机器学习处理的对象是数据,数据一般是由外部传感器(sensors)采集,经过数字化后存储在计算机中,可能是文本.声音,图片.视频等不同形式. 这些数字化 ...
- vue组件推荐
Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...
- Java核心技术卷一基础知识-第8章-事件处理-读书笔记
第8章 事件处理 本章内容: * 事件处理基础 * 动作 * 鼠标事件 * AWT事件继承层次 8.1 事件处理基础 在AWT所知的事件范围内,完全可以控制事件从事件源(event source)例如 ...