Протестируйте перед изменением типа столбца MySQL - PullRequest
2 голосов
/ 23 января 2012

У меня есть таблица со столбцом типа INT (7), и я хочу сделать это ограничением внешнего ключа для первичного ключа другой таблицы.Однако первичный ключ имеет тип INT (11) UNSIGNED, поэтому мне нужно изменить INT (7), чтобы он соответствовал ему, чтобы создать внешний ключ.

Хотя я не ожидаю, чтобыпроблемы с преобразованием INT (7) в INT (11) UNSIGNED (я проверил столбец, который должен быть изменен, и у него нет беззнаковых значений), есть ли способ спросить MySQL, на какие строки он будет изменять значение?В любом случае я возьму резервную копию, но мне хотелось бы заранее выяснить, не возникнут ли какие-либо проблемы, поскольку я потенциально могу их исправить, прежде чем выполнять инструкцию ALTER TABLE.

Ответы [ 2 ]

2 голосов
/ 23 января 2012

пробег

CREATE TABLE tmp SELECT yourcolumnname AS x, yourcolumnname AS y  FROM yourtable;
ALTER TABLE tmp MODIFY COLUMN x INT(11) UNSIGNED;
SELECT * FROM tmp WHERE x!=y;
DROP TABLE tmp;
0 голосов
/ 23 января 2012

Да, ALTER TABLE не фиксируется, если используется ключевое слово TEMPORARY.

ALTER TEMPORARY TABLE .... [your code]

Источник

РЕДАКТИРОВАТЬ: Я только что заметил это:

"Однако, хотя неявная фиксация не происходит, оператор также не может быть откатан. Поэтому использование таких операторов нарушит атомарность транзакции: например, если вы используете CREATE TEMPORARY TABLE, а затем откатывает транзакциютаблица остается в существовании. "

Так что я не уверен насчет ALTER.

...