MySQL的增删改查(进阶)--上

1. 数据库约束

1.1 约束类型

        NOT NULL - 指示某列不能存储 NULL 值。

        UNIQUE - 保证某列的每行必须有唯一的值。

        DEFAULT - 规定没有给列赋值时的默认值。

        PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

        FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

        CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。

        下面将详细讲解一下以上所提到的约束类型; 

1.2 NOT NULL约束

        创建表时,可以指定某列不为空

        如下我们先创建一个chengyuan表,我们对里面的id列进行约束为不能为null;

         创建代码如下:

DROP TABLE IF EXISTS chengyuan;
CREATE TABLE chengyuan (id INT NOT NULL,score double,name VARCHAR(20),qq_mail VARCHAR(20)
);

        下图为我们创建的chengyuan表结构的明细,可以看到id行列是显示不可为null的

        我们通过给id列插入null数据试一下:

        报错显示:id列不能为null;

1.3 UNIQUE:唯一约束

        指定表中的score列为唯一的、不重复的

        下面我们重新设置一下表结构,对id进行约束为唯一约束,代码如下:

DROP TABLE IF EXISTS chengyuan;
CREATE TABLE chengyuan (id INT NOT NULL,score double UNIQUE,name VARCHAR(20),qq_mail VARCHAR(20)
);

        查看表结构进行可以看到,score列发生了明显变化,如下图所示:

         我们通过给score列插入相同的数据数据试一下:

        报错信息显示我们对于chengyuan表插入了相同的score数据;

1.4 DEFAULT:默认值约束

        指定插入数据时,若列为空,则为默认值

        重新设置一下chengyuan表,对name进行默认值约束,若为null,则为默认值:委婉待续

        且具体代码如下:

// 重新设置学生表结构
DROP TABLE IF EXISTS chengyuan;
CREATE TABLE chengyuan (id INT NOT NULL,sn INT UNIQUE,name VARCHAR(20) DEFAULT '委婉待续',qq_mail VARCHAR(20)
);

        查看表结构:

//Default(默认)列的name行不再为null,而为我们设置的默认值“委婉待续”

        进一步测试:

        我们在插入的时候,没有对name赋值,他会使用我们的默认值;

        注意事项:只适用于指定列插入数据,且该列不是受约束的列 

1.5 PRIMARY KEY:主键约束

        指定某一列为主键

         主键是关系表中记录的唯一标识,使用主键应注意以下几点:

        1、主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。

        2、一个字段名只能在联合主键字段表中出现一次。

        3、联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则
       

        创建主键代码具体如下:

// 重新设置学生表结构
DROP TABLE IF EXISTS chengyuan;
CREATE TABLE chengyuan (id INT PRIMARY KEY,sn INT UNIQUE,name VARCHAR(20) DEFAULT '委婉待续',qq_mail VARCHAR(20)
);

        查看表结构:

        我们可以简单理解为:主键是 NOT NULL 和 UNIQUE 的结合

q:主键不允许重复,怎样保证呢?

a:Mysql自身就有一种机制,叫做“自增主键”,意味着当前的id,不需要用户自己指定,可以交给数据库,让数据库自己分配。---数据库按照自增的方式自增。自增主键务必是整数。同时id也可以自己手动插进去,但是要确保插入的结果是不重复的。但是当手动之后自增主键后,id接着上个数字id自增。

1.6 FOREIGN KEY:外键约束

        外键用于关联其他表的主键或唯一键

        语法如下:

foreign key (字段名) references 主表(列)

        MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

        外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。

        主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

         

        定义外键时,需要遵守下列规则:

        1、主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

        2、必须为主表定义主键。

        3、主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

        4、在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

        5、外键中列的数目必须和主表的主键中列的数目相同。

        6、外键中列的数据类型必须和主表主键中对应列的数据类型相同。

        下面通过实例来了解外键;

        1、创建队伍表teamss,id为主键

DROP TABLE IF EXISTS teams;
CREATE TABLE teams (id INT primary KEY auto_increment,name VARCHAR(20),desc1 VARCHAR(100)
);

        2、创建成员表chengyuan,一个成员对应一个队伍,一个队伍对应多个成员。使用id为主键,teamss_id为外键,关联队伍表与成员;

