五种完整性约束分别是什么——基于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

 );

时间: 2024-11-03 22:11:23

五种完整性约束分别是什么——基于MySQL数据库的数据约束实例的相关文章

Spring mvc整合mybatis基于mysql数据库实现用户增删改查及其分页显示的完整入门实例【转】

Spring mvc整合mybatis例子, 基于mysql数据库实现对用户的增.删.改.查,及分页显示的完整例子. 查询显示用户 添加用户 更新用户 官方验证: 项目截图 必须修改applicationContext.xml中mysql的配置为本地的,否则启动失败. 另外jar包多一个ehcache.jar无关紧要,删除即可. 1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库

在Jena框架下基于MySQL数据库实现本体的存取操作

在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统.其中对本体的操作部分,我使用的是Jena框架:数据模型是基于本体的语义模型:数据存储则是MySQL 5.5.9版本.由此看来,将本体模型存入数据库和从数据库中取出模型是常用的操作,这里总结一下我学到的方法. 我使用的开发环境是Eclipse3.6,在开发前要将必要的与jena有关的类包加入java

FTP服务(4)基于MySQL数据库认证

基于MySQL数据库认证 说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器 数据库服务器和FTP服务器系统都是CentOS7 注意:如果是CentOS6系统请执行yum install vsftpd pam_mysql命令安装连接组件 MariaDB服务器: yum install mariadb-server -y systemctl start mariadb mysql MariaDB [(none)]> CREATE DATABASE vsftpddb;

mysql数据库分区功能及实例详解

分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解 一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例.mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存

MySQL数据库的数据文档

在MySQL数据库中,配置文档my.ini默认存放在C:/Program Files/MySQL/MySQL Server 5.5中,打开配置文档找出下面几行信息 #Path to installation directory. All paths are usually resolved relative to this.basedir="C:/Program Files/MySQL/MySQL Server 5.5/"    #数据库的安装路径 #Path to the datab

mysql数据库delete数据时不支持表别名

今天在帮同事查看一条删除的SQL语句执行出错的问题 SQL语句如下: 1 DELETE FROM LEAD_SYSTEM_MENU_ORG_REF as t WHERE t.resourceid='4028812348f28b890148f29253a80000' 这条SQL语句放到Oracle数据库中去执行是可以正常执行的,但是放到MySQL数据库中执行时就出现了如下的错误: 1 [Err] 1064 - You have an error in your SQL syntax; check

PHP从零单排(十三)使用PHP显示MySQL数据库的数据

1.在PHP执行SQL语句 要从数据库获得数据,首先PHP要执行一条对表操作的SQL语句,包括SELECT.INSERT.UPDATE或DELETE语句.一般情况下,在PHP中执行SELECT语句,会从表中查找出一些记录行.而执行其他语句,只会返回语句是否执行成功的信息. <?php $host='localhost'; $user_name='root'; $password='helloworld'; $conn=mysql_connect($host,$user_name,$passwor

Python数据库操作 MySQL数据库与数据表操作#学习猿地

# MySQL数据库与数据表操作 + 数据库的操作 + 数据库创建 + 数据库删除 + 数据表的操作 + 数据表的创建 + 数据表的修改 (表结构) + 数据表的删除 ### 数据库的操作 #### 1.数据库的创建 ```mysql # 链接mysql数据库后,进入mysql后可以操作数据 # 1. 创建库 create database if not exists tlxy default charset=utf8: -- 1. 数据库 tlxy 如果不存在则创建数据库,存在则不创建 --

数据库连接池(基于MySQL数据库)

使用JDBC是怎么保证数据库客户端和数据库服务端进行连接的? 通过代码: conn=DriverManager.getConnection(url, username, password); JDBC通过这条代码方法的调用建立了一条客户端应用程序到后端数据库的物理连接.期间发生了大量的基于TCP的客户端与服务端的交互. 由于跨机器的网络传输是由较大的网络开销的,所以时间花销很大. 传统的多线程JDBC服务中,我们每进行一次服务都需要分配一个线程,每一个线程去建立一个数据库连接,当这条服务结束之后