"DROP INDEX" 语句的 RMySQL 语法错误
RMySQL Syntax Error on "DROP INDEX" statement
我似乎无法弄清楚这里出了什么问题。
我正在尝试 运行 在 R 中进行 sql 查询,但出现以下错误:
Error in .local(conn, statement, ...) : could not run statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP INDEX `PRIMARY` ON temporary_table' at line 2
以下是我的代码:
library(RMySQL)
con <- dbConnect(MySQL(),
user="XXX", password="XXX",
dbname="test", host="localhost")
query <- "CREATE TEMPORARY TABLE temporary_table LIKE test.helloworld;
DROP INDEX `PRIMARY` ON temporary_table;"
rs <- dbSendQuery(con, query) #Where the error occurs
我在 mySQL 中有 运行 完全相同的查询,它完全有效。
谁能指出我做错了什么?
非常感谢!
问题似乎是由于您试图删除主键,即使主键列有 auto_increment 属性,所以只需修改列以删除 auto_increment 属性 然后您可以删除主键,因为 auto_increment 需要一个唯一键。
您可以使用以下语法-
CREATE TEMPORARY TABLE temporary_table LIKE test.helloworld;
alter table temporary_table modify column primary_key_column_with_all_properties_except_auto_increment,
DROP KEY `PRIMARY`;
分两部分执行查询。第一部分创建 table,第二部分删除索引。对于前 -
query <- "CREATE TEMPORARY TABLE temporary_table LIKE test.helloworld;"
rs <- dbSendQuery(con, query) #Where the error occurs
query <- "DROP INDEX `PRIMARY` ON temporary_table;"
rs <- dbSendQuery(con, query) #Where the error occurs
我已经在 php 中进行了测试。这在 php 中有同样的问题。它 运行 很好。
<?php
$mysqli = new mysqli("localhost", "root", "root", "test");
$result = $mysqli->query("CREATE TEMPORARY TABLE `temporary_table` LIKE t;");
printf("Errormessage: %s\n", $mysqli->error);
$result = $mysqli->query(" DROP INDEX `PRIMARY` ON temporary_table;");
#$result = $mysqli->query("DROP table temporary_table;");
printf("Errormessage: %s\n", $mysqli->error);
?>
root@smart:/var/www# php test.php
Errormessage:
Errormessage:
当我 运行 两个查询合而为一时,如您所说,出现错误。
<?php
// mysqli
$mysqli = new mysqli("localhost", "root", "root", "test");
$result = $mysqli->query("CREATE TEMPORARY TABLE `temporary_table` LIKE t;DROP INDEX `PRIMARY` ON temporary_table;");
printf("Errormessage: %s\n", $mysqli->error);
?>
root@smart:/var/www# php test.php
Errormessage: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP INDEX `PRIMARY` ON temporary_table' at line 1
我似乎无法弄清楚这里出了什么问题。
我正在尝试 运行 在 R 中进行 sql 查询,但出现以下错误:
Error in .local(conn, statement, ...) : could not run statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP INDEX `PRIMARY` ON temporary_table' at line 2
以下是我的代码:
library(RMySQL)
con <- dbConnect(MySQL(),
user="XXX", password="XXX",
dbname="test", host="localhost")
query <- "CREATE TEMPORARY TABLE temporary_table LIKE test.helloworld;
DROP INDEX `PRIMARY` ON temporary_table;"
rs <- dbSendQuery(con, query) #Where the error occurs
我在 mySQL 中有 运行 完全相同的查询,它完全有效。
谁能指出我做错了什么?
非常感谢!
问题似乎是由于您试图删除主键,即使主键列有 auto_increment 属性,所以只需修改列以删除 auto_increment 属性 然后您可以删除主键,因为 auto_increment 需要一个唯一键。
您可以使用以下语法-
CREATE TEMPORARY TABLE temporary_table LIKE test.helloworld;
alter table temporary_table modify column primary_key_column_with_all_properties_except_auto_increment,
DROP KEY `PRIMARY`;
分两部分执行查询。第一部分创建 table,第二部分删除索引。对于前 -
query <- "CREATE TEMPORARY TABLE temporary_table LIKE test.helloworld;"
rs <- dbSendQuery(con, query) #Where the error occurs
query <- "DROP INDEX `PRIMARY` ON temporary_table;"
rs <- dbSendQuery(con, query) #Where the error occurs
我已经在 php 中进行了测试。这在 php 中有同样的问题。它 运行 很好。
<?php
$mysqli = new mysqli("localhost", "root", "root", "test");
$result = $mysqli->query("CREATE TEMPORARY TABLE `temporary_table` LIKE t;");
printf("Errormessage: %s\n", $mysqli->error);
$result = $mysqli->query(" DROP INDEX `PRIMARY` ON temporary_table;");
#$result = $mysqli->query("DROP table temporary_table;");
printf("Errormessage: %s\n", $mysqli->error);
?>
root@smart:/var/www# php test.php
Errormessage:
Errormessage:
当我 运行 两个查询合而为一时,如您所说,出现错误。
<?php
// mysqli
$mysqli = new mysqli("localhost", "root", "root", "test");
$result = $mysqli->query("CREATE TEMPORARY TABLE `temporary_table` LIKE t;DROP INDEX `PRIMARY` ON temporary_table;");
printf("Errormessage: %s\n", $mysqli->error);
?>
root@smart:/var/www# php test.php
Errormessage: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP INDEX `PRIMARY` ON temporary_table' at line 1