学习MySQL的第十天

一、MySQL的数据类型

1.MySQL的数据类型

 2.常见的数据类型的属性

二、整数类型


三、浮点类型


        REAL默认就是DOUBLE。如果你把SQL模式设定为启用“REAL_AS_FLOAT”,那么,MySQL就认为REAL是FLOAT。如果要启用“REAL_AS_FLOAT”,可以通过以下SQL语句实现:
        SET sql_mode = "REAL_AS_FLOAT";

四、约束

4.1 为什么需要约束

        数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的,而约束就是为了保证数据的完整性
        约束就是对表中字段的限制

实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录

域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女”

引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门

用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。

        约束的分类:

1.从约束字段的字段的个数分为  单列约束和多列约束
2.约束的作用范围分为  列级约束和表级约束
列级约束:将此约束声明在对应字段的后面
表级约束:在表中所有字段

        约束的作用:

NOT NULL 非空约束
UNIQUE 唯一性约束
PRIMARY KEY 主键约束
FOREIGN KEY 外键约束
CHECK 检查约束
DEFAULT 默认值约束

        添加约束的场景

 CREATE TABLE 时添加约束
 ALTER TABLE 时添加约束

        如何查看表中的约束

SELECT * 
FROM information_schema.table_constraints # 数据库内置的表
WHERE table_name = 'emp1';  # 之前的属于固定查询,这一句是进行匹配

4.2 非空约束

        在创建表时添加约束

CREATE TABLE test1(
id INT NOT NULL,
name VARCHAR(255) NULL,
salary DECIMAL(10,2)
)

        在 ALTER TABLE时添加约束

ALTER TABLE test1
MODIFY name VARCHAR(255) NOT NULL;

        删除非空约束

        就相当于修改约束使其没有限制

ALTER TABLE test1
MODIFY name VARCHAR(255) NOT NULL;

4.3 唯一约束性

        UNIQUE 约束列中的内容不能重复

        在创建时添加约束

CREATE TABLE test2(
id INT UNIQUE,  # 列级约束
name VARCHAR(255),
garden TINYINT,
# 表级约束
CONSTRAINT uk_test2_name UNIQUE(name)  # 或unique(name)
)

# 查看约束
SELECT * 
FROM information_schema.table_constraints # 数据库内置的表
WHERE table_name = 'test2';

        补充:
        (1)表级约束:NOT NULL 没有表级约束;CONSTRAINT 意思是 约束
        (2)在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同
        (3)可以向声明unique的字段上添加NULL值,而且可以多次添加

        在 ALTER TABLE时添加约束

ALTER TABLE test2
ADD CONSTRAINT new UNIQUE(name) # 对约束条件进行约束,并对约束进行命名
# ADD UNIQUE(name) 直接添加
# 或
/*
ALTER TABLE test2
MODIFY name VARCHAR(255) UNIQUE
*/SELECT * 
FROM information_schema.table_constraints # 数据库内置的表
WHERE table_name = 'test2';

        复合的唯一性约束

        对于复合的唯一性约束,只要这两个不完全相同即可

CREATE TABLE USER(
id INT,
name VARCHAR(255),
password VARCHAR(255),
# 表级约束
UNIQUE(name,password)
)# 例:
INSERT INTO USER
VALUES(1,'a','abc'),
(2,'b','abc')

        删除唯一性

        (1) 添加唯一性约束的列上也会自动创建唯一索引
        (2) 删除唯一约束只能通过删除唯一索引的方式删除
        (3) 删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样。
        (4) 如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;如果是组合列,那么默认和()中排在第一个的列名相同,也可以自定义唯一约束名

4.4 主键约束

        PRIMARY KEY  这就好使主键不能为空,必须有值

        在 CREATE TABLE 时添加约束

CREATE TABLE test3(
id INT PRIMARY KEY,
name VARCHAR(255),
salary DECIMAL(10,2),
email VARCHAR(255)
);
# 或
CREATE TABLE test5(
id INT,
name VARCHAR(255),
PRIMARY KEY(id)
);SELECT * 
FROM information_schema.table_constraints # 数据库内置的表
WHERE table_name = 'test5';

        在 ALTER TABLE 时添加约束

        此时只能是在这个表没有主键约束时才可以

