ALTER запрос не работает

У меня есть две таблицы: cleanup и uniqueEntries. Они оба имеют автоинкремент 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, я хочу убедиться, что не вставляю дубликатов. Поэтому мне нужно реализовать оператор ALTER на User_ID. Я сделал это так:

$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
    } 
}

person xited    schedule 24.09.2015    source источник
comment
не регистрируйте фиксированное (и бесполезное) сообщение об ошибке. попросите БД СКАЗАТЬ вам, что пошло не так: eLog($fail . $conn->error) или какой-либо другой источник сообщения об ошибке вашей библиотеки интерфейса БД.   -  person Marc B    schedule 24.09.2015


Ответы (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.

person xited    schedule 25.09.2015