【问题标题】:ALTER Query Not WorkingALTER 查询不工作
【发布时间】:2015-09-24 20:16:33
【问题描述】:

我有两张桌子: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 查询不会得到处理。我得到failed adding constraint to uniqueEntries。我做错了什么?

下面是我的 doQuery 函数:

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

【问题讨论】:

  • 不要记录固定的(无用的)错误消息。让数据库告诉你出了什么问题:eLog($fail . $conn->error) 或任何你的数据库接口库的错误消息源。

标签: mysql database primary-key unique-constraint alter


【解决方案1】:

我按照@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 查询。

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 2015-12-02
    • 2018-12-16
    • 2013-04-11
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多