初写MySQL四张表:(2/4)

news2024/11/13 8:49:50

今天,我们来写第二张表。因着这四张表以及后续有相应的拓展,这四张环环相扣,所以还未写出第一张表的同学,可以看完第一张表,再来此处:

初写MySQL四张表:(1/4)-CSDN博客


好,今日表格有三张:——主要学会了创建表,都可以依葫芦画瓢

先来分析这张表:

表名: Stu,但是在创建表的时候需要确定它依附的数据库testdb.stu。(具体信息见第一张表)。

字段:5条字段(COLUMN),我们又理解成表名(学生)的属性:有学号、姓名、性别、出生日期和学院编号。

字段的添加,还要包括数据的类型,大小以及中文备注,最后一列是给这个字段的特殊约束:一般是主键、非空又或者外键。

根据上一张表的基础,我们先把能写的写出来:

CREATE TABLE testdb.stu
(

);
#先写个框架,这是好习惯:不容易丢分号

还记得CREATE后面接数据库对象,以及数据库吗?这也是为什么这里要加TABLE的原因。

CREATE是操作数据库以及数据库对象的关键字之一:其他的关键字,我们不久后就会遇见。

添加字段:(这里我再写个我觉得更好的写法)

推荐写法——添加字段

CREATE TABLE testdb.stu
(
   stuid CHAR(10) COMMENT'学号' PRIMARY KEY,
   stuname VARCHAR(40) COMMENT '姓名' NOT NULL,
   sex CHAR(1) COMMENT'性别',
   birthday DATE COMMENT'出生日期',
   #...
);

跟我上一张表,选择的方法不同:

上一次:

字段名称 类型(大小) 空/非空 COMMENT'中文备注',
...
PRIMARY KEY(字段名称)

这种写法,把非空放在数据类型大小后,主键放在末尾。

我这次的写法,统统把约束置后:我们曾说NOT NULL约束,主键约束都是对字段的约束,我们索性就把约束全部放在后面。我觉得这对习惯编C,C++以及JAVA的同学较为友好。 

我们习惯 声明变量 采取这样的格式:

变量类型 变量名称;

MySQL的字段声明: 字段名称 类型(大小) 注释 + 约束

两项比较,只是把名称和类型调换了顺序;特殊的约束,我们把它压轴,以示尊重。

CREATE TABLE testdb.stu
(
   stuid CHAR(10) COMMENT'学号' PRIMARY KEY,
   stuname VARCHAR(40) COMMENT '姓名' NOT NULL,
   sex CHAR(1) COMMENT'性别',
   birthday DATE COMMENT'出生日期',
   #...
);

而没有约束的字段,我们直接忽略(方便哉)。

有细心的同学发现了一个特殊的约束:外键。这外键是什么,有什么作用,具体该如何写呢?

外键

外键约束,英文:FOREIGN KEY。

书上原话:FOREIGN KEY约束用于在两个数据表A和B之间建立连接,意义是“通过FOREIGN KEY约束可以保证两表间的参照完整性。”

示意图:

聊聊这张图:你能看出些什么?记住我们的目标是外键

有两张表,外键存在一张从表A里,主从关系从何而来?因为外键其实是引用表B的主键而来。常言道:“吃人嘴短,拿人手短”,表A外键的值是另一个表的主键,用了人家的主键,自己表里这个键是从外面来的约束自己字段的,此乃外键。

具体书写:

#秉承约束放最后的原则,外键有两行,需要指明引用哪个表的字段的主键
FOREIGN KEY(外键字段名) REFERENCES 主表(主键字段名)

现成的应用起来就是:

CREATE TABLE testdb.stu
(
   stuid CHAR(10) COMMENT'学号' PRIMARY KEY,
   stuname VARCHAR(40) COMMENT '姓名' NOT NULL,
   sex CHAR(1) COMMENT'性别',
   birthday DATE COMMENT'出生日期',
   #...不是一上来就FOREIGN KEY...原先字段名以及类型大小 中文注释该声明还得声明
   deptid CHAR(4) COMMENT'学院编号',
   FOREIGN KEY(deptid) REFERENCES dept(deptid)
);

外键的作用:

譬如这里,外键怎么约束自己的字段呢? 这是一张学生表,学院编号deptid外键是引用了学院表的deptid主键。

这也是昨天创建的第一张表。

学生表:有学号,姓名,性别,出生日期,学院编号。无非导入的是一条条学生的信息,在这张表里学生姓名可以重复,但是学号是绝不允许的。 学院表的主键:学院编号,保证了学院编号的唯一性。学生表里的学院编号之所以引用学院表的主键,是为了保证学院编号的正确性。

比如:我们要导入张三的信息,他的其他信息我们暂且忽略,他的学院是本来应该是魔法学院,编号为1,但是导入数据的人员,把“1”,打成了“10”。这时候外键起作用了,它是学院表的主键,它可以踢出非法的学院编号。

可以总结:外键,FOREIGN KEY约束可以保持数据一致性:通过外键约束,确保了从表(学生表)中的字段(学院编号)必须是已经存在于主表(学院表)中的有效值,从而避免了无效或错误的数据插入。

