mysql字段名和关键字冲突的问题

 更新时间:2023年07月28日 14:31:12   作者:抱起我的猫去旅行  
这篇文章主要介绍了mysql字段名和关键字冲突的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mysql字段名和关键字冲突

1.用"(`)"将有冲突的字段框起来,键盘上1边上那个键。

例:

SELECT * FROM yun_roleright WHERE right LIKE '%{13}%';

上面sql语句中right字段名与关键字冲突,会报错,,,应改成下面:

SELECT * FROM yun_roleright WHERE `right` LIKE '%{13}%';

mysql关键字冲突导致的sql执行错误

最近出现了一个很有意思的情况

我一共有三个数据库,开发,测试,正式,

分别放置在不同的服务器上

都是mysql数据库

这个时候出现了一个有意思的问题

我的sql如下

SELECT count(0) FROM sys_log  WHERE system = 'system'

在开发和测试数据库上执行此sql,没有问题

但是在正式环境的数据库上执行此sql,就会报如下错误

在这里插入图片描述

纳闷了半天,确定就是关键字的问题

但是比对了三个数据库,确实又没找到不同点,问大佬,大佬太忙,也没细究

解决办法

方案1:修改字段名(推荐)

注意:但是千万不要用sql语句去改,因为语句中含有关键字,所以sql是不会执行成功的,所以只能去数据库管理工具中修改

ALTER table sys_log change system system1 varchar(255) CHARSET utf8 COLLATE utf8_general_ci NULL COMMENT '系统'

【修改字段的名称】

语法:
alter table <表名> change <字段名> <字段新名称> <字段的类型>。

方案2:修改执行sql

SELECT count(0) FROM sys_log s  WHERE s.system = 'system'

或者

SELECT count(0) FROM sys_log  WHERE `system` = 'system'

其他相关

注意:当出现关键字的时候,然后业务层使用的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是内部的一个工具类,对数据进行分页处理

有两种办法:

方案一:在xml文件中写sql

业务层调用:(中间省略了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>

方案二:实体类@TableField中添加 ``(推荐)

这样就支持mybatis-plus框架写法

@Data
@TableName("sys_log")
public class SysLogEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @TableId
    private Long id;
    /**
     * 系统
     */
    @TableField("`SYSTEM`")
    private String system;
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL使用慢查询日志Slow Log定位低效SQL的全过程

    MySQL使用慢查询日志Slow Log定位低效SQL的全过程

    在 MySQL 数据库运维中,SQL 语句的执行效率直接影响系统响应速度,当网站出现卡顿、接口超时等问题时,慢查询日志(Slow Log) 往往是定位低效SQL的第一手证据,本文给大家介绍了MySQL使用慢查询日志Slow Log定位低效SQL的全过程,需要的朋友可以参考下
    2026-02-02
  • mysql.help_topic的作用以及使用方法

    mysql.help_topic的作用以及使用方法

    这篇文章主要给大家介绍了关于mysql.help_topic的作用以及使用方法,mysql.help_topic表是MySQL数据库中的一个系统表,它存储了MySQL数据库中所有可用的帮助主题的信息,需要的朋友可以参考下
    2023-11-11
  • MySQL的批量更新和批量新增优化方式

    MySQL的批量更新和批量新增优化方式

    这篇文章主要介绍了MySQL的批量更新和批量新增优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • MySQL实现统计过去12个月每个月的数据信息

    MySQL实现统计过去12个月每个月的数据信息

    这篇文章主要介绍了MySQL实现统计过去12个月每个月的数据信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程

    Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程

    这篇文章主要介绍了Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程,需要的朋友可以参考下
    2017-02-02
  • MySQL尾部空格处理方法详解

    MySQL尾部空格处理方法详解

    这篇文章主要介绍了MySQL尾部空格处理方法详解的相关资料,通过创建合适的索引来实现区分有尾部空格和没有尾部空格的字符串,需要的朋友可以参考下
    2023-07-07
  • MySQL的中文UTF8乱码问题

    MySQL的中文UTF8乱码问题

    MySQL从4.x版本开始支持Unicode,3.x只有latin1编码。刚工作的时候就开始用MySQL了,用的php存取,网页xxx.php是gb2312的编码,存进去的数据用php取出来是中文,用phpMyAdmin执行select、update、dump都是中文,没有乱码问题。
    2010-05-05
  • Node.js下向MySQL数据库插入批量数据的方法

    Node.js下向MySQL数据库插入批量数据的方法

    这篇文章主要介绍了Node.js下向MySQL数据库插入批量数据的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-10-10
  • 如何修改MySQL字符集

    如何修改MySQL字符集

    这篇文章主要介绍了如何修改MySQL字符集,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • Linux 安装 MySQL 8.0 及 配置方法

    Linux 安装 MySQL 8.0 及 配置方法

    本文详细介绍了在Ubuntu操作系统上使用MySQL APT存储库安装和配置MySQL 8.0的步骤,本文通过图文示例相结合给大家讲解的非常详细,感兴趣的朋友一起看看吧
    2024-11-11

最新评论