首页
学习
活动
专区
圈层
工具
发布

【MySQL】不可忽视的数据库约束,维护数据秩序的幕后英雄

、数据库约束的分类 2.1⾮空约束(NOT NULL) 定义表时某列不允许为NULL时,可以为列添加⾮空约束。...以创建一个学生表为例,当学生名为null,这条记录就是不完整的。 此时班级名为null,就没有意义了,所以我们要约束学⽣名的列不能为NULL。当name列为空时,他就会报错。...DEFALUT 默认值约束 DEFAULT 约束⽤于向列中插⼊默认值,如果没有为列设置值,那么会将默认值设置到该列 重构学⽣表,新增年龄列 插⼊⼀条记录,没有设置默认约束时,不指定年龄的值时列为...NULL 重构学⽣表,为年龄的列加⼊默认约束 插⼊⼀条记录,不指定年龄的值时列使⽤了默认值,可以看到使用了默认值18 查看表结构,年龄列的默认值为18 当然当⼿动明确指年龄列为...查看表结构,添加了⾮空和唯⼀约束之后Key列显⽰PRI表⽰主键 当Id列的重复时会发⽣主键冲突 通常我们会把主键列设置为⾃动增⻓,让数据库维护主键值和插⼊数据时不设置主键列的值,我们插入第一个数据主键列的值为

