数据库(mysql)-新手笔记(主外键,视图)

主外键

主键(唯一性,非空性)

主键是数据库表中的一个或多个字段,其值唯一标识表中的每一行/记录。

唯一性: 主键字段中的每个值都必须是唯一的,不能有两个或更多的记录具有相同的主键值

非空性:主键字段不能包含NULL值。

外键(引用完整 防无效数据)

引用完整性:确保引用的数据存在。

防止无效数据:通过限制可以在外键字段中输入的值,可以防止无效数据的插入。

作用

如果想要删除含主键的表的话,需要解除外键否则是不允许删除的 ,提高了安全保密性

其次链接了主键的字段名的外键的字段名如果超出含主键字段名的数据的范围 ,可以控制用户不会乱输入,确保了表的规范性

如果主键不唯一的话,也不会让其插入(更新) ,防止了数据重复录入

模版

CREATE TABLE 表名(字段名 字段类型 NOT NULL PRIMARY KEY...);
//创建一个order创建一个表,因为order是关键字所以用反引号包裹
CREATE TABLE 表名(字段名 字段类型...,FOREIGN KEY (字段名) REFERENCES 引用的表(字段名有主键)
 

CREATE TABLE `order`(order_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,item VARCHAR(10));
//创建一个order创建一个表,因为order是关键字所以用反引号包裹
CREATE TABLE personnel(personnel_id INT NOT NULL PRIMARY KEY ,name VARCHAR(10));
//创建一个人员表
CREATE TABLE personnelNeeded(order_id INT NOT NULL ,personnel_id INT NOT NULL ,satisfaction INT,moneyAmount DOUBLE,FOREIGN KEY (order_id) REFERENCES `order`(order_id),FOREIGN KEY (personnel_id) REFERENCES personnel(personnel_id),PRIMARY KEY (order_id,personnel_id))
//外键连接order表中的order_id和personnel表中的personnel_id

需要注意的是可以使用 AUTO_INCREMENT来实现每插入一行,数据会自增一

插入

注意的是 PRIMARY KEY是唯一

如果是多个组合在一起的话,只要有一个 PRIMARY KEY就可以录入到含外键的表,

#插入单字字段名的数据(含主键)
INSERT INTO `order`(item) VALUES ('苹果'),('李子'),('香蕉'),('橙子'),('水蜜桃'),('牛油果');
SELECT * FROM `order`;
#插入多字字段名的数据(含主键)
INSERT INTO personnel VALUES (1,'张四'),(2,'张五'),(3,'张六'),(4,'张七'),(5,'张八');
SELECT * FROM personnel;
#插入多字字段名的数据(含外键)
INSERT INTO personnelNeeded VALUES (1,2,5,300),(1,3,5,500),(2,2,5,700),(3,2,5,400),(4,2,5,800),(5,4,3,300);
 查询

通过外键查询主键其他的字段名下的数据

单主外键相连

关键字JOIN 含主键的表 (可以取别名) ON 含主键的表.字段名 (当前外键的表).字段名

SELECT (item) FROM personnelneeded 
JOIN `order` o on o.order_id = personnelNeeded.order_id;

多主外键相连 
变化的是SElECT 后的查询字段名 已经join后面在加一个含主键表的字段名

SELECT item,name FROM personnelneededJOIN `order` o on o.order_id = personnelNeeded.order_id 
JOIN personnel p on personnelNeeded.personnel_id = p.personnel_id;

视图

作用

提高重用性:视图相当于一个虚拟表,它可以使复杂的SQL查询语句变得简单,减少复杂SQL语句的使用频次

数据库重构:当需要修改数据库结构时,通过使用视图,可以不修改脚本程序的功能。也就是说,对数据库进行重构,不会影响到基于视图的程序的运行

提高安全性:视图可以对不同的用户设定不同的权限,提供不同的数据视图 ,无法修改变结构

据清晰化:视图可以按需创建,只包含用户关心的数据,使得数据更加清晰,方便用户理解和使用。 

这边我们使用一个视图将通过外键查询的字段名来创建一个虚拟的表

CREATE VIEW 视图名称 AS
 SELECT 字段名

FROM 含外键的表
JOIN 含主键的表 (别名)on(别名).(主键字段名) =含外键的表.外键的字段名
 

CREATE VIEW  orderView ASSELECT name,item FROM personnelNeeded 
JOIN `order` o on o.order_id = personnelNeeded.order_id 
JOIN personnel p on p.personnel_id = personnelNeeded.personnel_id;

巧学巧记

主键唯一标识 ,外键引用主键用 REFERENCES指向某含主键表

主键非空,外键调用主键时候必须符合主键已录入的数据

外键想要查询主键中的其他字段名下数据 需要用主键字段名链接外键字段名

关键字 JOIN 主键表 (别名) ON 别名.主键字段名= 外键表名.主键字段名

视图可以限制用户权限,不会更改表结构

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Marquee)