1.7 CHECK约束

        略(mysql5版本并不支持这个操作)

2. 表的设计

        下面主要讲解了表在后期设计时,用到的模型;

2.1 一对一

        像每一个人都有固定的身份证号

2.2 一对多

        一个班级里面存放多个学生的相关数据;

2.3 多对多

ps:本篇的内容就到这里了,如果大家感兴趣的话,就请一键三连哦!!!

        关于mysql进阶的内容委婉待续;

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

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

相关文章

需要token的原因----

需要token的原因主要有以下几点: 安全性:Token的使用可以增强用户信息的安全性。在用户向服务端请求数据时,服务端需要通过数据库来判断用户名和密码是否正确,以确定是否提供所需内容。Token作为一层额外的验证,可以验…

2023中国品牌节金谱奖荣誉发布 酷开科技获颁OTT行业科技创新奖

11月17日—19日,以“复苏与腾飞”为主题的2023第十七届中国品牌节,在杭州市云栖小镇国际会展中心成功举行。在18日晚间的荣耀盛典上,“TopBrand 2023中国品牌节金谱奖”荣誉发布,酷开科技斩获OTT行业科技创新奖。 酷开科技作为OTT…

2023/12/19 work

1. 基于UDP的TFTP文件传输 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <myhead.h>//实现下载功能 int do_download(int cfd, struct sockaddr_in sin) {//定义变量存储下载请求包char buf[516] "";//定义变量存…

工作服穿戴监测识别摄像机

工作服穿戴监测识别摄像机是一种通过图像识别技术&#xff0c;实时监测和识别工作场所穿戴的工作服是否符合要求的设备。它可以有效地监测员工是否穿戴了正确的工作服&#xff0c;提高工作场所的安全性和管理效率。 这种摄像机利用先进的计算机视觉技术&#xff0c;能够快速准确…

九牧:科技卫浴,长期主义

“没有做错什么&#xff0c;但却输给了时代”&#xff0c;这是人们给当年手机巨头诺基亚的注解。 谁也没有想到&#xff0c;曾在手机行业称雄的诺基亚&#xff0c;最终败给了时代。当年&#xff0c;在2G向3G、4G跨越的时候&#xff0c;苹果、微软的iOS和安卓系统将手机从简单的…

【QT】C++/Qt使用Qt自带工具windeployqt打包

基本操作 运行项目debug或者release 将运行后的可执行文件单独放到一个文件夹中 根据项目使用的kits来选择Qt的打包工具 打开工具后移动到exe文件夹下执行windeployqt xxx.exe 预览图 问题 打包后再其他电脑上运行出现下图错误 将自己电脑的这个文件拷到可执行文件夹中既…

redis 7.2.3 官方配置文件 redis.conf sentinel.conf

文章目录 Intro解压配置使用等官方配置文件模板redis.conf 仅配置项redis.conf 完整版(配置项注释)sentinel.conf 仅配置项sentinel.conf 完整版(配置项注释) Intro 在下载页面&#xff1a;https://redis.io/download/ 下载最新版本的redis&#xff1a; https://github.com/re…

linux搭建gitlab

gitlab的介绍 区别于github&#xff0c;github是面向互联网基于git实现的代码托管平台&#xff0c;gitlab是基于Ruby语言实现的git管理平台软件&#xff0c;一般用于公司内部代码仓库。 gitlab组成 Nginx 静态Web服务器Gitlab-workhorse 轻量级的反向代理服务器Gitlab-shell 用…

PHP 读取excel输入为HTML

目录 介绍 安装扩展 读取excel文件 输入为html 保存到文件 总结 介绍 以前都是使用phpexcel&#xff0c;不过已经不再更新了&#xff0c; 不过不用担心还可以使用phpspreadsheet来替代它进行操作。 PHPSpreadsheet-在PHP中读取、创建和编写电子表格文档-电子表格引擎。…

docker 安装及配置 nginx + tomcat(四):高可用

