服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|

基于MySQL数据库的数据约束实例及五种完整性约束介绍

2019-06-11 11:11来源:李西召所属分类:Mysql

今天小编就为大家分享一篇关于基于MySQL数据库的数据约束实例及五种完整性约束介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

#数据约束

#五种完整性约束:
#NOT NULL :非空约束,指定某列不能为空;
#UNIQUE : 唯一约束,指定某列或者几列组合不能重复
#PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录
#FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性
#CHECK :检查,指定一个布尔表达式,用于指定对应的值必须满足该表达式(mysql不支持check约束)
#--------------------------------NOT NULL 非空约束 ---------------------------
create table test4
(
  #建立非空约束
id int not null,
name varchar(55) default 'ABCD' not null,
#默认值就是null
age int null
);
#取消非空约束
 alter table test4
 modify name varchar(55) default 'ABCD' not null,
#增加非空约束
 alter table test4
 modify age int not null;
#--------------------------------UNIQUE : 唯一约束--------------------------------
#列级约束语法建立约束
 create table test_unique
 (
 #建立行级唯一约束
 id int not null unique,
 age int
 );
 #表级约束语法格式
 create table unique_test3
 (
test6_id int not null,
test6_name varchar(255),
test6_pass varchar(255),
#使用表级约束语法建立唯一约束,指定test6_id和test6_name两列组合不能重复
constraint test6_unique unique(test6_id,test6_name),
#使用表级约束语法建立唯一约束,约束名为test6_unique_2,test6_pass不能重复
constraint test6_unique_2 unique(test6_pass)
 );
 #add关键字增加唯一约束
 alter table test4
 add unique(id,name,age);
 #modify关键字删除或者增加唯一约束
 alter table test4
 modify age varchar(255) not null;
 alter table test4
 modify age varchar(255) not null unique;
 #对大部分数据库而言,删除约束使用: alter table 表名 drop constraint 约束名
 #但是Mysql不采取此方式,而是: alter table 表名 drop index 约束名
 #--------------------------------PRIMARY KEY : 主键约束--------------------------------
 #主键约束相当于非空约束和唯一约束。
 #每个表只允许拥有一个主键,但是这个主键可以由多个数据列组成,这些列组合不能重复
 #标准SQL允许给主键自行命名,但是对于Mysql来说自己的名字没有任何作用,总是默认名为PRIMARY
 create table primary_test
 (
#使用列级语法建立主键约束
test_id int primary key,
test_name varchar(255)
 );
 #使用表级语法建立主键约束
 create table primary_test2
 (
test_id int not null,
test_name varchar(255),
test_pass varchar(255),
#指定主键约束名为test2_pk,对大部分数据库有效,但是对mysql无效,此主键约束名仍为PRIMARY
constraint test2_pk primary key (test_id)
 );
 #以多列组合创立主键
 create table primary_test3
 (
test_id int,
test_name varchar(255),
primary key(test_id,test_name)
 );
 #使用列级约束语法
 alter table primary_test3
 modify test_id int primary key();
 #使用表级约束语法
 alter table primary_test3
 add primary key(test_id,test_name);
 #删除主键约束:alter table 表名 drop primary key;
 #主键列自增长特性:如果某个数据列的类型是整型,而且该列作为主键列,则可指定该列具有自增长功能
 #mysql使用auto_increment来设置自增长,向该表插入记录时可不为该列指定值,由系统生成
  create table primary_test3
 (
//建立主键约束、设置自增长
test_id int auto_increment primary key,
test_name varchar(255)
 );
 #外键约束 FOREIGN KEY
 #Mysql中只有表级语法建立的外键约束才可以生效
 #为保证参照主表的存在,先建立主表
 create table teacher_tb
 (
t_id int auto_increment,
t_name varchar(255),
primary key(t_id)
 );
 create table student_tb
 (
s_id int auto_increment primary key,
s_name varchar(255) not null,
t_java int,
foreign key(t_java) references teacher_tb(t_id)
 );