跑马灯组件,用于滚动展示一段单行文本。仅当文本内容宽度超过跑马灯组件宽度时滚动,不超过时不滚动。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Ma…

Python笔记|基础算数运算+数字类型(1)

重新整理记录一下python的基础知识 基础运算符 、-、*、/ ;括号 ()用来分组。 >>>2 2 4 >>>50 - 5*6 20 >>>(50 - 5*6) / 4 5.0 >>>8 / 5 1.6向下取整除法:向下舍入到最接近的整数的数学除法。运算符是 //。比如1…

AI大模型,掀起新一波智能浪潮!

AI大模型的出现,标志着人工智能技术迈入了一个新的阶段。这些巨大的模型不仅在规模上超越了以往任何其他人工智能系统,而且在性能上也取得了巨大的突破。由于其庞大的参数量和复杂的结构,AI大模型在各个领域展现出了强大的学习能力和推理能力…

代码随想录算法训练营第day10|232.用栈实现队列、 225. 用队列实现栈

目录 a.232.用栈实现队列 b. 225. 用队列实现栈 a.232.用栈实现队列 题目链接 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素…

Linux系统——Haproxy高性能负载均衡软件

目录 一、Haproxy介绍 1.Haproxy定义 2.Haproxy主要特性 二、安装Haproxy 1.yum安装 2.第三方rpm包安装 3.编译安装 3.1解决Lua环境 3.2编译安装Haproxy 三、配置文件详解 1.状态页 2.日志管理 2.1定义日志到其他主机站点 3.指定进程线程个数 4.cpu亲缘性 5.多进…

测试框架到底是什么,如何定义?

测试框架的关键组件是什么? 测试执行引擎:协调测试的运行、管理序列和报告结果。 测试脚本存储库:存储将要执行的实际测试用例或脚本。 测试数据:测试执行所需的输入数据,可以是静态的、动态的或动态生成的。 存根和…

【Kafka系列 07】Kafka 如何保证消息不丢失

一、Kafka 消息不丢失的边界 一直以来,很多人对于 Kafka 丢失消息这件事情都有着自己的理解,因而也就有着自己的解决之道。在讨论具体的应对方法之前,我觉得我们首先要明确,在 Kafka 的世界里什么才算是消息丢失,或者…

赛灵思MPSOC实现DP显示(ARM裸机)

一、硬件搭建 此处简单略过一下,在vivado中按照硬件设计进行连线即可。我的vivadoy硬件设计如下: 二、vitis 中的实现 此处使用了AMD赛灵思官方提供的示例程序。具体流程如下: 1、使用vivado中生成的XSA文件,在vitis中建立platfor…

day38 动态规划part1

509. 斐波那契数 简单 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),…

git分布式管理-头歌实验合并远程分支、rebase、储藏

一、合并远程分支merge 任务描述 在软件开发中,通常会在版本库中创建多个不同的分支进行开发。例如,最基本的可以有一个测试版分支和一个正式版分支,其中测试版分支用来完成最新功能代码的开发与测试,正式版则用于管理即将发布的版…

[进程间通信]管道通信【初识IPC/模拟匿名管道/模拟进程池】

文章目录 0.认识IPC1.什么是进程间通信?2.IPC的手段3.进程间通信的必要性4.进程间通信的技术背景5.进程间通信的本质理解6.IPC的标准 1.学习管道1.1.管道的认识1.2管道的工作原理1.3管道的特点 2.模拟匿名管道3.模拟进程池3.1task.hpp3.2processpool.cc 0.认识IPC …

【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题

【网络连接】ping不通的常见原因解决方案,如何在只能访问网关时诊断,并修复IP不通的问题 写在最前面网络基础可能的问题、表现以及解决方案如何诊断和解决操作步骤 详细问题描述详细解决方案1. 防火墙或安全软件拦截2. IP配置错误3. 网络设备问题4. 物理…