mysql - 您的 SQL 语法有误;查看与您的 MySQL 对应的手册

标签 mysql mysql-error-1064

<分区>

我正在尝试运行一个 mysql 查询来查找所有出现的文本。我有一个语法错误,但不知道在哪里或如何修复它

我正在使用 sqlyog 来执行这个脚本

DECLARE @url VARCHAR(255)

SET @url = '1720'

SELECT 'select * from ' + RTRIM(tbl.name) + ' where ' + 
          RTRIM(col.name) + ' like %' + RTRIM(@url) + '%'
FROM sysobjects tbl
INNER JOIN syscolumns col ON tbl.id = col.id 
AND col.xtype IN (167, 175, 231, 239) -- (n)char and (n)varchar, there may be others to include
AND col.length > 30 -- arbitrary min length into which you might store a URL
WHERE tbl.type = 'U'    -- user defined table

执行了 1 个查询,0 个成功,1 个错误,0 个警告

查询: declare @url varchar(255) set @url = '1720' select 'select * from ' + rtrim(tbl.name) + ' where ' + rtrim(col.name) + ' like %' .. .

错误代码:1064 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 'declare @url varchar(255)

附近使用的正确语法

最佳答案

对于 MySQL 改变这个:

DECLARE @url VARCHAR(255)
SET @url = '1720'

到:

SET @url := '1720'

在 MySQL 中,您无需声明用户变量,只需将它们设置为一个值即可。等号适用于赋值,但在 SQL 语句中除外,您需要使用 Pascal 风格的 := 作为赋值运算符。 (我通常在 SET 语句的上下文中使用 := 赋值运算符,即使在等号中同样可以正常工作。)

但是,在查看您的 SQL 语句时,这似乎是 Microsoft SQL Server 语法,使用 + 运算符进行连接,对 sysobjects、syscolumns.xtype 的引用。

这条语句不可能从 MySQL 返回任何有用的信息。

需要重写整个语句来查询:

information_schema.tables
information_schema.columns

作为示例起点:

SET @url := 'foobar';

SELECT CONCAT('select * from `',col.table_schema
             ,'`.`',col.table_name
             ,'` where `',col.column_name
             ,'` like ''%',RTRIM(@url),'%''') AS q
  FROM information_schema.columns col 
  JOIN information_schema.tables tbl
    ON tbl.table_schema = col.table_schema
   AND tbl.table_name = col.table_name
   AND tbl.table_type = 'BASE TABLE'
 WHERE col.data_type IN ('varchar','char')
   AND col.character_maximum_length >= 30
   AND col.table_schema = 'mydatabase';

更新:

在每个查询的结果集中包含一个“查询 ID”,这样您就可以识别哪些查询正在返回一行...

SELECT CONCAT('select ',@rn := @rn + 1, ' as q, t.* from `',col.table_schema
             ,'`.`',col.table_name
             ,'` t where `',col.column_name
             ,'` like ''%',RTRIM(@url),'%''') AS q
  FROM (SELECT @rn := 0) r
  JOIN information_schema.columns col 
  JOIN information_schema.tables tbl
    ON tbl.table_schema = col.table_schema
   AND tbl.table_name = col.table_name
   AND tbl.table_type = 'BASE TABLE'
 WHERE col.data_type IN ('varchar','char')
   AND col.character_maximum_length >= 30
   AND col.table_schema = 'mydatabase';

关于mysql - 您的 SQL 语法有误;查看与您的 MySQL 对应的手册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12222677/

相关文章:

php - 如何使用 PHP 更新 MySQL 中的不同值

mysql - DB Complex 增量计数器

MySQL 服务器无法通过 MySQL Workbench 启动。给出错误!服务器退出而不更新PID文件

sql - 'like' 和困惑的 MySQL 查询问题

php - 关于引号的 SQL 查询错误

php - 字段列表中的Mysql错误

当我尝试编写插入语句时 PHP 语法错误

mysql - 触发器中的多个命令(更新具有不同条件的多个列)

MYSQL 子句错误

php - Mysql有唯一记录键吗?