MySQL基础操作全攻略:增删改查实用指南(中)

本节目标:
NOT NULL - 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值。
DEFAULT - 规定没有给列赋值时的默认值。
PRIMARY KEY - NOT NULL UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标
识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK - 保证列中的值符合指定的条件。对于 MySQL 数据库,对 CHECK 子句进行分析,但是忽略 CHECK子句。

1. 数据库约束

1.2 NULL约束

创建表时,可以指定某列不为空:
输入:
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT NOT NULL ,
  sn INT ,
  name VARCHAR ( 20 ),
  qq_mail VARCHAR ( 20 )
);

1.3 UNIQUE:唯一约束

指定 sn 列为唯一的、不重复的:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT NOT NULL ,
  sn INT UNIQUE,
  name VARCHAR ( 20 ),
  qq_mail VARCHAR ( 20 )
);
"Duplicate" 的中文意思是“重复的”或“复制的”。在数据库术语中,常用来表示唯一性约束
(UNIQUE constraint)被违反,即试图插入或创建一个已经存在的值或记录。

1.4 DEFAULT:默认值约束

指定插入数据时, name 列为空,默认值 unkown
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT NOT NULL ,
  sn INT UNIQUE,
  name VARCHAR ( 20 ) DEFAULT 'unkown' ,
  qq_mail VARCHAR ( 20 )
);

1.5 PRIMARY KEY:主键约束(要求:非空,唯一)

指定 id 列为主键:
对于整数类型的主键,常配搭自增长 auto_increment 来使用。插入数据对应字段不给值时,使用
最大值+1
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT NOT NULL PRIMARY KEY,
  sn INT UNIQUE,
  name VARCHAR ( 20 ) DEFAULT 'unkown' ,
  qq_mail VARCHAR ( 20 )
);
不为空
不能重复
不允许一个表中存在多个身份标识

但是数据库允许把多个列共同作为一个主键(联合主键)

主键需要分配一个唯一的值,如何进行分配呢?

mysql 提供了一个 自动分配 主键值 方式,“自增主键”auto_increment

插入数据时,可以不指定id列的值,让数据库自动分配.,就会按照1,2,3,4 ......

也能手动指定其他数值.

在mysql中,给每个表都记录了一个“自增主键的最大值”
后续继续插入数据,无论之前的最大值是否仍然存在
都是根据之前保存的最大值,继续往后分配的.

自增主键只能针对,像int/bigint整数使用

是有可能会使用字符串作为主键的.

部分情况下,都是用数字作为主键.

1.6 FOREIGN KEY:外键约束

外键用于关联其他表的 主键 唯一键
语法:foreign key ( 字段名 ) references 主表 ( )

案例:

-- 创建班级表,有使用 MySQL 关键字作为字段时,需要使用 `` 来标识
DROP TABLE IF EXISTS classes;
CREATE TABLE classes (
id INT PRIMARY KEY auto_increment,
name VARCHAR ( 20 ),
`desc` VARCHAR ( 100 )
);
-- 重新设置学生表结构
创建学生表 student ,一个学生对应一个班级,一个班级对应多个学生。使用 id 为主键, classes_id为外键,关联班级表 id
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY auto_increment,
  sn INT UNIQUE,
  name VARCHAR ( 20 ) DEFAULT 'unkown' ,
  qq_mail VARCHAR ( 20 ),
classes_id int ,
FOREIGN KEY (classes_id) REFERENCES classes(id)
                          本表的列                               被引用的表和列
);

此时,外键约束就出现了

再次往student 中插入数据,就务必要确保
插入的数据的classes_ld的值,得在classes表中存在.

学生表的 classld 列,引用自 班级表的classld 列

班级表中的 数据,约束了/制约了学生表的数据

制约                                          被制约的一方

父表                                                   子表

如果父表中的某个记录,被子表引用了,此时就不能删除/修改父表中的 对应记录了.

父表是约束了子表,
子表也会对父表反向进行约束.

主键本身也是有“唯一性要求的”
频繁触发查询,此处数据库就会对主键约束,给出特殊的处理.
加快查询四度

数据库会针对 主键 列创建索引

如果不指定主键,是一个unique,也能达成类似的效果
 

1.7 CHECK约束(了解)

MySQL 使用时不报错,但忽略该约束:

2. 表的设计

三大范式:

2.1 一对一

设计表的做法:


a)搞一个表,同时包含学生和账号的信息.
student account (studentld, name, accountName, password ..... )