文章目录 1. 引言2. 高可用架构3. 实际步骤3.1 虚拟机新建系统3.2 安装 keepalived3.3 配置 keepalived3.4 启动 keepalived3.5 验证高可用3.5.1 查看当前效果3.5.2 模拟灾难 4 参考 1. 引言 前情提要&#xff1a; 《docker 安装及配置 nginx tomcat&#xff08;一&#xff0…

Arcgis导出为tiff

原有一幅影像&#xff0c;在进行一些操作之后&#xff0c;需要导出为tiff 比如我对他进行一个重采样&#xff0c;48m分辨率变为96m 在重采样后的数据图层上右键&#xff0c;导出数据 为什么有时会导出为.gdb格式的呢&#xff1f; 可能是位置处在一个文件地理数据库.gdb下

【go-zero】 go-zero API 如何接入 Nacos 被 java 服务调用 | go集成java服务

一、场景 外层使用的是springcloud alibaba 这一套java的分布式架构 然后需要接入go-zero的api服务 这里我们将对api服务接入Nacos进行一个说明 二、实战 1、package 因为使用的是go-zero框架 这里我们会优先使用go-zero生态的包 github 包如下: github.com/nacos-group/naco…

「Verilog学习笔记」游戏机计费程序

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule game_count(input rst_n, //异位复位信号&#xff0c;低电平有效input clk, //时钟信号input [9:0]money,input set,input boost,output reg[9:0…

java线程池执行任务时异常被吃掉

问题 今天在测试环境通过线程池执行任务时突然被中断&#xff0c;跟踪日志发现代码跑到一半后面的日志就不再打印&#xff0c;而且也没有任何异常堆栈信息&#xff0c;也就是说程序执行被中断了&#xff0c;后面反复尝试经排查发现是线程池使用不当导致。 测试验证 我们用线程…

网络的发展历史,ip地址

TCP/IP 是获得最广泛支持的通信协议集合 包含了大量internet应用的标准协议 -支持跨网络架构&#xff0c;跨操作系统平台的通信 主机与主机之间通信的三个要素 1.ip地址(ip address) 2.子网掩码(subent mask) 3.ip路由(ip router) ip地址&#xff1a; 作用&#xff1a;用…

【深度学习】语言模型与注意力机制以及Bert实战指引之一

文章目录 统计语言模型和神经网络语言模型注意力机制和Bert实战Bert 统计语言模型和神经网络语言模型 区别&#xff1a;统计语言模型的本质是基于词与词共现频次的统计&#xff0c;而神经网络语言模型则是给每个词赋予了向量空间的位置作为表征&#xff0c;从而计算它们在高维…

【从服务器获取共享列表失败】【无法与设备或资源通信】解决方案!

【从服务器获取共享列表失败】背景&#xff1a; 某项目搭建有samba共享&#xff0c;使用一段时间后&#xff0c;不知何种原因&#xff0c;客户端链接共享时报&#xff1a;从服务器获取共享列表失败&#xff0c;无效的参数。 可参考解决方案A&#xff1a; 银河麒麟samba共享文…

Spring Boot自动装配原理以及实践

了解自动装配两个核心 Import注解的作用 Import说Spring框架经常会看到的注解&#xff0c;它有以下几个作用: 导入Configuration类下所有的bean方法中创建的bean。导入import指定的bean&#xff0c;例如Import(AService.class)&#xff0c;就会生成AService的bean&#xff0…

杰发科技AC7840——SPM电源管理之低功耗模式

0、SPM简介 很早以前就听过低功耗模式&#xff0c;一直没有怎么深入了解&#xff0c;最近遇到几个项目都是跟低功耗有关。正好AutoChips的芯片都有电源管理的功能&#xff0c;在此借用AC7840的SPM对低功耗进行测试。 1、AC7840的5种功耗模式 2、AC7840的模式转换 3、唤醒 在…

小程序使用web-view无法打开该H5页面不支持打开的解决方法

我在正式上线版小程序使用 web-view 组件测试时提示&#xff1a;“无法打开该页面&#xff0c;不支持打开 https://xxxxxx&#xff0c;请在“小程序右上角更多->反馈与投诉”中和开发者反馈。” 奇怪的是&#xff0c;“真机调试”、“开发模式”都可以使用 web-view 组件访…