什么是在表中创建用户名,正文,msg_date字段的id字段md5的最佳方法?

时间:2011-05-26 23:20:41

标签: mysql sql

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字段相同的结构,因为这是一个响应,并且将具有与该字段相同类型的数据。

3 个答案:

答案 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搜索匹配项。