ALTER TABLE test5
ADD PRIMARY KEY (id)

        删除主键约束

        因为一个表只有一个主键,所以删除时,不需要指定名称,所以删除很好进行

ALTER TABLE test5
DROP PRIMARY KEY

五、自增变量的持久化

        自增列:

        首先我们要引入自增列的概念,就比如学号列,如果你设置为了自增列,那么每增加一个学生,它就会自动向后顺延一个学号

CREATE TABLE test7(
id INT auto_increment PRIMARY KEY,  # 创建一个自增列
name VARCHAR(255) UNIQUE 
)
SELECT *FROM test7;
INSERT INTO test7(name)
VALUES('Tom'),('Mike')
SELECT *FROM test7;
INSERT INTO test7
VALUES(NULL,'people')
SELECT *FROM test7;

        补充:

        (1)当我们没有指明字段就进行添加时,含有auto_increment的列会自己进行自增;
        (2)当我们向含有auto_increment的字段添加0或null时,也会自动进行自增

        随后我们通过一个主表和从表来展现一下基本操作

外键约束
在create table 时添加
# 主表和从表:父表和子表
先创建主表
CREATE TABLE deep(
id INT,
name VARCHAR(155)
);
创建从表
CREATE TABLE dee(
dee_id INT PRIMARY KEY auto_increment,
dee_name VARCHAR(155),
department_id INT,
# 表级约束
FOREIGN KEY(dee_id) REFERENCES deep(id)
);
# 需要注意的是主表中的id也需要有主键约束或唯一性约束,才能与从表建立联系
ALTER TABLE deep
ADD PRIMARY KEY (id);

        我们再来了解一下约束的等级

        cascade方式:在父表上更新删除记录,同步更新删除子表的匹配记录
        Set null模式:父表上已经更新或删除记录时,将子表上匹配记录的列的位置设为null
        no action方式:如果子表中有匹配记录,则不允许对主表进行更新删除操作
        restrict方式:如果子表中有匹配的记录,则不允许对父表对应候选键进行更新删除操作
        restrict方式:同no action
        set default方式:父表有变更时,子表相应的设置成一个默认的值,但是lnnodb不能识别

        随后我们以ON UPDATE CASCADE ON DELETE SET NULL来进行一次演示:

先创建主表
CREATE TABLE dept(
id INT PRIMARY KEY,
name VARCHAR(155)
);
创建从表
CREATE TABLE de(
de_id INT PRIMARY KEY auto_increment,
de_name VARCHAR(155),
department_id INT,
# 表级约束
FOREIGN KEY(department_id) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE SET NULL
# 把修改操作设置为级联修改等级,把删除操作设置为set null等级
# 注意:不能将不能为空的列作为修改对象
);INSERT INTO dept
VALUES(1001,'教学部'),
(1002,'学习部'),
(1003,'公关部')INSERT INTO de
VALUES(1,'张三',1001),
(2,'李四',1001),
(3,'王五',1003),
(4,'尔玛',1002)
dept
de

        我们先建立起主表与从表的联系,然后对主表进行修改,观察从表的变化

UPDATE dept 
SET id = 1004
WHERE id = 1002
SELECT * 
FROM de,dept
where de.department_id = dept.id
dept
de

        当我们修改主表时,从表中与之关联的列也同步发生变化

DELETE FROM dept
WHERE id = 1002

        此时尔玛的department_id 为null

        最后我们还需要注意删除外键约束,因为在当初建立约束时,就自动产生了约束索引

        不过我们还需要注意:由于在当初建表的时候,没有为这个外键约束起一个名称,所以 MySQL 为此自动生成了一个名称,这个自动生成的名称不同于受到这个外键约束的列名。而删除外键的时候,需要提供的是这个外键约束名,而不是列名,所以需要先查找出外键的名称,然后才能将其删除

        为了查看外键的名称,我们需要用到  show create TABLE de,并将其复制出来

