当前位置: 首页 > news >正文

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       王五选择了教学


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

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

相关文章:

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

本节目标: NOT NULL - 指示某列不能存储 NULL 值。 UNIQUE - 保证某列的每行必须有唯一的值。 DEFAULT - 规定没有给列赋值时的默认值。 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识&am…...

SAP MM学习笔记 - 豆知识02 - MR21 修改物料原价,MM02 修改基本数量单位/评价Class,MMAM 修改物料类型/评价Class

上一章讲了一些豆知识。比如 - MM50 批量扩张品目 - XK05/06 Block/消除供应商 - MM06/MM16 品目消除 - SE11/SE16/SE16/SE16N/SE16H/DB02 等查看常用的操作Table和数据的T-code SAP MM学习笔记- 豆知识01 - MM50 批量扩张,XK05/XK06 Block/消除供应商&#xf…...

谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存

文章目录 一,谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存1,在Elasticsearch的配置类中增加通用设置2,索引数据3,验证 一,谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存 1,在…...

flutter开发环境搭建与android studio 安装配置

flutter开发环境搭建与android studio 安装配置 安装 android studio 下载安装 Android Studio 开发工具 Android Studio官网安装的时看到配置路径就换成自己其他盘的路径即可,其他的一路下一步就ok安装完毕,运行打开缺少 android sdk 按照提示下载即可…...

postgresql 字符串 替换

postgresql 字符串 替换 在PostgreSQL中,可以使用replace()函数来替换字符串中的某个部分。该函数的语法如下: REPLACE(string text, from text, to text) 其中: string 是要进行替换操作的原始字符串。 from 是原始字符串中需要被替换掉的…...

如何强化学习神经网络

强化学习(Reinforcement Learning, RL)神经网络是一种通过奖励和惩罚机制来学习策略的方法,适用于各种复杂的决策问题。以下是强化学习神经网络的一些主要步骤和方法: 1. 了解基本概念 环境(Environment)…...

Hadoop未授权访问漏洞

Hadoop未授权访问漏洞 Hadoop是一个由Apache基金会所开发的分布式系统基础架构,由于服务器直接在开放了Hadoop机器HDFS的50070web端口及部分默认服务端口,黑客可以通过命令行操作多个目录下的数据,如进行删除,下载,目…...

Python中json模块的编码和解码

在Python中,可以用json模块处理JSON的编码和解码问题。json的全程是 javascript object notation, 翻译一下就是javascritpt 对象表示法。json是一种轻量级的数据交换格式,容易阅读和编写,支持的数据类型有:字符串、数字、数组和对…...

【Linux】文件变身大作战:Linux下的文件重命名艺术

欢迎来到 CILMY23 的博客 🏆本篇主题为:文件变身大作战:Linux下的文件重命名艺术 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法…...

字节的存储和字符的存储

字节的存储 内存中的存储 基本数据类型: 在Java中,byte 类型占用 1 个字节(8 位)。它的取值范围是从 -128 到 127。存储在内存中的 byte 数据可以直接操作,例如通过数组或变量访问。 数据结构: byte 数组…...

Markdown插入Base64格式的图片,无需图床,稳定保存

Markdown插入Base64格式的图片,无需图床,稳定保存 我是一个Markdown的爱好者,转存图片是MD经常出问题的地方,因为MD不像其他富文本编辑器,将图片内嵌到文件中,而是用链接的形式引用,或网络链接…...

weblogic 连接gaussdb测试数据源是否联通

文章目录 1. gaussdb创建远程连接用户和数据库2. weblogic构建GaussDB源数据库3. 测试结果查询注意 weblogic中jar包已经放入lib目录中gaussdb已经创建可以连接登录的用户和数据库1. gaussdb创建远程连接用户和数据库 新建用户和数据库连接客户端Gauss=# create user lily pas…...

如何成为全域运营商?掌握这2种申请方式就够了!

随着全域概念的兴起,全域运营商的职业前景和收益空间逐渐显现,并迅速成为了热门创业赛道中的一份子,连带着如何成为全域运营商等入局方式相关话题也成为了众多创业者热议的焦点。 不过,从市场现状来看,作为涵盖公域和私…...

@ConfigurationProperties加在方法上

ConfigurationProperties注解通常用于将外部配置文件(如application.properties或application.yml)中的属性映射到Java类中。它通常加在类上,但也可以加在方法上。加在方法上时,通常与Bean注解一起使用,以便将配置属性…...

使用CUBEMX配置的USB大容量存储设备主机库获取LUN数量的不严谨代码纠正

最近在使用usb主机库驱动U盘直接进行扇区读写。 发现MSC库中获取LUN相关代码有问题 代码如下 其中 status USBH_MSC_BOT_REQ_GetMaxLUN(phost, (uint8_t *)(void *)&MSC_Handle->max_lun); MSC_Handle->max_lun (MSC_Handle->max_lun > MAX_SUPPORTED_L…...

合并重叠的区间

这一题不能用差分数组&#xff0c;因为 [1 , 4] [5, 6] 这个就会被合并&#xff0c;正确的做法就是先排序 bool cmp(vector<int> a, vector<int> b) {if (a[0] < b[0]) return 1;if (a[0] b[0]) return a[1] < b[1];return 0; } class Solution { public:ve…...

docker和运维

创建服务 docker service create --name order --network my-net -p 8080:8080 -d xxx 加入swarm集群 docker swarm join --token xxx 更新结点名字为mysql docker node update --label-add servermysql ecs-82ec-0003 创建MySQL服务 docker service create --name mysql --con…...

苍穹外面day13(day10)---订单状态定时处理、来单提醒和客户催单

Spring Task 同学们可以看我这篇文章 Spring Task初学-CSDN博客 订单状态定时处理 新建OrderTask /*** 定时任务类&#xff0c;定时处理订单状态*/ Component Slf4j public class OrderTask {Autowiredprivate OrderMapper orderMapper;/*** 处理超时订单的方法*/Scheduled(c…...

RCE和php文件上传

一、远程命令执行&#xff08;RCE&#xff09; RCE漏洞概述 RCE漏洞允许攻击者通过某种方式在目标服务器上执行任意命令。这种漏洞通常出现在服务器端语言中&#xff0c;如PHP。 RCE漏洞原理 PHP中的一些函数可以执行命令或代码&#xff0c;但如果对这些函数的输入未加限制&a…...

nextjs 实现TodoList网页应用案例

参考&#xff1a; https://nextjs.org/ Next.js 是用于网络的一种 React 框架。一些世界上最大的公司在使用它&#xff0c;它能够借助 React 组件的力量让您创建高质量的网络应用程序。 1、创建项目&#xff1a; 另外注意&#xff1a;pages与app路由存在冲突&#xff0c;如果有…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...