精华内容
下载资源
问答
  • Oracle 常见五种约束

    万次阅读 2019-03-18 16:55:12
    (1)定义约束 (2)列级约束\表级约束 (3)非空约束 NOT NULL 非空约束作用的列也叫强制列。顾名思义,强制列中必须有值,当然建表时候若使用default关键字指定了默认值,则可不输入。 (4)唯一性约束...

    (1)定义约束

    (2)列级约束\表级约束

    (3)非空约束 NOT NULL

    非空约束作用的列也叫强制列。顾名思义,强制列中必须有值,当然建表时候若使用default关键字指定了默认值,则可不输入。

    (4)唯一性约束unique

    唯一性约束可作用在单列或多列上,对于这些列或组合,唯一性约束保证每一行的唯一性。

    Unique需要注意:对于unique约束来讲,索引是必须的。如果不存在,就自动创建一个(unique的唯一本质上是通过索引来保证的)

    Unique允许null值,unique约束的列可存在多个null。这是因为,unique唯一性通过btree索引来实现,而btree索引中不包含null。当然,这也造成了在where语句中null值进行过滤会造成全表扫描。

    (5)主键约束 primary key

    主键是定位表中单个行的方式,可唯一确定表中的某一行,关系型数据库要求所有表都应该有主键,不过Oracle没有遵循次范例要求,Oracle中的表可以没有主键(这种情况不多见)。关于主键有几个需要注意的点:

    键列必须具有唯一性,且不能为空,其实主键约束相当于unique+not null  一个表只允许有一个主键

    主键所在列必须具有索引(主键的唯一约束通过索引来实现),如果不存在,将会在索引添加的时候自动创建

    注意:主键约束可以定义在表级也可以定义在列级(添加主键:约束的添加可在建表时创建,也可如下所示在建表后添加,一般推荐建表后添加,灵活度更高一些,建表时添加某些约束会有限制)

    (6)外键约束 foreign key

    外键约束定义在具有父子关系的子表中,外键约束使得子表中的列对应父表的主键列,用以维护数据库的完整性。不过出于性能和后期的业务系统的扩展的考虑,很多时候,外键约束仅出现在数据库的设计中,实际会放在业务程序中进行处理。外键约束注意以下几点:

           外键约束的子表中的列和对应父表中的列数据类型必须相同,列名可以不同

           对应的父表列必须存在主键约束(Primary key)或唯一约束(unique)

           外键约束允许null值,对应的行就成了孤行了

     

    其实很多时候不使用外键,很多人认为会让删除操作比较麻烦,比如要删除父表中的某条数据,但某个子表中又有对该条数据的引用,这时就会导致删除失败。我们有两种方式来优化这种场景:

      第一种方式简单粗暴,删除的时候,级联删除掉子表中的所有匹配行,在创建外键时,通过 on delete cascade 子句指定该外键列可级联删除:

    alter table emp add constraint emp_deptno_fk foreign key(deptno) references dept(deptno)on delete cascade;

           第二种方式,删除父表中的对应行,会将对应子表中的所有匹配行的外键约束列置为null,通过on delete set null子句实施:

    alter table emp add constraint emp_deptno_fk foreign key(deptno) references dept(deptno) on delete set null;

     

    实际上,外键约束列和对应的父表列可以在同一张表中,常见的就是表的业务逻辑含义是一棵树,最简单的例子如下(id为主键id,fid为父id,fid存储对id的引用),这种结构的表根据业务要求可通过Oracle的递归查询来获取这种层级关系

    注意:外键约束可以定义在表级也可以定义在列级

    foreign key:在表级指定子表中的列

    references:标示在父表中的列

    no delete cascade(级联删除):当父表中的列被删除时,字表中相对应的列也被删除

    no delete set null(级联置空):子表中相应的列置空

    (7)检查约束 check 约束

    检查约束可用来实施一些简单的规则,比如列值必须在某个范围内。检查的规则必须是一个结果为true或false 的表达式,比如:

    alter table emp add constraint emp_sex_ck check(sex in('',''));

    alter table test31 add constraint chkk check (sex ='' or sex=''); 

    alter table test34 add constraint ch_test34 check(age>0 and age<120);

    alter table test34 add constraint ch_test34 check(age between 12 and 30); --在一个范围中间

    alter table test36 add constraint ch_test36 check(length(password)=6); --长度大于某个值

    alter table test36 add constraint email check (email like '%@%'); --电子邮箱要含有@符号

    alter table test36 add constraint password check((password like '00[0-9][0-9]/_[a-z,A-Z][a-z,A-Z][a-z,A-Z]%' escape '/')and(length(password)=8) )

     

    如上描述如有不懂,可以扫码关注麒琳技术栈公众号,欢迎在线咨询

    展开全文
  • SQL教程——常见约束类型

    千次阅读 2020-12-01 01:21:56
    常见约束类型 一、创建表时添加约束 1.添加列级约束 2.添加表级约束 二、删除表时删除约束 1.删除非空约束 2.删除默认约束 3.删除主键 4.删除唯一 5.删除外键 三、表示列 常见约束类型 含义:一...

    本教程中所使用的数据库的建表语句都在“SQL教程——索引”这篇文章中,点击链接直达:索引&建表语句

    摘要:本文主要介绍SQL的DDL语法

    目录

    常见的约束类型

    一、创建表时添加约束

    1.添加列级约束

    2.添加表级约束

    二、删除表时删除约束

    1.删除非空约束

    2.删除默认约束

    3.删除主键

    4.删除唯一

    5.删除外键

    三、表示列


    常见的约束类型

     

    含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性

     

    分类:六大约束

    1. not null:非空,用于保证该字段的值不能为空

      比如姓名,学号等

    2. default:默认,用于保证该字段的默认值

      比如性别,成绩

    3. unique:唯一,用于保存该字段的值具有唯一性,可以为空

      比如座位号

    4. check:检查约束【MySQL中不支持】

    5. primary key:主键,用于保证该字段的值具有唯一性,并且非空

      比如学号,员工编号等

    6. foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值

      在从表中添加限制,用于引用主表中某列的值

       

    添加约束的时机:

    1. 创建表时

    2. 修改表时

     

    约束的添加分类:

    1. 列级约束:六大约束语法上都支持,但外键约束没有效果。

    2. 表级约束:除了非空、默认,其它都支持。

     

    主键和唯一的大对比:

                            保证唯一性          是否允许为空               一个表中可以有多个               是否允许组合

        主键             √                           x                                  只有一个                                 √,但不推荐

        唯一             √                           √                                  可以有多个                             √,但不推荐

     

    外键:

    1. 要求在从表设置外键关系

    2. 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求。

    3. 主表的关联列必须是一个key(一般是主键或是唯一)

    4. 插入数据时,先插入主表,再插入从表

      删除数据时,先删除从表,再删除主表

        

        insert into major values(1, 'java');
    
        insert into major values(2, 'h5');
    create table 表名(
    
        字段名 字段类型 列级约束,
    
        字段名 字段类型,
    
        表级约束
    
    );

     

    一、创建表时添加约束

     

    1.添加列级约束

    create table stunifo(
    
        id int primary key, #主键
    
        stuName varchar(20) not null, #非空
    
        gender char(1) check(gender = '男' or gender = '女'), #检查
    
        seat int unique, #唯一
    
        age int default 18, #默认约束
    
        majorId int foreign key references major(id) #外键
    
    );
    create table major(
    
        id int primary key,
    
        majorName varhcar(20)
    
    );
    #查看stuinfo表中所有的索引,包括主键,外键和唯一
    
    show index from stuinfo;

     

    2.添加表级约束

    dop table if exists stuinfo;
    
    create table stunifo(
    
        id int, 
    
        stuName varchar(20), 
    
        gender char(1), 
    
        seat int, 
    
        age int , 
    
        majorId int ,
    
        
    
        constraint pk primary key(id),
    
        constraint uq unique(seat),
    
        constraint ck check(gender = '男' or gender = '女'), 
    
        constraint fk_stuinfo_major foreign key(majorid) references major(id)
    
    );

     

    通用写法:

     

    二、删除表时删除约束

    1.删除非空约束

    alter table stuinfo modify column stuname varhcar(20) null;

     

    2.删除默认约束

    alter table stuinfo modify column age int;

     

    3.删除主键

    alter table stuinfo drop primary key;

     

    4.删除唯一

    alter table stuinfo drop index seat;

     

    5.删除外键

    alter table stuinfo drop foreign key
    
    
    
    show index from stuinfo
    
    

    三、表示列

     

    含义:可以不用手动插入值,系统提供的默认的序列值

    特点:

    1. 标识列所在的列必须是一个key(primary key 或者 unique)

    2. 一张表至多有一个标识列

    3. 标识列的类型必须是数值型

    4. 标识列可以通过set auto_increment_increment = 3; 来设置步长

      可以通过手动插入值来设置起始值

    id int primary key auto_increment;

     

    展开全文
  • 数据库中的五种约束

    万次阅读 多人点赞 2018-11-14 09:51:38
    数据库中的五种约束 #五大约束  1、主键约束(Primay Key Coustraint) 唯一性,非空性  2、唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个  3、检查约束 (Check Counstraint)对该列数据的范围...

    一、五大约束

    1、主键约束(Primay Key Coustraint) 唯一性,非空性
      2、唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
      3、检查约束 (Check Counstraint)对该列数据的范围、格式的限制(如:年龄、性别等)
      4、默认约束 (Default Counstraint)该数据的默认值
      5、外键约束 (Foreign Key Counstraint)需要建立两表间的关系并引用主表的列

    二、五大约束的语法示例

    1、添加主键约束(将UserId作为主键)
    alter table UserId
    add constraint PK_UserId primary key (UserId)

    2、添加唯一约束(身份证号唯一,因为每个人的都不一样)
    alter table UserInfo
    add constraint UQ_IDNumber unique(IdentityCardNumber)

    3、添加默认约束(如果地址不填 默认为“地址不详”)
    alter table UserInfo
    add constraint DF_UserAddress default (‘地址不详’) for UserAddress

    4、添加检查约束 (对年龄加以限定 20-40岁之间)
    alter table UserInfo
    add constraint CK_UserAge check (UserAge between 20 and 40)
    alter table UserInfo
    add constraint CK_UserSex check (UserSex=’男’ or UserSex=’女′)

    5、添加外键约束 (主表UserInfo和从表UserOrder建立关系,关联字段UserId)
    alter table UserOrder
    add constraint FK_UserId_UserId foreign key(UserId)references UserInfo(UserId)

    三、SQL Server中五大约束详解

    约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。

    1、主关键字约束

    主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。

    此处应有说明:多列组成的主键叫联合主键,而且联合主键约束只能设定为表级约束;单列组成的主键,既可设定为列级约束,也可以设定为表级约束。

    联合主键:联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。
    可以这么理解,比如,你的订单表里有很多字段,一般情况只要有个订单号bill_no做主键就可以了,但是,现在要求可能会有补充订单,使用相同的订单号,那么这时单独使用订单号就不可以了,因为会有重复。那么你可以再使用个订单序列号bill_seq来作为区别。把bill_no和bill_seq设成联合主键。即使bill_no相同,bill_seq不同也是可以的。

    2、外关键字约束

    外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。这样,当在定义主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新。外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据。与主关键字相同,不能使用一个定义为 TEXT 或IMAGE 数据类型的列创建外关键字。外关键字最多由16 个列组成。

    指定在删除表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在删除父表数据行时会将子表中对应的数据行删除;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的删除操作回滚。NO ACTION 是缺省值。

    ON UPDATE {CASCADE | NO ACTION}
    指定在更新表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在更新父表数据行时会将子表中对应的数据行更新;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的更新操作回滚。NO ACTION 是缺省值。

    NOT FOR REPLICATION
    指定列的外关键字约束在把从其它表中复制的数据插入到表中时不发生作用。

    3、惟一性约束

    惟一性约束指定一个或多个列的组合的值具有惟一性,以防止在列中输入重复的值。惟一性约束指定的列可以有NULL 属性。由于主关键字值是具有惟一性的,因此主关键字列不能再设定惟一性约束。惟一性约束最多由16 个列组成

    4、检查约束

    检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。可以对每个列设置复合检查。
    注意:对计算列不能作除检查约束外的任何约束。

    5、缺省约束

    缺省约束通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值。SQL Server 推荐使用缺省约束,而不使用定义缺省值的方式来指定列的缺省值。

    6、列约束和表约束

    对于数据库来说,约束又分为列约束(Column Constraint)和表约束(Table Constraint)。
    列约束作为列定义的一部分只作用于此列本身。表约束作为表定义的一部分,可以作用于多个列。

    由上可知,1,主键、外键、唯一、检查这四项,既可以创建列约束,也可以创建表约束。而缺省 和 非空只能创建列约束。

    7、关于约束的其他操作

    删除约束

    ALTER TABLE employees DROP CONSTRAINT emp_manager_fk;

    关闭约束

    ALTER TABLE employees DISABLE CONSTRAINT emp_emp_id_pk CASCADE; //如果没有被引用则不需CASCADE关键字

    打开约束

    ALTER TABLE employees
    ENABLE CONSTRAINT emp_emp_id_pk; //注意,打开一个先前关闭的被引用的主键约束,并不能自动打开相关的外部键约束

    四、注意点:

    1. 添加主键约束会自动创建唯一索引。如果表中尚未创建 聚焦索引,则自动创建聚焦唯一索引。如果表中已存在聚焦索引,则自动创建非聚焦索引。
    2. 添加唯一约束会自动创建唯一索引。如果未在unique关键字后加上[nonclustered|clustered],则默认会创建非聚焦索引。
    展开全文
  • 数据库中的常见约束类型

    千次阅读 2020-06-17 22:45:20
    一般分为约束: 主键约束(Primary Key constraint):要求主键列数据唯一,不允许为空。 唯一约束(Unique constraint):要求该列唯一,允许为空,但只能出现一个空值。 检查约束(Check constraint):某列取值...

    一般分为五大约束:

    主键约束(Primary Key constraint):要求主键列数据唯一,不允许为空。

    唯一约束(Unique constraint):要求该列唯一,允许为空,但只能出现一个空值。

    检查约束(Check constraint):某列取值范围限制,格式限制等,如有关年龄的约束。

    默认约束(Default constraint):某列的默认值,如在数据库里有一项数据很多重复,可以设为默认值。

    外键约束(Foreign Key constraint):用于在两个表之间建立关系,需要指定引用主表的哪一列。

    主外键和索引的区别:

    展开全文
  • 关系型数据库MySQL常见的几种约束

    千次阅读 2018-08-23 23:29:39
    关系型数据库MySQL常见的几种约束   转载:https://blog.csdn.net/jiekexu/article/details/80226943  对于已经创建好的表,虽然字段的数据类型决定了所能存储的数据类型,但是表中所存储的数据是否合法并没有...
  • mysql常见六大约束

    千次阅读 2019-07-21 00:01:16
    常见约束: **约束的含义**: 一限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性 **分类:** 六大约束 1. NOT NULL :非空约束,用于保证该字段的值不能为空 比如姓名,学号等 2. DEFAULT :...
  • 数据库主键 4种类型及6种约束

    万次阅读 2018-03-27 13:29:43
    导读:在看《SQL必知必会(第四版)》看到运用外键建立表关系,联想到工作时建表主键类型的选择问题,查资料的时候遇到了比较简洁的一个文章; 1. 基础理论: 1.主键和外键的设计原则。 a. 主键应尽量分离于业务的...
  • 地下室侧墙受到的约束常见早期裂缝类型,张军,,随着经济的发展与混凝土强度等级的提高,地下室侧墙结构在施工期经常出现温度收缩裂缝。地下室侧墙一旦产生裂缝就会破坏了结构的
  • 数据库索引常见种类型

    万次阅读 2019-03-19 12:53:34
    索引分四类: index ----普通的索引,数据可以重复 fulltext----全文索引,用来对大表的文本域(char,varchar,text)进行索引。语法和普通索引一样。 unique ----唯一索引,唯一...第一:index unique scan ...
  • MySQL常见约束条件

    万次阅读 多人点赞 2018-12-02 15:36:23
    约束条件:限制表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败! 约束条件在创建表时可以使用, 也可以修改表的时候添加约束条件 1、约束条件分类: 1)not null :非空...
  • 数据库中表的常见七大约束

    万次阅读 2018-05-14 20:15:55
    真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业 务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。 1、空属性not null:not null ...
  • 什么是约束? 数据库—由若干张数据表组成(理解为一个类库) 数据表—由行和列组成的一个二维数组(理解为一个类) 列—字段(理解为表中对象的一个属性) 行—理解为表中的一个...约束类型(6): 1.主键约束(PR...
  • MySQL中常见约束与实践

    千次阅读 2017-04-28 10:20:03
    ## 【1】常见约束类型 约束是一限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。 ### ① 主键约束 primary key 主键约束相当于`唯一约束+非空约束`的组合,`主键约束列不允许重复,也...
  • 数据库,建表约束,,常见约束

    千次阅读 2019-03-18 20:47:36
    #常见约束 /* 含义:一限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 分类:六大约束 NOT NULL:非空,用于保证该字段的值不能为空 比如姓名、学号等 DEFAULT:默认,用于保证该字段有...
  • SQL Server常见约束条件

    千次阅读 2020-03-21 08:51:01
    SQL server常见约束条件 1.检查只能是男或者女 Sex in(‘男,女’)), Sex =‘男’ or sex =‘女’) 2.在一个范围中间 Sage>0 and sage<120 Sage between 12 and 30 3.长度大于某个值 len(pwd)>6) //pwd为...
  • --表中列的类型  -- int 整型  -- char(10) 字符串 固定长度 查询速度快,浪费空间 如身份证号 手机号码 学号  -- varchar(10) 字符串 可变长度 姓名 地址  -- 不带n的:字符或者数字占一个字节,汉字为两个...
  • 常见约束 含义:一限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 添加约束的时机: 1.创建表时 2.修改表时 约束的添加分类: 列级约束: 六大约束语法上都支持,但外键约束没有效果 表级约束...
  • 在从表添加外键约束,用于引用主表中某列的值。比如学生表的专业编号,员工表的部门编号,员工表的工种编号。 二、为什么要使用外键 下面本文将从一个例子出发来阐述使用外键的原因。 如何将京东admin的用户信息及其...
  • Mysql的四种约束

    万次阅读 多人点赞 2018-05-27 22:49:08
    一、Mysql支持以下约束:※ 主键约束 :primary key※ 唯一性约束:unique key※ 外键约束:foreign key※ 非空约束:not null※ 默认值约束:default二、主键约束:一个表只能有一个主键,当建表时忘记设置...
  • MYSQL中,常用的几种约束

    千次阅读 2018-04-10 08:32:15
    MYSQL中,常用的几约束:约束类型:主键默认值唯一外键非空关键字:PRIMARY KEYDEFAULTUNIQUEFOREIGN KEYNOT NULL===================================================主键(PRIMARY KEY)是用于约束表中的一行,...
  • 常见的几索引扫描的类型

    千次阅读 2013-03-16 23:26:55
    在网上找到这样几常见的扫描的类型: 第一: index unique scan  索引唯一扫描,当可以优化器发现某个查询条件可以利用到主键、唯一键、具有外键约束的列,或者只是访问其中某行索引所在的数据的...
  • sql中的几种约束

    千次阅读 2011-07-09 01:07:30
    5.3. 约束数据类型是限制我们可以在表里存储什么数据的一方法。不过,对于许多应用来说,这种限制实在是太粗糙了。比如,一个包含产品价格的字段应该只接受正数。但是没有哪标准数据类型只接受正数。另外一个...
  • name type default 约束 comment , name type default 约束 comment , … … … ) 1、name:字段名 一般情况下,如果有多个单词构成,用下划线间隔 2、type:类型 (1)int :整数类型 (2)double(5,2) :长度为5位...
  • MySQL数据库-笔记02【创建数据库与数据表、数据类型类型选择、增删改查、6种约束概念与举例(主键约束、自增约束、唯一约束、非空约束、默认约束、外键约束)】

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 106,286
精华内容 42,514
关键字:

常见的五种约束类型