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

插入时,究竟发生了什么?(非开车,纯技术交流)

'222')    // 允许指定值 (223, 'xyz')    // 忽略NULL,从最大值开始增 如果继续执行以下语句: insert into t1(name)values("shenjian...更为细化后,总的来说,插入方式分为三类: (1)简单插入(simple insert) (2)批量插入(bulk insert) (3)混合插入(mixed-mode insert) 什么是简单插入(simple...简单插入的特点是,能够提前知道被插入的行数。因此,这类插入,在处理自增键时,是最容易的。 画外音:很容易保证自增键连续性。 什么是批量插入(bulk insert)?...: insert ("shenjian"),("aaa"),("bbb") 系统以为是批量插入,就生成了224,225,226三个连续自增键。...结果有一行插入冲突,实际是更新,导致224这个自增值并没有用上,于是就出现了奇怪的“自增值不连续”的怪异现象。

70320

【MySQL】005.MySQL表的约束(上)

约束本质是通过技术手段倒逼程序员插入正确的数据。反过来,站在mysql的视角,插入进来的数据,都是符合数据约束的。 约束的最终目标:保证数据的完整性和可预期性。 2....站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...' doesn't have a default value //插入教室为NULL,我们会发现提示我们class_room不能为空 mysql> insert into myclass (class_name...,用的是default,如果建表中对应列默认没有设置default值,将无法插入。...default是作用在用户忽略了这一列的时候,如果设置了使用默认值,如果没有设置,直接报错。 如果我们在建表时没有设置默认值,mysql会对我们的表进行优化。

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

    探索Android架构组件Room

    定义数据表中的字段名 用于告诉Room需要忽略的字段或方法 建立索引:在 注解的 属性中添加索引字段。...(具体原因可以参考: Understand why Room doesn't allow object references)但Room允许通过外键(Foreign Key)来表示Entity之间的关系...Tips: 方法也可以定义返回值, 当传入参数仅有一个时返回 , 传入多个时返回 或 , Room在实现insert方法的实现时会在一个事务进行所有参数的插入。...的参数存在冲突时, 可以设置 属性的值来定义冲突的解决策略, 比如代码中定义的是 , 即发生冲突时替换原有数据 和 可以定义 类型返回值,指更新/删除的函数 DAO中的增删改方法的定义都比较简单,这里不展开讨论...定义子集的POJO类: 在DAO中添加查询方法: 这里定义的POJO也支持使用 2.3 查询结果的返回类型 Room中查询操作除了返回POJO对象及其List以外, 还支持: : LiveData是架构组件库中提供的另一个组件

    2.1K50

    【MySql】表的约束

    约束的最终目标:保证数据的完整性和可预期性所以需要更多的约束。...站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...): Field 'class_room' doesn't have a default value mysql> insert into myclass (class_name,class_room...(0.00 sec) default和NOT NULL不冲突,而是互相补充的,当用户想插入的时候,无非就是NULL或者合法数据,当用户忽略这一列的时候,使用默认值(前提是设置了默认值),如果没有设置,...对于自增长:默认是从1开始插入的,如果默认插入了一个值作为起始值,则从这个起始值加1开始 所以我们在创建表的时候可以给自增长设置一个起始值: mysql> create table t22( -

    1.9K30

    MySQL:表的约束

    反过来,站在MySQL角度,凡是插入进来的数据,都是符合数据约束的! 约束的最终目标:保证数据的完整性和可预期性。 二....,没有给教室数据插入失败: mysql> insert into myclass(class_name) values('class1'); ERROR 1364 (HY000): Field 'class_room...对于default而言,当用户忽略这一列的时候,如果设置了default,则使用默认值;如果没有设置default,则报错。 而对于age列: 下来再来看这个: 为什么还是让插入了呢?...也可以直接获取上次插入的auto_increment的值: mysql > select last_insert_id(); +------------------+ | last_insert_id(...唯一键 创建带有唯一键的表: 唯一键表达了类似于主键的功能,不能发生冲突。 但是,唯一键是可以为空的,这是区别于主键的地方。 主键与唯一键并不冲突,是互相补充的!!!

    1.5K10

    MySQL 表约束实战指南:从概念到落地,守护数据完整性

    myclass(class_name) values("高三3班"); ERROR 1364 (HY000): Field 'class_room' doesn't have a default value...default和NOT NULL不冲突,而是互相补充的。 NOT NULL:当用户想要插入的时候,为NULL和合法数据。...default:当用户忽略这一列的时候,使用默认值(如果设置了),如果没有设置,直接报错。...sec) 在插入后获取上次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值) 索引: 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结...数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。

    22000

    数据库圣经--约束

    UNIQUE 唯一约束:要求指定列的每行数据值唯一,避免重复。 PRIMARY KEY 主键约束:是 NOT NULL 和 UNIQUE 的组合,可指定一列或多列,用于防止数据重复并提升查询性能。...约束是关系型数据库的一个重要功能主要作用是保证数据的完整性,也可能理解数据的正确性 (数据本身是否正确,关联关系是否正确) 1、not null空约束 定义表时某列不允许为null时,可以为列添加非空约束...(1, null); 1.3查看表结构 NULL列为NO表示值不允许为NULL,YES表示值可以为NULL desc student; 2、default默认值约束 注意:插入时只指定了...在8.0.16开始全面支持check约束,之前的版本会忽略check的定义 定义:CHECK 约束用于保证列中的值符合指定条件。...内容说明 操作与结果:向test_check表插入数据时,符合 CHECK 约束(如性别为 “男”“女”)的记录可成功插入;插入 “无” 时,触发test_check_chk_1约束违规错误。

    26410

    上手使用 Room Kotlin API

    插入数据 要实现插入数据的操作,首先创建一个抽象的挂起函数,需要插入的单词作为它的参数,并且添加 @Insert 注解。...Room 会生成将数据插入数据库的全部操作,并且由于我们将函数定义为可挂起,所以 Room 会将整个操作过程放在后台线程中完成。...@Insert suspend fun insert(word: Word) 在底层 Room 生成了 Dao 抽象函数的实现代码。...我们希望当数据库中的数据发生改变的时候,能够得到相应的通知,所以我们返回一个 FlowList>。由于返回类型是 Flow,Room 会在后台线程中执行数据请求。...比如您可以指定 Room 如何处理数据库冲突、可以通过创建 TypeConverters 存储原生 SQLite 无法存储的数据类型 (比如 Date 类型)、可以使用 JOIN 以及其它 SQL 功能实现复杂的查询

    1.3K30

    【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

    数据访问接口对象 中的 查询方法 , 其返回值类型改为 LiveData 类型 , LiveData 的泛型为 原来的查询方法的返回值类型 ; Dao 查询方法的返回值由 List...数据库访问对象接口 的定义方式需要作出改变 , 涉及到数据库查询的 接口方法时 , 其返回值需要 返回 LiveData 类型 , 泛型设置为 List 类型 ; /**...增删改查 的对应函数 , 通过调用 Repository 成员边来那个实现对数据库的操作 , 查询函数 的返回值是 LiveData 类型的 ; fun insert(student: Student...>> 类型 返回值 ; 手动主动调用的查询 数据库的 方法接口 , 返回 List 类型 返回值 ; /** * 查询数据库表 */ @Query(...框架中的 Dao 数据库访问对象接口 的定义方式需要作出改变 , 涉及到数据库查询的 接口方法时 , 其返回值需要 返回 LiveData 类型 , 泛型设置为 List 类型 ;

    2K20

    上手使用 Room Kotlin API

    Flow 相关的内容: Flow 相关的内容 https://youtu.be/emk9_tVVLcc 插入数据 要实现插入数据的操作,首先创建一个抽象的挂起函数,需要插入的单词作为它的参数,并且添加...Room 会生成将数据插入数据库的全部操作,并且由于我们将函数定义为可挂起,所以 Room 会将整个操作过程放在后台线程中完成。...@Insert suspend fun insert(word: Word) 在底层 Room 生成了 Dao 抽象函数的实现代码。...我们希望当数据库中的数据发生改变的时候,能够得到相应的通知,所以我们返回一个 FlowList>。由于返回类型是 Flow,Room 会在后台线程中执行数据请求。...比如您可以指定 Room 如何处理数据库冲突、可以通过创建 TypeConverters 存储原生 SQLite 无法存储的数据类型 (比如 Date 类型)、可以使用 JOIN 以及其它 SQL 功能实现复杂的查询

    2K10

    技术分享 | 关于 MySQL 自增 ID 的事儿

    1.2.1 Simple Inserts(简单插入): 可以预先确定插入行数的语句(像简单 insert 的语句包含多个 value 这种情况也是属于简单插入,因为在进行插入时就已经可以确定行数了)...1.2.2 Bulk Inserts(大量插入): 预先不知道要插入的行数的语句(包括 INSERT ......SELECT 和 LOAD DATA 语句,但不包括 plain INSERT ) 1.3 AUTO-INC 表级锁 如果一个事务正在向表中插入值,则会产生表级的共享锁,以便当前事务插入的行接收连续的主键值...此时再次插入{null,张三}时候,主键冲突插入失败,但表的计数器已由2变成了3 当下次插入{null,李四}的时候最终入库的会变成{3,李四} 1.5.2 事务回滚 在一个事务里进行数据的插入,但最后并没提交...1.5.3 发生 Bulk Inserts(大量插入)时 发生大量插入时可能会出现自增ID并不是连续的情况 二、自增 ID 用完了该怎么办?

    4.8K10

    Android的room数据库使用小结(kotlin)

    @Database、@Dao、@Entity、@Query、@Insert、@Update、@Detele等的注解,可以使用简单代码实现相比以前SQLite更复杂的代码的效果,这点儿有点儿类似于java...自增类型的主键,则可以设置 @PrimaryKey 的 autoGenerate 属性。 忽略字段: 使用@Ignore注解,如,@Ignore val picture: Bitmap?...= null } 第二步,在dao包里写对应的dao,对应的操作, 注意这些操作接口最好都带个返回值,比如insert返回long,delete返回Int。因为最终的使用总要对操作结果来个判断吧。...还可以开启个对冲突的策略,默认的添加重复的数据(主键一致)会抛异常的。...File.separator// var DB_NAME = DB_PATH +"mydb" private constructor(context:Context){ //判断目录是否存在

    3.9K50

    深入浅出表锁(Table Lock)

    IX,IS是表级锁,不会和行级的X,S锁发生冲突。只会和表级的X,S发生冲突。 4....INSERT INTO `teacher` (name) VALUES ('zhangsan'), ('lisi'); 上边的插入语句并没有为id列显式赋值,所以系统会自动为它赋上递增的值,结果如下所示...现在我们看到的上面插入数据只是一种简单的插入模式,所有插入数据的方式总共分为三类,分别是 “ Simple inserts ”,“ Bulk inserts ”和“ Mixed-mode inserts...“Bulk inserts” (批量插入) 事先不知道要插入的行数 (和所需自动递增值的数量)的语句。比如 INSERT ... SELECT , REPLACE ......但 是,由于多个语句可以同时生成数字(即,跨语句交叉编号),为任何给定语句插入的行生成的值可能 不是连续的。

    1.3K40

    JetPack--Room数据库

    需要满足:定义的类是一个继承RoomDatabase的抽象类,注解中定义包含实体类列表,包含一个没有参数的抽象方法并返回Dao对象 一、Room上手 首先添加依赖: implementation...将忽略它,属性也可以使用这个注解,表示这个属性将不会生成数据库字段 使用@PrimaryKey注解指定主键并且是自增长的 属性还可以指定在数据库的字段等,使用@ColumnInfo注解: package...、数据库版本、是否输出日志 使用单例模式时,构造方法不能私有化,因为Room内部会调用构造方法 定义获取Dao对象的抽象函数 package com.aruba.room; import android.content.Context...二、ViewModel+LiveData+Room Room支持返回LiveData类型,结合ViewModel、DataBinding,就可以改造成一个非常棒的MVVM架构 package com.aruba.room...androidx.room.Insert; import androidx.room.Query; import androidx.room.Update; import java.util.List

    1.9K20

    Java Web基础入门

    插入一条记录 mysql> insert into room(`name`, `comment`, `create_date`, `update_date`) values ("大床房", "", "2017...关于Java类型和SQL的数据库表映射规则,请查阅官网。 ---- 插入一条数据并返回主键 我们新建的表RoomTable是有ID的,我们创建了一个Room后要知道生成的id,来返回给前端。.... ---- 查询返回list 除了最常用的findbyId, 最常用的查询是返回一个list。因为我们的搜索是返回条件匹配的值,而匹配条件的item通常很多个,即list。...,应该返回1 为了验证我们是否删除成功了。...注意占位符的匹配,按顺序填充value。 更新成功应该返回1 之前提到,删除操作通常并非真实的删除一条记录。而是设置一个flag,通过判断flag来确定是否有效。

    2.8K70
    领券