mysql表添加完整性约束_SQL语句——完整性约束

1.MySQL支持的完整性约束

IbueQj.jpg

IbueQj.jpg

a.主键约束

特点:唯一且非空

主键可以由一个字段组成,也可以由多个字段组成

如果主键由一个字段组成,既可以添加到列级,也可以添加到表级。

如果主键由多个字段组成,则只能添加到表级。

(1)在字段的列级添加约束

create table 表名(

字段名 字段类型 primary key

)

create table student_1(

id varchar(10) primary key,

name varchar(15),

age int(2),

sex varchar(1)

)

desc student_1

(2)表级上添加主键约束

creat tabel 表名 (

字段名1,字段类型1,

字段名2,字段类型2,

……

字段名n, 字段类型n,

[constraint 主键约束名] primary key(字段名)

)

create table student_2(

id int(8),

name varchar(20),

age int(2),

sex varchar(1),

constraint pk_student_2 primary key(id)

)

-- 查看表结构

desc student_2

(3)多个字段作为组件,只能添加到表级

creat table 表名(

字段名1,字段类型1,

字段名2,字段类型2,

……

字段名n,字段类型n,

[constraint 主键约束名] primary key(字段名1,字段名2…)

)

create table student_3(

id int(8),

name varchar(20),

school varchar(10),

age int(2),

sex varchar(1),

constraint pk_student_3 primary key(school,id)

)

-- 查看表结构

desc student_3

(4)给已有表添加主键

语法:alter table 表名 add[constraint 主键约束名] primary key(字段名)

create table student_4(

id int(8),

name varchar(20),

school varchar(10),

age int(2),

sex varchar(1)

)

alter table student_4 add constraint pk_student_4 primary key(id)

-- 查看表结构

desc student_4

(5)删除主键约束

语法:alter table 表名 drop primary key;

alter table student_4 drop primary key

b.唯一约束 unique

指:表中字段的值不能重复

(1)列级添加唯一约束,语法:

creat tabel 表名 (

字段名1,字段类型1 unique,

字段名2,字段类型2,

……

字段名n, 字段类型n

)

create table student_5(

id int(8),

name varchar(20) unique,

school varchar(10),

age int(2),

sex varchar(1)

)

-- 查看表结构

desc student_5

(2)表级添加唯一约束:

creat table 表名(

字段名1,字段类型1,

字段名2,字段类型2,

……

字段名n,字段类型n,

[constraint 唯一约束名] unique (字段名1,字段名2…)

)

create table student_6(

id int(8),

name varchar(20),

age int(2),

sex varchar(1),

constraint uk_student_6_id_name unique(id,name)

)

(3)给已有表添加唯一约束

alter table 表名 add [constraint 唯一约束名] unique (字段名1,字段名2…)

create table student_7(

id int(8),

name varchar(20),

age int(2),

sex varchar(1)

)

alter table student_7 add constraint uk_student_7_name unique(name)

-- 查看表结构

desc student_7

(4)删除唯一约束

语法:

alter table 表名 drop index 唯一约束名

注意:如果单个字段没有指定唯一约束名,则默认的唯一约束名为字段名

create table student_7(

id int(8),

name varchar(20),

age int(2),

sex varchar(1)

)

alter table student_7 add unique(name)

alter table student_7 drop index name

-- 查看表结构

desc student_7

如果是多个字段组合为唯一约束时候,默认的唯一约束名为第一个字段的名称

如果指定了约束名,则删除的时候写约束名

create table student_7(

id int(8),

name varchar(20),

age int(2),

sex varchar(1)

)

alter table student_7 add constraint uk_student_7_name unique(name)

alter table student_7 drop index uk_student_7_name

c.非空约束

某张表中某字段的值不能为空

注意:1.只能使用列级添加

2.空字符串“ ” 或者0都不是null

(1)列级添加非空约束

creat table 表名(

字段名 字段类型 not null

)

