1.MySQL支持的完整性约束

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

mysql表添加完整性约束_SQL语句——完整性约束相关推荐

  1. MySQL中添加或插入语句(Insert)的几种使用方式

    1.各大培训机构,价格10万的视频 Java架构师视频免费送 2.各种电子书籍经典Java书籍免费送 3.关注下方我的公众号进行免费获取 MySQL中添加或插入语句(Insert)的几种使用方式 1. ...

  2. 如何向MySQL表添加索引?

    我有一个非常大的MySQL表,大约有150,000行数据. 目前,当我尝试并运行时 SELECT * FROM table WHERE id = '1'; 代码运行正常,因为ID字段是主索引. 但是, ...

  3. php 添加表,关于php:如何向MYSQL表添加新列

    我正在尝试使用PHP将新列添加到我的MYSQL表中. 我不确定如何更改表以创建新列. 在我的评估表中 assessmentid | q1 | q2 | q3 | q4 | q5 假设我有一个带有文本框 ...

  4. mysql单引号转义_sql语句中使用单引号'作为转义字符

    在SQL中,我们都知道单引号 ' 表示字符串的开始和结束符号,如: select * from students where name = '小明'; 但如果字符串里面有单引号时,应该怎么查询呢? 这 ...

  5. mysql where 条件先后_sql语句 where 后条件执行先后顺序

    针对mysql,其条件执行顺序是 从左往右,自上而下 针对SQL server.orcale,其条件执行顺序是从右往左,自下而上 1.mysql where执行顺序是从左往右执行的,在数据量小的时候不 ...

  6. 关于MySQL表添加某一列和删除某一列

    前言:MySQL是一种广泛使用的关系型数据库管理系统,它是一种开源的软件,由瑞典的MySQL AB公司开发的. 文章目录: 添加MySQL表中某一列 删除MySQL表中某一列 一.添加MySQL表中某 ...

  7. mysql表添加字段语句_mysql-建表、添加字段、修改字段、添加索引SQL语句写法

    表的操作 1.建表 1.建表 --如果USERS表存在则删除 DROP TABLE IF EXISTS USERS; CREATE TABLE USERS( id INT UNSIGNED NOT N ...

  8. mysql数据库表添加列的语句(例子)

    ALTER TABLE `t_order` ADD COLUMN `reimburse_num`  varchar(50) NULL COMMENT '报销单号' AFTER `corp_name`, ...

  9. 如何给mysql表添加百万条数据_给mysql一百万条数据的表添加索引

    直接alter table add index 添加索引,执行一个小时没反应,并且会导致锁表:故放弃该办法,最终解决办法如下: 一.打开mysql 命令行客户端 这里我们那可以看到导出的数据文件所存放 ...

最新文章

  1. Silverlight 项目开发准则参考
  2. linux下gzip
  3. 在64位Windows7上安装64位Oracle11g
  4. 【SSH】禁用root远程、修改ssh端口
  5. 位掩码(BitMask)
  6. 破解SQLSERVER存储过程的加密
  7. VC6.0常见英文错误对照表
  8. Oracle数据库备份和恢复配置详解
  9. Vray-3.0 开箱宝典
  10. 细聊冗余表数据一致性(架构师之路)
  11. 算法总结之 生成窗口的最大值数组
  12. Practice - iOS 项目持续集成实践(一)
  13. (2)网络基础之IP
  14. 计算机在机械设制造中的应用实例,三维设计软件和技术在机械设计中的应用
  15. 基于Qt编写的在线音乐播放器
  16. 华为数通HCIE很好考吗?
  17. python累乘怎么写_Python3 实现列表元素求累和,求累乘
  18. 楼宇自控系统(BA)的设计
  19. Res2Net: A New Multi-scale Backbone Architecture
  20. SPSS 建模数据分析实战之 银行信用评分

热门文章

  1. 80% 的 Java 焦虑,都可以被这张图解决
  2. 没错,你离分布式搜索只差一个Elasticsearch入门!
  3. 一个数据科学家需要哪些核心工具包?
  4. 学了阿里中台,却依然做不好系统? 聊聊阿里的项目管理
  5. 一文读懂云计算和PAYG“现付现用”模型
  6. 高可用Redis服务架构分析与搭建
  7. js实现shallowReactive和reactive
  8. axios链接带参数_axios常见传参方式
  9. Java内存配太大导致fullgc_记一次因为短命大对象导致fullGC的问题
  10. linux命令查看磁盘使用情况,linux查看磁盘使用情况命令