82510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    软件测试|MySQL 非空约束详解

    比如,在用户信息表中,如果不添加用户名,那么这条用户信息就是无效的,这时就可以为用户名字段设置非空约束。什么是非空约束?非空约束是一种用于限制数据库表中某列不能为空的约束。...当对该列进行插入或更新操作时,数据库系统会强制要求必须为该列提供一个有效的值,否则会拒绝这些操作并返回错误。非空约束确保了该列不会包含空值,从而保证数据的完整性。...非空约束的创建在创建表时设置非空约束创建表时可以使用 NOT NULL 关键字设置非空约束,具体的语法格式如下:CREATE TABLE table_name ( column1 data_type...我们可以创建学生表时,定义name列为非空约束:CREATE TABLE students ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR...MySQL中确保表中列值不能为空的重要约束。

    2.3K10

    MySQL中COUNT(*)、COUNT(1)和COUNT(column),到底用哪个?

    对于MyISAM表,COUNT(*) 操作经过优化,在以下情况下可以非常快速地返回结果:查询涉及的仅为一张表、不检索其他列,并且没有 WHERE 子句。...在统计列值时要求列值是非空的(不统计NULL)。如果在COUNT()的括号中指定了列或者列的表达式,则统计的就是这个表达式有值的结果数。因为很多人对NULL理解有问题,所以这里很容易产生误解。...当MySOL确认括号内的表达式值不可能为空时,实际上就是在统计行数。...最简单的就是当使用COUNT(*)时,这种情况下通配符并不会像我们猜想的那样扩展成所有的列,实际上,它会忽略所有的列而直接统计所有的行数。...通过上述分析我们可以知道,COUNT(column)是统计非空列的行数,它也会遍历整张表,然后会对列对应的值做非空判断,非空的字段进行个数累加。当然这是列为主键索引时的操作。

    15000

    【MySQL知识点】唯一约束、主键约束

    当表级约束仅建立在一个字段上时,其作用效果与列级效果相同。 由以下结果我们可以发现,添加唯一约束后,插入重复记录会失败。...创建复合唯一约束 在表级唯一性约束创建时,unique()的字段列表中,可以添加多个字段,组成复合唯一键,特点是只有多个字段的值相同时才视为重复记录。...每个表中最多只允许含有一个主键 主键约束的创建分为列级和表级,语法如下: 列级约束: 字段名 数据类型 primary key 表级约束: primary key(字段名1,字段名2,…)...测试 我们创建一个表进行测试,为id添加主键约束,查看表结构,由图可以看出,id字段的key列为PRI,表示该字段为主键,同时,id字段的null列为NO,表示该字段不能为NULL。...插入数据 插入NULL时,会插入失败,提示id字段不能为NULL 插入重复值也会失败,提示”1“已经存在主键。

    4.6K30

    MySQL学习之路:数据的完整性-外键约束

    PRIMARY KEY 又称为主键约束,定义表中构成主键的一列或多列。 主键用于唯一标识表中的每条记录,作为主键的字段值不能为NULL且必须唯一,可以是单一字段,也可以是多个字段的组合。...字段名 数据类型 PRIMARY KEY 使用SQL语句,创建商品表goods,并设置gid列为主键。...当向表中添加记录时,若未为字段赋值,数据库系统会自动为将字段的默认值插入。 属性名 数据类型 DEFAULT 默认值 修改购物车表cart,将购买数量的默认值设置为1。...,当主表中被引用列的值发生变化时,为了保证表间数据的一致性,从表的中与该值相关的信息也应该相应更新,这就是外键约束的级联更新和删除。...,如果该值被其他表引用,则级联更新或删除从表中相应的记录。

    1.2K20

    【MySQL】详解表的约束

    一、空属性 空属性有两个值:null(默认的)和not null(不为空)。数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。...列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。...当表创建好以后但是没有主键的时候,可以再次追加主键: alter table 表名 add primary key(字段列表); 删除主键: alter table 表名 drop primary...假如指定表中两列为复合主键,只要两列中有一列的数据不同于其他列数据就可以正常插入。...六、外键 外键用于定义主表和从表之间的关系: 外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null 。

    72110

    MySQL【知识改变命运】08

    POREIGN KEY 外键约束 外键约束关联两张表 CHECK 约束 用于限制或数据库表中的值,确保数据可靠性,准确性 2:NOT NULL非空约束 创建一个表: 创建一个学生表中,name一般不能为...我们就要给名字加上NOTNULL 非空约束条件; 我们查询表结构,就可以看出来NULL那一列为no表示不能为NULL值 这样name这一列添加NULL就会报错。...3:UNIQUE 唯⼀约束 当我们设置让一个列有唯一值时候,就可以给这列设置UNIQUE ,比如我们让id列为唯一值; 创建一个表: 我们给id列限制了UNIQUE,id就不能插入重复值,所有当第二次插入数据时候...5:FOREIGN KEY 外键约束 外键⽤于定义主表和从表之间的关系 外键约束主定义在从表的列上,主表关联的列必须是主键或唯⼀约束 当定义外键后,要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为...⽣还没有分配置班级 删除主表某条记录时,从表中不能有对该记录的引⽤ 删除主表某条记录时,从表中不能有对该记录的引⽤ 删除主表时要先删除从表 6:DEFALUT 默认值约束 DEFAULT

    64010

    数据库圣经--约束

    二.约束类型 NOT NULL 非空约束:确保指定列不能存储 NULL 值,保证数据的完整性。 DEFAULT 默认约束:当列未被赋值时,使用预设的默认值填充。...约束是关系型数据库的一个重要功能主要作用是保证数据的完整性,也可能理解数据的正确性 (数据本身是否正确,关联关系是否正确) 1、not null空约束 定义表时某列不允许为null时,可以为列添加非空约束...name varchar(20) not null, age int ); 插入⼀条记录,没有设置默认约束时,不指定年龄的值时列为NULL insert into student(id,...当为某列设置 auto_increment 后,该列的值会在插入新记录时自动递增,生成唯一的序号,无需手动输入。...外键约束主定义在从表的列上,主表关联的列必须是主键或唯⼀约束 当定义外键后,要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为null。

    49610

    阻塞队列BlockQueue

    概述 BlockingQueue接口扩展了Queue接口,其中包含了阻塞操作,这意味着当队列为空或满时,某些操作将被阻塞。...它的大小是固定的,在创建时需要指定容量。当队列满时,生产者线程将被阻塞,直到有空间可用;当队列为空时,消费者线程将被阻塞,直到有元素可用。...如果创建时不指定容量,它将使用Integer.MAX_VALUE作为默认容量。当队列满时,生产者线程将被阻塞,直到有空间可用;当队列为空时,消费者线程将被阻塞,直到有元素可用。...take():移除并返回队列头部的元素,如果队列为空,则阻塞等待元素可用。 offer():尝试将元素插入队列尾部,如果队列已满,则立即返回false。...poll():移除并返回队列头部的元素,如果队列为空,则立即返回null。

    51010

    MySQL数据库约束

    UNLL约束 创建表时,可以指定某列不为空: -- 重新设置学生表结构 DROP TABLE IF EXISTS student; CREATE TABLE student (   id INT...NOT NULL,   name VARCHAR(20)  NOT NULL); 从图片中可以看到ID 与name 在 null 这一列为No,表示不能为空,如果我们选择添加的数据为空则会报错. 2...当某个列集合了 not null 和 unique 就成为主键了. 对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大 值+1。...UNIQUE - 保证某列的每行必须有唯一的值。 DEFAULT - 规定没有给列赋值时的默认值。 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。...确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

    61310

    【MySQL 系列】MySQL 语句篇_DDL 语句

    自 MySQL 5.5 版以来,服务器默认的引擎是由 MyISAM 变成了 InnoDB; 当表名或者字段名中含有空格或者其他特殊字字符时,可以使用 " ` " 包围起来。...当读取该列时,MySQL 自动计算该列的值; 存储生成列:当插入或修改数据时,MySQL 自动计算该列的值并存储在磁盘上。...它是默认值;⑤ STORED: 当插入或修改数据时,MySQL 自动计算该列的值并存储下来;⑥ 可以在通过 CREATE TABLE 语句创建表时定义生成列,或者通过 ALTER TABLE 语句添加一个生成列...这里是创建表时定义一列为唯一列的语法: CREATE TABLE table_name( ..., column_name data_type UNIQUE, ... ); 3.3.2...CHECK 约束 ALTER TABLE user ADD CONSTRAINT CHECK(age > 0); 3.6、非空约束 非空约束用来约束表中的字段不能为空。

    3.3K10

    什么是阻塞队列?说一说原理及其应用

    阻塞移除:当队列为空时,尝试从队列中获取元素的线程会被阻塞,直到队列中有新的元素被加入。简单来说,阻塞队列是一个线程安全的、支持阻塞等待的生产者-消费者模型的核心容器。...两个条件变量:notEmpty:一个与锁绑定的条件,用于表示“队列非空”。当消费者因队列为空而等待时,会挂在这个条件上。当生产者放入一个新元素后,会唤醒挂在这个条件上的线程。...当被其他线程唤醒并重新获得锁后,再次检查队列是否已满(防止虚假唤醒)。将元素 e 入队。...while (队列为空):调用 notEmpty.await() 释放锁并进入等待状态。当被其他线程唤醒并重新获得锁后,再次检查队列是否为空。将队首元素出队。...如果队列为空,消费者会在 take 方法处阻塞,等待生产者生产。运行结果:你会看到生产者生产的速度快于消费者,但由于队列的存在,生产者不会丢失数据。当队列满后,生产者会停下来等待。

    39521

    数据库造神计划第十七天---索引(2)

    推荐为每个表定义⼀个主键。如果没有逻辑上唯一且非空的列或列集可以使用主键,则添加⼀个自增列。 2、普通索引 最基本的索引类型,没有唯⼀性的限制。...可能为多列创建组合索引,称为复合索引或组全索引 3、唯⼀索引 当在⼀个表上定义⼀个唯⼀键 UNQUE 时,自动创建唯⼀索引。...InnoDB使用这个主键值来搜索聚集索引中的行,这个过程称为回表查询 7、索引覆盖 当⼀个select语句使用了普通索引且查询列表中的列刚好是创建普通索引时的所有或部分列,这时就可以直接返回数据...会为对应的的列自动创建⼀个索引 如果表不指定任何约束时,MySQL会自动为每⼀列生成⼀个索引并用ROW_ID 进行标识 2、手动创建 2.1主键索引 # ⽅式⼀,创建表时创建主键 create...创建语法与创建普通索引相同,只不过指定多个列,列与列之间用逗号隔开 # ⽅式⼀,创建表时指定索引列 create table t_test_index4 ( id bigint

    29410

    MySQL从删库到跑路_高级(一)——数据完整性

    2、主键 MySQL的主键名总是PRIMARY, 当创建主键约束时,如果表的存储引擎是innoDB,系统默认会在所在的列和列组合上建立对应的唯一索引。...not NULL; 删除自增列,仍然时主键,但是没有自增长功能 4、复合主键 使用表的两列或多列创建主键。...A、创建表时给列指定非空约束 create table score (sname VARCHAR(10) not NULL, score int not NULL ); B、给指定列指定非空约束...,删除动作和更新动作的参照动作选择了cascade(级联操作),当学生表的sid更新时,分数表score的相应的sid也会更新,当学生被删除,分数表对应的sid的记录也会自动删除。...,将子表上匹配记录的列设为null ,要注意子表的外键列不能为not null。

    2.9K20

    MySQL 常用基础知识,多学一门技能,不求人

    实现方法: 主键约束:主键列不能为空,也不能重复。一个表中只能有一个主键。 唯一约束:是指给定列的所有值必须唯一,该列在表中每一行的值必须唯一。...它和主键约束的区别在于该列可以为空,并且可以在一张表中给多个列设置唯一约束。...二、域完整性:保证指定列的数据的有效性,是指列的输入有效性 实现方法 非空约束:NotNull 默认约束:Default 检查约束:Check(MySQL不支持) 三、外键和外键约束: 外键:是指从表的某列与主表的某列存在依附关系...注意:没有建立外键约束不等于没有外键 [sql] CREATE TABLE person( ### 设置id列为主键列:不能为null,同时不能重复,AUTO_INCREMENT表示设置主键列为自动增长列...在不插入数据时,默认为指定值,一般在建表时就加上 ALTER TABLE person ADD contry VARCHAR(40)DEFAULT "中国"; CREATE TABLE computer

    86820

    关于MySQL数据库约束

    数据库约束:      约束是在表上强制执行的数据校验规则,主要用于保证数据库里数据的完整性。      除此之外,当表中的数据存在相互依赖性时,可以保证相关的数据不被删除。...,指定某列不能为空,只能作为列级约束使用,只能使用列级约束语法定义。  ...同一个表内可创建多个唯一约束,唯一约束也可有多列组合而成。 当为某列创建唯一约束时,MySQL会为该列创建唯一索引, 如果不给唯一约束起名,该唯一约束默认与列名相同。...使用列级语法建立唯一约束,只需要在列定义后增加unique关键字即可: #创建表时建立唯一约束,使用列级语法建立 create table unique_test (     #建立非空约束,意味着id...上面的表级约束语法格式既可以放在create table语句中与列定义并列,也可以放在alter table语句中使用add关键字添加: #创建表时,使用表级语法创建唯一约束 create table

    1.5K10

    【MySQL】数据库约束

    例如:在“学生信息表”中,指定学生的姓名不能为空,确保学生基本信息的完整性。...2.格式 字段名 字段类型 not null 3.示例: 列的信息可以为空: -- 创建学生表1:列表的列可以指定为空 mysql> create table students( ->...: -- 创建学生表2:指定其列不能为空 mysql> create table students2( -> id bigint not null, -> name varchar(50...) not null); Query OK, 0 rows affected (0.03 sec) -- 查看学生表2结构:NULL都为NO表示该列不能为空 mysql> desc students2...如果NULL为YES,则表示该列学生信息可以为空(NULL);如果NULL为NO,则表示该列学生信息不能为空(NULL); 当指定该列的值不能为空时,则表示该列学生信息不可以为空(NULL)。

    62210
    领券