EmployeeName数据库类型是nvarchar。
在mybatis中应该是不需要加的(这个是在navicat中操作的),如果匹配不到可以指定jdbcType=NVARCHAR 试试:
|
不加N不可以:
加N可以:
MySQL事务
如果使用的MySQL,可以使用"select @@tx_isolation"来查看默认的事务隔离级别;为REPEATABLE_READ重复读取,即在数据读出来之后加锁,类似"select * from XXX for update",明确数据读取出来就是为了更新用的,所以要加一把锁,防止别人修改它。REPEATABLE_READ的意思也类似,读取了一条数据,这个事务不结束,别的事务就不可以改这条记录,这样就解决了脏读、不可重复读的问题,但是幻读的问题还是无法解决。
truncate table 和 delete from table 区别
truncate TABLE punchdatetable;
delete from punchdatetable;
-- Delete 语句每次删除一行,并在事务日志中为所删除的每[行]记录一项。
-- TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录[页]的释放。
-- TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。
-- 如果想保留标识计数值,请改用 Delete。
YML配置
spring:
application:
name: CousumeKafkaInsertTable
#数据库
datasource:
url: jdbc:mysql://172.25.221.206:3306/kaytuneprod?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password : ii4i1234
driverClassName: com.mysql.jdbc.Driver
hikari:
connection-timeout: 30000 #数据库连接超时时间,默认30秒即30000
maximum-pool-size: 15 #最大连接数,默认是10,设为15,根据工程线程数和数据库服务器的maxconnections属性定夺
max-lifetime: 1800000 #控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
minimum-idle: 10 #此属性控制池中维护的最小空闲连接数
validation-timeout: 5000 #此属性控制测试连接是否活跃的最长时间,此值必须小于connection-timeout
idle-timeout: 600000 #此属性控制允许连接在池中处于空闲状态的最长时间,默认600000即10分钟
auto-commit: true #此属性控制从池返回的连接的默认自动提交行为,默认值true
connection-test-query: SELECT 1
pool-name: HikariPool-1 #默认HikariPool-1
devtools:
restart:
enabled: false
mysql 5之前的配置:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test? useUnicode=true&characterEncoding=utf8&useSSL=false
username=****
password=****
------------------------------------
mysql 6之后的配置:
设置时区serverTimezone为UTC比北京时间早8个小时。driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
username=****
password=****
-------------------------------------
设置时区为Asia/Shanghai为北京时间
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false
username=****
password=****
mysql服务器的max_connections属性
show variables like '%max_connections%'; //查看数据库最大连接数属性
设置这个最大连接数值(如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值)
方法1:这种 方式在Mysql重启后就失效。
set GLOBAL max_connections=1024; //增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;该参数设置过小的最明显特征是出现”Too many connections”错误;
方法2:
修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值(重启mysql服务即可): max_connections=512
对于mysql服务器最大连接数值的设置范围比较理想的是:服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明mysql服务器最大连接上限值设置过高。通配符查看当前状态的连接数量,以定夺该值的大小。max_connections实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;
可以看到服务器响应的最大连接数为3。
Mysql的分页排序问题
在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N。但是这种写法却隐藏着较深的使用陷阱。【在排序字段有数据重复的情况下】,会很容易出现排序结果与预期不一致的问题。
解决方法:使用唯一的排序字段。
bit字段类型:1表示true,0表示false。
数据库字段isExclue类型是bit时,实体类isExclue属性可以设置为String/Boolean等,只需要在 mybatis中处理下,如:【不能再java代码里赋值0或1或其它,只能在mybatis中赋值0或者1】
MYSQL的substring_index(string,substr,number)函数,number负数时从右截取,正数时从左截取
and (select substring_index(substring_index(tablename,'_',-2),'_',1)%2=1)
<!-- =1是奇数表,=0是偶数表,发KFC外的其他品牌时注掉 -->
tablename=cmt.`campaignsendlist_coupon_c8210_12_DKFCXA202112012`
一个极其简单问题被我搞的头大:
需求是:将表中的某一日期字段的年部分由2021改为2022
update store_grab_index_trade_daily set statistic_date=replace(statistic_date,'2021','2022') where storeid =34;
MySQL的cross join (取笛卡尔集) 不支持后面跟on
MySQL不支持full join
字符串转为整型排序
-- CAST(REPLACE(vistors,',','') as SIGNED)
-- CAST(REPLACE(vistors,',','') as SIGNED INTEGER)
-- CAST(REPLACE(vistors,',','') as UNSIGNED INTEGER)
-- CONVERT(REPLACE(vistors,',',''),SIGNED)