首页 > 数据库 >数据库约束

数据库约束

时间:2023-02-21 14:56:29浏览次数:32  
标签:int 数据库 外键 约束 null my 主键

约束

字段约束:比如创建一个age列,这里设置了字段类型为int,所以这里只能填int,不能填其他的类型

约束是保证数据准确性的最后一道屏障,即为了保证表中的数据有效性

非空约束(not null)

只有列级约束,没有表级约束

/*
非空约束,不能为空
列级约束:就是在列后面声明的
表级约束,可以在所有列的后面,声明
*/
​
create table test_t_01(my_int int not null) # 列级约束
​
create table test_t_03 (
    my_int int,
    my_int02 int,
    unique (my_int,my_int02)  # 表级约束
)

唯一性约束(unique)

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

  • 唯一性约束的字段不能重复,但可以为null,为null的情况下可以有多个

/*
两个及两个以上字段联合唯一
unique(字段1,字段2,字段xxx)
*/
create table releases_t_01 (
    my_int int ,
    my_int02 int,
    unique(`my_int`,`my_int02`)
    )

not null 和 unique联合使用

/* 
在MySQL当中,如果一个字段同时被not null和unique约束的话,该字段自动会设置成主键字段
在Oracle和sqlserver中,不会被当做主键
*/
create table test_t_02 (my_int int unique not null)
desc test_t_02    # 可以看出my_int是PRI,被设置成了主键
​
​
# MySQL当中如果多个字段同时这也约束的话,因为一个表中只能允许一个主键,所以后面的my_int02字段会被定义为unique字段 且不能为空,但不是主键了
create table test_t_03 (my_int int unique not null,my_int02 int unique not null)
​
​

主键约束(primarty key)

简称:PK

/*
主键值,是每一行记录的唯一标识,就和身份证号是一样的
主键字段(主键列):必须具有唯一性,且不能为空,其实主键约束相当于(unique + not null)
一个表只允许有一个主键
主键所在列必须具有索引(主键的唯一约束通过索引来实现),如果不存在,将会在索引添加的时候自动创建
*/
# 创建表以后追加主键索引
alter table "LMMTEST"."ORACLE_TABLE_5"  add constraint pk_ORACLE_TABLE_5 primary key(ID_8);
# 删除表中已经存在的主键
alter table 表名 drop constraint 主键名;

联合主键

primary key(a,b),指a,b整体不能重复 。如:a,c a,b

/*
主键约束建议类型:
    - int
    - bigint
    - char等类型
    - 不建议使用后varchar来做主键,主键值一般都是数字,一般都是定长的
实际开发中不建议使用:符合主键;建议使用单一主键
因为主键值存在的意义就是这行记录的身份证号
*/
create table test_qq (
    username char(11),
    mobile int(11),
    primary key(`username`,`mobile`)
    )
​
insert into test_qq values ('无敌小牛牛1','453037314'),('无敌小牛牛2','453037314')

 

外键约束(foreign key)

使用关键字

foreign key(cno) references t_class(class_no)

/*
父表:被引用的是父表
子表:引用的是子表
​
子表中的外键引用父表中的某个字段,被引用的这个字段不一定要求是主键,但至少具体unique约束的。如引用的外键重复了,那引用的到底是哪个,就说不清楚
外键可以为null
*/
​
create table t_class(
    class_no int primary key,
    classname varchar(255)
);
​
​
create table t_student(
    student_no int primary key auto_increment,
    name varchar(255),
    cno int comment '定义的外键,引用t_class表主键',
    foreign key(cno) references t_class(class_no)
)
​
insert into t_class values(3,'浙江省杭州实验小学一班')
insert into t_student values (3,'zhangsan',4)

 

简称:FK

前置条件:需要至少两张表已存在的前提下

外键约束定义在具有父子关系的子表中,外键约束使得子表中的列对应父表的主键列,用于维护数据库的完整性

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

  • 对应的父表列必须存在主键约束(PRIMARY KEY )或唯一约束(UNIQUE)

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

当创建外键约束以后,做删除操作的时候要留意

比如要删除父表中的某条数据,但某个子表中又有对该条数据的引用,这时就会导致删除失败

  • 删除时,可选方式

    • 删除的时候,级联删除掉子表中的所有匹配行,在创建外键时,通过 on delete cascade子句指定外键可级联删除

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

    • 默认,强制不让删除

引用外键时,删除表删除

/*先删子表,再删父表*/

 

自定义检查约束(check)

MySQL中不支持检查约束

  • 就是自定义的,比如age这个字段的值定义了取值范围为1-100,某个字段的值定义了默认值,这个就叫检查约束

标签:int,数据库,外键,约束,null,my,主键
From: https://www.cnblogs.com/xiaomengniu/p/17140995.html

相关文章

  • Navicat连接不上数据库
    原因:服务没有启动解决:右键点击我的电脑》管理》服务》找到MYSQL,点击启动即可 ......
  • (数据库系统概论|王珊)第六章关系数据理论-第一节:为什么要研究关系数据理论
    ​​pdf下载:密码7281​​​​专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解​​一句话,研究关系数据库理论就是为了设......
  • SQL Server数据库日常检查
    1.1代码检查从昨天到现在,SQL代理Job有没有运行失败的,会把运行失败的Job名字,步骤,运行时间,错误等级,错误原因罗列出来,方便查看。----1.1  Check Job Fail List From L......
  • T-SQL里数据库工程师都不知道的秘密之SQL Server自定义函数UDF
    T-SQLSQLServerUDF自定义函数概念与案例实战函数的定义这里的函数指的是用户自定义函数(UDF)全名为(user-definedfunction),以下简称为函数。它是数据库里的用户自定义程......
  • MySQL数据库常用SQL集合
    查看数据库版本selectversion();登陆数据库mysql-uqueuecloud-plinux执行SQLsource路径/datebase.sql(SQL文件)showdatabases;(查看数据库)showtables;(查......
  • 【JDBC:数据库连接池,数据库驱动】
    一:什么是JDBC?1.JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成......
  • sqlserver本机数据库开放外部访问【copy收藏】
    一)首先是要检查SQLServer数据库服务器中是否允许远程链接。其具体操作为:(1)打开数据库,用本地帐户登录,右击第一个选项,选择属性:   (2)在打开的属性窗口,在其右边点击“连......
  • 泛型类型约束
    一.new约束new约束指定泛型类声明中的类型实参必须有公共的无参数构造函数。若要使用new约束,则该类型不能为抽象类型。当泛型类创建类型的新实例时,请将new约束应......
  • 文摘数据库
    图书馆·情报与文献学名词文摘数据库(abstractdatabase)是2019年公布的图书馆·情报与文献学名词。由论文的摘要、题名及作者等题录信息所构成的数据库。中文名   文摘......
  • MySQL 创建数据库
    1.1进入MySQL命令:mysql-utest-p;1.2查看数据库命令:SHOWDATABASES;1.3新建数据库命令:CREATEDATABASEitem_name;1.4验证是否查看成功命令:SHOW......