create table student_8(

id int(8) not null,

name varchar(20),

age int(2),

sex varchar(1)

)

-- 查看表结构

desc student_8

(2)给已有表添加非空约束

alter table 表名 modify 字段名 字段类型 not null

create table student_9(

id int(8),

name varchar(20),

age int(2),

sex varchar(1)

)

alter table student_9 modify name varchar(20) not null

-- 查看表结构

desc student_9

(3)删除非空约束

alter table 表名 modify 字段名 字段类型 [null]

alter table student_9 modify name varchar(20)

[ ]内的内容可写可不写

d.默认值约束(default)

指在没有对某字段插入具体值的时候,会默认的值

注意:1.只能使用列级约束

2.对于使用默认值约束,如果插入的数据为“null”,则不会使用默认值,只有没有插入数据时候,才会使用默认值。

(1)列级添加默认追约束

语法:creat table 表名 (

字段名 字段类型 default value

)

create table student_10(

id int(8),

name varchar(20),

age int(2),

sex varchar(1) default '男'

)

-- 查看表结构

desc student_10

(2)给已有表添加默认值约束

alter table 表名 modify 字段名 字段类型 default value

create table student_11(

id int(8),

name varchar(20),

age int(2),

sex varchar(1)

)

alter table student_11 modify sex varchar(1) default '男'

-- 查看表结构

desc student_11

(3)删除默认值约束

alter table 表名 modify 字段名 字段类型

alter table student_11 modify sex varchar(1)

e.自动增长约束(auto_increment)

指:表中某字段的值会自动增加

注意:1.一张表中只能有一个自动增长的字段

2.配合主键一起使用,并且只适用于整数类型

3.自动增长默认的初始值1,每增加一条记录,该字段的值会增加1.

(1)创建表的时候创建自动增长约束

create table 表名(

字段名 字段类型 auto_increment

)

create table student_12(

id int(8) PRIMARY KEY auto_increment,

name varchar(20) ,

age int(2),

sex varchar(1)

)

(2)给已有表添加自动增长约束

alter table 表名 modify 字段名 字段类型 auto_increment

create table student_13(

id int(8)PRIMARY KEY,

name varchar(20) ,

age int(2),

sex varchar(1)

)

alter table student_13 modify id int(8) auto_increment

-- 查看表结构

desc student_13

(3)删除自动增长约束

语法:alter table 表名 modify 字段名 字段类型

alter table student_13 modify

f.外键约束(foreign key)

外键:某一表中某字段的值依赖于另一张表中某字段的值

如果一个字段X在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段X称为表二的外键;换句话说如果关系模式R1中的某属性集不是自己的主键,而是关系模式R2的主键,则该属性集称为是关系模式R1的外键。

作用:主要实现了数据库中的参照完整性

将两张表紧密结合,对某张表修改或者删除时候,要保证数据的完整

例如:班级(t_class)学生(t_student)关系:1-n (一对多)

(1)创建外键约束

注意:虽然MySQL提供了列级添加外键约束,但添加完后不会生效,所以使用表级添加外键约束。

语法:create table 表名(

字段名,字段类型

[constraint 外键约束名] foreign key(字段名) references 表(字段名)

)

create TABLE t_class(

cno INT(8) PRIMARY KEY auto_increment,

cname VARCHAR(20)

)

create TABLE t_student(

son INT(8) PRIMARY KEY auto_increment,

sname VARCHAR(20),

age INT(2),

sex VARCHAR(2),

stu_con INT(8),

CONSTRAINT fk_t_student_stu_con FOREIGN KEY(stu_con) REFERENCES t_class(cno)

)

(2)在已有表中添加外键约束

语法:alter table 表名 add [constraint 外键约束名] foreign key(字段名) references 表(字段名)

例如:班级(tt_class)学生(tt_student)

--创建班级表(tt_class)

