2016-01-16 3 views
0

Я хочу создать новую таблицу, если кто-то вставляет значение в таблицу users. У меня есть триггер:SQL Trigger Создать оператор таблицы

Trigger with phpmyadmin

но он бросает ошибку:

MySQL meldet: #1422 - Explicit or implicit commit is not allowed in stored function or trigger.

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

manually trigger

Если я делаю тот же триггер с простым утверждением, как delete from users, срабатывает триггер. Кто-нибудь знает, как создать триггер с помощью инструкции create?

И необязательно, как создать имя таблицы, например user_22 (с идентификатором пользователя от пользователя)?

+0

Подумайте один раз ... на каждой вставке вы хотите создать таблицу ??? Итак, для вставки 10M вы хотите иметь 10M-таблицы? Вы должны подумать о перепроектировании своей структуры БД. – Rahul

ответ

1

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

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