SQL约束语法

约束

作用:对表中的数据进行限定,保证数据的正确性、有效性、完整性!

约束分类:
约束说明
PRIMARY KEY主键约束
PRIMARY KEY AUTO_INCREMENT主键、自动增长
UNIQUE唯一约束
NOT NULL非空约束
FOREIGN KEY外键约束
FOREIGN KEY ON UPDATE CASCADE外键级联更新
FOREIGN KEY ON DELETE CASCADE外键级联删除
主键约束:

特点:

  • 主键约束包含:非空唯一两个功能
  • 一张表只能有一个列作为主键
  • 主键一般用于表中数据的唯一标识

语法:

含义SQL语句
在创建表的时候给字段添加主键字段名 字段类型 PRIMARY KEY
在已有表中添加主键ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
删除主键ALTER TABLE 表名 DROP PRIMARY KEY;
主键⾃增字段名 字段类型 PRIMARY KEY AUTO_INCREMENT
修改自增起始值ALTER TABLE 表名 AUTO_INCREMENT=起始值;

演示:

-- 标准语法
CREATE TABLE 表名(列名 数据类型 PRIMARY KEY,列名 数据类型,...
);-- 创建学生表,并加主键
CREATE TABLE student(id INT PRIMARY KEY,-- id是主键NAME VARCHAR(30),age TINYINT
);-- 查询学生表详细信息
DESC student;-- 添加数据
INSERT INTO student VALUES(NULL,'韩信',99); -- 不能为空
INSERT INTO student VALUES(1,'韩信',99);-- 不能重复
INSERT INTO student VALUES1,'露娜',98);
INSERT INTO student VALUES(2,'李白',97);-- 删除主键
ALTER TABLE  student DROP PRIMARY KEY;-- 建表以后单独添加主键
ALTER TABLE student MODIFY id INT PRIMARY KEY;
主键自增:
  • Mysql中的自增约束,必须配合键的约束一起用
  • 如果删除某一行数据再添加一行,那id就会再删除的id的基础上加1
-- 建表时添加主键自增约束
CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(30),age TINYINT
);-- 添加数据
INSERT INTO student VALUES (NULL,'韩信',99);
INSERT INTO student VALUES (NULL,'李白',98);-- 删除主键自增约束
ALTER TABLE student MODIFY id INT;-- 建表后单独添加主键自增约束
ALTER TABLE student MODIFY id INT AUTO_INCREMENT;
唯一约束作用:使这个字段的值不能够重复
唯一约束的格式CREATE TABLE 表名 (字段名 字段类型, 字段名 字段类型 UNIQUE );
非空约束CREATE TABLE 表名 (字段名 字段类型,字段名 字段类 NOT NULL, );
默认值作用:如果这个字段不设置值,就使用默认值。
默认值的格式CREATE TABLE 表名 (字段名 字段类型, DEFAULT 默认值);
唯一约束:

唯一约束就是不让值重复,使用关键字UNIQUE

-- 唯一约束  标准语法
CREATE TABLE 表名(列名 数据类型 UNIQUE,列名 数据类型,...
);-- 建表时添加唯一约束
CREATE TABLE  student(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(30),age TINYINT UNIQUE
);-- 添加数据
INSERT INTO student VALUES (NULL,'韩信',99);
INSERT INTO student VALUES (NULL,'李白',99);-- 删除唯一约束
ALTER TABLE student DROP INDEX age;-- 建表后添加唯一约束,如果要约束的列已经有重复数据是添加不了的
ALTER TABLE student MODIFY age INT UNIQUE;
非空约束:
-- 非空约束标准语法
CREATE TABLE 表名(列名 数据类型 NOT NULL,列名 数据类型,...
);-- 创建表时添加非空约束
CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL,    -- 给name添加非空约束age INT UNIQUE
);-- 添加数据
INSERT INTO student VALUES (NULL,'韩信',99),(NULL,'李白',98);-- 删除非空约束
ALTER TABLE student MODIFY name VARCHAR(20);-- 创建表后单独添加非空约束,如果有已经存在的null值会提醒,但不报错,原来的null值会变空
ALTER  TABLE student MODIFY name VARCHAR(20) NOT NULL;
外键约束:
  • 一个表中的某个字段引用其他表的主键,这个字段称为外键
  • 主表:主键所在的表,约束别人的表,将数据给别人用
  • 副表/从表:外键所在的表,被约束的表,使用别人的数据