create TABLE tt_class(

cno INT(8) PRIMARY KEY auto_increment,

cname VARCHAR(20)

)

--创建学生表(tt_student)

create TABLE tt_student(

son INT(8) PRIMARY KEY auto_increment,

sname VARCHAR(20),

stu_cno INT(8)

)

--给tt_student表添加外键约束

alter table tt_student add CONSTRAINT fk_tt_student_stu_cno FOREIGN KEY (stu_cno) REFERENCES tt_class(cno)

desc tt_class

desc tt_student

(3)删除外键约束

alter table 表名 drop foreign key 外键约束名

--删除外键约束名

alter table tt_student drop foreign key fk_tt_student_stu_cno

(4)有关系的表进行删除

(1)以公共关键字作主键的表为主键表(父表,主表)

(2)以公共关键字作外键的表为外键表(从表,外表)

a.先删除有外键约束的表(从表),再删除主表

会报错:

t_student t_class

drop table t_class;

[SQL] drop table t_class;

[Err] 3730 - Cannot drop table 't_class' referenced by a foreign key constraint 'fk_t_student_stu_con' on table 't_student'.

应该:

drop table t_student;

drop table t_class;

b.先删除外键约束,再删除表

alter table t_student drop FOREIGN KEY fk_t_student_stu_con

drop table t_class

drop table t_student

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

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

相关文章

通信线路工程验收规范 gb51171-2016_老杨一建通信学堂通信线路工程施工技术

引言:本章节以通信线路工程施工建设为主题,涵盖通信光(电)缆施工通用技术、架空、直埋、管道还有综合布线工程施工技术,深入浅出介绍通信线路工程建设中各环节的工作内容和涉及的相关规范。知识归纳卡名 称:1L412050 章 节…

python制作测试报告_使用 python 生成 extent report 测试报告

背景一直使用 HTMLTestRunner 生成 app 自动化的测试报告内容,虽然加了截图的展示,还是感觉报告不够好看。allure 报告内容可以,但是要以 pytest 管理测试 case,且 pytest 会执行所有以 test_命名的 case,测试结果只有…

twisted mysql_在Twisted下用MySQLadbapi获取自增id

D jango的ORM有一个很便捷的功能,其实也应该说是一个很基本的功能吧。就是在对一个model调用 save() 插入到数据库后,会将创建的D jango的ORM有一个很便捷的功能,其实也应该说是一个很基本的功能吧。就是在对一个model调用 save() 插入到数据…

java客户端_Java常用的Http client客户端

Http Client应用场景:Http协议是最重要的网络协议之一,目前移动端的开发、javaweb前后端分离架构,使越来越多的java应用使用http协议访问资源。Http client 大多数场景使用在多个服务之间相互调用rest api,特别是现在微服务架构的…

android jni 调用java对象_Android NDK开发之Jni调用Java对象

本地代码中使用Java对象通过使用合适的JNI函数,你可以创建Java对象,get、set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函数。JNI通过ID识别域和方法,一个域或方法的ID是任何处理域和方法的函数的必须…

docker 容器端口访问不到_docker容器无法访问宿主机端口的解决

最近在工作时遇到一个问题,docker容器无法访问宿主机的redis,telent6379端口不通。 经排查发现,该服务器启用了防火墙,防火墙把6379的端口的访问授权给docker0网卡访问即可。 操作如下: firewall-cmd --permanent --zone=trusted --change-interface=docker0 firewall-cmd…

java class isassignablefrom_Java之——Class的isAssignableFrom方法

转载请注明出处 https://blog.csdn.net/l1028386804/article/details/80508540Class的isAssignableFrom方法定义如下public native boolean isAssignableFrom(Class ? cls);由方法签名可见是一个本地方法 即C代码编写的。以下是JDK中的注释Determines if the class or interfa…

java中堆栈的基本操作_玩儿转队列和栈的基本操作及其应用:Java 版

