复习数据库(约束)上篇

目录

约束的分类

分类

注意

主键约束

添加主键约束

1 建表时,添加

1.1创建表:定义列时指定

1.2 创建表:定义列之后独立指定主键:

2 建表后使用alter  关键字添加

删除约束

在主键添加自动增长属性

疑问

1 建表时添加

2 建表后添加

3 创表之后添加自动增长可以使用关键字 modify/change

关键字 modify/change 的联系

modify

change

主键的特点

唯一约束

实例代码

非空约束

实例代码

发现

总结


约束的分类

分类

主键约束(primary key):唯一且不是null ,每张表,最多只能有一个主键约束

唯一约束(unique):唯一,每一张可以有多个唯一约束

非空约束:不为null

默认约束:保存数据时,如果未指定该字段的值/ 你不添加数据时,则使用默认值

外键约束(foreign key):用于让两张表建立连接,保证数据的一致和完整性

检查约束(check 8.0.16版本之后,才可以被正常使用):为了使该字段满足一定的条件

注意

  • 约束是作用在表的字段(该列)上的
  • 添加约束,可以在建表时/建完表之后添加约束

主键约束

添加主键约束

1 建表时,添加

1.1创建表:定义列时指定

代码如下

CREATE TABLE stu (sid CHAR(6) PRIMARY KEY,sname VARCHAR (20),age INT,gender VARCHAR (10)
) ;
1.2 创建表:定义列之后独立指定主键:

代码如下

CREATE TABLE stu (sid CHAR(6),sname VARCHAR (20),age INT,gender VARCHAR (10),PRIMARY KEY (sid)
) ;

2 建表后使用alter  关键字添加

ALTER TABLE stu ADD PRIMARY KEY(sid);

删除约束

应用场景:一般发生在建表之后

ALTER TABLE stu DROP PRIMARY KEY;

在主键添加自动增长属性

疑问

注意 :我不知道大家有没有一种疑惑 ,潜意识把自动增长当成主键本身自带的属性

实际上这种说法,是有问题的,以下是关于主键和自动增长的区别和联系

主键(Primary Key)本身并不具有自增(AUTO_INCREMENT)的功能。主键是一种约束,用于确保数据的唯一性和非空性,而自增是一种特殊的属性,用于在插入新记录时自动生成唯一的数值。

以下是主键和自增属性的区别和联系:

  1. 主键(Primary Key)

    • 主键是一种表级别的约束,用于标识表中的每一行记录。
    • 主键列中的值必须是唯一的,且不能为NULL。
    • 主键可以是单个列或多个列的组合(复合主键)。
  2. 自增(AUTO_INCREMENT)

    • 自增是一种列级别的属性,用于在插入新记录时自动生成唯一的数值。
    • 自增属性通常用于整数类型的列,如INT或BIGINT。
    • 自增属性可以简化数据插入过程,无需手动指定主键值。
  3. 联系

    • 虽然主键和自增是两个不同的概念,但它们经常一起使用。
    • 将自增属性应用于主键列是一种常见的做法,这样可以确保主键值的唯一性和自动生成。
    • 但是,并非所有主键列都需要自增属性。例如,如果主键是基于业务逻辑生成的唯一标识符(如UUID),则不需要自增属性。
  4. 为什么需要额外添加AUTO_INCREMENT

    • 主键约束只保证数据的唯一性和非空性,但不会自动生成值。
    • 自增属性提供了一种方便的方式来自动生成唯一的主键值,特别是在插入新记录时。
    • 如果主键列不是自增的,你需要在插入新记录时手动指定主键值,这可能会导致数据插入的复杂性和错误。

1 建表时添加

写法1 

CREATE TABLE stu (sid int   auto_increment ,sname VARCHAR (20),age INT,gender VARCHAR (10),PRIMARY KEY (sid)
) ;

写法2

CREATE TABLE stu (sid int  primary key auto_increment ,sname VARCHAR (20),age INT,gender VARCHAR (10)) ;

我插入数据

INSERT INTO stu (sname, age, gender) VALUES ('tom1',18,'男'),('jack',19,'女'),('lisa',20,'男'),('tomCat',18,'女'),('dj',16,'男');

最终结果

2 建表后添加

CREATE TABLE stu (sid int  primary key ,sname VARCHAR (20),age INT,gender VARCHAR (10)) ;

注意:假设你不添加自动增长,而是直接插入,这会因为没有默认约束而出现错误

3 创表之后添加自动增长可以使用关键字 modify/change

关键字 modify/change 的联系

相同的: 都可以修改字段的类型和属性

不同点:change 可以改变字段名

modify

