structure
CREATE TABLE IF NOT EXISTS `blabbing` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8 NOT NULL,
`msg_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
`body` varchar(255) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=307 ;
此外,如果我想在字段中添加响应,我可以使用与body字段相同的结构,因为这是一个响应,并且将具有与该字段相同类型的数据。
答案 0 :(得分:2)
不完全确定你在问什么,但我认为你想要一个字段来包含你正在插入的其他值的MD5,并希望数据库处理它。你可以尝试这样的事情:
CREATE TRIGGER blabbing_insert BEFORE INSERT ON `blabbin` FOR EACH ROW SET NEW.id = md5(...);
正如其他人所暗示的,如果这只是为了确保唯一性,那么可能有更好的方法。
答案 1 :(得分:1)
为避免重复,请执行查询并检查它是否返回false或true
SELECT body FROM blabbing WHERE username=X ORDER BY msg_date ASC LIMIT 1
答案 2 :(得分:1)
CREATE TRIGGER trig_tablename_insert
BEFORE INSERT ON `tablename`
FOR EACH ROW SET NEW.id = md5(username + body + CAST(msg_date AS CHAR));
由于这可能是主键,因此应避免在索引列上使用散列函数。散列函数不是顺序的,因此有序索引会快速分段非常。
最好的办法是创建一个触发器来检查尚不存在的值,或者将额外的代码作为插入的一部分。它将使更快的插入。使用带有子查询的EXISTS搜索匹配项。