首页 > 其他分享 >约束

约束

时间:2023-09-24 23:32:09浏览次数:29  
标签:int 主键 key 约束 id 255

==约束==

约束包括哪些?

非空约束:not null

唯一性约束: union 约束的字段不可以重复,但是可以为null

主键约束: primary key

外键约束: foreign key

检查约束:check(MySql不支持)

两个字段联合唯一:

-- 这样就相当于把两列的数据看成了一列,只有当两列数据都相同的时候才会触发唯一性约束
create table Person(
    id int,
    name varchar(255),
    email varchar(255),
    unique(name,email)
);

not null 和unique联合(这样联合该字段自动变成主键约束)

create table Person(
	id int not null unique,
    name varchar(255)
);

主键约束(primary key,简称PK)

主键值是每一行记录的唯一标识,相当于每一行数据的身份证号码!!!任何一张表都应该有主键,没有主键的表是无效的。

主键约束的作用:用于区别数据之间不同。一张表的主键约束只能有一个!!!

多个字段联合建立主键约束(也叫做复合主键)

create table Person(
	id int,
    email varchar(255),
    name varchar(255)
  	primary key(id,email)
);

主键的分类:

自然主键:主键值是一个自然数,和业务没有关系。

业务主键:主键值和业务紧密联系,比如拿银行卡的账号来做主键等等。

==注意:实际开发的过程中,多使用自然主键,因为主键一旦和业务挂钩,那么当业务发生变动的时候,这样就会影响到主键值,造成错误。==

在MySQL中,有一种机制可以帮助我们自动维护一个主键值:

create table Person(
	id int primary key auto_increment,	-- 自动维护,表示自增,从1开始自增
	name nvarchar(255)
);

外键约束

业务背景:请涉及数据库表,来描述‘’班级和学生‘’的信息?

第一种方案:班级和学生存储在一张表中。

==缺点:多个学生可能来自于同一个班级,那么如果都在一个表中,就会浪费很多空间,导致数据冗余,空间浪费!==

第二种方案:学生一张表,班级一张表。

外键约束的作用:可以限制被外键约束后的字段的取值,即外键字段的取值只能来自另一个表的某一列的取值!!

注意:被引用的表为父表,引用的表为子表。这里有一个删除和创建的顺序问题,==注意表在被使用的时候不能被删除,要用表需要表存在才可以!!==

-- 例如我们需要先创建父表,再创建子表
-- 创建父表
create table Class(
	Id int primary key auto_increment,
  Name varchar(255) not null
);
-- 创建子表
create table Student(
	Id int primary key auto_increment,
	Class_id int,
  -- 把Class_Id设置成外键
  foreign key(Class_id) references Class(id)
);

标签:int,主键,key,约束,id,255
From: https://blog.51cto.com/u_15433911/7589612

相关文章

  • PostgreSQL教程:约束(主键、非空、唯一、检查约束)
    核心在于构建表时,要指定上一些约束。约束主键--主键约束droptabletest;createtabletest(idbigserialprimarykey,namevarchar(32));非空--非空约束droptabletest;createtabletest(idbigserialprimarykey,namevarchar(32)notnull);......
  • 多个泛型如何设置约束
    提问多个泛型如何设置约束回答publicabstractclassHandleBase<Req,Ack>whereReq:RequestInfoBasewhereAck:AckInfoBase补充泛型优点避免类型转换,可以减少大量继承关系中的as操作......
  • Acwing393. 雇佣收银员 题解 差分约束
    题目链接:https://www.acwing.com/problem/content/description/395/解题思路:差分约束。为了方便起见,定义第\(i\)个时间段为\(i-1:00\)到\(i:00\)这个时间段。首先,为了方便开一个额外的点,令\(R_i\)对应为题目中的\(R(i+1)\),即\(R_i\)表示\(i-1:00\)到\(i:00\)这......
  • 5、postgres设置字段可为空约束与非空约束
    postgres设置字段可为空约束与非空约束1、设置非空约束altertable[tab_name]alterCOLUMN[col_name]setnotnull;2、设置可为空约束altertable[tab_name]alterCOLUMN[col_name]dropnotnull;......
  • 列级约束,表级约束
       ......
  • MySQL篇:bug2_ Navicate无法添加或更新子行-外键约束失败
    问题产生原因Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构。解决办法解决方法是在Mysql中取消外键约束:SETFOREIGN_KEY_CHECKS=0;再添加值,然后再设置外键约束:SETFOREIGN_KEY_CHECKS=1;查看当前FOREIGN_KEY_CHECKS的值可用如下命令:SELECT@@FOR......
  • MindSponge分子动力学模拟——Constraint约束
    技术背景在前面的几篇博客中,我们已经介绍了MindSponge的基本使用方法,比如定义一个分子系统、计算分子的单点能以及迭代器的使用等。有了这些基础的教程,用户以及可以执行一些比较简单的模拟任务,比如可以跑一个能量极小化,或者是NVT过程。当我们去执行一个模拟任务时,比较关键的一个......
  • MySQL常见命令及约束超详细(二)续
    查看数据表有四种方法:① SHOWCOLUMNSFROMtbl_name[FROMdb_name];②SHOWCOLUMNSFROM表名;③DESC表名;④DESCRIBE 表名;建议用第三种方便记忆添加表中新字段ALTERTABLE表名add字段名数据类型(数据范围);修改表中新字段ALTERTABLEtbl_nameCHANGE旧列名新列名新......
  • 软件测试|MySQL唯一约束详解
    简介MySQL唯一约束(UniqueKey)是指所有记录中字段的值不能重复出现。MySQL中的唯一约束是一种用于确保表中某列或多列的取值唯一的数据库约束。唯一约束的作用是防止表中出现重复的值,确保数据的完整性和一致性。在本文中,我们将详细介绍MySQL中唯一约束的定义、用法以及其在数据库设......
  • 软件测试|MySQL 非空约束详解
    简介MySQL中的非空约束(NOTNULLConstraint)是一种用于确保表中某列不允许为空值的数据库约束。非空约束的作用是保证特定列的数据始终包含有效值,防止在插入或更新操作时出现空值,从而维护数据的完整性和一致性。在本文中,我们将详细介绍MySQL中非空约束的定义、用法以及在数据库设计......