基于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
 );

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • MySQL学习笔记4:完整性约束限制字段

    完整性约束是对字段进行限制,从而符合该字段达到我们期望的效果比如字段含有默认值,不能是NULL等 直观点说:如果插入的数据不满足限制要求,数据库管理系统就拒绝执行操作 设置表的主键 主键能够标识表中每条信息的唯一性,如同身份证号码和人的关系 人可以同名,但是身份证号码却是唯一的, 创建主键的目的在于快速查找到表中的某一条信息 单字段主键 复制代码 代码如下: mysql> create table student( -> id int primary key, -> name varch

  • 详解MySQL:数据完整性

    数据完整性分为:实体完整性,域完整性,参考完整性. 参考完整性: 参照完整性指的就是多表之间的设计,主要使用外键约束. 多表设计: 一对多.多对多.一对一设计 一:实体(行)完整性 实体完整性通过表的主键来实现. 使用主键来表示一条记录的唯一,且不为空 语法:primary key 主键分类: 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐) 业务主键:例如username,参与实际的业务逻辑. 特点:唯一,not null 自动增长:auto_increment 例如

  • 必须会的SQL语句(八) 数据库的完整性约束

    实体完整性 1.建表时定义主键 Create table 表名    (         Sno int identity(1,1),         Sname nvarchar(20),         --设置主键         Primary key (Sno)    )   2.添加主键 alter table 表名     add constraint PK_表名_Sno     primary key(id) 参照完整性1.建表时定义外键 create table 表名   (

  • 详解sql中的参照完整性(一对一,一对多,多对多)

    一.参照完整性 参照完整性指的就是多表之间的设计,主要使用外键约束. 多表设计: 一对多.多对多.一对一设计 1.一对多 关联主要语句: constraint cus_ord_fk foreign key (customer_id) REFERENCES customer(id) 创建客户表--订单表 一个客户可以订多份订单,每份订单只能有一个客户. -- 关联(1对N) create table customer( id int PRIMARY KEY auto_increment, name

  • 深入浅析MySQL从删库到跑路_高级(一)——数据完整性

    一.数据完整性简介 1.数据完整性简介 数据冗余是指数据库中存在一些重复的数据,数据完整性是指数据库中的数据能够正确反应实际情况. 数据完整性是指数据的可靠性和准确性,数据完整性类型有四种: A.实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过唯一约束,主键约束或标识列属性). B.域完整性:限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则). C.引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系.引用完

  • 详解SQL Server数据库架构和对象、定义数据完整性

    前言 本节我们继续SQL之旅,本节我们如题来讲讲一些基本知识以及需要注意的地方,若有不妥之处,还望指出,简短的内容,深入的理解. 数据库架构和对象 数据库包含架构,而架构又包含对象,架构可以看做是表.视图.存储过程等对象的容器.架构是一个命名空间,它被用做对象名称的前缀,比如在Cnblogs的架构中有一个名称为Blogs的表,此时我们用架构式限定式名称(即两部分式对象名称)所以Blogs表示为Cnblogs.Blogs.如果我们引用对象时省略了架构名称,SQL Server将会检查对象是否存在用

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

    为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. #数据约束 #五种完整性约束: #NOT NULL :非空约束,指定某列不能为空: #UNIQUE : 唯一约束,指定某列或者几列组合不能重复 #PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录 #FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完

  • MySQL 数据库中数据表超详细的基本操作

    目录 1. 查看当前数据库中的表 2. 创建表 3. 查看指定表结构 4. 删除表 5. 往表中新增数据 6. 查找表中的数据 6.1 全列查询 6.2 指定列查询 6.3 查询字段为表达式 6.4 给某个列指定常量 6.5 给查询的表达式指定别名(as) 6.6 去重查询(distinct) 6.7 对查询结果进行排序(order by) 6.8 条件查询(where) 6.9 分页查询(limit) 7. 修改表中的数据 8. 删除表中的数据 前言: 库名.表名.列名等等不能和关键字相同,如

  • 如何利用Python连接MySQL数据库实现数据储存

    目录 介绍 Python连接MySQL实现数据储存 总结 介绍 MySQL是一个关系型数据库,MySQL由于性能高.成本低.可靠性好,已经成为最流行的开源数据库.最开始由瑞典的MySQL AB公司开发,后来被甲骨文公司(Oracle)收购. 如何利用Python连接MySQL数据库实现数据储存,下面我们将着重介绍. Python连接MySQL实现数据储存 首先我们需要准备Python的pymysql模块,MySQL数据库(这个自行网上找教学安装),Navicat Premium 15数据库工具(

  • Mysql数据库中数据表的优化、外键与三范式用法实例分析

    本文实例讲述了Mysql数据库中数据表的优化.外键与三范式用法.分享给大家供大家参考,具体如下: 数据表优化 将商品信息表进行优化 1.创建商品种类表: create table if not exists goods_cates( id int unsigned primary key auto_increment, name varchar(40) not null ); 2.将商品种类写入商品种类表中: 注意:插入另一个表的查询结果不需要加values insert into goods_

  • MySQL数据库入门之多实例配置方法详解

    本文实例讲述了MySQL数据库入门之多实例配置方法.分享给大家供大家参考,具体如下: 前面介绍了相关的基础命令操作:MySQL数据库基础篇之入门基础命令 所有的操作都是基于单实例的,mysql多实例在实际生产环境也是非常实用的,因为必须要掌握. 1.什么是多实例 多实例就是一台服务器上开启多个不同的服务端口(默认3306),运行多个mysql的服务进程,这此服务进程通过不同的socket监听不同的服务端口来提供各在的服务,所有实例之间共同使用一套MYSQL的安装程序,但各自使用不同的配置文件.启

  • ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解

    正好最近的域名备案通过了,兴起就突然想做一个网页,虽然之前去备案域名也是有这个目的. 问过几个人,说用linux上用PHP搭建网站很简单,就试着做了一个,这里主要说一下登录验证相关的部分: 首相准备几个文件,主要是index.php.conn.php.data.php以及login.php; login.php 主要是登录过程中的数据对比部分:其中include ('conn.php')内容在下面有说. <?php if(!isset($_POST['submit'])){ exit('logi

  • Python如何读取MySQL数据库表数据

    本文实例为大家分享了Python读取MySQL数据库表数据的具体代码,供大家参考,具体内容如下 环境:Python 3.6 ,Window 64bit 目的:从MySQL数据库读取目标表数据,并处理 代码: # -*- coding: utf-8 -*- import pandas as pd import pymysql ## 加上字符集参数,防止中文乱码 dbconn=pymysql.connect( host="**********", database="kimbo&

  • PHP基于MySQL数据库实现对象持久层的方法

    本文实例讲述了PHP基于MySQL数据库实现对象持久层的方法.分享给大家供大家参考.具体如下: 心血来潮,做了一下PHP的对象到数据库的简单持久层. 不常用PHP,对PHP也不熟,关于PHP反射的大部分内容都是现学的. 目前功能比较弱,只是完成一些简单的工作,对象之间的关系还没法映射,并且对象的成员只能支持string或者integer两种类型的. 成员变量的值也没有转义一下... 下面就贴一下代码: 首先是数据库的相关定义,该文件定义了数据库的连接属性: <?php /* * Filename

  • Python向MySQL批量插数据的实例讲解

    背景:最近测试web项目需要多条测试数据,sql中嫌要写多条,就看了看python如何向MySQL批量插数据(pymysql库) 1.向MySQL批量插数据 import pymysql #import datetime #day = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#参数值插入时间 db = pymysql.connect(host='服务器IP', user='账号', passwd='密码', port=端口号) c

  • 使用python将mysql数据库的数据转换为json数据的方法

    由于产品运营部需要采用第三方个推平台,来推送消息.如果手动一个个键入字段和字段值,容易出错,且非常繁琐,需要将mysql的数据转换为json数据,直接复制即可. 本文将涉及到如何使用Python访问Mysql数据库及读取获取数据(前提需要安装MySQLdb第三方库哦),以及如何将数据转换为json数据,最后保存成文件输出. 代码如下:注释比较详细了. # coding=utf-8 ''' Created on 2016-10-26 @author: Jennifer Project:读取mysq

随机推荐