#如果使用表级约束语法,则需要使用foreign key指定本表的外键列,如果创建外键约束时没有指定约束名,
#则mysql会为该外键约束命名为table_name_ibfk_n,其中table_name是从表的表名,n是从1开始的整数
 create table teacher_tb2
 (
t_id int auto_increment,
t_name varchar(255),
primary key(t_id)
 );
 create table student_tb2
 (
s_id int auto_increment primary key,
s_name varchar(255) not null,
t_java int,
constraint student_teacher_fk foreign key(t_java) references teacher_tb2(t_id)
 );
 #建立多列组合外键约束
 create table teacher_tb5
 (
t_name varchar(255),
t_pass varchar(255),
primary key(t_name,t_pass)
 );
 create table student_tb5
 (
s_id int auto_increment primary key,
s_name varchar(255) not null,
t_java_pass varchar(255),
t_java_name varchar(255),
foreign key(t_java_name,t_java_pass) 
  references teacher_tb5(t_name,t_pass)
 );
 #删除外键约束
 alter table student_tb2
 drop foreign key student_teacher_fk;
 #增加外键约束
 alter table student_tb2
 add foreign key(t_java) references teacher_tb2(t_id);
 #外键约束参照自身,自约束
 create table foreign_test9
 (
foreign_id int auto_increment primary key,
foreign_name varchar(255),
refer_id int,
foreign key(refer_id) references foreign_test9(foreign_id)
 );
 #定义当删除主表记录时,从表记录也随之删除
 #on delete cascade 把参照该主表记录的从表记录全部级联删除
 #on delete set null 把参照该主表记录的从表记录从表设为null        e
 create table teacher_tb8
 (
t_id int auto_increment,
t_name varchar(255),
primary key(t_id)
 );
 create table student_tb8
 (
s_id int auto_increment primary key,
s_name varchar(255) not null,
t_java int,
constraint student_teacher_fk foreign key(t_java) references teacher_tb8(t_id) on delete cascade
 );

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。

延伸 · 阅读

精彩推荐
  • Mysql解决Can't locate ExtUtils/MakeMaker.pm in @INC报错

    解决Can't locate ExtUtils/MakeMaker.pm in @INC报错

    今天小编就为大家分享一篇关于解决Can't locate ExtUtils/MakeMaker.pm in @INC报错,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    DBA之路 383 2019-06-09
  • MysqlMySQL中无过滤条件的count详解

    MySQL中无过滤条件的count详解

    这篇文章主要给大家介绍了关于MySQL中无过滤条件count的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧...

    点滴积累 180 2019-06-06
  • MysqlB-Tree的性质介绍

    B-Tree的性质介绍

    今天小编就为大家分享一篇关于B-Tree的性质介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    李灿辉 143 2019-06-11
  • MysqlSQL语句执行深入讲解(MySQL架构总览->查询执行流程->SQL解析顺序)

    SQL语句执行深入讲解(MySQL架构总览->查询执行流程->SQL解析

    这篇文章主要给大家介绍了SQL语句执行的相关内容,文中一步步给大家深入的讲解,包括MySQL架构总览->查询执行流程->SQL解析顺序,需要的朋友可以参考下...

    AnnsShadoW 420 2019-06-09
  • Mysql数据库sql语句优化

    数据库sql语句优化

    今天小编就为大家分享一篇关于数据库sql语句优化,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    qq_43193797 140 2019-06-11
  • MysqlMysql如何适当的添加索引介绍

    Mysql如何适当的添加索引介绍

    今天小编就为大家分享一篇关于Mysql如何适当的添加索引介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    DreamBoyMrsLin 267 2019-06-03
  • MysqlMySQL普通索引和唯一索引的深入讲解

    MySQL普通索引和唯一索引的深入讲解

    这篇文章主要给大家介绍了关于MySQL普通索引和唯一索引的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...

    点滴积累 319 2019-06-09
  • MysqlMySQL新建用户中的%到底包不包括localhost?

    MySQL新建用户中的%到底包不包括localhost?

    操作MySQL的时候发现,有时只建了%的账号,可以通过localhost连接,有时候却不可以,网上搜索也找不到满意的答案,干脆手动测试一波...

    程淇铭 113 2019-06-05