-->基于多列的复合索引,对于全为null值的索引值也不会被存储。如上面的情形,尽管插入了5条记录,复合索引中只存储了3条。...尽管当前表上id列上的所有值都为null,但不排除后续记录插入的id不为null的列。...值存在,但由于列id上具有not null 约束,且id列与val列存在复合唯一索引,因此此时选择了索引快速全扫描 -->其余不同组合情形大致相同,不再演示 -->为表t1新增一条val为null的记录...故在基于单列创建B树唯一索引或多列创建B树复合唯一索引的情形下, 当列上允许为null值时 where子句使用了基于is null的情形,其执行计划走全表扫描。 ...当列上不允许为null值时,存在非null约束 where子句使用了基于is null的情行,其执行计划走索引扫描。
学生ID (主键) 学生身份证(唯一不允许为空) 学生的性别默认男(男,女) 学生的年龄(10-30) 老师ID(外键) 3.2 创建一个老师表teacher 老师ID(主键) 老师身份证(唯一不允许为空...,参数n对应的值) 两者的区别如下: 前者是指定类型插入,可以选择性的插入指定的数据 后者必须插入表所有属性的值,也就是一个都不能漏掉 eg:以上面的学生表为例 insert into tb_student...eg:还是以上面创建学生表为例 create table tb_student( stuId number primary key, -- 学生的ID,学生的 ID 作为主键,而且不为空...primary key(stuId) pk 是我另外给主键创建的一个名称 ) 这个在插入数据的时候,才会出来问题,如果插入两个数据的 ID 相同就会报错 使用了主键约束,就相当于使用了非空约束 在修改表的时候增加主键约束...dataType null; 2.3.3 唯一约束 关键字:unique 表示一个字段中的内容是唯一的,其他列不允许重复 eg:使用了这个关键字就要好好注意一下 create table tb_student
为2型索引设置了SUBPAGES语句 +117 01525 要插入的值的个数不等于被插入表的列数 +162 01514 指定的表空间被置为检查挂起状态 +203 01552 使用非唯一的名字来解决命名的限定列...-407 23502 不能把NULL值插到定义为NOT NULL的列中 -408 42821 数值不能被更新或插入,因为他与列的数据类型不兼容 -409 42607 COUNT函数指定的运算对象无效...BYDEFAULT属性的ROWID列 -542 42831 可以为空的列不允许作为主健的一部分包含在内 -543 23511 因为该表是指定了SET NULL删除规则的参照约束的父表而且检查约束不允许...-765 560A3 表和数据库不兼容 -766 560A4 不能对辅助表进行请求的操作 -767 42626 CREATE INDEX失败,因为在辅助表中为索引指定了列,或者因为没有为非辅助表的索引指定列...列,那么该表才可以包含一个LOB列 -771 428C7 无效的ROWID列规范 -797 42987 CREATE TRIGGER包含不被支持的语法 -798 428C9 不能把一个值插入到用GENERATED
、主键约束噢~ ---- 唯一约束 定义 唯一约束用于保证数据表中字段的唯一性,即表中字段的值不能重复出现。...插入数据 如下,我们创建my_unique1和my_unique2两个表来进行测试,为两个表分别添加列级约束和表级约束,然后查看表的结构,会发现两个表的结构是相同的。...主键约束通过primary key 定义,它相当于唯一约束和非空约束的组合,要求被约束字段不允许重复,也不允许出现null值。...测试 我们创建一个表进行测试,为id添加主键约束,查看表结构,由图可以看出,id字段的key列为PRI,表示该字段为主键,同时,id字段的null列为NO,表示该字段不能为NULL。...插入数据 插入NULL时,会插入失败,提示id字段不能为NULL 插入重复值也会失败,提示”1“已经存在主键。
TIMESTAMP 和 DATETIME 列都可以自动初始化并且可以更新为当前的日期和时间,列还可以将当前的时间戳指定为默认值、自动更新的值或者两个同时使用都可以。...2. explicit_defaults_for_timestamp 这个系统变量决定了 MySQL 是否为 TIMESTAMP 列的默认值和 NULL 值的处理启用某些非标准的行为。...给这样的列插入一个 NULL 值,会把它设置为 NULL 值,而不是当前的时间戳。 用 NOT NULL 属性声明的 TIMESTAMP 列不允许NULL值。...对于插入的行,如果没有为这样的列指定明确的值,其结果取决于 SQL mode 。如果启用了严格的 SQL mode ,会报错。...explicit_defaults_for_timestamp 的参数值设置为 ON ,导致业务插入数据失败。
例如,原子性无法保证,显然一致性也无法保证。 但是,如果你在事务里故意写出违反约束的代码,一致性还是无法保证的。例如,你在转账的例子中,你的代码里故意不给B账户加钱,那一致性还是无法保证。...如果使用非自增主键,由于每次插入主键的值近似于随机,因此每次新纪录都要被插入到现有索引页的中间某个位置,此时MySQL不得不为了将新记录查到合适位置而移动元素,甚至目标页可能已经被回写到磁盘上而从缓存中清掉...简单的说: 索引树只能定位到某一页,每一页内的插入还是需要通过比较、移动插入的。所以有序主键可以提升插入效率。 15....一般情况下,该值越大,索引效率越高。 Sub_part: 对于前缀索引,用于索引的字符个数。如果整个字段都加上了索引,则显示为NULL。 Null: YES:该列允许NULL值。...'':该列不允许NULL值。 Index_type: 索引类型,包括(BTREE, FULLTEXT, HASH, RTREE)。 如何解决like'%字符串%'时索引失效?
主键是表中一列或一组列,其值用于唯一标识每个记录。主键约束的作用是确保表中的每条记录都具有唯一的主键值,同时不允许主键列包含空值(NULL)。主键约束通常在创建表时定义,可以在一个或多个列上应用。...) ); 在上述示例中,departments 表的 department_id 列被定义为主键,而 employees 表的 department_id 列被定义为外键,引用了 departments...2.6 非空约束 非空约束(NOT NULL Constraint)是一种用于确保列中的数据不为空的约束。在定义表结构时,可以通过应用非空约束来防止在插入或更新记录时将空值(NULL)插入到特定列中。...product_name VARCHAR(100) NOT NULL: 定义了一个最大长度为 100 的字符串类型的列,且不允许为空,用于存储产品名称。...100 ALTER COLUMN hire_date DATE NOT NULL; -- 将hire_date列设置为不允许为空 在上述例子中,我们使用 ALTER TABLE 语句进行了两种类型的修改
B、唯一值约束:一张表可以有多个列添加唯一值约束,一直允许一条记录为空值。 实体完整性,由主键和唯一性约束来实现,确保表中记录有一列唯一标识。...主键约束相当于唯一约束与非空约束的组合,主键约束列不允许重复,也不允许出现空值;多列组合的主键约束,列都不允许为空值,并且组合的值不允许重复。...,不允许插入重复的ID,如果不指定主键的值,默认为0。...index uc_sname; 三、域完整性 1、默认值 在表中插入一条新的记录时,如果没有为该字段赋值,那么数据库系统会自动为该字段赋一条默认值。...如果外键约束指定了参照动作,主表记录做修改,删除,从表引用的列会做相应修改,或不修改,拒绝修改或设置为默认值。 引用表的列名必须是主键,且在删除引用表时必须删除引用关系或者删除当前表。
当创建表的第二个列字段为char(2)的时候,可以看到两个汉字和两个字母都可以插入到表中,但三个字母却无法插入,如果这里的字符和C语言中的字符概念相同的话,那就是2个字节的大小,那就不应该插入两个汉字,...而当values左面的括号进行全列插入的时候,插入class_name或class_room列字段值为null时,此时MySQL报错的才是cannot be null,不允许为空值,因为有not null...主键不允许为空null,不过空字段是不做唯一性比较的,判断表中唯一键是否重复时,NULL肯定是不作比较的,这非常合理。...例如student表中的唯一键约束的id,可以是多个NULL,因为我们知道NULL不参与任何比较和计算,所以可以出现id为多个NULL的情况。 2....当建立外键约束后,外键为stu表中的class_id,引用自class表中的id,如果此时将学生插入到不存在的班级,或者删除某个班级,一个学生插入到两个班级等等不合逻辑的操作,都会被MySQL拦截掉,保证表与表之间正确的关联关系
注意,code列在source 表中是可选,而在dest 表中是强制的 一旦基表创建之后,如果需要使用DML error logging 特性,则必须为该基表创建一个日志表用于记录基于该表上的...,对于source表来说,其code 列可以为NULL,而dest表的code则不允许为NULL。...CODE") --source 表为NULL的两行将引起整个insert 语句回滚,无论在错误之间有多少条语句被成功插入。...CODE") 2 rows selected. 2、UPDATE 操作 下面的代码将尝试去更新1-10行的code列,其中8行的code值设置为自身,而第9与第10行设置为NULL。...CODE") to NULL --如我们所期待的那样,语句由于code列不允许为NULL而导致操作失败。
例子: --删除模式ZHANG, 则删除失败,因为模式中定义了TAB1 DROP SCHEMA ZHANG RESTRICT; --删除模式ZHANG, 同时该模式中定义的表TAB1也被删除 DROP...varchar(40) , ) 如果向Employee表插入的Emp_id 重复了或者插入时Emp_id 为NULL值,则会出错。...2.对于指定为primary key的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于unique所约束的惟一键,则允许为null,只是null值最多有一个。...DROP COLUMN 子句用于删除表中的列如果指定了CASCADE短语,则自动删除引用了该列的其他对象如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列 DROP...’IS’ 如果不是,则拒绝该插入操作 如果没有提供Sdept属性值,则自动定义Sdept为’IS’ 4.1.1 基于多个基表的视图 例3:建立信息系选修了1号课程的学生的视图(包括学号、姓名、成绩) CREATE
2.2 Hash索引特性 只支持包括 “=” "in "在内的等值查询,不支持范围,前缀匹配查询Hash索引是通过hash函数将,键值直接映射为物理存储地址,使时间复杂度降低到O(1).本身存储是无序的...5.修改过于频繁的列使用索引要慎重.1s几十次的修改就要注意了,过于频繁的更新对于索引负担太重,磁盘负载过重,另外更新操作可能会锁住相关记录,有死锁和事务超时可能。但是该使就使。...mysql 解决幻读有两种方案: 一.对于查询select操作只是针对本事务开启时刻的“镜像”查询。例如本事务开启后,其他事务插入删除了相关数据并提交,本事务是无法察觉的。实现方式为 版本控制。...Full scan on NULL key:子查询中的一种优化方式,主要在遇到无法通过索引访问null值的使用。...如果发现前面表的列值已知,部分索引可以使用。
错误码发现问题为在mysql的配置中如果设置了sql_mode包含ONLY_FULL_GROUP_BY值得话,在进行查询时需要将select的字段都包含在group by 中。...:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO:该值影响自增长列的插入...默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。...STRICT_TRANS_TABLES:在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制 NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零 NO_ZERO_DATE...:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
,存储引擎会对索引列进行哈希计算得到哈希码,并且哈希算法要尽量保证不同的列值计算出的哈希码值是不同的,将哈希码的值作为哈希表的key值,将指向数据行的指针作为哈希表的value值。...1、主键索引:名为primary的唯一非空索引,不允许有空值。 2、唯一索引:索引列中的值必须是唯一的,但是允许为空值。唯一索引和主键索引的区别是:唯一约束的列可以为null且可以存在多个null值。...对于InnoDB来说,聚集索引一般是表中的主键索引,如果表中没有显示指定主键,则会选择表中的第一个不允许为NULL的唯一索引。...对于使用了覆盖索引的查询,在查询前面使用explain,输出的extra列会显示为using index。...MEMORY引擎默认使用哈希索引,将键的哈希值和指向数据行的指针保存在哈希索引中。 优点:访问速度较快。 缺点: 哈希索引数据不是按照索引值顺序存储,无法用于排序。
然而不论是时代的潮流还是臃肿繁杂的配置代码告诉我们,注解配置才是更人性化的设计,于是学习了基本的映射实体类的基本注解,此处做一点总结,后续文章将陆续更新使用注解的方式管理配置各种映射关联关系。...@Table(name = "userInfo"):详细指定了该类映射到数据库中的哪张表,这里映射到userInfo表。 @Id:指定被修饰的属性将映射到数据表的主键列。...该注解有很多属性: name:指定该属性映射到数据表中对应的名称 nullable:指定该属性映射的数据表中列是否可以为null,默认为true unique:指定该属性映射到数据表中的列是否具有唯一约束...在hibernate的管理下,当有数据添加进userinfo表的时候,hibernate将拿到该实体类实例的集合属性的值,并连带该实例的id一起插入到新表中。...组件类的每个属性都被映射到userinfo表中了。当我们通过实体类实例向数据表中插入数据的时候,hibernate会将组件类实例拆分出来的各个属性插入到对应的表字段。
,则必须要插入表中的所有列,需要注意的,在插入值列表中所列出的值的顺序,必须与select * 查询语句所列出的列顺序完全一致。...default关键字为相应列插入默认值,默认值在创建表时定义。...注意事项: 如果insert语句中没有包含默认值的列,则会添加默认值,如 C4 如果包含默认值的列,需要用default关键字,才回添加默认值,如C1 如果已经显示的设定了NULL或者其他值,则不会生成默认值...,如C2,C3 ---- 4.3 阻止对某几列插入 问题 举个例子,如果我们希望C4列的默认值为SYSDATE,这种列一般是为了记录数据生成的时间,不允许手工录入,该怎么办么?...注:多表 INSERT 语句上的约束 a、你只能在表而不能在视图上执行多表插入; b、你不能执行一个多表插入到一个远程表; c、在执行一个多表插入时,你不能指定一个表集合表达式; d、在一个多表插入中
但是在这张表中还有其他的Column也不允许重复,则可以使用Unique约束。...常用的约束有: Unique:确保该列中的所有值是不同的 Not Null:确保被该约束修饰的列不会有空值 Default:当该字段没有值时,使用默认值填充 Primary Key:确保该列可以唯一标示一条数据...,不会重复 Check:确保该列的值都满足条件,如果不满足,则无法插入 举例 现在有一张表,记录了本设备最近使用的App历史记录,并且按照进入的时间进行排序显示。...为唯一列设置Unique属性 在建表时,加入Conflict处理策略 在插入时,决定Conflict处理策略 注意:无论是建表时决定Conflict的处理策略还是插入时决定处理策略,Unique属性都是必须的...CONFLICT_REPLACE = 5 当使用了UNIQUE约束的列发生冲突的时候,之前已经存在的行都会被删除掉,然后再插入/更新当前的列。因此插入/更新总会发生。
:是否为空 主键:唯一标记每一行的记录 1.3.3约束: 主键primary key:外键foreign key: 简单来说: 主键:是这每组数据中唯一一个能定位到这一组数据的元素。...,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录...非空not null:字段不允许为空 唯一unique:字段不允许重复 默认default:字段可使用默认值 2.命令行操作mysql 启动终端,输入运行指令链接数据库【安装教程见文章篇首...xxx(id int, name varchar(30)); 可以看得由null 变成python05;其中在使用期间可以随意跳转到别的数据库中 创建数据表 首先查看当前所有的表 select database...students(name,gender) values("表格","女"),("表格","女") 5.2 修改数据 update 表名 set 列1=值1,列2=值2....where 条件:
领取专属 10元无门槛券
手把手带您无忧上云