Переименовать колонку INDEX - PullRequest
0 голосов
/ 27 мая 2010

У меня есть база данных с 40 таблицами, и мне нужно переименовать каждый столбец индекса.

IE USER таблица содержит несколько полей, таких как

user_id | user_username | user_password | etc...

Я хочу переименовать столбцы идентификаторов просто в id, то есть

id | user_username | user_password | etc...

Но я продолжаю получать ошибки mysql по команде alter table, т.е.

ALTER TABLE RENAME COLUMN базы данных user_id в id;

Плюс много разных вариаций.

Какой лучший способ сделать это?

Надеюсь, вы можете посоветовать

Ответы [ 3 ]

0 голосов
/ 28 мая 2010

Я бы не стал этого делать на твоем месте. Я бы выяснил, как изменить то, что вам нужно, во что бы вы ни делали, прежде чем делать это. Это никогда не предлагается и не рекомендуется, если вы не являетесь инженером структуры базы данных или инженером программного обеспечения, использующего ее. Это все равно что положить сахар, воду, кокс и песок в бензобак и сказать: «Ну и дела, что может пойти не так?»

Даже то, что парень сказал выше о снятии ограничений и размещении их всех обратно. Это все хорошо и хорошо для проектирования / структуры базы данных, но даже после этого приложения, использующие их, имеют свои собственные проблемы. Выполнение поиска вместо имен столбцов базы данных также не будет работать. Особенно со структурой команд, которую вы видите когда-то, вы будете только испортить код, делая это.

0 голосов
/ 01 июня 2010

Вы должны иметь возможность сделать это для каждой таблицы с помощью кода, подобного следующему (Примечание: я предполагаю, что описание столбца для каждого поля *_id равно INTEGER NOT NULL и что для этих же полей установлено значение AUTO_INCREMENT. Это довольно нормально для столбца идентификаторов.)

# remove auto_increment, allows us to remove primary key
ALTER TABLE user MODIFY user_id INTEGER NOT NULL;

# remove primary key, allows us to change column name
ALTER TABLE user DROP PRIMARY KEY;

# change column name, re-add auto_increment and primary key
ALTER TABLE user CHANGE user_id id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY;

Прислушайтесь к предупреждениям других парней, хотя. Если это не ваше творение (а вы только что решили изменить соглашение об именах на ранних этапах проекта или что-то в этом роде), изменение этого кода нарушит любой другой код, который ожидает взаимодействия с этой базой данных.

Надеюсь, это поможет,

Anthony

РЕДАКТИРОВАТЬ: приведенное выше предполагает, что у вас нет ограничений внешнего ключа, где другие таблицы явно ссылаются на столбец user.user_id. Если это не так, вам придется удалить все ограничения внешнего ключа перед изменением имени, а затем добавить их заново. Если вы не уверены, где в вашей базе данных есть связи с внешними ключами, вы можете перечислить их все с помощью следующего кода (скопированного из http://www.xinotes.org/notes/note/477/ для улучшения возможности ответа на вопрос копирования / вставки):

SELECT CONCAT(table_name, '.', column_name, ' -> ', referenced_table_name, '.', referenced_column_name)
FROM information_schema.key_column_usage
WHERE referenced_table_schema = schema()
AND referenced_table_name is not null
ORDER BY table_name, column_name;
0 голосов
/ 27 мая 2010

Вам нужно будет удалить все ограничения внешнего ключа, изменить первичные ключи, а затем снова добавить ограничения.

Кстати, смена первичных ключей - это очень серьезная вещь, и вы должны делать это только в том случае, если вам это действительно нужно. Это изменение нарушит все приложения, которые используют вашу базу данных.

...