作用:

作用就是让表和表之间产生关系,保证数据的准确性

为什么有外键约束:

表和表之间的数据有关联的时候,没有相关的数据约束无法保证数据的准确性!

什么时候用?

表和表之间有关联的时候呗,比如是用户和订单两个表之间

  • 当我们在employee的dep_id里面输入不存在的部门,数据依然可以添加.但是并没有对应的部门,不能出现这种情况。employee的dep_id中的内容只能是department表中存在的id
    在这里插入图片描述
    需要达到目的:需要约束dep_id只能是department表中已经存在id
    解决方式:使用外键约束

在这里插入图片描述

-- 创建表的时候添加外键约束
-- 格式    CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主表主键列名)
--  创建用户和订单表
CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT,    -- idNAME VARCHAR(20) NOT NULL             -- 姓名
);-- 创建orderlist订单表
CREATE TABLE orderlist(id INT PRIMARY KEY AUTO_INCREMENT,    -- idnumber VARCHAR(20) NOT NULL,          -- 订单编号uid INT,                              -- 订单所属用户CONSTRAINT ou_wjys FOREIGN KEY (uid) REFERENCES USER(id)
);-- 添加USER表数据
INSERT INTO USER VALUES (NULL,'韩信'),(NULL,'李白'),(NULL,'露娜');-- 添加orderlist表数据
INSERT INTO orderlist VALUES
(NULL,'001',1),(NULL,'001',1),
(NULL,'002',2),(NULL,'002',2),
(NULL,'003',3),(NULL,'003',3);-- 查询数据
SELECT * FROM USER;
SELECT * FROM orderlist;-- 查询表结构
DESC USER;
DESC orderlist;-- 删除外键
ALTER TABLE orderlist DROP FOREIGN KEY ou_wjys;-- 创建表后单独添加外键约束
ALTER TABLE orderlist ADD CONSTRAINT ou_wjys FOREIGN KEY (uid) REFERENCES USER(id);
外键级联更新和级联删除:

什么是级联更新和级联删除

把user用户表中的某个用户删,该用户所有的订单也随之被删除
把user用户表中的某个用户id修改,订单表中该用户所属的订单用户编号也随之修改

语法格式:

级联更新:ON UPDATE CASCADE
级联删除:ON DELETE CASCADE
级联更新和级联删除:ON UPDATE CASCADE ON DELETE CASCADE

-- 添加级联更新
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON UPDATE CASCADE;
-- 添加级联删除
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON DELETE CASCADE;
-- 添加级联更新和级联删除
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON UPDATE CASCADE ON DELETE CASCADE;

演示:

-- 添加级联更新和级联删除
ALTER TABLE orderlist ADD CONSTRAINT ou_wjys FOREIGN KEY (uid) REFERENCES USER(id) ON UPDATE CASCADE ON DELETE CASCADE; -- 将韩信这个用户的id改为9
UPDATE USER SET id = 9 WHERE id = 1 ;-- 将韩信这个用户删除
DELETE FROM USER  WHERE id = 9;

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

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

相关文章

修改项目名称之后,访问不到项目的问题

转载于:https://www.cnblogs.com/Joke-Jay/p/7190187.html

stanford-parser for C#

在项目里用到C#对英文句子进行词性标注。比較成熟的英文词性标注软件是stanford-parser。它个C#版本号,也是借助于IKVM完毕JAVA-C#的转换。详细配置过程例如以下: 1、下载stanford-parser的jar包 http://nlp.stanford.edu/software/lex-parser.shtml 2…

【bzoj】 1412: [ZJOI2009]狼和羊的故事

Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场;狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐&am…

计算机基础--网络

互联网协议 互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。 互联网协议按照功能不同分为osi七层或者tcp/ip五层或tcp/ip四层 每层常见物理设备 因为学习python编程只需要了解tcp/ip五层模型,所以我们只需…

万字详解数据库连接池

数据库连接池的概念 数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连…

编译OSG的FreeType插件时注意的问题

使用自己编译的freetype.lib,在编译osgdb_freetype插件项目时,报错LINK错误,找不到png的一堆函数 最简单的方式是不要使用PNG编译freetype。记住不要犯贱。 转载于:https://www.cnblogs.com/coolbear/p/7205906.html

高动态范围红外图像压缩

