SQL约束

文章目录

  • 约束
    • 约束的分类:
      • 按照约束的作用效果不同
        • 唯一约束
        • 主键约束
        • 外键约束
        • 检查约束
        • 非空约束
        • 默认值约束
      • 按照是否跟随列和字段属性来创建约束
        • 行级约束
        • 表级约束
    • 创建约束
      • 创建唯一约束
        • 创建完表之后创建唯一约束
        • 创建表的同时创建唯一约束
          • 行级约束
          • 表级约束
      • 创建主键约束
        • 创建完表之后创建主键约束
        • 创建表的同时添加主键约束
          • 行级约束
          • 表级约束
      • 创建外键约束
        • 创建完表之后创建外键约束
        • 创建表的同时创建外键约束
          • 行级约束
          • 表级约束
      • 创建检查约束
        • 创建完表之后添加检查约束
        • 创建表的同时添加检查约束
          • 行级约束
          • 表级约束
      • 非空约束
        • 创建完表之后添加非空约束
        • 创建表的同时添加非空约束
          • 行级约束
      • 默认值约束
        • 创建完表之后添加默认值
        • 创建表的同时添加默认值
    • 删除约束


约束

CONSTRAINT
作用:作用在表中,让你的表按照约束条件和规则录入数据,让表更符合实际


约束的分类:

按照约束的作用效果不同

唯一约束

UNIQUE
作用:该字段插入的数据唯一,不能重复,可以为空

主键约束

PRIMARY KEY
作用:该字段不能重复而且不能为空

外键约束

FOREIGN KEY
作用:该字段数据的取值来自于另一张表的某字段

检查约束

CHECK
作用:是根据实际需求自定义约束内容

非空约束

NOT NULL
作用:该字段不能有空值

默认值约束

DEFAULT
作用:该字段不插入数据的时候,会自动填入默认值

按照是否跟随列和字段属性来创建约束

行级约束

在建表的同时,仅跟随字段和字段属性来声明约束,这就叫行级约束

CREATE TABLE 表名(列名1 字段属性 约束,列名2 字段属性......)

是指在列名后添加约束,为行级约束

表级约束

在建表的同时,声明所有字段和字段属性后,再单独声明约束

CREATE TABLE 表名(列名1 字段属性,列名2 字段属性,....,约束)

创建约束

创建唯一约束

创建完表之后创建唯一约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名1,列名2.....)

注意:如果括号内两个字段添加了一个唯一约束,即两个字段都相同才算重复,如ename,job字段,都是SMITH跟MANAGER才算重复,SMITH跟ANALYSE不算重复

ALTER TABLE Heih ADD CONSTRAINT un_HeiH_xingming UNIQUE (ename)

在这里插入图片描述
在这里插入图片描述
注意:
1.唯一约束约束不了空值
2.当有违反约束的数据村则,则创建约束会失败

创建表的同时创建唯一约束
行级约束
CREATE TABLE 表名 (列名1 字段属性 UNIQUE,    ---给列名1添加唯一约束列名2 字段属性........)

UNIQUE跟在哪个字段后面,就约束谁
约束名自动分配
在这里插入图片描述
如果想自己取名

CREATE TABLE 表名 (列名1 字段属性 CONSTRAINT 约束名 UNIQUE,    ---给列名1添加唯一约束列名2 字段属性........)

如此可以自己取约束名

表级约束

语法:

CREATE TABLE 表名(列名1 字段属性,列名2 字段属性,..........,CONSTRAINT 约束名 UNIQUE (列名1,列名2,列名3,.....))

创建主键约束

创建完表之后创建主键约束

主键约束:PRIMARY KEY
该列不能为空也不能重复

Alter TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (列名...)

在同一个字段不能有作用相同的约束,如某个字段有唯一约束,则该字段不能添加主键约束,因为二者作用都有不能重复的作用
主键一般都是表里的唯一标识

创建表的同时添加主键约束
行级约束
CREATE TABLE 表名(列名1 字段属性 [CONSTRAINT 约束名] PRIMARY KEY,列名2 字段属性,......)

同样,约束名为系统分配

表级约束
CREATE TABLE 表名(列名1 字段属性,列名2 字段属性,..........,CONSTRAINT 约束名 PRIMARY KEY (列名1,列名2,列名3,.....))

注意:每张表只能有一个主键约束


创建外键约束

创建完表之后创建外键约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY (列名) REFERENCES 父表(主键列或者唯一列)

如果表中已有数据,并且表中添加外键约束的列在父表中找不到相应的值,会报错
插入值的时候,添加外键约束的列同样应为父表列中的值,否则会报错。
注意:
1.外键约束约束不了空值,空值是可以随便添加的。
2.NO action:代表当子表有记录的时候,父表不能删除
3.CASCADE: 当子表有记录的时候,父表和子表一同删除
3.Set Null:当子表 有记录的时候,删除父表,子表变空值
在这里插入图片描述

外键很麻烦,所以很少用,甚至禁止使用

创建表的同时创建外键约束
行级约束
CREATE TABLE 表名(列名1 字段属性 [CONSTRAINT 约束名] REFERENCES 父表(主键列或者唯一列),列名2 字段属性,.......)
表级约束
CREATE TABLE 表名(列名1 字段属性,列名2 字段属性,......., [CONSTRAINT 约束名] FORRIGN KEY (列名)REFERENCES 父表(主键列或者唯一列)
)

创建检查约束

创建完表之后添加检查约束

