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

2024-03-07 14:28

本文主要是介绍数据库(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 别名.主键字段名= 外键表名.主键字段名

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


                                    

这篇关于数据库(mysql)-新手笔记(主外键,视图)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/783819

相关文章

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID