mysql字段名和關(guān)鍵字沖突的問題
mysql字段名和關(guān)鍵字沖突
1.用"(`)"將有沖突的字段框起來,鍵盤上1邊上那個(gè)鍵。
例:
SELECT * FROM yun_roleright WHERE right LIKE '%{13}%';上面sql語句中right字段名與關(guān)鍵字沖突,會(huì)報(bào)錯(cuò),,,應(yīng)改成下面:
SELECT * FROM yun_roleright WHERE `right` LIKE '%{13}%';mysql關(guān)鍵字沖突導(dǎo)致的sql執(zhí)行錯(cuò)誤
最近出現(xiàn)了一個(gè)很有意思的情況
我一共有三個(gè)數(shù)據(jù)庫,開發(fā),測(cè)試,正式,
分別放置在不同的服務(wù)器上
都是mysql數(shù)據(jù)庫
這個(gè)時(shí)候出現(xiàn)了一個(gè)有意思的問題
我的sql如下
SELECT count(0) FROM sys_log WHERE system = 'system'
在開發(fā)和測(cè)試數(shù)據(jù)庫上執(zhí)行此sql,沒有問題
但是在正式環(huán)境的數(shù)據(jù)庫上執(zhí)行此sql,就會(huì)報(bào)如下錯(cuò)誤

納悶了半天,確定就是關(guān)鍵字的問題
但是比對(duì)了三個(gè)數(shù)據(jù)庫,確實(shí)又沒找到不同點(diǎn),問大佬,大佬太忙,也沒細(xì)究
解決辦法
方案1:修改字段名(推薦)
注意:但是千萬不要用sql語句去改,因?yàn)檎Z句中含有關(guān)鍵字,所以sql是不會(huì)執(zhí)行成功的,所以只能去數(shù)據(jù)庫管理工具中修改
ALTER table sys_log change system system1 varchar(255) CHARSET utf8 COLLATE utf8_general_ci NULL COMMENT '系統(tǒng)'
【修改字段的名稱】
語法: alter table <表名> change <字段名> <字段新名稱> <字段的類型>。
方案2:修改執(zhí)行sql
SELECT count(0) FROM sys_log s WHERE s.system = 'system'
或者
SELECT count(0) FROM sys_log WHERE `system` = 'system'
其他相關(guān)
注意:當(dāng)出現(xiàn)關(guān)鍵字的時(shí)候,然后業(yè)務(wù)層使用的sql借助了mybatis-plus框架寫的,如
public PageInfo<SysAuditLogDTO> selectAuditLog(ConditionDTO conditionDTO, Integer pageNum, Integer pageSize) {
LambdaQueryWrapper<SysLogEntity> wrapper = Wrappers.<SysLogEntity>lambdaQuery()
.orderByDesc(SysLogEntity::getCreateTime);
if (StrUtil.isNotEmpty(conditionDTO.getSystem())) {
wrapper.eq(SysLogEntity::getSystem, conditionDTO.getSystem());
}
if (conditionDTO.getStart() != null) {
wrapper.ge(SysLogEntity::getCreateTime, conditionDTO.getStart());
}
if (conditionDTO.getFinish() != null) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(conditionDTO.getFinish());
calendar.add(Calendar.DATE, 1);
wrapper.le(SysLogEntity::getCreateTime, calendar.getTime());
}
Page<SysLogEntity> page = PageHelper.startPage(pageNum, pageSize).doSelectPage(() -> list(wrapper));
return auditLogMapper.toDto(page.toPageInfo());
}
//注:PageHelper是內(nèi)部的一個(gè)工具類,對(duì)數(shù)據(jù)進(jìn)行分頁處理有兩種辦法:
方案一:在xml文件中寫sql
業(yè)務(wù)層調(diào)用:(中間省略了dao)
public PageInfo<SysLogEntity > selectLog(ConditionDTO conditionDTO, Integer pageNum, Integer pageSize) {
Page<SysLogEntity> page = PageHelper.startPage(pageNum, pageSize).doSelectPage(() -> sysLogDao.sysAuditLogListByQueryConditions(conditionDTO));
return auditLogMapper.toDto(page.toPageInfo());
}mapper.xml文件
<insert id="addOne">
insert into sys_log (id, `system`)
values (#{SysLogEntity.id},#{SysLogEntity.system});
</insert>方案二:實(shí)體類@TableField中添加 ``(推薦)
這樣就支持mybatis-plus框架寫法
@Data
@TableName("sys_log")
public class SysLogEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId
private Long id;
/**
* 系統(tǒng)
*/
@TableField("`SYSTEM`")
private String system;
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL使用慢查詢?nèi)罩維low Log定位低效SQL的全過程
在 MySQL 數(shù)據(jù)庫運(yùn)維中,SQL 語句的執(zhí)行效率直接影響系統(tǒng)響應(yīng)速度,當(dāng)網(wǎng)站出現(xiàn)卡頓、接口超時(shí)等問題時(shí),慢查詢?nèi)罩荆⊿low Log) 往往是定位低效SQL的第一手證據(jù),本文給大家介紹了MySQL使用慢查詢?nèi)罩維low Log定位低效SQL的全過程,需要的朋友可以參考下2026-02-02
MySQL實(shí)現(xiàn)統(tǒng)計(jì)過去12個(gè)月每個(gè)月的數(shù)據(jù)信息
這篇文章主要介紹了MySQL實(shí)現(xiàn)統(tǒng)計(jì)過去12個(gè)月每個(gè)月的數(shù)據(jù)信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Windows(x86,64bit)升級(jí)MySQL 5.7.17免安裝版的詳細(xì)教程
這篇文章主要介紹了Windows(x86,64bit)升級(jí)MySQL 5.7.17免安裝版的詳細(xì)教程,需要的朋友可以參考下2017-02-02
Node.js下向MySQL數(shù)據(jù)庫插入批量數(shù)據(jù)的方法
這篇文章主要介紹了Node.js下向MySQL數(shù)據(jù)庫插入批量數(shù)據(jù)的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-10-10

