У меня есть довольно простая базовая таблица, которую я буду заполнять первичными ключами CHAR (4).
Эти значения выбираются из таблицы chars с подзапросом.
Я хочу настроить запрос BEFORE INSERT , чтобы каждый раз, когда я INSERT представлял новую запись из PHP, поле id получало сгенерированный CHAR (4) из подзапроса.
"ASDF", "Это основной текст", "1970-01-01 01:01:01"
и т. Д.
Я дергаю себя за волосы этим триггером.
DELIMETER |
CREATE TRIGGER messages_newid
BEFORE INSERT ON messages
FOR EACH ROW
BEGIN
SET NEW.id = (SELECT CONCAT(a.val,b.val,c.val,d.val)
FROM chars AS a
JOIN chars AS b
JOIN chars AS c
JOIN chars AS d
ORDER BY RAND()
LIMIT 1);
END
|
Ниже следует структура таблицы из сообщений
CREATE TABLE IF NOT EXISTS `messages` (
`id` varchar(4) collate utf8_unicode_ci NOT NULL,
`body` text collate utf8_unicode_ci,
`created` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
И уловка chars таблицы, которую я нашел в другом ответе, которыйиспользуется для CHAR (4) случайность
CREATE TABLE IF NOT EXISTS `chars` (
`val` char(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Какое отношение это имеет к привилегиям?
EDIT Вот новый код ошибки
#1227 - Access denied; you need the SUPER privilege for this operation