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

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

初写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.rhkb.cn/news/428147.html

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

相关文章

easy-es动态索引支持

背景 很多项目目前都引入了es,由于es弥补了mysql存储及搜索查询的局限性,随着技术的不断迭代,原生的es客户端使用比较繁琐不直观,上手代价有点大,所以easy-es框架就面世了,学习成本很低,有空大…

记忆化搜索专题——算法简介力扣实战应用

目录 1、记忆化搜索算法简介 1.1 什么是记忆化搜索 1.2 如何实现记忆化搜索 1.3 记忆化搜索与动态规划的区别 2、算法应用【leetcode】 2.1 题一:斐波那契数 2.1.1 递归暴搜解法代码 2.1.2 记忆化搜索解法代码 2.1.3 动态规划解法代码 2.2 题二&#xff1…

vue-使用refs取值,打印出来是个数组??

背景: 经常使用$refs去获取组件实例,一般都是拿到实例对象,这次去取值的时候发现,拿到的竟然是个数组。 原因: 这是vue的特性,自动把v-for里面的ref展开成数组的形式,哪怕你的ref名字是唯一的&#xff01…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)

接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径: http://big-event-vue-api-t.itheima.net 本项目的技术栈 本项目技术栈基于 ES6、vue3、pinia、vue-router 、vite 、axios 和 element-plus http:/…

6.C++程序中的基本数据类型

数据类型是指在C中用于声明不同类型变量或函数的一个系统或抽象或者是一个分类,它决定了变量存储占用的内存空间以及解析存储的位模式。其实数据类型可以理解为固定内存大小的别名,是创建变量的模具,具体使用哪种模具(包括自定义&…

Python安装不再难!全平台保姆级教程带你轻松搞定!

Python介绍 Python是一种功能强大且灵活的编程语言,被广泛应用于各个领域。以下是Python在不同应用领域的一些常见用途: 网络开发 Python提供了丰富的库和框架,使其成为网络开发的理想选择。诸如Django、Flask和Pyramid等框架可以帮助开发人员…

一张图解析FastAdmin中的表格列表(bootstrap-table)的功能(备份)

功能描述 请根据图片上的数字索引查看对应功能说明。 1.菜单名称和描述 默认生成的CRUD是没有菜单名称和描述显示的,如果需要显示则可以修改权限管理->菜单规则,给对应菜单的添加上备注信息后即可显示,支持HTML 2.TAB过滤选项卡 在一键…

Linux之CentOS 7.9-Minimal部署Oracle 11g r2 安装实测验证(桌面模式)

前言: 发个之前的库存… Linux之CentOS 7.9-Minimal部署Oracle 11g r2 安装实测验证(桌面模式) 本次验证的是CentOS_7_Minimal-2009桌面模式来部署Oracle 11g r2,大家可根据自身环境及学习来了解。 环境:下载地址都给你们超链好了 1、Linux系统镜像包: 1.1 CentOS-7-x86_…

Linux 删除文件不释放空间问题处理

背景: 服务器磁盘空间已经达到100%,删除存放日志路径下的文件后,发现空间并未释放! 原因:在linux系统中,通过rm删除文件将会从文件系统的文件夹结构上解除链接(unlink)然后删除,然而假设文件是被…

探索Python的Excel世界:openpyxl的魔法之旅

文章目录 探索Python的Excel世界:openpyxl的魔法之旅背景:为什么选择openpyxl?什么是openpyxl?如何安装openpyxl?简单的库函数使用方法场景应用:openpyxl在实际工作中的应用常见bug及解决方案总结 探索Pyth…

如何利用视觉分析实现扬尘检测

随着城市化和工业化进程的加速,扬尘污染已成为全球各大城市面临的环境问题之一。建筑施工、道路交通以及工业活动产生的扬尘不仅影响空气质量,严重时还会引发呼吸道疾病,威胁公众健康。传统的扬尘检测手段多为传感器、采样仪等设备&#xff0…

【Echarts】vue3打开echarts的正确方式

ECharts 是一个功能强大、灵活易用的数据可视化工具,适用于商业报表、数据分析、科研教育等多种场景。那么该如何优雅的使用Echarts呢? 这里以vue3为例。 安装echarts pnpm i echarts封装公用方法 // ts-nocheck import * as echarts from echarts; // 我们这里借…

【C++指南】inline内联函数详解

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 C为什么引入了inline来替代C语言中的宏 inline的基本用法 定义inline函数 inline的优势与…

IO模型---BIO、NIO、IO多路复用、AIO详解

本篇将想给详细解释一下什么是BIO、NIO、IO多路复用以及AIO~ 同步的阻塞(BIO)和非阻塞(NIO)的区别 BIO:线程发来IO请求后,一直阻塞着IO线程,需要缓冲区这边数据准备好之后,才会进行下一步的操作。 举个🌰&#xff1…

HarmonyOS应用开发者基础认证

目录 一、判断二、单选三、多选 一、判断 1、HarmonyOS提供了基础的应用加固安全能力,包括混淆、加密和代码签名能力。正确 2、可以通过ohpm uninstall 指令下载指定的三方库。错误 3、支持模块化开发是指一个应用通常会包含多种功能,将不同的功能特性…

【读书笔记-《30天自制操作系统》-23】Day24

本篇内容依然比较简单,主要是优化窗口功能以及开发定时器应用程序。首先是优化窗口的切换功能,实现通过键盘和鼠标切换窗口,然后是实现通过鼠标关闭窗口。接着实现不同窗口输入状态的切换,最后是实现定时器的API与应用程序。 1.…

Windows Server2016多用户登录破解

使用场景 很多时候,公司开发和测试运维会同时登录同一台windows服务器进行查询、更新、维护等操作,本文就来介绍一下Windows2016配置多人远程桌面登录实现,感兴趣的可以了解一下。 操作流程 (1)首先桌面需要安装远程…

旅行社区应该如何规划?

近年来,旅游行业逐渐恢复,包括微度假、精致露营、康养旅游、乡村民宿等旅游模式。用户旅游支出、旅游人次逐渐恢复,旅游收入仍待提升。 那么旅游社区应该如何搭建,内容如何规划呢? 我们了解到,很多旅游网…

kettle 数据库迁移 使用分页原理实现 数据库mysql

使用 kettle 9.0 先修改配置文件: C:\Users\xx\.kettle 新增如下配置,解决mysql 空字符串 自动转 null bug KETTLE_EMPTY_STRING_DIFFERS_FROM_NULLY git地址: GitHub - 2292011451/kettle_tool 第一步: 先把要迁移的表进行读取,循环查询每个表的最大数量以及页数,追加到…

ROS 设置dhcp option 6 多个地址格式

ROS routeOS 手工设置 dhcp 服务 option 6 多个dns 地址格式。字符串方式