数据库(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.mzph.cn/news/729760.shtml

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

相关文章

AutoPSA里给定了弹簧刚度,为什么计算没有引用?

山东一用户问:已经给定了弹簧刚度,为什么计算没引用? 在AutoPSA里包含两种算法仿CAESARII ,仿GLIF算法。 在仿CAESARII算法里直接给定弹簧刚度与安载荷载,两个都给了相应值,也就是给定了弹簧号&#xff1b…

处理error: remote origin already exists.及其Gitee文件上传保姆级教程

解决error: remote origin already exists.: 删除远程 Git 仓库 git remote rm origin 再添加远程 Git 仓库 git remote add origin (HTTPS) 比如这样: 然后再push过去就ok了 好多人可能还是不熟悉怎么将文件上传 Gitee:我…

Python实习生(自动化测试脚本开发) - 面经 - TCL新技术有限公司

JD: 招聘流程: 2024.1.3 Boss直聘 沟通 2024.1.4 约面 2024.1.6 上午面试 面试流程: 上来第一步,直接问Python基础语法,讲一下基础的数据类型 就记得元组和字典 分别具体说一下元组和字典 流程控制语句有哪些&…

应急布控球远程视频监控方案:视频监控平台EasyCVR+4G/5G应急布控球

随着科技的不断发展,应急布控球远程视频监控方案在公共安全、交通管理、城市管理等领域的应用越来越广泛。这种方案通过在现场部署应急布控球,实现对特定区域的实时监控,有助于及时发现问题、快速响应,提高管理效率。 智慧安防视…

SPFA找负环

2024-01-31(最短路径)-CSDN博客 求负环的常用方法,基于spfa: 1.统计每个点入队的次数,如果有个点入队n次,则说明存在负环 2.统计当前每个点的最短路中包含的边数,如果某个点的最短路的所包含的边…

QT:用opencv的KNN识别图片中的LED数字(一)

前言 一款功能测试的软件demo,使用了QT作为界面,主要使用了opencv的KNN识别,使用gstreamer作为管道,用来打开图片。后期会写一篇打开摄像头实时识别的文章。 (正在写,未完成,稍候) 效果一预览: 效果二预览: 效果三预览: 正在写。。。 设计思路 1. 软件UI设…

【uni-app】condition 启动模式配置,生产环境无效,仅开发期间生效

在小程序开发过程中,每次代码修改后,都会启动到首页,有时非常不方便,为了更高效的开发,有时需要模拟直接跳转到指定的页面, 操作方法如下: 在pages.joson里面配置下列代码: "…

Mybatis-Spring | Mybatis与Spring的“整合“

目录 : 一、配置环境1. 整合环境需导入的JAR :Spring框架所需JARMybatis框架所需JARMyBatis与Spring整合的中间JAR数据库驱动JAR包数据源所需JAR包 (下面的例子中 : 用的不是这个数据源) 2. 编写“配置文件” 和 “.properties文件” ( 只是概述&#xf…

Claude3真的超越GPT4了吗?

一文探究Claude3真实能力 Claude3就在昨天悄无声息的上线了,OpenAI的好兄弟Anthropic公司仅仅在推特上发了一条消息来宣布这件事情。 Anthropic这次一下就发了三个模型:Opus、Sonnet、Haiku。说实话这名字感觉取得不咋地,主要是看不懂&#x…

图机器学习(3)-面向节点的人工特征工程

0 问题引入 地铁导航图 计算机是看不懂这些图,计算机只能看懂向量、矩阵。 传统图机器学习只讨论连接特征。 构造一个新的特征 x 1 x 2 x_1x_2 x1​x2​,有利于分开这种数据。 人需要去翻译这些计算机不懂的特征,变成计算机可以懂…

javaSE-----继承和多态

目录 一.初识继承: 1.1什么是继承,为什么需要继承: 1.2继承的概念与语法: 二.成员的访问: 2.1super关键字 2.2this和super的区别: 三.再谈初始化: 小结: 四.初识多态: 4.1多…

CAS 登出方案

1.配置 CAS 服务器端 添加配置cas.logout.followServiceRedirects:true,使支持 CAS 退出时支持输入 service 参数为跳转路径 2.配置客户端服务,添加session清除操作 3.前端文件添加跳转重定向 1) 直接在客户端调用http请求/cas/logout去注销不能携带cookie信息, 无…

ATM系统(Java)

ATM系统(Java) 1、实现要求 实现基本的ATM系统功能,包括注册,登录,查询,取款,存款,以及修改密码等。 2、代码实现 2.1 Test package com.ham;public class Test {public static v…

jmap-各种option参数说明

基本情况 jmap(JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息…

高清数学公式视频素材、科学公式和方程式视频素材下载

适用于科普、解说的自媒体视频剪辑素材,黑色背景数学、科学公式和方程式视频素材下载。 视频编码:H.264 | 分辨率:3840x2160 (4K) | 无需插件 | 文件大小:16.12MB 来自PR视频素材,下载地址:https://prmuban…

阿里云服务器怎么使用?3分钟搭建网站教程2024新版

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

设计模式学习笔记 - 设计原则 - 10.实战:针对非业务的通用框架开发,如何做需求分析和设计及如何实现一个支持各种统计规则的性能计数器

前言 接下来我们在结合一个支持各种统计规则的性能计数项目,学习针对一个非业务的通用框架开发,如何来做需求分析、设计和实现,同时学习如何灵活应用各种设计原则。 项目背景 设计开发一个小的框架,能够获取接口调用的各种统计信…

RocketMQ的事务消息是如何实现的?

RocketMQ的事务消息是通过 TransactionListener接口来实现的。 在发送事务消息时,首先向RocketMQ Broker 发送一条‘half消息’(半消息),半消息将被存储在broker端的事务消息日志中,但是这个消息还不能被消费者消费。 接下来,在半消息发送成功后,应用程序通过执行本地事务…

C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码

1 煎饼排序问题 给定一个未排序的数组,任务是对给定数组进行排序。您只能在阵列上执行以下操作。 翻转(arr,i):将数组从0反转为i 示例: 输入:arr[]{23、10、20、11、12、6、7} 输出&#xff1a…

开发Chrome扩展插件

1.首先开发谷歌chrome扩展插件,没有严格的项目结构目录,但是需要保证里面有一个mainfest.json文件 (必不可少的文件)。在这个文件里有三个属性必不可少:name、version、mainfest_version; // 清单文件的版本,这个必须写…