Вызов именованного шаблона не меняет текущий контекст. Вместо:
<xsl:call-template name="model" />
try:
<xsl:apply-templates select="xmi:XMI/uml:Model"/>
В противном случае вы останетесь в контексте корневого узла /
, который не имеет каких-либо атрибутов, которые вы пытаетесь использовать извлечения.
И тогда, конечно, шаблону, совпадающему с uml:Model
, не нужно иметь имя.
Использование:
ALTER TABLE some_table AUTO_INCREMENT = 0
... сбросит значение auto_increment на следующее значение на основе наибольшего существующего значения в столбце auto_increment.
Чтобы выполнить это для всех таблиц, вам потребуется использовать динамический синтаксис SQL MySQL под названием PreparedStatements , поскольку вы не можете указать имя таблицы для оператора ALTER TABLE в качестве переменной. Вам придется зацикливаться на выходных данных из:
SELECT t.table_name
FROM INFORMATION_SCHEMA.TABLES t
WHERE t.table_schema = 'your_database_name'
... запускать инструкцию ALTER TABLE выше для каждой таблицы.
В приведенных ниже инструкциях вам необходимо заменить все, что находится в [скобках], на правильное значение. РЕЗЕРВНОЕ КОПИРОВАНИЕ ПЕРЕД ПОПЫТКОМ.
Если вы можете войти в mysql с правами root через командную строку, вы можете сделать следующее, чтобы сбросить auto_increment для всех таблиц, сначала мы создадим наши запросы, которые мы хотим выполнить:
Создать базу данных резервная копия:
mysqldump -u [uname] -p [dbname] | gzip -9 > [backupfile.sql.gz]
Логин:
mysql -u root -p
Установите для group_concat_max_length более высокое значение, чтобы наш список запросов не усекался:
SET group_concat_max_len=100000;
Создать наш список запросов с использованием следующего:
SELECT GROUP_CONCAT(CONCAT("ALTER TABLE ", table_name, " AUTO_INCREMENT = 0") SEPARATOR ";") FROM information_schema.tables WHERE table_schema = "[DATABASENAME]";
Затем вы получите длинную строку запросов mysql, сопровождаемых кучей тире. Скопируйте строку запросов в буфер обмена, она будет выглядеть примерно так:
ALTER table1 AUTO_INCREMENT = 0;ALTER table2 AUTO_INCREMENT = 0;...continued...
Перейдите в базу данных, для которой вы хотите выполнить команду:
USE [DATABASENAME];
Затем вставьте Строка, которая находится в вашем буфере обмена и нажмите Enter, чтобы запустить его. Это должно запустить alter для каждой таблицы в вашей базе данных.
Запутались? Восстановление из резервной копии, обязательно выйдите из mysql перед запуском следующего (просто наберите exit;
, чтобы сделать это)
gzip -d < [backupfile.sql.gz] | mysql -u [uname] -p [dbname]
Я не буду нести ответственность за любой ущерб, вызванный использованием вами любого из этих команды, используйте на свой страх и риск.
Предполагая, что вы должны исправить это, изменив столбец автоинкремента, а не внешние ключи в таблице, разлагающей отношение N:M, и что вы можете предсказать, какие значения являются правильными, попробуйте использовать временную таблицу, в которой соответствующий столбец не является автоинкрементным, затем отобразите его обратно вместо исходной таблицы и впоследствии измените тип столбца на автоинкрементный или усеките исходную таблицу и загрузите данные из временной таблицы.