我有一个MySQL数据库,其中包含一个用户表。表的主键是'userid',它被设置为自动增量字段。
我想要做的是,当我将一个新用户插入到表中时,使用与“userid”字段中的“默认_赋值”字段中的自动增量所创建的值相同的值。
例如:
我想要一份这样的声明:
INSERT INTO users ('username','default_assignment') VALUES ('barry', value_of_auto_increment_field())所以我创建用户'Barry','userid‘生成为16 (例如),但我也希望'default_assignment’具有相同的值为16。
有什么办法能做到这一点吗?
谢谢!
更新:
谢谢你的回复。default_assignment字段不是多余的。default_assigment可以引用user表中的任何用户。在创建用户时,我已经有了一个表单,它允许选择另一个用户作为default_assignment,但是在某些情况下,需要将其设置为同一个用户,因此我提出了一个问题。
更新:
好的,我已经尝试了更新触发器的建议,但还是不能让它起作用。下面是我创建的触发器:
CREATE TRIGGER default_assignment_self BEFORE INSERT ON `users`
FOR EACH ROW BEGIN
SET NEW.default_assignment = NEW.userid;
END;但是,当插入新用户时,default_assignment总是设置为0。
如果我手动设置userid,那么default_assignment就会被设置为userid。
因此,自动分配生成过程显然发生在触发器生效之后。
发布于 2010-07-26 11:46:27
不需要创建另一个表,max()将遇到与表的auto_increment值相关的问题,请执行以下操作:
CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
DECLARE next_id;
SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl');
SET NEW.field = next_id;
END我声明next_id变量,因为通常它将以其他方式使用(*),但是您可以直接使用new.field=(选择.)
CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
SET NEW.field=(SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl');
END此外,在(选择string字段)的情况下,您可以使用CAST值;
CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
SET NEW.field=CAST((SELECT aStringField FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl') AS UNSIGNED);
END(*)自动命名图像:
SET NEW.field = CONCAT('image_', next_id, '.gif');(*)创建一个散列:
SET NEW.field = CONCAT( MD5( next_id ) , MD5( FLOOR( RAND( ) *10000000 ) ) );https://stackoverflow.com/questions/469009
复制相似问题