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存储毫秒数据的方法

    MySQL存储毫秒数据的方法

    MySQL中没有可以直接存储毫秒数据的数据类型,但是不过MySQL却能识别时间中的毫秒部分。这篇文章主要介绍了MySQL存储毫秒数据的方法,需要的朋友可以参考下
    2014-06-06
  • MySQL 全文检索的使用示例

    MySQL 全文检索的使用示例

    全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
    2021-06-06
  • 超详细汇总21个值得收藏的mysql优化实践

    超详细汇总21个值得收藏的mysql优化实践

    这篇文章主要分享的是超详细汇总21个值得收藏的mysql优化实践,对正在学习的同学有一定的参考价值,需要的同学可以参考一下
    2022-01-01
  • linux Xtrabackup安装及使用方法

    linux Xtrabackup安装及使用方法

    Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品
    2013-04-04
  • 一文详解MYSQL最朴素的监控方式

    一文详解MYSQL最朴素的监控方式

    对于当前数据库的监控方式有很多,分为数据库自带、商用、开源三大类,每一种都有各自的特色,那我们今天就介绍一下完全采用mysql自有方式采集获取监控数据,在单体下达到最快速、方便、损耗最小,感兴趣的同学可以借鉴阅读
    2023-05-05
  • 在Windows环境下安装MySQL 的教程图解

    在Windows环境下安装MySQL 的教程图解

    这篇文章主要介绍了在Windows环境下安装MySQL 的教程图解,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • MySQL连接及基本信息查看命令汇总

    MySQL连接及基本信息查看命令汇总

    这篇文章主要针对MySQL连接及基本信息查看命令进行了详细汇总,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • mysql 8.0.19 安装配置方法图文教程

    mysql 8.0.19 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.19 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 提升MongoDB性能的方法

    提升MongoDB性能的方法

    在本篇文章中我们给大家总结了提升MongoDB性能的方法以及相关知识点内容,有需要的朋友们可以学习下。
    2018-09-09
  • MySQL详细讲解多表关联查询

    MySQL详细讲解多表关联查询

    在数据库的设计中, 我们通常都是会有很多张表 , 通过表与表之间的关系建立我们想要的数据关系, 所以在多张表的前提下, 多表的关联查询就尤为重要
    2022-04-04

最新评论