Mysql 在表中创建username、body、msg_date字段的id字段md5的最佳方法是什么?

Mysql 在表中创建username、body、msg_date字段的id字段md5的最佳方法是什么?,mysql,sql,Mysql,Sql,另外,如果我想将响应添加到字段中,我可以使用与正文字段相同的结构,因为这是一个响应,并且具有与字段相同的数据类型。为避免重复,请执行查询并检查它是否返回false或true structure CREATE TABLE IF NOT EXISTS `blabbing` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) CHARACTER SET utf8 NOT NULL, `msg_date`

另外,如果我想将响应添加到字段中,我可以使用与正文字段相同的结构,因为这是一个响应,并且具有与字段相同的数据类型。

为避免重复,请执行查询并检查它是否返回false或true

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 ;

为了避免重复,执行查询并检查它是否返回false或true

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 ;

我不完全确定您在问什么,但我认为您希望一个字段包含您正在插入的其他值的MD5,并希望数据库能够处理它。您可以尝试以下方法:

SELECT body FROM blabbing WHERE username=X ORDER BY msg_date ASC LIMIT 1

正如其他人所暗示的,如果这只是为了确保唯一性,可能有更好的方法。

不完全确定您的要求,但我认为您希望字段包含插入的其他值的MD5,并希望数据库处理它。您可以尝试以下方法:

SELECT body FROM blabbing WHERE username=X ORDER BY msg_date ASC LIMIT 1
CREATE TRIGGER blabbing_insert BEFORE INSERT ON `blabbin` FOR EACH ROW SET NEW.id = md5(...);
正如其他人所暗示的,如果这只是为了确保独特性,那么可能有更好的方法

CREATE TRIGGER blabbing_insert BEFORE INSERT ON `blabbin` FOR EACH ROW SET NEW.id = md5(...);
因为这可能是主键,所以应该避免在索引列上使用哈希函数。散列函数不是连续的,因此有序索引将很快变得支离破碎

最好的方法是创建一个触发器来检查值是否不存在,或者将额外的代码作为插入的一部分。这将使插入速度更快。将EXISTS与子查询一起使用以搜索匹配项

因为这可能是主键,所以应该避免在索引列上使用哈希函数。散列函数不是连续的,因此有序索引将很快变得支离破碎


最好的方法是创建一个触发器来检查值是否不存在,或者将额外的代码作为插入的一部分。这将使插入速度更快。将EXISTS与子查询一起使用以搜索匹配项

您想在查询中MD5您的字段吗?我想MD5这三个字段,以便现在消息或正文内容具有相同的id,可能我可以在php脚本中执行此操作从
blabbing
中选择MD5(“用户名”)、MD5(“消息日期”)、MD5(“正文”),如果您想进行更改,请使用UPDATE。拥有相同的id是什么意思?如果有人按了两次“发布”按钮,您试图避免保存两份邮件副本?只需在“Create New Message”存储过程中检查一次匹配的记录,就可以节省为一次性事件添加额外计算列的开销。@chumillas我避免重复消息并混淆表,但是我已经意识到,如果消息的id足够大,那么您想在查询中MD5您的字段吗?我想MD5这三个字段,这样现在消息或正文内容具有相同的id,我可能可以在php脚本中从
blabbing
中选择MD5(“用户名”)、MD5(“msg_date”)、MD5(“正文”),如果要进行更改,请使用“更新”。拥有相同的id是什么意思?如果有人按了两次“发布”按钮,您试图避免保存两份邮件副本?只要在“创建新消息”存储过程中检查一次匹配的记录,就可以省去为一次性事件添加额外计算列的开销。@chumillas我避免重复消息并混淆表,但我已经意识到,如果消息的id足够大,可以使用msid=x而不是username=x,因为我使用的是用户id而不是其实际名称来标识每条注释。您可以使用msid=x而不是用户名=x,因为我使用的是用户id而不是其实际名称来标识每条注释。