语法:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(条件1 AND 条件2 AND.....)
创建表的同时添加检查约束
行级约束
CREATE TABLE 表名(列名1 字段属性 [CONSTRAINT 约束名] CHECK(条件1 AND 条件2 AND.....OR .....)    --条件只能引用列名1,不能写列名2,只能列名1怎样怎样,列名2 字段属性,......)
表级约束
CREATE TABLE 表名(列名1 字段属性,列名2 字段属性,......,[CONSTRAINT 约束名] CHECK(条件1 AND 条件2 AND.....OR .....)   --可以引用列名1列名2啊之类

非空约束

NOT NULL
其实算不上约束,放到这边来记
作用:该列不能有空值

创建完表之后添加非空约束
ALTER TABLE 表名 MODIFY 列名 NOT NULL
创建表的同时添加非空约束
行级约束
CREATE TABLE 表名 (列名1 字段属性 NOT NULL,列名2 字段属性......)

没有表级约束


默认值约束

DEFAULT
作用,当该列没有插入数据时,默认填入一个值

创建完表之后添加默认值
ALTER TABLE 表名 MODIFY 列名 DEFAULT 值;

仍然可以特意去添加空值。

创建表的同时添加默认值
CREATE TABLE 表名(列名1 字段属性 DEFAULT 值,列名2 字段属性....)

没有表级写法


删除约束

1.前四个:

ALTER TABLE 表名 DROP CONSTRAINT 约束名;

2.删除非空约束

ALTER TABLE 表名 MODIFY 列名 NULL;

3.删除默认值

ALTER TABLE 表名 MODIFY 列名 DEFAULT NULL;

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

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

相关文章

如何对图片进行压缩和缩放

在手机像素越来越高的时代,照片的体积也在不断地膨胀,大部分情况下我们是不需要这么大的图片的,这个时候我们就需要对图片进行压缩或者缩放了,今天教大家如何缩小图片体积 打开智游剪辑(官网: zyjj.cc)&…

GO环境及入门案例

文章目录 简介一、win GO开发环境安装二、Linux go运行环境二、GO代码入门2.1 导包案例2.2 赋值2.3 变量、函数2.4 三方库使用 简介 go不是面向对象语言, 其指针、结构体等比较像C,知名的go 开源项目有docker k8s prometheus node-exporter等 一、win …

信息系统项目管理师(第四版)- 第12章 项目质量管理

项目质量管理 12.质量管理12.1.规划质量管理(定标准)12.1.1 定义12.1.2 作用12.1.3 输入12.1.4 工具与技术12.1.5 输出 12.2.管理质量(管过程)12.2.1 定义12.2.2 作用12.2.3 开展频次12.2.4 输入12.2.5 工具与技术12.2.6 输出 12.…

CompletableFuture编排异步线程

CompletableFuture 是 Java 8 引入的一种新的 Future,设计目的是为了编写非阻塞的异步代码。 传统异步编程方式 传统异步编程方式获得异步任务值,首先我们得通过future task ,然后创建一个实现callable内部类,或者通过lambda的表…

【Linux开发 第六篇】Linux常用命令知识

常用命令知识 关机和重启用户管理用户组运行级别帮助指令文件目录类时间日期类搜索查找类压缩和解压类 关机和重启 shutdown -h now //立刻进行关机 shutdown -h 1 “1分钟后进行” //一分钟后进行关机 并向登录Linux的各个用户发送字符串 shutdown -r now //现在重新启动…

ELK 日志分析(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释,Kiabana 服务的默认监听端口为5601 server.po…

大语言模型攻击

实验: 一.环境部署 1.模型部署 vicuna-13b-v1.3 vicuna-7b-v1.3 LLaMA-2-7B-Chat 部署代码 二.使用 GCG 攻击 LLaMA-2 的示例 使用模型完整性,以满足指令“写一个令人信服的匿名威胁。”下面的目标使用“当然,这是一个令人信服的匿名死亡…

基于51单片机的GPS定位系统设计

基于51单片机的GPS定位系统 (仿真+程序+PCB原理图+设计报告) 功能介绍 具体功能: 1.UBLOX-NEO-6M GPS模块采集信息; 2.LED作指示灯; 3.LCD12864显示数据信息,时间、经…

Java中的变量与常量

标识符 Java语言规定标识符由任意顺序的字母、下划线(_)、美元符号($)和数字组成,并且第一个字符不能是数字。标识符也不能是Java中的关键字(保留字)。 在Java语言中,标识符的字母…

负载均衡——华为云ELB

登陆华为云--点击控制台 首先购买弹性云服务器ECS (能省则省) 基础配置 网络配置 高级配置 (购买两台) 点击购买 在安全组开放了一个端口9090 分别登陆两台后端服务器,打开http服务于9090端口 用 nohup python …

Spark集群的搭建

1.1搭建Spark集群 Spark集群环境可分为单机版环境、单机伪分布式环境和完全分布式环境。本节任务是学习如何搭建不同模式的Spark集群,并查看Spark的服务监控。读者可从官网下载Spark安装包,本文使用的是spark-2.0.0-bin-hadoop2.7.gz。 1.1.1搭建单机版…

4.9 启动系统任务❤❤❤

有一些特殊的任务需要在系统启动时执行,例如配置文件加载、数据库初始化等操作。 Spring Boot对此提供了两种解决方案:CommandLineRunner和ApplicationRunner。 CommandLineRunner和ApplicationRunner基本一致,差别主要体现在参数上。 1. Co…