Sql 六种约束
--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 六种约束的更多相关文章
- SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束
SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...
- SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束
CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...
- 扩展Exception,增加判断Exception是否为SQL引用约束异常方法!
在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加.修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多 ...
- 基础篇 - SQL 的约束
基础篇 - SQL 的约束 约束 一.实验简介 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性.本节实验将在实践操作中熟悉 MySQL 中的几种约束. 二 ...
- SQL CHECK 约束
SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限 ...
- SQL UNIQUE 约束
SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 ...
- SQL数据库约束、默认和规则
数据的完整性 实体完整性 又称为行完整性,即数据库中的所有行都具有一个非空且没有重复的主键值 MSSQL中通过唯一索引.PRIMARY KEY约束.UNIQUE约束.INDENTITY属性等来强制主键 ...
- SQL Server - 约束 CONSTRAINT
总结 约束放置在表中,以下五种约束: NOT NULL 非空约束C 指定的列不允许为空值 UNIQUE 唯一约束U 指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的 PRIMARY KE ...
- MySQL笔记(五)MySQL 角色与SQL CHECK约束
MySQL ROLE MySQL 8.0 Reference Manual / Security / MySQL User Account Management / Using Roles ...
随机推荐
- 云开发数据库VS传统数据库丨云开发101
云开发数据库与传统数据库的不同 在小程序·云开发中,最核心的便是三大组件:数据库.云存储和云函数,从今天开始,我们将开始隔日更的专栏文章,云开发101,在第一周,我们将从最最核心的数据库开始说起. 云 ...
- ssh-agent代理的简单用法
前言 在ansible的官方文档中,提到了强烈推荐用ssh-agent来管理密钥 究竟ssh-agent是什么,它有什么用法呢,下面来一探究竟. ssh-agent是什么?用处是什么? ssh-age ...
- mybatis_plus插件——生成器
最近在学习mybatis框架,虽然已经简化了一些Dao代码,但是还想更上一层楼吗?不再被基本的pojo层,controller层,service层,dao层基本重复代码所困恼吗?这里,让我们来学习一下 ...
- ECMAScript es6新功能讲解视频教程
下载链接:https://www.yinxiangit.com/1.html 目录: 01.课程介绍-ECMAScript 新功能.mp402.块的作用域-let.mp403.恒量-const.mp4 ...
- 小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式:
小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式: 直接引用VUE; 将vue.js下载到本地后本目录下使用; 安装Node环境下使用; ant-desig ...
- Django-开放静态资源-获取请求携带的数据-pychram连接数据库-修改Django默认数据库-DjangoORM操作--表管理-记录管理-01
目录 关于静态资源访问 为什么要配置静态文件才能获取静态资源 常见的静态文件种类 如何配置来开启访问权限 禁用浏览器缓存 django的自动重启机制(热启动) 静态文件接口动态解析 向服务器发送数据 ...
- android中shape 的使用
android 开发中 对于 shape 和 selector的使用,一直都不是很熟练, 记录一下.便于以后参考. 举个项目中例子图 对于上面的2个radiobutton ,背景我们可以让美工做一个. ...
- Qt 纯属娱乐-模拟一个导航定位系统
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/115397 ...
- Java,Python,前端,Linux,公众号等5T编程资源整理免费下载
场景 我的CSDN: https://blog.csdn.net/BADAO_LIUMANG_QIZHI 实现 马士兵Java学习视频 方立勋JavaWeb 尚硅谷Python核心基础 数据分析 机器 ...
- JVM学习(虚拟机栈、堆、方法区)自我看法
堆(Heap): 此内存区域唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配.这一点在java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配. 虚拟机栈(Stack): 虚拟机栈主 ...