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,一经查实,立即删除!

相关文章

hdu 2489 Minimal Ratio Tree

https://vjudge.net/problem/HDU-2489 题意:求一个完全图的最优比率生成树,点的个数由题给出。最优比率生成树是边的权值之和与点的权值之和的比值最小的生成树。 思路:一开始用dfs枚举搜索每一种情况,t了,枚举的情况太…

SQL多表关联

多表关联: 多张数据表之间是可以有一定的关联关系,这种关联关系可以通过外键约束实现 多表的分类: 一对一一对多多对多 一对一: 一张表对应一张表 适用场景举例: 人和身份证。一个人只能有一个身份证,一个身…

背包问题 codevs2210 数字组合

数字组合 题目描述 Description在N个数中找出其和为M的若干个数。先读入正整数N和M, 再读入N个正数(可以有相同的数字,每个数字均在1000以内), 在这N个数中找出若干个数, 使它们的和是M, 把满足…

SQL多表查询

多表查询分类: 内连接查询 显式内连接隐式内连接 外连接查询 左外连接右外连接 子查询自关联查询 准备数据: -- 创建user表 CREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENT, -- 用户idNAME VARCHAR(20), -- 用户姓名age INT …

HTTP协议整理

一、概念 1.HTTP协议:即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和Web服务器之间互相通信的规则,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。它可以使浏览器更加高效,使网络传输减少。…

【DDD】--好文收藏

索引: 目录索引 发现一批好文,完整系列,攒~~ 随笔分类 - DDD - 『圣杰』 DDD理论学习系列(1)-- 通用语言 笔记: 通用语言: a) 简单,便于理解、传播。 b) 需要通用,能够准…

SQL存储过程、存储函数

概念: 存储过程和函数: 存储过程和函数是事先经过编译并存储在数据库中的一SQL语句的集合 存储过程和函数的好处: 存储过程和函数可以重复使用,减轻开发人员的工作量。类似于java中方法可以多次调用减少网络流量,存储…

meta http-equiv=X-UA-Compatible content=IE=edge,chrome=1 /

X-UA-Compatible是针对IE8新加的一个设置&#xff0c;对于IE8之外的浏览器是不识别的&#xff0c;这个区别与content"IE7"在无论页面是否包含<!DOCTYPE>指令&#xff0c;都像是使用了 Windows Internet Explorer 7的标准模式。而content"IEEmulateIE7&quo…

错误页跳转

错误页跳转的语法 <%page errorPage"出现错误跳转页面"%> <%page isErrorPage"true/false%>跳转到此页面进行处理错误 代码如下&#xff1a; <%page language"java" contentType"text/html" pageEncoding"GBK"%&g…

yum 安装mysql数据库

1、先查看是否有安装mysql&#xff0c;有的话通过yum remove mysql先卸载掉&#xff0c;卸载完成后执行 yum install -y mysql-server mysql mysql-deve 2、启动mysql服务 service mysqld start  //也可以通过/etc/init.d/mysqld start启动 3、设置为开机自启动 chkconfig m…

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

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

Mysql锁机制详解

Mysql锁&#xff1a; 在多线程当中如果想保证数据的准确性是如何实现的呢&#xff1f;没错&#xff0c;通过同步实现。同步就相当于是加锁。加了锁以后有什么好处呢&#xff1f;当一个线程真正在操作数据的时候&#xff0c;其他线程只能等待。当一个线程执行完毕后&#xff0c;…

stanford-parser for C#

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

保姆级Mycat操作详解

Mycat环境搭建&#xff1a; 下载&#xff1a;http://dl.mycat.org.cn/2.0/ 上传到虚拟机并解压 tar -zxvf mycat.tar.gz cd mycat ll授权&#xff1a;设置mycat权限 chmod -R 777 mycat环境变量&#xff1a;配置环境变量 # 编辑文件 vi /etc/profile # 添加内容&#xff…

百度陆奇最新内部演讲:如何成为一个优秀的工程师?

作者&#xff5c;陆奇 来源&#xff5c;百度 Family 一位工程师&#xff0c;如何才能称得上优秀&#xff1f;除了写得一手好 Code&#xff0c;什么样的工作态度和方法才是一个优秀工程师的必备&#xff1f;7 月 11 日&#xff0c;陆奇出席百度内部 Engineering Leadership Talk…

最常见的水平拆分规则

1.枚举法&#xff1a; <tableRule name"sharding-by-intfile"><rule><columns>user_id</columns><algorithm>hash-int</algorithm></rule></tableRule> <function name"hash-int" class"io.myca…

TestNG-详解preserve-order的作用与测试case的执行顺序

在TestNG xml配置文件中&#xff0c;关于<test>的配置里面&#xff0c;有一个属性叫preserve-order&#xff0c;一开始以为这个属性可以用来控制测试case(那些被Test注解标注的方法)的执行顺序&#xff0c;后来测试了一把&#xff0c;发现没有这种效果&#xff0c;最后上…

数据库连接JDBC

JDBC&#xff1a; JDBC&#xff08;Java DataBase Connectivity,java数据库连接&#xff09;是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系型数据库提供统一访问&#xff0c;它是由一组用Java语言编写的类和接口组成的。其实就是java官方提供的一套规范(接口)。用…

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

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

计算机基础--网络

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