SQL NULL 值 什么是 NULL 值? NULL 值是指字段没有值的情况。如果表中的字段是可选的,那么可以插入新记录或更新记录而不向该字段添加值。此时,该字段将保存为 NULL 值。...使用 IS NULL 和 IS NOT NULL 运算符可以有效地处理数据库中的空值情况。 SQL UPDATE 语句 UPDATE 语句用于修改表中的现有记录。...UPDATE 语法 UPDATE 表名 SET 列1 = 值1, 列2 = 值2, ... WHERE 条件; 注意:在更新表中的记录时要小心!请注意UPDATE语句中的WHERE子句。...如果省略WHERE子句,将会更新表中的所有记录!...UPDATE语句用于修改数据库表中的记录,可以根据需要更新单个或多个记录,但务必小心使用WHERE子句,以防止意外更新。
尽量使用简单的类型,如能用int就不用char,因为后者的排序涉及到字符集的选择,比使用int复杂。可空列使用更多的存储空间,如果在可空列上创建索引,MySQL需要额外的字节做记录。...创建表时,默认都是可空,容易被开发者忽视,最好是手动改为不可空,如果要存储的数据确实不会有空值的话。...= 'www.baidu.com' 如果数据量比较多,为防止哈希冲突,可自定义哈希函数,或用MD5函数返回值的一部分作为哈希值: SELECT CONV(RIGHT(MD5('www.baidu.com...覆盖索引 简单地说,某些查询只需要查询索引列,那么就不用再根据索引B树节点记录的主键ID进行二次查询了。 重复索引和冗余索引 如果重复在某列创建索引,并不会带来任何好处,只有坏处,应该尽量避免。...索引中包含了查询所需要的全部列则得一星 第一个条原则的意思是where条件中查询的顺序和索引是一致的,就是前面说的从左到右使用索引。
覆盖索引:在查询时使用了二级索引,如果查询的列在二级索引里查询的到,那么就不需要回表,这个过程就是覆盖索引字段特性分类MySQL索引按字段特性分类可分为:主键索引、普通索引、前缀索引。...唯一索引:建立在UNIQUE字段上的索引被称为唯一索引,一张表可以有多个唯一索引,索引列值允许为空,列值中出现多个空值不会发生重复冲突。普通索引:建立在普通字段上的索引被称为普通索引。...2:索引列中不重复值得个数某个列创建索引时,如果该列中不重复值的个数比例越低,则说明该列包含过多重复值,那么会进行过多的回表操作。...6:索引最好设置为not null索引列设置为not null主要有两个原因:NULL 值是一个没意义的值,会占用物理空间,如果表中存在允许为null,则至少占用1字节空间索引列存在 NULL时会使索引...NOT NULL防止索引失效因为我们上面【如何更好创建和使用索引】一节中也对优化手段的描述的比较清晰,这里再对【主键索引最好是自增的】和【防止索引失效】进行细讲。
尽量使用简单的类型,如能用int就不用char,因为后者的排序涉及到字符集的选择,比使用int复杂。 可空列使用更多的存储空间,如果在可空列上创建索引,MySQL需要额外的字节做记录。...创建表时,默认都是可空,容易被开发者忽视,最好是手动改为不可空,如果要存储的数据确实不会有空值的话。...= 'www.baidu.com' 如果数据量比较多,为防止哈希冲突,可自定义哈希函数,或用MD5函数返回值的一部分作为哈希值: SELECT CONV(RIGHT(MD5('www.baidu.com...5、覆盖索引 简单地说,某些查询只需要查询索引列,那么就不用再根据索引B树节点记录的主键ID进行二次查询了。...8、索引使用总结 索引的三星原则: 索引将查询相关的记录按顺序放在一起则得一星 索引中的数据顺序和查询结果的排序一致则得一星 索引中包含了查询所需要的全部列则得一星 第一个条原则的意思是where条件中查询的顺序和索引是一致的
约束可以是列级别,也可以是表级别;列级约束仅作用于某一列,而表级约束则作用于整张表。在关系型数据库中,数据的完整性和一致性是至关重要的。...SQL约束(SQL constraints)是用于规定和强制执行数据库表中数据的规则和限制条件。通过使用SQL约束,可以确保数据满足预期的要求,防止无效或不一致的数据进入数据库。...唯一约束(Unique Constraint)唯一约束用于确保列中的值是唯一的,不允许重复。与主键不同,唯一约束允许空值存在,但只允许一个空值。...唯一约束可用于标识列的唯一性,例如确保用户名或邮箱地址在数据库中是唯一的。非空约束(Not Null Constraint)非空约束用于确保列中的值不为空。...它防止在插入或更新数据时将空值存储到该列中,确保了必需的数据完整性。检查约束(Check Constraint)检查约束用于定义列中的值必须满足的条件或表达式。
如果设置为 true 则这个设 置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作,默认为fasle,当设置了主键auto increment时要开启这个配置 autoMappingBehavior...如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) --> 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR OTHER。...${} 则是将传入的值直接显示在SQL语句中,无法防止SQL注入 ${}传值出现SQL注入 在UserMapper中新增一个方法selectById List selectById(Object...注入情况,将${}改为#{}再次执行测试 只查出了id为1的数据,有效的避免了SQL注入 表名、选取的列是动态的,ORDER BY和IN操作都可以使用${}来传值 UserMapper接口中新增方法
答: 不管使用哪种 INSERT 语法,都必须给出 VALUES 的正确数目。如果不提供字段名,则必须给 每个字段提供一个值,否则将产生一条错误消息。...如果要在 INSERT 操作中省略某些字段,这些字段需要 满足一定条件:该列定义为允许空值;或者表定义时给出默认值,如果不给出值,将使用默认值。...数据库视图有利于控制用户对表中某些列的访问。 数据库视图使用户查询变得简单。 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。...但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表, 并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选。...因此,要将不再使用的触发器及时删除。 问题 24: 什么是唯一索引?答:唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每 个值组合都是唯一的。
大多数情况下,如果表上有包括查询里所有SELECT、JOIN、WHERE子句用到的列的覆盖索引,那么覆盖索引能够代替全表扫描去返回查询的数据,即使它有不可SARG的WHERE子句。...但记住覆盖索引尤其自身的缺陷,如此经常产生宽索引会增加读磁盘I/O。某些情况下,可以把不可SARG的WHERE子句重写成可SARG的子句。...对于单列索引,如果列包含空值,索引中将不存在此记录;对于复合索引,如果每个列都为空,索引中同样不存在此记录。如果至少有一个列不为空,则记录存在于索引中。 ...如果唯一性索引建立在表的A列和B列上,并且表中存在一条记录的A,B值为(123,null),SQLSERVER将不接受下一条具有相同A,B值(123,null)的记录插入。 ...因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使SQLSERVER停用该索引。
主键、超键、候选键、外键 主键: 数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。...视图不能被索引,也不能有关联的触发器或默认值,如果视图本身内有order by 则对视图再次order by将被覆盖。...视图不能索引,不能有相关联的触发器和默认值,sql server不能在视图后使用order by排序。...有些DBMS要求对返回的所有列进行命名,如果列是计算字段,则需要 使用别名。 视图不能索引,也不能有关联的触发器或默认值。...如果更新某个顾客,删除他的电子邮件地址,将使该顾客不再属于视图。这是默认行为,而且是允许的,但有的DBMS可能会防止这种情况发生。 7.为什么要使用视图(View)?
一、数据库结构优化 1.1 数据库结构优化目的 1、减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余; 2、尽量避免数据维护中出现更新...码的计算可能存在Hash冲突,不适合重复值很高的列,如性别,身份证比较合适。...深入理解请移步:最左前缀原理与相关优化 3.3.4 覆盖索引策略 跟组合索引有点类似,如果索引包含所有满足查询需要的数据的索引则成为覆盖索引(Covering Index),也就是平时所说的不需要回表操作...: 1、存储引擎不支持覆盖索引; 2、查询中使用了太多的列(如SELECT * ); 3、使用了双%号的like查询(底层API所限制); mysql高效索引之覆盖索引 3.3.5 SQL索引优化总结口诀...参数的设置; 4、如果最左列使用了范围,则排序会失效; 5、where 高于having,能写在where限定的条件就不要去having去限定了 3.5 索引的维护和优化 3.5.1 删除重复索引 注:
例如,如果在1000个随机选择的值中检测到11个不同的值,其中一个是异常值,则选择性为1/11(9.09%):平均每个条目出现的几率为十一分之一。...如果已知非索引字段没有其他值,则可以手动指定100%的选择性,删除任何异常值选择性,并设置CALCSELECTIVITY=0以防止优选表尝试计算选择性或将此值指定为异常值。...CALCSELECTIVITY参数与不计算选择性 在某些情况下,可能不希望优化表工具计算属性的选择性。要防止计算选择性,请将属性的CALCSELECTIVITY参数的值指定为0(默认值为1)。...由于其所有值(根据定义)都是唯一的,因此其选择性始终为1。如果类定义包括SqlRowIdPrivate,则Notes列值为RowID字段、Hidden字段。...空列:如果列不包含数据(所有行都没有字段值),则平均字段大小值为1,而不是0。对于不包含数据的列,AVG($length(Field))为0。
减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余; 2. 尽量避免数据维护中出现更新,插入和删除异常: ?...Hash索引的限制: Hash索引必须进行二次查找 Hash索引无法用于排序 Hash索引不支持部分索引查找也不支持范围查找 Hash索引中Hash码的计算可能存在Hash冲突,不适合重复值很高的列,...3.3.4 覆盖索引策略 跟组合索引有点类似,如果索引包含所有满足查询需要的数据的索引则成为覆盖索引(Covering Index),也就是平时所说的不需要回表操作。...; 带头大哥不能死,中间兄弟不能断; 索引列上不计算,范围之后全失效; LIKE百分写最右,覆盖索引不写 *; 不等空值还有or,索引失效要少用; 字符单引不可丢,SQL高级也不难 ; 3.4...如果最左列使用了范围,则排序会失效; where 高于having,能写在where限定的条件就不要去having去限定了 3.5 索引的维护和优化 3.5.1 删除重复索引 ?
default-spec 如果未被用户提供的数据值覆盖,则自动为此字段提供的默认数据值。...如果尝试通过ALTER TABLE TABLE NAME ADD COLUMN语句将字段添加到表中: 如果该名称的列已经存在,则该语句将失败,并显示SQLCODE-306错误。...如果语句对列指定了NOT NULL约束,并且该列没有默认值,则如果表中已存在数据,则该语句将失败。这是因为,在完成DDL语句之后,不满足所有预先存在的行的NOT NULL约束。...如果表包含数据,如果列包含空值,则不能指定NOT NULL; 这将导致SQLCODE -305错误。 如果更改包含数据的列的排序规则类型,则必须重新构建该列的所有索引。...如果表包含数据,如果列包含空值,则不能为该列指定NOT NULL;这会导致SQLCODE-305错误。
参照完整性规则 若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为: 或者取空值(F的每个属性值均为空值...选择表中的若干元组 ORDER BY子句 可以按一个或多个属性列排序 升序:ASC;降序:DESC;缺省值为升序 当排序列含空值时 ASC:排序列为空值的元组最后显示 DESC:排序列为空值的元组最先显示...,也就是防止数据库中存在不正确的数据 防范对象:不合语义的、不正确的数据 数据的安全性 保护数据库防止恶意的破坏和非法的存取 防范对象:非法用户和非法操作 实体完整性 关系模型的实体完整性...包括: 检查主码值是否唯一,如果不唯一则拒绝插入或修改 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改 检查记录中主码值是否唯一的一种方法是进行全表扫描 参照完整性 关系模型的参照完整性定义...最小依赖集 定义6.15 如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。亦称为最小依赖集或最小覆盖。 (1) F中任一函数依赖的右部仅含有一个属性。
答:防止恶意SQL注入,还有就是有利于代码移植,不同数据库间的字符串拼接交由Mybatis处理。 2.在动态SQL元素中,类似分支语句的元素有哪些?...当要构造动态sql语句时为了防止sql语句结构不当,所以加上where 1=1 ,这样SQL语句不会报错,后面的逻辑也很简单,判断#{usex}不为空且不为""的时候在后面添加SQL。...和suffix;可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,对应的属性是prefixOverrides和suffixOverrides;正因为元素有这样的功能,所以也可以非常简单地利用...8.3.3 元素 在动态update语句中,可以使用元素动态更新列。 映射语句: 元素 在模糊查询时,如果使用“${}”拼接字符串,则无法防止SQL注入问题。
MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化) 一、什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。...七、索引的分类: 普通索引:最基本的索引,它没有任何限制 唯一索引:索引列的值必须唯一,且不能为空,如果是组合索引,则列值的组合必须唯一。...同理,如果建立了(a,b,c)索引就不必再建立a,(a,b)索引 7、存在非等号和等号混合判断条件时,在建索引时,要把等号条件的列前置 8、范围列可以用到索引,但是范围列后面的列无法用到索引。...在字段上计算不能命中索引, 10、强制类型转换会全表扫描, 如果phone字段是varcher类型,则下面的SQL不能命中索引。...被查询的列,数据能从索引中取得,而不是通过定位符row-locator再到row上获取,即“被查询列要被所建的索引覆盖”,这能够加速度查询。
索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。 二、索引的作用?...七、索引的分类: 普通索引:最基本的索引,它没有任何限制 唯一索引:索引列的值必须唯一,且不能为空,如果是组合索引,则列值的组合必须唯一。...同理,如果建立了(a,b,c)索引就不必再建立a,(a,b)索引 7、存在非等号和等号混合判断条件时,在建索引时,要把等号条件的列前置 8、范围列可以用到索引,但是范围列后面的列无法用到索引。...10、强制类型转换会全表扫描,如果phone字段是varcher类型,则下面的SQL不能命中索引。...被查询的列,数据能从索引中取得,而不是通过定位符row-locator再到row上获取,即“被查询列要被所建的索引覆盖”,这能够加速度查询。
外键约束:用来和其他表建立联系的字段,是另一表的主键,可以重复可以为空,可以有多个外键。非空约束:不能为空。默认值约束:不指定值时使用默认值填充。...空指针异常,sum(可空字段)统计不存在的数据时,结果为NULL而非0。增加查询难度,当需要进行条件比较时需考虑NULL值,增加is not null判断条件。...唯一索引:索引列值必须唯一,但允许有空值。普通索引:索引列允许重复。联合索引:对多列进行索引,使用最左匹配原则。全文索引:一般不用,不是 mysql 专长。...默认使用主键,然后使用非空唯一索引,都没有则生成隐藏自增列作为聚集索引。非聚集索引(辅助索引):叶子节点仅包含主键,查询非主键字段需要回表二次查询。NULL值作为最小数看待,全部放在树的最左边。...分析执行计划,在 sql 前加 explain,输出信息中:type 列,从快到慢分别为:system:系统表,不需要磁盘 IOconst:常量,固定值eq_ref:主键或唯一索引,返回结果最多只有一行
将会被 application.properties 中定义的对应的 jdbc.username 和jdbc.password 值覆盖。...所以当 MyBatis 发现属性的类型属于上述类型,他会使用对应的类型处理器将值设置到PreparedStatement 中,同样地,当从 SQL 结果集构建 JavaBean 时,也有类似的过程。...在这种情况下,结果集中的列名将会作为Map中的key值,而列值作值将会作为Map的value值。如果查询记录返回多条,Mybatis自动用集合类来接收。...且使用第一个值为TRUE的子句,如果没有条件为True,则使用内的字句 3.3 where 条件 <select id="searchCourses" parameterType...并且会剔除末尾的"," 4、缓存 4.1、第一级缓存:如果你使用同一个SqlSession 接口对象调用了相同的SELECT语句,则直接会从缓存中返回结果,而不是再查询一次数据库。
领取专属 10元无门槛券
手把手带您无忧上云