MySQL和DB2数据库的对比和区别
1.账号管理模式不同:
mysql:数据库用户名+IP地址
DB2:操作系统用户
2.权限管理
mysql:可以批量grant与revoke
DB2:只能单独授权包括最小单元
3.日志管理
mysql:归档日志与失误日志没有关系
DB2:归档日志由事务日志产生
4.锁的管理
mysql:MVCC实现锁的并发控制
DB2:内存魔性实现锁的并发控制
5.schema的管理
mysql:每个schema为一个独立的DB
DB2:一个DB内可以存在多个schema
6.数据备份
mysql:开源在线的备份工具少,传统的备份只支持温备份
DB2:备份方式严谨、功能强大
7.事务行为
mysql:回滚到上一个保存点,不会回滚整个事务
DB2:整个事务进行回滚
8.数据恢复
mysql:支持在回复时打开数据库、灵活
DB2:不支持在恢复或者前滚时打开数据库
9.表空间管理
mysql:无法条带化、可管理、维护性较弱
DB2:管理方便、功能强大
10.SQL支持
mysql:对复杂SQL支持较弱,在运行时可能会存在性能问题
DB2:支持各种复杂SQL,多种jion方式
11.Package支持
mysql:不支持
DB2:支持
12.语法差异
mysql:遵守SQL92标准,但细节上有差异、默认大小写敏感
DB2:遵守SQL92标准,大小写不敏感
13.容灾与高可用
mysql:可选择方案较多、灵活、可二次开发
DB2:只有HADR
14.可扩展性
mysql:可选择方案较多、灵活、可定制、可开发
DB2:只有PureScale
15.DDL功能
mysql:支持指定位置加列、在线DDL
DB2:不支持
MyBatis为什么能防止SQL注入
1.#和$的区别
两个都是占位符的形式,#{}会把传入的值转化成带 “” 的格式,格式的形势是
where username = #{username} ⇒ where username =“111”
而${}会直接替换掉原来的值,格式的形势是
where username =
u
s
e
r
n
a
m
e
⇒
w
h
e
r
e
u
s
e
r
n
a
m
e
=
111
如果在是用
{username} ⇒ where username = 111 如果在是用
username⇒whereusername=111如果在是用{}号的时候传入的参数中带有111;drop table user;会直接执行drop table的操作,删除的库
#的方式能很大的程度防止sql注入,$的方式无法防止sql注入
KaTeX parse error: Expected 'EOF', got '#' at position 22: …传入数据库对象,例如表名 能用#̲就别用,若不得不使用${}这样的参数,要手工的做好过滤的工作,来防止sql注入攻击
分页查询的效率保证
1、通过子查询查出查询目标数据集合的第一个数据所在的行,然后用>=的操作
然后通过给这个主键ID增加索引的方式增加查询的速度。
或者给需要查询的结果级加上一个自增主键。
2、mysql有个limit的参数叫offset可以用来限制记录的最大行数,db2有个fetch参数可以记录最大数目。
3、可以给where条件加上联合索引,加快查询的速度。
4、可以分成两部分,前半部分用正序,后半部分用倒序进行拼接
SpringBoot数据格式判断注解
@NotBlank(message = “”)被该注解修饰的类属性不能为空,message可以定义提示内容。
@NotNull(message = “”)被该注解修饰的类属性不能为null。
@Length(min = 6, max = 10, message = “”)被该注解修饰的类属性长度6<= 长度<= 10。
@Email 被该注解修饰的类属性为email格式,通过正则表达式校验。
以上是用来修饰属性的,只有在controller相应的方法接口中的参数类加上
@Validated 注解才能成功的开启数据校验功能。
如果校验不通过会抛出一个MethodArgumentNotValidException异常。
如果只是简单的基本类型进行校验的话,可以酱@Validated放在控制器的类注解上
之后可以给属性加上自定义的注解比如
@PathVariable(“id”) @Min(10) int id 这个是来校验是否是相对路径变量的长度的,最短是10
@RequestParam(“name”) @NotBlank String name
@RequestParam(“email”) @Email String email
与以上的用法类似
@AssertFalse
可以为null,如果不为null的话必须为false
@AssertTrue
可以为null,如果不为null的话必须为true
@DecimalMax
设置不能超过最大值
@DecimalMin
设置不能超过最小值
@Digits
设置必须是数字且数字整数的位数和小数的位数必须在指定范围内
@Future
日期必须在当前日期的未来
@Past
日期必须在当前日期的过去
@Max
最大不得超过此最大值
@Min
最大不得小于此最小值
@NotNull
不能为null,可以是空
@Null
必须为null
@Pattern
必须满足指定的正则表达式
@Size
集合、数组、map等的size()值必须在指定范围内
必须是email格式
@Length
长度必须在指定范围内
@NotBlank
字符串不能为null,字符串trim()后也不能等于“”
@NotEmpty
不能为null,集合、数组、map等size()不能为0;字符串trim()后可以等于“”
@Range
值必须在指定范围内
@URL
线程池
详解看这里:https://blog.csdn.net/fanrenxiang/article/details/79855992
MyBatis常用的标签
prefix表示前缀,suffix表示后缀,suffixOverrides表示通过,分隔符
test表示判断的方式
item表示对象,index表示序号,collection表示传入的集合,open表示最开始前缀
,separator表示分隔的符号,close表示最后结束的后缀
AND name LIKE CONCAT(CONCAT(‘%’, #{student}),‘%’)
AND hobby = #{hobby}
AND AGE = 15
是用来进行条件的判断的,而且是只能选择一项的意思