Mysql中Delete语句问题记录

442 阅读2分钟

这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战

博主最近在使用delete的过程中出现了一点问题,故记录下来,给大家参考

1 问题描述

在书写sql的过程中,习惯给表加上别名, 故在书写Delete语句时,也添加了表别名,结果出现了错误. 但是同样的语句,在本地环境测试却没有问题.查询了一下原因,发现是跟语法和版本有关.

本地环境Mysql版本8

开发环境Mysql版本5

2 问题分析

1 准备表

-- 以LOL英雄表为例
CREATE TABLE `hero` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `hp` float DEFAULT NULL,
  `damage` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- 添加数据
INSERT INTO `test`.`hero`(`id`, `name`, `hp`, `damage`) VALUES (1, 'dema', 2000, 100);
INSERT INTO `test`.`hero`(`id`, `name`, `hp`, `damage`) VALUES (2, 'nakesi', 1500, 200);
INSERT INTO `test`.`hero`(`id`, `name`, `hp`, `damage`) VALUES (3, '提莫', 313, 50);

2 执行Delete语句

DELETE  FROM hero t1 where t1.id = '3'

执行报错:

image-20210805214425901

3 原因分析

根据提示信息可知, 该sql语句语法错误,或者版本不支持.查询相关的资料后得知,Mysql的8版本才支持该写法.Mysql的5版本不支持该写法. Mysql的5版本,必须要在Delete后带上表别名才行.如下:

DELETE t1 FROM hero t1 where t1.id = '3'

image-20210805214950148

3 总结

关于Mysql的Delete语句,:

  • 8版本是支持给表起别名且Delete字段后不用带表别名的.
  • 5版本给表起别名, 必须在Delete字段后带上表名,否则报错.

随着Mysql版本的升级优化, 不仅对底层优化了很多,对于常见的语法也更新了很多,慢慢学习.