b)搞两个表,使用id来进行联系.
student(studentld, name , accountld)
account(accountld, accountName, password)

student(studentld, name )
account(accountld, accountName, password , studentld)

2.2 一对多

一个账号只能属于一个学生

可以使用同一张表,也可以使用两张表(通过一个id,联系)

b)一对多关系

一个学生只能属于一个班级
一个班级可以包含多个学生

这个方案在MySQL中是不可行的.但是在有的数据库中(Redis是可行的)

学生表(学生id,学生姓名 ... ,班级 id)
1  张三  100
2  李四  101

3  王五  100

班级表(班级id,班级名称)

100      java100
101      java101

班级表(班级id,班级名称,学生id列表)

100         java100               1,3
101         java101                2

相当于“数组”类型

mysql不支持这样的类型

2.3 多对多

引入关联表,通过关联表把多对多关系表示出来

学生-课程表(学生id,课程id)
1       100       张三选择了语文
1       101       张三选择了数学
1       102       张三选择了英语

2       100       李四选择了语文
2       101       王五选择了教学


如果您觉得有失偏颇请您在评论区指正,如果您觉得不错的话留个好评再走吧!!

您的鼓励就是对我最大的支持!  ! !

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

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

相关文章

【C++】模拟实现stack

🦄个人主页:修修修也 🎏所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 ​ 目录 一.了解项目功能 📌了解stack官方标准 📌了解模拟实现stack 二.逐步实现项目功能模块及其逻辑详解 📌实现stack成员变量 &…

【Linux】进程间通信(管道通信、共享内存通信)

一.什么是进程间通信 进程间通信这五个字很好理解,就是进程和进程之间通信。 那么为什么要有进程间通信呢? 1.数据传输:一个进程需要将它的数据发送给另一个进程 2.资源共享:多个进程之间共享同样的资源 3.通知事件:一…

遗传算法与深度学习实战——生命模拟与进化论

遗传算法与深度学习实战——生命模拟与进化论 0. 前言1. 模拟进化1.1 代码实现1.2 代码改进 2. 达尔文进化论3. 自然选择和适者生存3.1 适者生存3.2 进化计算中的生物学 小结系列链接 0. 前言 生命模拟通过计算机模拟生物体的基本特征、遗传机制、环境互动等,试图模…

WPF 依赖属性 IsHitTestVisible

IsHitlTestVisible 仅影响本身的元素(含内部包含的子元素),不影响父元素效果,且事件会传递到父元素。 Eg: 如父元素有click事件, 子元素设置了IsHitTestVisiblefalse, 当鼠标单击这个子元素时&…

Android 埋点信息分析——内存篇

源码基于:Android U 0. 前言 在前一篇《Android statsd 埋点简析》一文中简单剖析了Android 埋点采集、传输的框架,本文在其基础对埋点信息进行解析,来看下Android 中埋下的内存信息有哪些。 1. 通过代码剖析google 埋点内容 1.1 PROCESS_M…

BootStrap前端面试常见问题

在前端面试中,关于Bootstrap的问题通常围绕其基本概念、使用方式、特性以及实际应用等方面展开。以下是一些常见的问题及其详细解答: 1. Bootstrap是哪家公司研发的? 回答:Bootstrap是由Twitter的Mark Otto和Jacob Thornton合作…

脊髓损伤小伙伴的活力重启秘籍! 让我们一起动起来,拥抱不一样的精彩生活✨

Hey小伙伴们~👋 今天咱们来聊聊一个超级重要又温暖的话题——脊髓损伤后的锻炼大法来啦!🎉 记住,无论遇到什么挑战,我们都要像打不死的小强一样,活力满满地面对每一天!💪 首先&#…

2024实验班选拔考试(热身赛)

比赛传送门 邀请码&#xff1a;2024wksyb A. 简单的数列问题 签到&#xff0c;记得开long long。 #include<bits/stdc.h> #define rep(i,a,b) for (int ia;i<b;i) #define per(i,a,b) for (int ia;i>b;--i) #define se second #define fi first #define endl …

【C#语音文字互转】.NET的TTS文本转语音合成

官方文档给出环境为Visual Studio 2017及以上&#xff1b;C#SDK为.NET4.8及以上 本文章环境介绍&#xff1a; Visual Studio 2022&#xff1b;C#SDK为.NET6.0 语音转文字请移步&#xff1a;【C#语音文字互转】C#语音转文字&#xff08;方法一&#xff09; 一. 启动 Visual Stud…

