Mysql在where条件中使用nvarchar类型的字段时,须加N;MySQL事务;等等..

EmployeeName数据库类型是nvarchar。

在mybatis中应该是不需要加的(这个是在navicat中操作的),如果匹配不到可以指定jdbcType=NVARCHAR 试试:

select * from dbo.employee_excel where EmployeeType=#{employeeType} and EmployeeName=#{employeeName,jdbcType=NVARCHAR}
ORDER BY LoadDate desc

不加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)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值