那么创建学生表的完整代码:

CREATE TABLE testdb.stu
(
   stuid CHAR(10) COMMENT'学号' PRIMARY KEY,
   stuname VARCHAR(40) COMMENT '姓名' NOT NULL,
   sex CHAR(1) COMMENT'性别',
   birthday DATE COMMENT'出生日期',
   
   deptid CHAR(4) COMMENT'学院编号',
   FOREIGN KEY(deptid) REFERENCES dept(deptid)
);

我们运行一下,成功是必然的。

记得,我们该怎么样查看表的字段信息吗? 诶没错,DESC + 表名

DESC testdb.stu;

(下午码字time)

左侧也有显示,我们创建出了两张表:

为了巩固我们创建表的基本功,接下来还有两张表。后续我们的添加,删除,查询和修改数据操作也都会基于这四张表。——(感觉跟写小说似的)

文末,我会放上这四张表和相应的创建代码,有需的同学自取(

再来两张表

看这两张,你如果已经达到心中有表,手上有代码的地步,恭喜,进度可以到3/4了。

照例分析一下:

表名course(表名一般没有首字母大写,倒是和JAVA,C++命名不是很像),有4个字段,主键约束属于cid,外键又是deptid学院编号。细节提醒,约束往后捎就是。

代码咱直接给了:

CREATE TABLE testdb.course
(
    cid CHAR(6) COMMENT'课程编号' PRIMARY KEY,
    cname VARCHAR(100) COMMENT'课程名称' NOT NULL,
    credit FLOAT COMMENT'学分' NOT NULL,
    deptid CHAR(4) COMMENT'学院编号',
    FOREIGN KEY(deptid) REFERENCES dept(deptid)
);

查看一下: 

下一张表:

这张表看起来很高冷啊,没有主键外键,非空约束。

我们直接写:

CREATE TABLE testdb.SC(
    stuid CHAR(10) COMMENT'学号',
    cid CHAR(6) COMMENT'课程编号',
    score INT COMMENT'成绩'
);
#有些同学偏不信鞋,我就是,非要写大写看看是不是那么回事

运行一下,刷新左侧:

看,是不是:存储的表名都是小写,首字母大写的待遇目前只看到Table有。

再看看表的结构信息:

参考代码 以及四张表:

#第一张表 dept
CREATE DATABASE testdb;
CREATE TABLE testdb.dept(
    deptid CHAR(4) COMMENT '学员编号' PRIMARY KEY,
    deptname VARCHAR(100)  COMMENT'学院名称'NOT NULL
);
DESC testdb.dept;
#第二张表 stu
CREATE TABLE testdb.stu
(
   stuid CHAR(10) COMMENT'学号' PRIMARY KEY,
   stuname VARCHAR(40) COMMENT '姓名' NOT NULL,
   sex CHAR(1) COMMENT'性别',
   birthday DATE COMMENT'出生日期',
   #...
   deptid CHAR(4) COMMENT'学院编号',
   FOREIGN KEY(deptid) REFERENCES dept(deptid)
);
DESC testdb.stu;
#第三张表 course
CREATE TABLE testdb.course
(
    cid CHAR(6) COMMENT'课程编号' PRIMARY KEY,
    cname VARCHAR(100) COMMENT'课程名称' NOT NULL,
    credit FLOAT COMMENT'学分' NOT NULL,
    deptid CHAR(4) COMMENT'学院编号',
    FOREIGN KEY(deptid) REFERENCES dept(deptid)
);
DESC testdb.course;
#第四张表 sc
CREATE TABLE testdb.SC(
    stuid CHAR(10) COMMENT'学号',
    cid CHAR(6) COMMENT'课程编号',
    score INT COMMENT'成绩'
);
DESC testdb.sc;

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

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

相关文章

echarts图表一次点击事件却触发多次的解决方法

echarts图表 一次点击事件却触发多次的解决方法 遇到个echarts的问题,点击一次图表却触发多次点击事件,看了下官网介绍了点击事件的解绑事件 let echarts_id document.getElementById("echarts_id");let my_chart this.$echarts.init(echart…

八股文-JVM

是什么?有什么用?谁发明的?什么时候发明的? Java虚拟机,用来运行Java程序,有很多个版本的虚拟机,比如HotSpot,最开始是SUN公司开发人员,和Java一起发布,现在…

VirtualBox增加磁盘并给docker用

在VirtualBox新增磁盘 在虚拟机停止的情况下依次选择,然后创建新磁盘 虚拟机新磁盘创建分区、格式化、挂载分区 开机自动挂载新磁盘分区/dev/sdb1: nano /etc/fstab末尾添加一行: /dev/sdb1 /disk02 e…

leetcode41. 缺失的第一个正数,原地哈希表

leetcode41. 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释&#xf…

基于JavaSwing实现的酒店管理系统

一、项目介绍 > 欢迎使用酒店管理系统! > 这是一个基于Java Swing开发,用于管理酒店预订、房间、订单和用户信息的系统。 > 适用于JAVA初学者作为入门学习项目。 二、项目演示 三、基础依赖 技术/框架版本描述Java8编程语言MySQL8.0数据…

ATGM331C-5T杭州中科微全星座定位授时模块电气参数

ATGM331C-5T 系列模块通过 UART 作为主要输出通道,按照 NMEA0183 的协议格式输出。 产品选型: 性能指标: 出色的定位导航功能,支持 BDS/GPS 卫星导航系统的单系统授时,以及任意组合的多系统联合定位,并支持…

yolov5/8/9/10模型在VOC数据集上的应用【代码+数据集+python环境+GUI系统】

yolov5/8/9/10模型在VOC数据集上的应用【代码数据集python环境GUI系统】 1.背景意义 VOC数据集被广泛应用于计算机视觉领域的研究和实验中,特别是目标检测和图像识别任务。许多知名的目标检测算法都使用VOC数据集进行训练和测试。VOC挑战赛(VOC Challeng…

倍增练习(1)

A - ST 表 && RMQ 问题 题目思路:st表的板子题用于静态区间求最值,通过倍增的思想,先通过预处理将各个区间的最大值通过转移式求出f[i][j] max(f[i][j - 1], f[i (1 << (j - 1))][j - 1]);然后再进行重叠查询查询,k log2(r - l 1);,max(f[l][k], f[r - (1 &l…

js中两种异步方式:async+await以及then

第一种方式 第二种方式 完整代码 前端代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>pywebv…

金手指设计

"MCP6294"。是一个轨到轨, 带宽为 10MHz 的 低功耗放大器. 对LM358测量 10MHz 范围内的频率特性&#xff0c;在 8MHz 左右&#xff0c;输出相移超过了 180。MCP6294的频率特性&#xff0c;则显示在 10MHz 运放相移之后 100左右。 对比两个运放的频率特性&#xff…

LLM - 理解 多模态大语言模型(MLLM) 的 预训练(Pre-training) 与相关技术 (三)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142167709 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 完备(F…

深入 mysql,掌握一对一、一对多、多对多表设计、查询及级联操作

数据库表的基本概念与关系 数据库通常包含多个表&#xff0c;每个表存储特定类型的信息。例如&#xff1a; 学生表&#xff1a;存储学生信息。老师表&#xff1a;存储老师信息。班级表&#xff1a;存储班级信息。 这些表通过各种关系连接&#xff0c;形成一个结构化的数据管…

vscode关闭git的提交提示

问题描述&#xff1a; vscode中光标停留在每一行都会有出现git仓库的提交信息&#xff0c;影响代码阅读。 解决方法&#xff1a; 左下角设置齿轮&#xff1a; 输入关键词commit input 取消勾选&#xff0c;即可解决。

判断n是否为两素数相乘

要求 请编写函数fun&#xff0c;其功能是:验证参数n是否可以分解成2个素数相乘&#xff0c;是则返回1&#xff0c;否则返回0&#xff0c;并通过指针变更x、y返回分解后的2个素数值&#xff0c;要求*x<*y。主程序中将打印出分解结果。 例如:1113*37&#xff0c;当函数fun的参…

Web APIs 第二天

第二天&#xff1a;DOM事件基础&#xff0c;注册事件&#xff0c;tab栏切换 添加事件监听 <body><button>点击</button><script>const btn document.querySelector(button)btn.addEventListener(click, function () {alert(嗲你)})</script> …

数据结构-3.3.栈的链式存储实现

一.链栈的定义&#xff1a; 二.总结&#xff1a;

Net8 调用BarTender2022 R8

先上效果图 官方只能支持.net framework&#xff0c;不支持.netCore 参考链接 https://support.seagullscientific.com/hc/en-us/community/posts/14770890037911-Support-for-NET-6 https://support.seagullscientific.com/hc/en-us/community/posts/360046932953-Make-SDK…

Web开发:ABP框架2——入门级别的增删改查Demo

目录 一、前言 二、上节回顾 ​编辑 三、新建Dto和添加映射 1.新建dto 2.添加映射规则 四、新建WebApi控制器用EFcore进行增删改查 1.新建Webapi控制器接口 2.新建Webapi控制器实现 3.跑项目测试 五、WebApi控制器调用底层代码 1.webapi控制器&#xff08;高层代码&…

JZ2440开发板——S3C2440的存储控制器

以下内容源于韦东山课程的学习与整理&#xff0c;如有侵权请告知删除。 课程中说的“内存控制器”&#xff0c;准确来说是“存储控制器”&#xff0c;其配套书籍写的也是“存储控制器”。 另外“Nor Flash控制器”&#xff0c;说的也是“存储控制器”&#xff0c;或者“存储控…

C++日期类,详细!!!

日期类的练习可以巩固提高之前所学习的知识&#xff0c;还可以完成关于的日期练习 下面是关于日期的对应oj题 KY111 日期差值 计算一年的第几天 累加天数 1.Date.h 头文件部分 看看我们要实现那些接口 1.获取对应月份的天数:GetMonthDay 2. < > …