格式

alter table 表名 modify 字段名 字段类型   [ 属性];

alter table stu modify sid int  auto_increment;
change

格式

alter table 表名 change  原本字段名   现在的字段名   字段类型   [ 属性];

alter table stu change sid sid int auto_increment;

插入数据,展示最终结果

主键的特点

1 包含非空 约束和唯一约束,防止出现数据的冗余

注意:如果在插入数据时,确实存 在大量相同的数据时 如 学生表 和班级表 / 员工表和职位表。。应该使用外键。这个下一篇博客会提到。

2 在实际 工作中,我们给表添加主键时,往往被添加的字段,对该表不受影响

原因;是不希望在插入数据时,因为主键约束而无法添加成功

唯一约束

实例代码

// 创建stu 表CREATE TABLE stu (sid int  primary key auto_increment ,sname VARCHAR (20)  unique ,age INT not null,gender VARCHAR (10) default '男') ;
// 向stu表插入数据
INSERT INTO stu (sname, age, gender) VALUES ('tom1',18,'男'),('jack',19,'女'),('lisa',20,'男'),('tomCat',18,'女'),('tom1',18,'男'),('dj',16,'男');
select  *from stu;

大家发现,我给sname 字段 添加唯一约束 ,如果我插入相同 会因为唯一约束报错

非空约束

实例代码

//创建 stu表
CREATE TABLE stu (sid int  primary key auto_increment ,sname VARCHAR (20) unique ,age INT not null,gender VARCHAR (10) default '男') ;
//插入数据
INSERT INTO stu (sname, age, gender) VALUES ('tom1',null,'男');

大家发现,我给age 字段 添加非空约束 ,如果我插入null 会因为非空约束报错

总结

本篇博客,介绍了约束的组成和添加约束时不同的场景,下一篇博客介绍 外键 内容

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

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

相关文章

国内短剧源码短剧系统搭建小程序部署H5、APP打造短剧平台

​在当今的互联网时代,短剧作为一种新兴的娱乐形式,受到了越来越多用户的喜爱。为了提供更好的用户体验和满足用户需求,一个好的短剧系统需要具备多元化的功能和优质的界面设计。 本文将介绍国内短剧源码短剧系统搭建小程序部署H5、APP所需的…

Python(数据结构2)

常见数据结构 队列 队列(Queue),它是一种运算受限的线性表,先进先出(FIFO First In First Out) Python标准库中的queue模块提供了多种队列实现,包括普通队列、双端队列、优先队列等。 1 普通队列 queue.Queue 是 Python 标准库 queue 模块中的一个类…

QT 机器视觉 (3. 虚拟相机SDK、测试工具)

本专栏从实际需求场景出发详细还原、分别介绍大型工业化场景、专业实验室场景、自动化生产线场景、各种视觉检测物体场景介绍本专栏应用场景 更适合涉及到视觉相关工作者、包括但不限于一线操作人员、现场实施人员、项目相关维护人员,希望了解2D、3D相机视觉相关操作…

QT打包Macosx应用发布App Store简易流程

1、QC里编译工程,生成Release版的的app文件; 2、运行macdeployqt把需要的文件打包进app文件中; % ~/Qt/5.15.0/clang_64/bin/macdeployqt {编译的app文件所在路径}/Release/xxxx.app 3、使用codesign对app进行签名,如果要发App…

Android平台RTSP转RTMP推送之采集麦克风音频转发

技术背景 RTSP转RTMP推送,好多开发者第一想到的是采用ffmpeg命令行的形式,如果对ffmpeg比较熟,而且产品不要额外的定制和更高阶的要求,未尝不可,如果对产品稳定性、时延、断网重连等有更高的技术诉求,比较…

网络:ARP的具体过程和ARP欺骗

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言ARP具体过程ARP欺骗原理总结 前言 本文仅作为ARP具体过程和ARP欺骗的知识总结 硬件类型 :指定发送和接受ARP包的硬件类型&am…

单链表OJ题(3):合并两个有序链表、链表分割、链表的回文结构

目录 一、合并两个有序链表 二、链表分割 三、链表的回文结构 u解题的总体思路: 合并两个有序链表:首先创建新链表的头节点(哨兵位:本质上是占位子),为了减少一些判断情况,简化操作。然后我们…

整理 【 DBeaver 数据库管理工具 】的一些基础使用

目录 连接设置切换工作空间SQL编辑器(写sql语句)打开方式新建查询(sql编辑器)打开写的 sql 查询(项目浏览器) 备份sql文件查看历史执行语句自动保存sql语句的文件(编辑器)关闭自动生…

Android Studio 依赖仓库地址