BF&DRC 近期看了一篇高动态范围红外图像压缩的文章,《New technique for the visualization of high dynamic range infrared images》.这篇文章主要利用双边滤波器把宽动态红外图像切割为基本图像和细节图像,再分别对基本图像和细节图像进行处理。对…

Mybatis构建sql语法

构建sql: 之前通过注解开发时,相关 SQL 语句都是自己直接拼写的。一些关键字写起来比较麻烦、而且容易出错。MyBatis 给我们提供了 org.apache.ibatis.jdbc.SQL 功能类,专门用于构建 SQL 语句 常用方法: 查询功能的实现&#xf…

在cli命令行上显示当前数据库,以及查询表的行头信息

在$HIVE_HOME/conf/hive-site.xml文件下加入以下配置文件 <property><name>hive.cli.print.header</name><value>true</value><description>Whether to print the names of the columns in query output.</description> </proper…

SAS笔记(2) RETAIN语句

本文重点&#xff1a; 使用RETIAN,INPUT在每次循环执行时保留上一次PDV中的变量值。SUM语句和SET语句会自动RETAIN变量。1. RETAIN语句 1.1 Example 1 先来看看在DATA步不使用和使用RETAIN语句的差异 没有使用RETAIN: DATA WITHOUT_1;PUT "Before the INPUT statement: &…

Hive优化策略

hive优化目标 在有限的资源下&#xff0c;运行效率高。常见问题 数据倾斜、Map数设置、Reduce数设置等 hive运行 查看运行计划 explain [extended] hql 例子 explain select no,count(*) from testudf group by no; explain extended select no,count(*) from testudf group …

GPU性能实时监测的实用工具

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

JSON转换工具

JSON的处理&#xff1a; JSON(JavaScript Object Notation)&#xff1a;是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅…

Vue与Element入门使用

Vue&#xff1a; Vue是一套构建用户界面的渐进式前端框架。只关注视图层&#xff0c;并且非常容易学习&#xff0c;还可以很方便的与其它库或已有项目整合。通过尽可能简单的API来实现响应数据的绑定和组合的视图组件。视图&#xff1a;负责页面渲染&#xff0c;主要由HTMLCSS构…

Redis基础-下载安装配置

Nosql&#xff1a; NoSQL&#xff1a;即 Not-Only SQL&#xff08; 泛指非关系型的数据库&#xff09;&#xff0c;作为关系型数据库的补充。 作用&#xff1a; 应对基于海量用户和海量数据前提下的数据处理问题。 特征&#xff1a; 可扩容&#xff0c;可伸缩大数据量下高性能…

转:20分钟教你使用hexo搭建github博客

注册Github账号 这里我们就不多讲了&#xff0c;小伙伴们可以点击这里&#xff0c;进入官网进行注册。 创建仓库 图片来自Github登录账号后&#xff0c;在Github页面的右上方选择New repository进行仓库的创建。 图片来自Github在仓库名字输入框中输入&#xff1a; Github昵称.…

Maven入门详解与安装配置

Maven&#xff1a; Maven出现前的问题&#xff1a; 假设你现在做了一个项目&#xff0c;项目中肯定要用到一些jar包&#xff0c;比如说mybatis&#xff0c;log4j&#xff0c;JUnit等&#xff0c;除了这些之外&#xff0c;你有可能用到你的同事开发的其他的东西&#xff0c;比如…

Vue生命周期与自定义组件

自定义组件&#xff1a; Element 组件其实就是自定义的标签。例如<el-button> 就是对<button>的封装。 本质上&#xff0c;组件是带有一个名字且可复用的 Vue 实例&#xff0c;完全可以自己定义。 定义格式&#xff1a; Vue.component(组件名称, {props:组件的属性…

Spring DI(依赖注入)

DI依赖注入 IoC&#xff08;Inversion Of Control&#xff09;控制翻转&#xff0c;Spring反向控制应用程序所需要使用的外部资源DI&#xff08;Dependency Injection&#xff09;依赖注入&#xff0c;应用程序运行依赖的资源由Spring为其提供&#xff0c;资源进入应用程序的方…

Spring注解开发入门教程

注解开发&#xff1a; 什么是驱动注解&#xff1f; 注解启动时使用注解的形式替代xml配置&#xff0c;将繁杂的spring配置文件从工程中彻底消除掉&#xff0c;简化书写 注解驱动的弊端 为了达成注解驱动的目的&#xff0c;可能会将原先很简单的书写&#xff0c;变的更加复杂XM…