CREATE TABLE `de` (`de_id` int NOT NULL AUTO_INCREMENT,`de_name` varchar(155) DEFAULT NULL,`department_id` int DEFAULT NULL,PRIMARY KEY (`de_id`),KEY `department_id` (`department_id`),CONSTRAINT `de_ibfk_1` FOREIGN KEY (`department_id`) REFERENCES `dept` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

         我们可以看到外键的名称:CONSTRAINT `de_ibfk_1` FOREIGN KEY (`department_id`) REFERENCES `dept` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
        被命名为了 de_ibfk_1 ,因此我们删除时也要通过这个进行删除

# 删除外键约束
ALTER TABLE de
DROP FOREIGN KEY de_ibfk_1
# 检查删除的外键约束是否有对应的普通索引
SHOW INDEX FROM de # 通过这一步找到Column_name 中,对应的我们所删除的字段名称
# 删除索引
ALTER TABLE de
DROP INDEX department_id # key name即外键的约束名

        从而实现对外键及其索引的完整性删除

六、结语

        永远相信自己;一往无前,风雨无阻

须知少日拏云志,曾许人间第一流。我们还年轻,我们还有无限可能!

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

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

相关文章

ubuntu24.04上使用qemu+buildroot+uboot+linux+tftp+nfs模拟搭建vexpress-ca9嵌入式linux开发环境

1 准备工作 1.1 安装依赖工具 sudo apt-get update && sudo apt-get install build-essential git bc flex libncurses5-dev libssl-dev device-tree-compiler1.2 安装arm交叉编译工具链 sudo apt install gcc-arm-linux-gnueabihf安装之后,在终端输入ar…

ubuntu 22.04 使用ssh-keygen创建ssh互信账户

现有两台ubuntu 22.04服务器,ip分别为192.168.66.88和192.168.88.66。需要将两台服务器创建新用户并将新用户做互信。 创建账户 adduser user1 # 如果此用户不想使用密码,直接一直回车就行,创建的用户是没法使用用户密码进行登陆的 su - …

【PCIE配置空间】

1 PCIE配置空间 1.1 软件如何知道PCIE设备是Swith,RC还是EP? –软件通过读取寄存器信息。 PCIE配置空间• PCIE寄存器;--PCIE配置协议规定必须实现的空间。--PCIE存在两种配置空间Type0/Type1;--Type0配置空间EP设备必须实现;-…

Android 热点二维码简单示例

Android 热点二维码简单示例 一、前言 Android 原生设置有热点二维码分享功能,有些系统应用也会有这个需求。 下面看看是如何实现的。 本文是一个比较简单的内容。 二、热点二维码生成实现 1、效果 整个应用就一个普通的Activity,显示一个按钮和二维…

uv:重新定义Python开发效率的下一代工具链

在Python生态系统中,包管理和项目工具链的复杂性一直是开发者面临的一大挑战。从依赖管理、虚拟环境创建到多版本Python切换,传统的工具链(如pip、virtualenv、poetry等)虽然功能强大,但操作繁琐、性能不足的问题长期存…

T101D加固平板电脑:无人机地面站的高效智能控制核心

随着无人机技术在应急救援、农业监测、军事侦察等领域的广泛应用,对地面控制设备的要求也日益提高。鲁成伟业推出的T101D加固平板电脑凭借其高性能、强防护和专业化设计,成为无人机地面站的核心控制终端,为复杂环境下的作业提供了可靠支持。 …

Datawhale AI春训营】AI + 新能源(发电功率预测)Task1

赛题链接 官网 新能源发电功率预测赛题进阶方案 下面是ai给的一些建议 新能源发电功率预测赛题进阶方案 一、时序特性深度挖掘 1. 多尺度周期特征 # 分钟级周期编码 train[15min_index] (train[hour]*4 train[minute]//15)# 周周期特征 train[weekday] pd.to_datetime…

山东科技大学深度学习考试回忆

目录 一、填空(五个空,十分) 二、选择题(五个,十分) 三、判断题(五个,五分) 四、论述题(四个,四十分) 五、计算题(二个&#xff…

Redis线上操作最佳实践有哪些?

大家好,我是锋哥。今天分享关于【Redis线上操作最佳实践有哪些?】面试题。希望对大家有帮助; Redis线上操作最佳实践有哪些? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在使用 Redis 时,尤其是在生产环境中,合理…

mac中的zip文件压缩与压缩文件中指定目录删除

问题 在使用mac的图形界面压缩文件后,往往那个压缩文件中带有__MACOSX文件,但是,这个文件夹又是我们不需要的目录,所有,需要对mac图形化界面压缩后的文件目录进行删除,改如何做? 检查压缩文件…

【记录】服务器用命令开启端口号

这里记录下如何在服务器上开启适用于外界访问的端口号。 方法 1 使用防火墙 1 su ,命令 输入密码 切换到root节点 2 开启防火墙 systemctl start firewalld3 配置开放端口 firewall-cmd --zonepublic --add-port8282/tcp --permanent4 重启防火墙 firewall-cmd…

深度学习-torch,全连接神经网路

3. 数据集加载案例 通过一些数据集的加载案例,真正了解数据类及数据加载器。 3.1 加载csv数据集 代码参考如下 import torch from torch.utils.data import Dataset, DataLoader import pandas as pd ​ ​ class MyCsvDataset(Dataset):def __init__(self, fil…

C++/Python实现RGB和HSI相互转换

1--C版本 #include <opencv2/opencv.hpp> #include <iostream> #include <cmath>// RGB to HSI cv::Vec3f RGBtoHSI(cv::Vec3b rgb) {float B rgb[0] / 255.0f;float G rgb[1] / 255.0f;float R rgb[2] / 255.0f;float num 0.5f * ((R - G) (R - B));f…

【Linux我做主】make和makefile自动化构建

make和makefile自动化构建 make和makefile自动化构建github地址前言背景介绍为什么需要make和makefile&#xff1f; make和makefile解析什么是make和makefile依赖关系和依赖方法核心语法结构简单演示编译清理 多阶段编译示例 make时执行的顺序场景1&#xff1a;clean目标在前(特…

Qt 入门 5 之其他窗口部件

Qt 入门 5 之其他窗口部件 本文介绍的窗口部件直接或间接继承自 QWidget 类详细介绍其他部件的功能与使用方法 1. QFrame 类 QFrame类是带有边框的部件的基类。它的子类包括最常用的标签部件QLabel另外还有 QLCDNumber、QSplitter,QStackedWidget,QToolBox 和 QAbstractScrol…

JAVA学习-多线程

线程 线程(Thread)是一个程序内部的一条执行流程。 程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序。 线程的常用方法及构造器&#xff1a; Thread提供的常用方法public void run() 线程的任务方法public void start() 启动线程public String getName() …

Github 2025-04-19Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-04-19统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目1Rust: 构建可靠高效软件的开源项目 创建周期:5064 天开发语言:Rust协议类型:OtherStar数量:92978 个Fork数量:12000…

OpenLayers:视图变换的方法

一、什么是视图变换&#xff1f; 视图变换就是指视图的 extent&#xff08;范围&#xff09;、center&#xff08;中心点&#xff09;、zoom&#xff08;缩放级别&#xff09;、 resolution&#xff08;分辨率&#xff09;、rotation&#xff08;旋转角&#xff09;等参数发生…

数字孪生火星探测车,星际探索可视化

运用图扑构建数字孪生火星探测车&#xff0c;高精度还原外观与内部构造。实时映射探测车在火星表面的移动、探测作业及设备状态&#xff0c;助力科研人员远程监测、分析数据&#xff0c;为火星探索任务提供可视化决策支持。

【NLP 66、实践 ⑰ 基于Agent + Prompt Engineering文章阅读】

你用什么擦干我的眼泪 莎士比亚全集 工业纸巾 还是你同样泛红的眼睛 —— 4.19 一、⭐【核心函数】定义大模型调用函数 call_large_model prompt&#xff1a;用户传入的提示词&#xff08;如 “请分析这篇作文的主题”&#xff09;&#xff0c;指导模型执行任务 client&…