队列的基本操作队列入队出队实现队列是种先进先出的数据结构。队列的基本操作主要是入队和出队。数据从队尾进入队列,从队首出队列。下面来写一个简单的队列:public class MyQueue {private List data;private int pointer;public MyQueue() {data new ArrayList&l…

java界面编辑教程_java程序设计基础教程第六章图形用户界面编辑.docx

java程序设计基础教程第六章图形用户界面编辑.docx还剩27页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,很抱歉,此页已超出免费预览范围啦!如果喜欢就下载吧,价低环保!内容要点…

c盘java文件误删_java获取C盘下的隐藏目录文件名称

题记—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。网易云课堂在Java中, File类用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。File对象可以作为参数传…

对java这门课程的认识_关于java课程的总结

前言本次博客主要内容为此次三次作业的总结,整门java课程学习的总结,以及在此次java课程中的收获,和对课程的意见。作业过程总结第一次作业主要考察的是对程序的可扩展性,实现开闭原则非常重要,因为程序随着时间&#…

linux php和java环境变量配置_Linux下配置Java环境变量

一般来说,我们都会把Java安装到 /usr/local 目录 或者 /opt 目录下。这里假设java安装包已解压在了 /opt下,具体目录为:/opt/java8/java1.8.0_45目录(注意:如果是生产环境中,一定要root用户来安装配置)。下面我们来配置…

java多线程多态_Java学习之多线程

多线程:(一)进程与线程进程特点并发与并行的区别:多线程编程的好处:(二)多线程的建立1,通过继承Thread类,代码如下:class MyThread extendsThread {private static int K 10;//类共享变量private int M10;…

php seaslog安装,浅谈win10下安装php seaslog扩展的方法

本篇文章给大家分享一下win10 php安装seaslog扩展的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。【推荐学习:《PHP视频教程》】一、检查系统环境情况使用phpinfo()检查系统环境情况,找到需要下载的配置…

php里push的用法,php array_push函数怎么用?

php array_push函数用于向数组尾部插入一个或多个元素,其语法是array_push(array,value1,value2...),参数array必需,指规定一个数组;value1必需,指规定要添加的值。php array_push函数怎么用?定义和用法arr…

java if (name!=null name!=),java中的NullPointerException异常

java中的NullPointerException异常关注:176 答案:3 mip版解决时间 2021-01-27 20:59提问者侢遇噹姩揂2021-01-27 02:10Login.jsp提供登录表单。到LoginCheck.jsp发生空指针异常错误。LoginCheck.jsp:String userName request.getParameter("userName");String pas…

caany边缘检测matlab,自适应canny算法研究及其在图像边缘检测中的应用.pdf

自适应canny算法研究及其在图像边缘检测中的应用.pdf还剩51页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,很抱歉,此页已超出免费预览范围啦!如果喜欢就下载吧,价低环保!内容要…

flask mysql orm,flask的orm框架(Flask-SQLAlchemy)-创建表

标签:# 转载请留言联系ORM 是什么?ORM,Object-Relation Mapping。意思就是对象-关系映射。ORM 主要实现模型对象到关系数据库数据的映射。优点 :只需要面向对象编程, 不需要面向数据库编写代码.对数据库的操作都转化成对类属性和方法的操作.不…

php+使用go编译,golang如何编译

Go语言中使用 go build 命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包。go build 有很多种编译方法,如无参数编译、文件列表编译、指定包编译等,使用这些方法都可以输出可执行文件。go build 无参数…

oracle19c监听服务启动失败,Oracle19c安装(有失败成功记录)

Oracle19c安装(有失败成功记录)失败过程失败安装设置 (图为安装成功后获取)成功过程安装设置配置监听桌面类与服务器类的区别总结说明:失败过程失败问题一模一样,无论安装成功或者失败都出现“无法添加用户XXXX到%2%组中”的弹窗,都是点6下继…