mysql - ALTER 查询不起作用

标签 mysql database primary-key unique-constraint alter

我有两个表:cleanupuniqueEntries。它们都有一个自动递增的id作为主键。 uniqueEntries 的表结构来自 cleanup,如下所示:

$sql = "CREATE TABLE uniqueEntries LIKE cleanup"; //create table to store all unique entries
doQuery($sql, "success creating uniqueEntries", "failed creating uniqueEntries"); //perform query

cleanup包含重复的用户名。当我将数据移入 uniqueEntries 时,我想确保我没有插入任何重复项。因此,我需要在 User_ID 上实现 ALTER 语句。我是这样做的:

$sql = "ALTER IGNORE TABLE uniqueEntries ADD UNIQUE (User_ID)"; //make User_ID unique
doQuery($sql, "success adding constraint to uniqueEntries", "failed adding constraint to uniqueEntries"); //perform query

但是,与我的所有其他查询不同,ALTER 查询不会得到处理。我无法向 uniqueEntries 添加约束。我做错了什么?

下面是我的 doQuery 函数:

function doQuery($sql, $success, $fail){
    global $conn;
        if ($conn->query($sql) === TRUE) {
        eLog( $success ); //log outcome
    } else {
        eLog( $fail ); //log outcome
    } 
}

最佳答案

我按照@Marc B的建议从$conn()->error输出消息,并了解到TEXT列类型不允许ALTER操作。

BLOB/TEXT column 'User_ID' used in key specification without a key length

因此,我回到表查询并将 User_ID 列从 TEXT 切换到 VARCHAR(15),然后我能够毫无问题地运行 ALTER 查询。

关于mysql - ALTER 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32770144/

相关文章:

Doctrine/Zend Framework 2 中的 MySQL 索引

没有用逗号分隔的 Java JPA Left Join

database - Android项目中如何组织数据库访问代码?

mysql - mysql 查询数据成倍增加

sql - MySQL中删除后自动增量

mysql - 计算 Oracle 表中特定值之间模式的出现次数

mysql - 如何将文本文件信息存储到我的sql数据库中

sql-server - 多对多关联表 - 是否习惯在这些表中放置额外的列?

c# - 给定一个人的年龄,如何从 SQL 语句返回生日

sql-server - 什么时候会使用 GUID 作为主键?