【OceanBase系列】—— OceanBase应急三板斧

作者&#xff1a; 花名&#xff1a;洪波&#xff0c; OceanBase 数据库解决方案架构师 目前随着OceanBase数据库越来越流行&#xff0c;社区已经有很多用户在生产环境使用了OceanBase&#xff0c;也有不少用户的核心业务用到了OceanBase数据库&#xff0c;在使用OceanBase数据库…

新址·新征程|美创科技北京中心喜迎乔迁

7月30日&#xff0c;北京暴雨倾城 连绵大雨和隆隆雷声 却像是在为一场新征程洗礼 这一天&#xff0c;我们迎来了重要的时刻 ——美创科技北京中心搬新家啦&#xff01; 新址&#xff1a;北京市海淀区庚坊国际大厦6层 喜迎新址&#xff0c;一场简单但喜气盈盈、温馨十足的乔…

【Python学习手册(第四版)】学习笔记16-函数基础

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要介绍Python中函数的基本概念&#xff0c;作用域以及参数传递&#xff0c;函数语法以及def和return语句的操作&#xff0c;函数调用表达式的行为&#xff…

Delphi5实现DLL的编写、调用

效果图 显式跟隐式调用差不多的&#xff0c;就重新画了窗体&#xff0c;画的有点粗糙。 DLL文件 DLL文件是一种包含了可执行代码的库文件&#xff0c;但它不能独立运行&#xff0c;必须由其他程序&#xff08;如EXE文件&#xff09;显式或隐式地加载并调用。DLL文件通常用于实…

全国地铁路线及站点SHP数据

数据是GIS的血液&#xff01; 我们在《126M全球手机基站SHP数据分享》一文中&#xff0c;为你分享过全球手机基站分布数据。 现在再为你分享全国地铁轻轨路线与站点SHP数据&#xff0c;你可以在文末查看该数据的领取方法。 全球地铁路线及站点数据 截至2023年12月31日&…

LAVIS在Mac,M1PRO芯片下的安装实战

LAVIS在Mac,M1PRO芯片下的安装实战 契机 ⚙ 本地想装个图片理解的大模型&#xff0c;看了下blip2感觉比较合适&#xff0c;macos安装的时候有点坑需要注意下&#xff0c;但是最终也无法使用mps加速&#xff0c;比较蛋疼。这里记录下安装步骤。 安装 LAVIS/projects/blip2 a…

【研发日记】Matlab/Simulink技能解锁(十二)——Stateflow中的两种状态机嵌套对比

文章目录 前言 项目背景 两级状态机 函数状态机 分析和应用 总结 参考资料 前言 见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》 见《【研发日记】Matlab/Simulink技能解锁(八)——分布式仿真》 见《【研发日记】Matlab/Simulink技能解锁(九)——基…

数据结构(其四)--特殊矩阵的存储

目录 11.特殊矩阵的压缩存储 &#xff08;1&#xff09;.一维数组的储存结构 &#xff08;2&#xff09;.二维数组的存储结构 &#xff08;3&#xff09;.普通矩阵的存储 &#xff08;4&#xff09;.特殊矩阵的压缩存储 i.对称矩阵 ii.三角矩阵 iii.三对角矩阵 iiii.稀疏矩…

Java多商户新零售超市外卖商品系统

解锁新零售奥秘&#xff0c;多商户外卖超市商品系统大揭秘&#xff01; &#x1f31f; 开篇&#xff1a;新零售时代的浪潮 在这个日新月异的数字化时代&#xff0c;新零售已悄然成为商业变革的新风口。想象一下&#xff0c;足不出户就能逛遍全城商家&#xff0c;心仪商品一键…

力扣——238.移动零

题目 思路 利用双指针&#xff0c;先找到第一个为0的地方指向&#xff0c;指针2指向下一个&#xff0c;指针1之前是已经处理好的数据&#xff0c;指针2进行遍历&#xff0c;遇到非零则与指针1数据交换&#xff0c;然后指针1。 代码 class Solution { public:void moveZeroes(…

离心机转子适配器容量转换器的作用

离心机转子是离心机的核心部件&#xff0c;离心机中的所有系统都配置为保证转子在一定条件下安全运行。转子不仅直接影响分离效果&#xff0c;而且也是离心机技术中的主要承力部件&#xff0c;对离心机的安全性极为重要。 简而言之&#xff0c;离心机可分为两部分&#xff1a;…