我有一个MySQL数据库,其中包含一个用户表.表的主键是'userid',它被设置为自动增量字段.
我想要做的是当我在表中插入一个新用户时,使用自动增量在另一个字段'defaultidass'中的'userid'字段中创建的相同值.
例如
我想要这样的声明:
INSERT INTO users ('username','default_assignment') VALUES ('barry', value_of_auto_increment_field())
所以我创建用户'Barry','userid'生成为16(例如),但我也希望'default_assignment'具有相同的值16.
请问有什么方法可以实现吗?
谢谢!
更新:
谢谢你的回复.default_assignment字段不是多余的.default_assigment可以引用users表中的任何用户.在创建用户时,我已经有一个表单允许选择另一个用户作为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.
如果我手动设置用户ID,则default_assignment将设置为userid.
因此,在触发生效后,自动分配生成过程显然会发生.
没有必要创建另一个表,并且max()将根据表的auto_increment值出现问题,请执行以下操作:
CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW BEGIN DECLARE next_id INT; 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 =(select ...)
(*) To auto-name an image: SET NEW.field = CONCAT('image_', next_id, '.gif'); (*) To create a hash: SET NEW.field = CONCAT( MD5( next_id ) , MD5( FLOOR( RAND( ) *10000000 ) ) );