key (FK) 标识该字段为该表的外键 not null 标识该字段不能为空 unique key (UK) 标识该字段的值是唯一的 auto_increment 标识该字段的值自动增长...字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值 sex enum('male','female') not null default 'male' #设置了不能为空...二 not null与default 是否可空,null表示空,非字符串 not null - 不可空 null - 可空 默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值...=default==================== #设置id字段有默认值后,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值 mysql> create...一个表中可以: 单列做主键 多列做主键(复合主键) ,有多列唯一的效果 但一个表内只能有一个主键primary key ============单列做主键=============== #方法一:not
KEY (FK) 标识该字段为该表的外键 NOT NULL 标识该字段不能为空 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增长...二 not null与default 是否可空,null表示空,非字符串 not null - 不可空 null - 可空...默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值 create table tb1( nid int not null...,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值 mysql> create table t3(id int default 1); mysql>...一个表中可以: 单列做主键 多列做主键(复合主键) 但一个表内只能有一个主键primary key ============单列做主键=============== #方法一:not null+unique
开发提了一个数据库变更需求,新增一字段,没有NOT NULL非空约束,但有默认值为NULL。...对于IS NOT NULL,type字段定义为NOT NULL,此SQL明显违反了表中的约束条件,则会在执行计划最上层增加一个NULL IS NOT NULL恒为假的条件,根本不需要真正执行这个SQL,...出现以上问题的核心,还是为何有为空的记录存储于有NOT NULL非空约束的表中。...原因就是11g新特性,新增一个有默认值的NOT NULL约束的字段,默认值不会像以前一样,插入每条记录中,而是会存储于一张数据字典表sys.ecol$,Oracle允许NOT NULL列默认值为NULL...至此,12c修复了11g中这个非空约束字段允许保存空值的bug,同时又支持11g新增默认值非空字段使用数据字典存储的特性,并且做了扩展支持,满足范围更大了。 小问题隐藏了大智慧。
完整性约束可以分为如下类型:约束类型描述非空约束(NOT NULL)指定列是否可以为NULL,只能在建表语句中关于列的描述后指定非空约束。...唯一约束(Unique key)在相同的列、或多个列的组合中,是否允许不同的行拥有重复的值(允许值为NULL)。主键约束(Primary key)同时满足非空约束和唯一约束。...# 非空约束默认情况下,一个表中的所有列都允许空值,使用NOT NULL约束可以指定列不允许为空值。NOT NULL约束主要用于不能缺少值的列,例如员工信息表中的姓名列。...外键的值,要么匹配被引用主键或唯一键的值,要么为空。如果复合外键中存在空值列,该键的非空列不再强制要求匹配父项中的对应列。被引用键被外键所引用的表中的唯一键或主键。...# 检查性约束检查约束具备强制执行具体的完整性规则的能力,对指定列或列集创建检查性约束,可以保证表中的数据一定满足指定的条件。如果DML语句违反了检查性约束的条件,执行会报错。
在数据库设计过程中,遵循设计范式是一种重要的指导原则,它有助于我们规范和优化数据结构。 第一范式(1NF) 第一范式正例 第一范式要求每个表中的字段都是原子性的,不允许多个值混合在一起。...product_attributes 列可能包含多个产品属性,比如颜色、尺寸等,这就违反了第一范式的要求。...换句话说,非主键属性的取值必须与主键的所有列的取值相关,而不能只与主键的某一部分相关。...这就违反了第二范式,因为非主键属性 department_name 只依赖于部分主键,而不是整个主键。...这种设计,同样违反了设计模式的原则中的单一职责原则,一个表的字段应该尽量保持单一职责,即每个字段应该只存储一个特定的数据信息。
NOT NULL 标识该字段不能为空 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键) DEFAULT...二 not null与default 是否可空,null表示空,非字符串 not null - 不可空 null - 可空...默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值 create table tb1( nid int not null...,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值 mysql> create table t3(id int default 1); mysql>...primary key字段的值不为空且唯一,那我们直接使用not null+unique不就可以了吗,要它干什么?
•MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询。•将结果返回给客户端。 是什么导致MySQL查询变慢了?...列表中的选项有专门的优化策略,一般会认为MySQL会先执行子查询返回所有包含author_id 为1的book_id。...不要将空的变量值直接与比较运算符(符号)比较。 如果变量可能为空,应使用 IS NULL 或 IS NOT NULL 进行比较,或者使用 ISNULL 函数。 5....=•like "%_" 百分号在前(可采用在建立索引时用reverse(columnName)这种方法处理)•单独引用复合索引里非第一位置的索引列.应总是使用索引的第一个列,如果索引是建立在多个列上,...这个是一个估计值.
by 分组 聚合函数 group_concat 和 concat函数 Having 过滤 Distinct 去重 ORDER BY 排序 单列排序 多列排序 空值排序 limit 分页 MySQL快速入门...zerofill 多余的使用数字0填充 not null 非空 default 默认值 unique 唯一值 primary key 主键 foreign key 外键 auto_increment...null 在MySQL中不传数据 会使用关键字NULL填充意思就是空 类似于python的None # 非空 create table t2( id int, name...情况一:没有主键和其他约束条件 # InnoDB会采用隐藏的字段作为主键 不能加快数据的查询 情况二:没有主键但是有非空且唯一的字段 # InnoDB会自动将该字段升级为主键 create table...= 4 ORDER BY salary DESC, hire_date; 空值排序 空值(NULL)在 SQL 中表示未知或者缺失的值,MySQL认为空值最小,升序时空值排在最前,降序时空值排在最后
它附带一组自定义集合类型,您可以将其用作查询方法返回类型,如下表所示: 您可以使用第一列(或其子类型)中的类型作为查询方法返回类型,并根据实际查询结果(第三列)的 Java 类型获取第二列中的类型作为实现类型...@NonNull: 用于不得为的参数或返回值null(在@NonNullApi适用的参数和返回值上不需要)。 @Nullable: 用于可以是的参数或返回值null。...如果查询结果违反了定义的约束,则抛出异常。当该方法将返回null但被声明为不可为空时(在存储库所在的包上定义的默认注释),就会发生这种情况。...IllegalArgumentException当emailAddress传递给方法是时抛出null。 基于 Kotlin 的存储库中的可空性 Kotlin在语言中定义了可空性约束。...} 该方法将参数和结果都定义为不可为空(Kotlin 默认值)。Kotlin 编译器拒绝传递null给方法的方法调用。
出现以上问题的核心,就是为何有为空的记录存储于有NOT NULL非空约束的表中。...原因就是前面介绍过的11g新特性,新增一个有默认值的NOT NULL约束的字段,默认值不会像以前一样,插入每条记录中,而是会存储于数据字典表,Oracle允许NOT NULL列默认值为NULL,因此对于...这种新增非空约束字段在不同版本中确实有一些细节的变化,下面做一些简单测试。...根据错误提示,我们删除表中数据,再新增字段,可以增加,但不能再插入一条NULL至这个非空约束字段。...至此,12c修复了11g中这个非空约束字段允许保存空值的bug,同时又支持11g新增默认值非空字段使用数据字典存储的特性,并且做了扩展支持,满足范围更大了。可以说,小问题隐藏了大智慧。
当model中如果没有自增列,则自动会创建一个列名为id的列。...,表示允许为空,默认值是False null # 如果为True,则该字段允许为空白,默认值是False blank # 字段的名称,如果未指定,则使用属性的名称 db_column # 若值为True...primary_key # 如果为True, 这个字段在表中必须有唯一值,默认值是False unique # (时间字段独有)配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库...models.PROTECT # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空) models.SET_NULL # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值...) models.SET_DEFAULT # 删除关联数据,与之关联的值设为指定值 models.SET # 是否在数据库中创建外键约束,默认为True。
每一列都是不可再分的最小数据单元(也称为最小的原子单元)。 解释: 在第一范式中,主要关注的是列的原子性。...也就是说,表中的每一列都应该只包含一个值,而不能包含集合、数组或其他复合数据类型。 例如,如果有一个“地址”列,它包含了街道、城市、省份和国家等信息,那么这就违反了第一范式。...非主键列必须完全依赖于主键,而不能只依赖于主键的一部分(针对复合主键而言)。 解释: 第二范式建立在第一范式的基础上,主要关注于主键与非主键列之间的依赖关系。...在第二范式中,一个表只能保存一种数据,不可以把多种数据保存在同一张数据库表中。 如果表中的某一列只与复合主键的一部分有关,那么它就不应该存在于这个表中,而应该被分离出去形成另外一张新表。...非主键列必须直接依赖于主键,不能存在传递依赖。即非主键列必须直接依赖于整个主键,而不能依赖于主键的一部分。 解释: 第三范式是在第二范式的基础上进一步细化的。
主键是表中一列或一组列,其值用于唯一标识每个记录。主键约束的作用是确保表中的每条记录都具有唯一的主键值,同时不允许主键列包含空值(NULL)。主键约束通常在创建表时定义,可以在一个或多个列上应用。...唯一约束允许 NULL 值,即允许在该列中存在多个 NULL 值,但对于非 NULL 值,每个值都必须是唯一的。...2.6 非空约束 非空约束(NOT NULL Constraint)是一种用于确保列中的数据不为空的约束。在定义表结构时,可以通过应用非空约束来防止在插入或更新记录时将空值(NULL)插入到特定列中。...这意味着在插入或更新记录时,必须为这两列提供非空的值。 如果需要在已存在的表上添加非空约束,可以使用 ALTER TABLE 语句。...非空约束对于确保关键字段不缺失是非常有用的,同时也能够简化对数据库中的数据的处理,因为可以信任特定列中的数据不会是空的。
常见的表约束包括:NOT NULL:非空约束DEFAULT:默认值约束COMMENT:列注释ZEROFILL:零填充属性PRIMARY KEY:主键约束AUTO_INCREMENT:自增属性UNIQUE...插入失败(显式NULL):尝试将class_room的值显式设置为NULL。MySQL报错Column 'class_room' cannot be null,直接指出了违反了非空约束。...但在通常的设计中,如果一个字段有默认值,它本质上就不会为NULL,所以NOT NULL约束有时会显得冗余。这个例子作为对照,当一个列没有任何约束时,如果不提供值,它默认为NULL。3....这表明MySQL在设置主键时,自动强制了非空约束。主键的唯一性约束效果第一次插入id=1成功。...但Null字段依然是NO,说明删除主键不会移除原有的非空约束。
每一列都是不可再分的最小数据单元(也称为最小的原子单元)。 解释: 在第一范式中,主要关注的是列的原子性。...也就是说,表中的每一列都应该只包含一个值,而不能包含集合、数组或其他复合数据类型。 例如,如果有一个“地址”列,它包含了街道、城市、省份和国家等信息,那么这就违反了第一范式。...非主键列必须完全依赖于主键,而不能只依赖于主键的一部分(针对复合主键而言)。 解释: 第二范式建立在第一范式的基础上,主要关注于主键与非主键列之间的依赖关系。...非主键列必须直接依赖于主键,不能存在传递依赖。即非主键列必须直接依赖于整个主键,而不能依赖于主键的一部分。 解释: 第三范式是在第二范式的基础上进一步细化的。...它主要关注于消除传递依赖,即非主键列不应该依赖于主键的某一部分,而应该直接依赖于整个主键。 如果存在传递依赖,那么应该考虑将这个非主键列分离出去,形成新的表,并通过主键或外键与原表进行关联。
它们用于限制可以插入、更新或删除到表中的数据类型或值。如果任何操作违反了约束规则,该操作将被中止。 约束的类型: 1. NOT NULL (非空约束) 作用:确保列不能存储 NULL 值。...UNIQUE (唯一约束) 作用:保证列(或列组合)中的所有值都是唯一的。允许存在一个 NULL 值(除非该列也被定义为 NOT NULL)。...PRIMARY KEY (主键约束) 作用:唯一标识表中的每一行。它隐含了 NOT NULL 和 UNIQUE 约束。一个表只能有一个主键(可以是单列或多列组合)。...它确保子表(包含外键的表)中的外键列的值必须在父表(被引用的表)的某个主键或唯一键列中存在,或者该外键列的值为 NULL(如果该列允许 NULL)。...DEFAULT (默认值约束) 作用:如果插入新行时没有为某个列指定值,则该列会自动填充指定的默认值。
它附带一组自定义集合类型,您可以将其用作查询方法返回类型,如下表所示: 您可以将第一列(或其子类型)中的类型用作查询方法返回类型,并根据实际查询结果的Java类型(第三列)获取第二列中用作实现类型的类型...@NonNull: 用于不能使用的参数或返回值null(在@NonNullApi适用的情况下不需要用于参数和返回值)。 @Nullable: 用在参数或返回值上即可null。...声明不可为空 package-info.java @org.springframework.lang.NonNullApi package com.acme; 一旦非空默认设置到位,存储库查询方法调用将在运行时验证可空性约束...如果查询结果违反了定义的约束,则会引发异常。当方法将返回null但被声明为不可为空(默认情况下,在存储库所在的包上定义注释)时,就会发生这种情况。...IllegalArgumentException当emailAddress交给方法时抛出一个null。 基于 Kotlin 的存储库中的可空性 Kotlin 将可空性约束的定义融入到语言中。
在同一张表中,字段名是不能相同 2. 宽度和约束条件可选、非必须,宽度指的就是字段长度约束,例如:char(10)里面的10 3....default now()); # 需要指定传入,空值时默认取当前时间 create table t2(x timestamp); # 无需任何设置,在传空值的情况下自动传入当前时间 3.4,字符串类型... 4.1分类 PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY (FK) 标识该字段为该表的外键 NOT NULL 标识该字段不能为空...,不设置默认可以为空的 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键) DEFAULT 为该字段设置默认值...create table t1(id int unsigned not null default 1) #表示id字段为无符号,不可以为空,默认值为1 create table t1(id int unique
免费编程软件「python+pycharm」链接:https://pan.quark.cn/s/48a86be2fdc0在Python开发中,数据存储是绕不开的核心环节。...1.1 零门槛的嵌入式数据库SQLite是一款开源的嵌入式关系型数据库,其核心优势在于"零配置"——无需安装服务器进程,数据全部存储在单个文件中(如data.db)。...1.2 Python生态的完美融合Python标准库自带的sqlite3模块提供了完整的DB-API 2.0接口,支持标准SQL语法。...CHECK约束实现数据验证(如年龄范围、邮箱格式)DEFAULT设置默认值BLOB类型存储二进制数据(如头像图片)2.3 CRUD操作进阶技巧参数化查询防注入永远不要使用字符串拼接构建SQL语句:# 危险做法...通过掌握本文介绍的核心概念和实战技巧,你不仅能够高效处理日常开发中的数据库需求,更能深入理解关系型数据库的设计哲学。