在Android Studio进行开发时,会遇到依赖库下载慢或者老项目使用的依赖库找不到的问题,折腾了两天,终于找到解决方法,使用 阿里云云效Maven,地址:仓库服务https://developer.aliyun.com/mvn/guide &#xff…

51单片机教程(五)- LED灯闪烁

1 项目分析 让输入/输出口的P1.0或P1.0~P1.7连接的LED灯闪烁。 2 技术准备 1、C语言知识点 1 运算符 1 算术运算符 #include <stdio.h>int main(){// 算术运算符int a 13;int b 6;printf("%d\n", ab); printf("%d\n", a-b); printf("%…

MySQL日志——针对实习面试

目录 MySQL日志MySQL有哪些日志&#xff1f;请解释一下MySQL的二进制日志&#xff08;Binlog&#xff09;的作用&#xff1f;复制&#xff08;Replication&#xff09;数据恢复&#xff08;Point-in-Time Recovery&#xff09; Binlog日志的三种格式是什么&#xff1f;如何使用…

STM32 HAL库 SPI驱动1.3寸 OLED屏幕

目录 参考硬件引脚与接线 点亮屏幕CubeMX 配置OLED 驱动程序代码 参考 基于STM32F103C8T6最小系统板HAL库CubeMX SPI驱动7针 OLED显示屏&#xff08;0.96寸 1.3寸通用&#xff09;0.96 oled HAL库驱动 SPI STM32SPI驱动0.96/1.3寸 OLED屏幕&#xff0c;易修改为DMA控制STM32驱…

qt QStatusBar详解

1、概述 QStatusBar是Qt框架提供的一个小部件&#xff0c;用于在应用程序窗口底部显示状态信息。它可以显示一些固定的文本和图标&#xff0c;并且可以通过API动态更新显示内容。QStatusBar通常是一个水平的窗口部件&#xff0c;能够显示多行文本内容&#xff0c;非常适合用于…

h5st参数解析

前言 之前4.8卡我&#xff0c;感觉过了&#xff0c;但是又好像失败了&#xff0c;所以这篇博客憋着没写&#xff0c;这次再次搞了一下&#xff0c;这次弄起来感觉挺简单的啊。 分析 1 20241102203105966; 2 fhhv55ehre91k4l8; 3 f06cc; 4 tk03w…

clickhouse运维篇(二):多机器手动部署ck集群

熟悉流程并且有真正部署需求可以看一下我的另一篇简化部署的文章&#xff0c;因为多节点配置还是比较麻烦的先要jdk、zookeeper&#xff0c;再ck&#xff0c;还有各种配置文件登录不同机器上手动改配置文件还挺容易出错的。 clickhouse运维篇&#xff08;三&#xff09;&#x…

导航栏小案例

实现类似于这样的效果 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>导航栏</title><style>*{margin: 0;padding: 0;}.div1{width: 100%;height: 60px;/* border: 1px solid blue; */background-color:rgb(…

ASP .NET CORE 6 在项目中集成WatchDog开源项目

概念 WatchDog是一个开源的项目&#xff0c;可以实现对.Net 应用程序和API实现实时应用日志和性能监控平台。可以实现实时记录和查看应用程序中的消息、事件、HTTP请求和响应&#xff0c;以及运行时捕获的异常&#xff0c;有效帮助开发人员去排查应用异常&#xff0c;提升开发效…

四、k8s快速入门之Kubernetes资源清单

kubernetes中的资源 ⭐️ k8s中所有的内容都抽象为资源&#xff0c;资源实列化之后&#xff0c;叫做对象 1️⃣名称空间级别 ⭐️ kubeadm在执行k8s的pod的时候会在kube-system这个名称空间下执行&#xff0c;所以说当你kubectl get pod 的时候是查看不到的查看的是默认的po…

无人机之集群控制方法篇

无人机的集群控制方法涉及多个技术和策略&#xff0c;以确保多架无人机能够协同、高效地执行任务。以下是一些主要的无人机集群控制方法&#xff1a; 一、编队控制方法 领航-跟随法&#xff08;Leader-Follower&#xff09; 通过设定一架无人机作为领航者&#xff08;长机&am…

给大家推荐一本书《GPT时代人类再腾飞》

大家好&#xff0c;我是袁庭新。给大家推荐一本书——《GPT时代人类再腾飞》。 先给大家介绍一位顶级大佬——里德霍夫曼。他是著名互联网企业家&#xff0c;领英联合创始人&#xff1b;知名风险投资者&#xff0c;Open AI早期投资人&#xff1b;《纽约时报》畅销书作者、播客…