-
MySQL中有哪些完整性约束_sql完整性约束有哪些
2021-01-18 21:24:05sql完整性约束有:1、“NOT NULL”非空约束,指定的列不允许为空值;2、“UNIQUE”唯一约束,指定列中没有重复值;3、“PRIMARY KEY”主键约束,唯一的标识出表的每一行;4、“FOREIGN KEY”外键约束;5、“CHECK”...sql完整性约束有:1、“NOT NULL”非空约束,指定的列不允许为空值;2、“UNIQUE”唯一约束,指定列中没有重复值;3、“PRIMARY KEY”主键约束,唯一的标识出表的每一行;4、“FOREIGN KEY”外键约束;5、“CHECK”条件约束。
完整性约束是保证用户所做的修改不会破坏数据的一致性,是保护数据正确性和相容性的一种手段。
常见的5种约束:
NOT NULL:非空约束C,指定的列不允许为空值
UNIQUE:唯一约束U,指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的
PRIMARY KEY:主键约束P,唯一的标识出表的每一行,且不允许空值,一个表只能有一个主键约束
FOREIGN KEY:外键约束R,一个表中的列引用了其它表中的列,使得存在依赖关系,可以指向引用自身的列
CHECK:条件约束C,指定该列是否满足某个条件
非空约束 NKcreate table member(
mid number,
name varchar2(200) not null
);
插入空报错:SQL> insert into member(mid,name) values(1,null);
*
第 1 行出现错误:
ORA-01400: 无法将 NULL 插入 ("SCOTT"."MEMBER"."NAME")
唯一约束 UKdrop table member purge;create table member(
mid number,
name varchar2(200) not null,
email varchar2(50) unique
);
插入报错SQL> insert into member(mid,name,email) values (1,'scott','scott@163.com');
已创建 1 行。SQL> insert into member(mid,name,email) values (2,'jack','scott@163.com');
insert into member(mid,name,email) values (2,'jack','scott@163.com')
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C0010891)
给约束指定名字
这错误并没有像之前的非空约束那样,准确告诉用户哪个字段出现了问题,我们可以给这个约束指定一个名字create table member(
mid number,
name varchar2(200) not null,
email varchar2(50),
constraint uk_email unique(email)
);
主键约束 PK
主键约束=非空约束+唯一约束create table member(
mid number,
name varchar2(200) not null,
email varchar2(50),
constraint pk_number primary key(mid),
constraint uk_email unique(email)
);
插入错误的数据报错:SQL> insert into member(mid,name,email) values (1,'jack','scott@163.com');
已创建 1 行SQL> insert into member(mid,name,email) values (1,'jack','jack@163.com');
insert into member(mid,name,email) values (1,'jack','jack@163.com')
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.PK_NUMBER)
检查约束 CKcreate table member(
mid number,
name varchar2(200) not null,
age number check(age between 0 and 200),
sex varchar2(10),
email varchar2(50),
constraint pk_number primary key(mid),
constraint uk_email unique(email),
constraint ck_sex check(sex in('男','女'))
);
插入错误数据报错:SQL> insert into member(mid,name,age,sex,email) values (1,'Jack','300','无','jack@163.com');
insert into member(mid,name,age,sex,email) values (1,'Jack','300','无','jack@163.com')
*
第 1 行出现错误:
ORA-02290: 违反检查约束条件 (SCOTT.CK_SEX)
主外键约束 FKcreate table member(
mid number,
name varchar2(200) not null,
constraint pk_mid primary key(mid)
);
create table advice(
adid number,
content clob not null,
mid number,
constraint pk_adid primary key(adid),
constraint fk_mid foreign key(mid) references member(mid)
);
正确插入数据,mid在附表中已经存在insert into member(mid,name) values (1,'Scott');
insert into member(mid,name) values (2,'Jack');
insert into advice(adid,content,mid) values (1,'test',1);
insert into advice(adid,content,mid) values (2,'test',2);
commit;
插入一条父表中没有的mid数据SQL> insert into advice(adid,content,mid) values (3,'test',3);
insert into advice(adid,content,mid) values (3,'test',3)
*
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (SCOTT.FK_MID) - 未找到父项关键字
采用主外键约束会在表的删除和数据删除方面存在新的问题
删除父表得先删除子表SQL> drop table member;drop table member
*
第 1 行出现错误:
ORA-02449: 表中的唯一/主键被外键引用
强制性删除父表,这样就不能使用purge选项了,并且字表中的主外键约束也将不复存在SQL> drop table member cascade constraint;
表已删除。
SQL> insert into advice(adid,content,mid) values (3,'test',3);
已创建 1 行
删除父表的数据的先删除字表中的数据SQL> delete from member where mid=1;
delete from member where mid=1
*
第 1 行出现错误:
ORA-02292: 违反完整约束条件 (SCOTT.FK_MID) - 已找到子记录
除了这种方法外还可以设置级联操作子句
on delete cascadecreate table advice(
adid number,
content clob not null,
mid number,
constraint pk_adid primary key(adid),
constraint fk_mid foreign key(mid) references member(mid) on delete cascade
);
这样的话,删除附表数据,会把字表中的数据也给删除。
on delete set nullcreate table advice(
adid number,
content clob not null,
mid number,
constraint pk_adid primary key(adid),
constraint fk_mid foreign key(mid) references member(mid) on delete set null
);
这样删除父表中的数据,子表中的对应的关联字段将被设置为空SQL> delete from member where mid=1;
已删除 1 行。
SQL> select * from advice;
ADID CONTENT MID
---------- ---------- ----------
test
test 2
查看约束SQL> select constraint_name,constraint_type,table_name from user_constraints;
CONSTRAINT_NAME C TABLE_NAME
------------------------------ - ------------------------------
FK_DEPTNO R EMP
PK_EMP P EMP
PK_DEPT P DEPT
R外键约束,C检查约束,Q唯一约束,P主键约束
修改约束
增加约束alter table member add constraint pk_mid primary key(mid);
alter table member add constraint ck_age check(age between 0 and 200);
alter table member modify (name varchar2(50) not null);
需要注意的是非空约束使用的是modify的方式
禁用/启用约束
非外键alter table member disable constraint ck_age;
alter table member enable constraint ck_age;
外键alter table member disable constraint pk_mid cascade;
删除约束alter table member drop constraint pk_mid cascade;
alter table member drop constraint ck_age;
-
数据表的完整性和标识列
2020-03-17 21:57:00实体完整性 每个表中有一个必须要指定的字段,主要依赖主键约束 ...约束有哪些: 自增约束 非空约束 检查约束 默认约束 唯一约束 主键约束 外键约束 一般在设置列特征的时候都是提前在数据库设计时需要考虑...实体完整性
每个表中有一个必须要指定的字段,主要依赖主键约束
区域完整性
针对表中的某个字段进行特殊化限制,主要依赖剩余的约束
参照完整性
表与表之间的一种特殊化关联限制,主要依靠外键约束
维护数据表的完整性
什么是约束:使用约束、键的作用来维护数据表的完整性
约束有哪些:- 自增约束
- 非空约束
- 检查约束
- 默认约束
- 唯一约束
- 主键约束
- 外键约束
一般在设置列特征的时候都是提前在数据库设计时需要考虑明确,约束都是在数据库设计时必须考虑明确的
数据表的特征
已知创建数据表的语法是:
CREATE TABLE 表名 ( 字段1 数据类型 列的特征, 字段2 数据类型 列的特征, ...... )
列特征包含的内容有:
- 是否可以为空(NULL):在输入数据的时候,如果这个列允许为空则可以不用填写,否则必须为该列填写对应的数据内容
- 是否是标识列(自动编号)
- 是否有默认值:如果数据表的某一列在用户不主动输入数据的时候,希望能够提供一个默认的内容
- 是否为主键:主键是实体的唯一标识,保证实体不被重复记录,一个数据表必须有主键才能进行更新、删除指定的实体
- 是否有检查设置:如果数据表的某一列具有检查限制,当用户为这一列添加数据时,必须要保证添加的数据满足检查限制的要求
- 是否有唯一设置:如果这一列具有唯一设置,那么必须保证在给这一列添加数据时,所添加的数据在这一列中是绝对唯一的存在
- 是否有外键特征:如果该列具有外键约束,那么在向该列添加数据时必须要按照外键的目标数据表中已有的数据去填写,外键指向的数据表的字段必须是一个主键,如果数据违反外键约束,则会报错,如果当前数据表被其他数据表以外键约束,如果要删除当前数据表中的数据则需要慎重考虑,有可能删除失败
标识列
标识列如何使用
- 该列必须是整数类型,或者也可以是没有小数部分的精确类型
- 标识种子:标识列的起始值
- 标识增量:标识列每次递增的值(自动增加的值)
注意问题
- 有标识列的数据表被删除某一行时,数据库会将这一行空缺出来不会填补
- 标识列由系统自动维护,用户既不能自己输入数据,也不能自己修改数据
- 标识列可以同时定义为主键,也可以不定以为主键,根据数据库设计决定
-
sql约束有哪些
2020-09-29 15:06:04确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 外键约束(FOREIGN KEY)保证一个表中的数据匹配另一个表中的值的参照完整性。 检查约束(CHECK):保证列中的值...- 非空约束(NOT NULL):指示某列不能存储 NULL 值。
- 唯一约束(UNIQUE) : 保证某列的每行必须有唯一的值。
- 主键预约(PRIMARY KEY): NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- 外键约束(FOREIGN KEY)保证一个表中的数据匹配另一个表中的值的参照完整性。
- 检查约束(CHECK):保证列中的值符合指定的条件。
- 默认约束(DEFAULT) : 规定没有给列赋值时的默认值。
-
IP地址常见分类有哪些?
2021-03-03 14:47:51是唯一标识互联网上计算机的逻辑地址(相当于手机号码,可以通过唯一的手机号码找到手机),所以IP地址也被称为互联网地址(可见其重要性)。 IP地址格式 我们目前常用的IPv4中规定,IP地址长度为32位二进制,在表示...IP地址在网络层将不同的物理网络地址统一到了全球唯一的IP地址上(屏蔽物理网络差异),是唯一标识互联网上计算机的逻辑地址(相当于手机号码,可以通过唯一的手机号码找到手机),所以IP地址也被称为互联网地址(可见其重要性)。
IP地址格式
我们目前常用的IPv4中规定,IP地址长度为32位二进制,在表示时,一般将32位地址拆分为4个8位二进制,再转为4个十进制数表示,每个数字之间用点隔开,如127.0.0.1(localhost),这种描述方式被称为“点-数表示法”。
子网:底层路由器的一个接口连接的所有网络设备称为一个子网,这个连接接口叫做网关。同子网通信不需要网关,异子网通信需要网关。
IP地址分配
IP地址分配的基本原则是:要为同一网络(子网、网段)内不同主机分配相同的网络号,不同的主机号。
IP地址常见分类
A类IP地址 :一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。
B类IP地址 :一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。
C类IP地址 :一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。
D类地址用:于多点广播(Multicast),D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
E类IP地址 :以“1111”开始,研究和试验用,为将来使用保留。
NAT地址转换
私网地址只能在局域网中使用,不同的局域网可以使用同样的私网地址,私网地址是不能出现在互联网上的。那么私网地址如何访问互联网呢?这就需要用到NAT地址转换,将内网地址映射到外网地址。
而NAT地址转换它实现内网的IP地址与公网的地址之间的相互转换,将大量的内网IP地址转换为一个或少量的公网IP地址,减少对公网IP地址的占用。
家庭网络普遍使用端口映射的方式,NAT的核心是一张映射表(源IP地址,源端口,目的IP地址,目的端口),将内网源IP地址和端口映射到同一个公网地址的不同端口。
总之,家庭网络由于网络规模比较小,通常使用了192.168开头的私网地址,光猫拨号获取了一个公网地址(或者运营商私网地址),通过NAT方式的映射到这个公网地址的不同端口,访问互联网。主要注意的NAT模式和路由模式是不同的。
其他IP地址
浮动IP:一个浮动IP通常是一个公开的、可以路由到的IP地址,并且不会自动分配给实体设备。项目管理者临时分配动态IP到一个或者多个实体设备。这个实体设备有自动分配的静态IP:用于内部网间设备的通讯。这个内部网使用私有地址,这些私有地址不能被路由到。通过浮动IP内网实体的服务才能被外网识别和访问。
虚拟IP:是一种不与特定计算机或者特定计算机网卡相对应的IP地址。所有发往这个IP地址的数据包最后都会经过真实的网卡到达目的主机的目的进程。
-
java 唯一id生成算法_唯一ID生成算法剖析
2021-01-21 07:46:32按照我的分析有以下特性:唯一性:生成的ID全局唯一,在特定范围内冲突概率极小有序性:生成的ID按某种规则有序,便于数据库插入及排序可用性:可保证高并发下的可用性自主性:分布式环境下不依赖中心认证即可自... -
唯一ID生成算法剖析
2019-11-29 15:34:42唯一ID有哪些特性或者说要求呢?按照我的分析有以下特性: 唯一性:生成的ID全局唯一,在特定范围内冲突概率极小 有序性:生成的ID按某种规则有序,便于数据库插入及排序 可用性:可保证高并发下的可用性 自主性:... -
node 生成随机头像_唯一ID生成算法剖析
2020-12-04 00:35:30按照我的分析有以下特性:唯一性:生成的ID全局唯一,在特定范围内冲突概率极小有序性:生成的ID按某种规则有序,便于数据库插入及排序可用性:可保证高并发下的可用性自主性:分布式环境下不依赖中... -
python雪花算法生成id_唯一ID生成算法剖析
2020-12-20 03:46:18按照我的分析有以下特性:唯一性:生成的ID全局唯一,在特定范围内冲突概率极小有序性:生成的ID按某种规则有序,便于数据库插入及排序可用性:可保证高并发下的可用性自主性:分布式环境下不依赖中心认证... -
以固定步长生成一个序列_唯一ID生成算法剖析
2021-01-12 20:32:33按照我的分析有以下特性:唯一性:生成的ID全局唯一,在特定范围内冲突概率极小有序性:生成的ID按某种规则有序,便于数据库插入及排序可用性:可保证高并发下的可用性自主性:分布式环境下不依赖中... -
终极版:分布式唯一ID的几种生成方案
2019-11-11 11:56:00那么,分布式唯一ID有哪些特性或要求呢? ① 唯一性:生成的ID全局唯一,在特定范围内冲突概率极小。 ② 有序性:生成的ID按某种规则有序,便于数据库插入及排序。 ③ 可用性:可保证高并发下的可用... -
uuid支持分布式mysql_终极版:分布式唯一ID的几种生成方案
2021-02-04 23:15:13那么,分布式唯一ID有哪些特性或要求呢?① 唯一性:生成的ID全局唯一,在特定范围内冲突概率极小。② 有序性:生成的ID按某种规则有序,便于数据库插入及排序。③ 可用性:可保证高并发下的可用性, 确保任何时... -
idgenerator 会重复吗_终极版:分布式唯一ID的几种生成方案
2020-12-31 00:02:32那么,分布式唯一ID有哪些特性或要求呢?① 唯一性:生成的ID全局唯一,在特定范围内冲突概率极小。② 有序性:生成的ID按某种规则有序,便于数据库插入及排序。③ 可用性:可保证高并发下的可用性, 确保任何时... -
各种分布式全局唯一ID生成算法汇总大全(共12种)--有3种你没见过的雪花算法
2020-06-23 20:13:19 各种分布式全局唯一ID生成算法汇总大全(共12种);设计分布式微服务系统,面试看这篇就够了。...1.全局唯一性:不能出现重复的ID号,保证生成的ID全局唯一,这是最基本的要求。 2.趋势递增:有... -
主键索引和唯一索引的区别
2019-05-09 10:49:44主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。...约束有哪些? ... -
全局唯一 ID 服务的分布式ID生成系统
2020-10-16 18:05:07背景在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来...全局唯一性:不能出现重... -
同一进程中的线程究竟共享哪些资源
2016-03-14 19:44:42线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,...有了这些个性,线程才能实现并发性。这些个性包括: 1.线程ID 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识 -
(转)同一进程中的线程究竟共享哪些资源
2015-09-07 22:52:00线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,...有了这些个性,线程才能实现并发性。这些个性包括: 1.线程ID 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程... -
负载均衡中的一致性Hash算法详解
2020-06-08 19:54:58但随着数据日渐增长,主从同步也扛不住了,就需要对数据库进行分库分表,但分库分表后需要有一个唯一ID来标识一条数据,数据库的自增ID显然不能满足需求;特别一点的如订单、优惠券也都需要有唯一ID做标识。此时一个... -
【46】java对象的三个特征(oop)
2016-05-24 09:33:00对象有哪些行为和方法 同一个类的实例,由于支持相同的行为具有家族式的特征,对象的行为是由方法定义的。 对象的状态: 施加方法时。对象的响应 每个对象都保存着描述当前特征的信息。对象的状态改变必须通过方法... -
Leaf——美团点评分布式ID生成系统
2021-01-27 17:09:57在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等...全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 趋势递增:在MySQLInnoDB引 -
OSPF有哪几种协议包?作用分别是什么?
2019-08-24 21:44:23携带router-id,用来标识路由器在ospf网络中的唯一性; DBD:数据库描述包,DBD中包含所有LSA的报头,相当于LSA的目录摘要信息,自己含有哪些LSA,方便与邻居进行LSA的交换(隐性确认); //主从选举;发送LSA的... -
分布式-分布式ID之Snowflake(雪花算法)
2020-10-20 00:13:021. 背景 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、...全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求; 趋势递增:在MySQL InnoDB引擎中使用的是聚