【发布时间】:2011-09-18 00:27:53
【问题描述】:
我有一个相当简单的基本表,我将用 CHAR(4) 主键填充它。
这些值是从带有子查询的 chars 表中选择的。
我想设置一个 BEFORE INSERT 查询,以便每次我从 PHP INSERT 一条新记录时,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
|
下面是messages
的表结构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;
这和特权有什么关系?
编辑这是新的错误代码
#1227 - Access denied; you need the SUPER privilege for this operation
【问题讨论】:
标签: mysql select triggers insert