Тип изменения MySQL внешнего ключа

В Python 2

from sys import stdout
array = ['a', 'b', 'c']
for i in array:
    stdout.write(i)

В Python 3 становится легко

for i in array:
    print(i, end='')

Для более низких версий

from __future__ import print_function
for i in array:
    print(i, end="")

Также используется join

print(''.join(array))
13
задан user27478 6 May 2009 в 15:04
поделиться

4 ответа

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

Как заметил Р. Бемроуз, использование SET foreign_key_checks = 0; помогает только при добавлении или изменяет данные, но не разрешает команды ALTER TABLE , которые нарушили бы ограничения внешнего ключа.

12
ответ дан 1 December 2019 в 20:30
поделиться

Чтобы узнать о использование ограничений внешнего ключа, выполните следующий запрос к базе данных INFORMATION_SCHEMA :

select distinct table_name, 
       column_name, 
       constraint_name,  
       referenced_table_name, 
       referenced_column_name 
from   key_column_usage 
where  constraint_schema = 'XXX' 
   and referenced_table_name is not null 
   and referenced_column_name is not null;

Замените XXX на имя вашей схемы. Это даст вам список таблиц и столбцов, которые ссылаются на другие столбцы как внешние ключи.

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

Что касается самих ключей: их необходимо будет отбрасывать и создавать заново, когда вы изменили данные таблицы. типы.

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

Что касается самих ключей: их необходимо будет отбрасывать и создавать заново, когда вы изменили данные таблицы. типы.

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

Что касается самих ключей: их необходимо будет отбрасывать и создавать заново, когда вы изменили данные таблицы. типы.

2
ответ дан 1 December 2019 в 20:30
поделиться

Вы можете временно отключить внешние клавиши, набрав

SET foreign_key_checks = 0;

и включить их

SET foreign_key_checks = 1;

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

Редактировать : В ответ на ваше редактирование похоже, что он отключает ограничения только для операторов DML (вставка, обновление, удаление), но не для операторов DDL (таблица изменений, таблица удаления) и т.д ...).

2
ответ дан 1 December 2019 в 20:30
поделиться

Если вы можете остановить базу данных, попробуйте выгрузить таблицы в текстовый файл, вручную изменить определение столбцов в файле и импортировать таблицы обратно.

1
ответ дан 1 December 2019 в 20:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: