表中的多值属性

时间:2013-10-20 22:02:05

标签: mysql sql

我设计了一个发送消息系统,用户可以在其中一次向多个人发送消息。所以消息的接收者属性是多值的。所以我设计了另一个名为message_recipients的表。

以下是我的表格:

create table `message`(
`message_id`           INT(11)      NOT NULL primary key auto_increment,
`sender`               VARCHAR(32)  NOT NULL,
`topic`                VARCHAR(100) NOT NULL,
`content`              TEXT         NOT NULL,
`message_date`         TIMESTAMP    NOT NULL  ,
`readed`               VARCHAR(1)   NOT NULL DEFAULT 0,
`deleted_by_sender`    VARCHAR(1)   NOT NULL DEFAULT 0,
`deleted_by_recipient` VARCHAR(1)   NOT NULL DEFAULT 0,
FOREIGN KEY(sender)    REFERENCES   users(user_name)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;


create table `message_recipients`(
`message_id` INT         NOT NULL ,
`recipient`  VARCHAR(32) NOT NULL ,
PRIMARY KEY(message_id,recipient),
FOREIGN KEY(message_id) REFERENCES message(message_id) on delete cascade,
FOREIGN KEY(recipient)  REFERENCES users(user_name)
)ENGINE=InnoDB default charset=utf8;

当我在message表中插入消息时,我需要获取其message_id并将其与收件人或收件人一起插入message_recipients表。

这是我的剧本:

insert into `message`(`sender`,`topic`,`content`)
values('me','need help','how to get last inserted row');
select message_id from `message` order by `message_id` desc limit 0,1;

当我收到message_id时,我现在可以将其插入message_recipients,并将一些用户作为收件人,现在问题是这样的;是否有更好或更优化的方式?

1 个答案:

答案 0 :(得分:1)

使用函数mysql_insert_id()而不是

select message_id from `message` order by `message_id` limit 0,1;

这是一个内置的MySQL方法,可以为您提供刚刚插入的主键。如果存在大量同时插入,则上面的SELECT语句可能不可靠。