--1.主键约束问题

create table 学生表(
 学号 int primary key,
 姓名 varchar(10)
);

insert into 学生表 values(null,'a');
问题(无法执行)
原因(主键不能为空)

insert into 学生表 values(1,'a');
insert into 学生表 values(1,'b');
问题(无法执行)
原因(主键不能重复)

insert into 学生表 values(1,'a');
insert into 学生表 values(2,'b');
能执行

select * from 学生表;

--2.非空约束问题

create table 学生表(
 学号 int primary key,
 姓名 varchar(10) not null
);

insert into 学生表 values(1,null);
insert into 学生表(学号) values(1);
问题(不能将null插入姓名)
因为(列“姓名”有not null约束)

select * from 学生表;

--3.检查约束问题

drop table 学生表;

create table 学生表(
 学号 int primary key,
 姓名 varchar(10),
 年龄 int check(年龄<18)
);

insert into 学生表 values(1,'a',20);
问题(与"check"约束冲突)
原因(年龄字段的值必须<18)

insert into 学生表 values(1,'b',null);
能执行,原因是有检查约束的列可以接受null值,null不能与任何值比较

insert into 学生表(学号,姓名) values(3,null);
能执行,原因是没有指定约束,则默认可以为空

select * from 学生表;

--4.唯一约束问题

drop table 学生表;

create table 学生表(
 学号 int primary key,
 姓名 varchar(10),
 身份证 char(18) unique
);

insert into 学生表 values(1,'a',null);
insert into 学生表 values(2,'b',null);
问题(违反了“unique”约束)
原因(在SQL Sever中,唯一列不能有两个null值)
注:在其他数据库中,唯一是可以有多个null值

select * from 学生表;

--5.默认约束问题

drop table 学生表;

create table 学生表(
 学号 int primary key,
 姓名 varchar(10),
 性别 char(2) default '女'
);

insert into 学生表(学号,姓名) values(1,'a');

select * from 学生表;

--6.外键约束问题

create database 班级表(
 班级编号 int primary key,
 班级名称 varchar(10)
);

drop table 学生表;

create table 学生表(
 学号 int primary key,
 姓名 varchar(10),
 班级编号 int,foreign key (班级编号) references 班级表(班级编号)
);

insert into 学生表 value(1,'a',1);

insert into 班级表 values(1,'一班');
insert into 班级表 values(2,'二班');

insert into 学生表 values(3,'a',null);
问题(没有问题)
原因(当外键为null时,是无法与班级编号进行比较的;
      从业务上讲,此学生目前不在任何班)

insert into 学生表 values(4,'b',3);
问题(与约束“fk”有冲突)
原因(3号班级在班级表中不存在无法引用)

delete from 班级表 where  班级编号=1;
问题(与约束“fk”冲突)
原因(1号班级被引用,不能被删除)

select * from 学生表;
select * from 班级表;

--外键小结
 .不能在子表插入一个父表不存在的编号,但可以为空
 .不能删除父表中被引用的编号
 .(不能将子表中的外键更新为一个父表不存在的编号)
 .外键的本质就是:不能引用一个不存在的对象,
  不能删除一个被引用的对象

====本文来自新浪张婷博客

Sql 六种约束的更多相关文章

  1. SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束

    SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...

  2. SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

    CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...

  3. 扩展Exception,增加判断Exception是否为SQL引用约束异常方法!

    在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加.修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多 ...

  4. 基础篇 - SQL 的约束

    基础篇 - SQL 的约束       约束 一.实验简介 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性.本节实验将在实践操作中熟悉 MySQL 中的几种约束. 二 ...

  5. SQL CHECK 约束

    SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限 ...

  6. SQL UNIQUE 约束

    SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 ...

  7. SQL数据库约束、默认和规则

    数据的完整性 实体完整性 又称为行完整性,即数据库中的所有行都具有一个非空且没有重复的主键值 MSSQL中通过唯一索引.PRIMARY KEY约束.UNIQUE约束.INDENTITY属性等来强制主键 ...

  8. SQL Server - 约束 CONSTRAINT

    总结 约束放置在表中,以下五种约束: NOT NULL 非空约束C 指定的列不允许为空值 UNIQUE 唯一约束U 指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的 PRIMARY KE ...

  9. MySQL笔记(五)MySQL 角色与SQL CHECK约束

    MySQL ROLE MySQL 8.0 Reference Manual  /  Security  /  MySQL User Account Management  /  Using Roles ...

随机推荐

  1. 云开发数据库VS传统数据库丨云开发101

    云开发数据库与传统数据库的不同 在小程序·云开发中,最核心的便是三大组件:数据库.云存储和云函数,从今天开始,我们将开始隔日更的专栏文章,云开发101,在第一周,我们将从最最核心的数据库开始说起. 云 ...

  2. ssh-agent代理的简单用法

    前言 在ansible的官方文档中,提到了强烈推荐用ssh-agent来管理密钥 究竟ssh-agent是什么,它有什么用法呢,下面来一探究竟. ssh-agent是什么?用处是什么? ssh-age ...

  3. mybatis_plus插件——生成器

    最近在学习mybatis框架,虽然已经简化了一些Dao代码,但是还想更上一层楼吗?不再被基本的pojo层,controller层,service层,dao层基本重复代码所困恼吗?这里,让我们来学习一下 ...

  4. ECMAScript es6新功能讲解视频教程

    下载链接:https://www.yinxiangit.com/1.html 目录: 01.课程介绍-ECMAScript 新功能.mp402.块的作用域-let.mp403.恒量-const.mp4 ...

  5. 小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式:

    小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式: 直接引用VUE; 将vue.js下载到本地后本目录下使用; 安装Node环境下使用; ant-desig ...

  6. Django-开放静态资源-获取请求携带的数据-pychram连接数据库-修改Django默认数据库-DjangoORM操作--表管理-记录管理-01

    目录 关于静态资源访问 为什么要配置静态文件才能获取静态资源 常见的静态文件种类 如何配置来开启访问权限 禁用浏览器缓存 django的自动重启机制(热启动) 静态文件接口动态解析 向服务器发送数据 ...

  7. android中shape 的使用

    android 开发中 对于 shape 和 selector的使用,一直都不是很熟练, 记录一下.便于以后参考. 举个项目中例子图 对于上面的2个radiobutton ,背景我们可以让美工做一个. ...

  8. Qt 纯属娱乐-模拟一个导航定位系统

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/115397 ...

  9. Java,Python,前端,Linux,公众号等5T编程资源整理免费下载

    场景 我的CSDN: https://blog.csdn.net/BADAO_LIUMANG_QIZHI 实现 马士兵Java学习视频 方立勋JavaWeb 尚硅谷Python核心基础 数据分析 机器 ...

  10. JVM学习(虚拟机栈、堆、方法区)自我看法

    堆(Heap): 此内存区域唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配.这一点在java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配. 虚拟机栈(Stack): 虚拟机栈主 ...