当前位置: 首页 > 面试题库 >

您可以在一条语句中访问MySQL中的自动增量值吗?

巫马淳
2023-03-14
问题内容

我有一个包含用户表的MySQL数据库。该表的主键是’userid’,它被设置为自动递增字段。

我想做的是,当我向表中插入新用户时,要使用自动增量在另一个字段“ default_assignment”的“用户ID”字段中创建的值。

例如

我想要这样的声明:

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。

如果我手动设置用户标识,则default_assignment确实会设置为用户标识。

因此,自动分配生成过程显然会在触发器生效后发生。


问题答案:

无需创建另一个表,并且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 ) ) );


 类似资料:
  • 问题内容: 我目前正在使用MySQL。我有一个表,其中包含一个auto_increment’id’字段和一个’imgname’字段,其中包含一个字符串,该字符串是图像的文件名。 我需要使用INSERT INTO语句创建的auto_increment值来生成“ imgname”值。问题是,直到插入查询运行后,我才能使用mysql_insert_id之前,我不知道该值。我想知道是否有可能在插入查询期间

  • 问题内容: 如何在MySQL的select语句中创建并自动增加临时列? 这是我到目前为止的内容: 哪个返回: 但是我需要: 问题答案: 这将为您提供一个 连续的 行号。 结果

  • 问题内容: 我正在尝试在mysql数据库中创建一列,该列自动递增1但从0-Z开始然后滚动。 例如000、001、002,…,009、00A,00B,…,00Z,010,…,0ZZ,…,100。 我想让数据库通过自动递增字段创建列。 我的想法是: 为从0到36的每个字符创建一列,然后将行N(其中N是最低有效数字)自动递增1。然后在每列上添加触发器,以在第N列达到36时向N-1列添加1 。 创建一个包

  • 问题内容: 你可以添加新的语句(例如,,)Python的语法? 说,允许 要么, 如果您 应该的话 ,不要太多,但如果可能的话,就可以了(只需修改python解释器代码即可) 问题答案: 您可能会发现这很有用-Python内部:在Python上添加新语句,引用如下: 本文旨在更好地了解Python前端的工作方式。仅仅阅读文档和源代码可能会有点无聊,因此我在这里采用动手实践的方法:我将向Python

  • 问题内容: 我正在使用php和mysql。我有一个表,其中id列设置为自动递增作为主键。我正在尝试添加另一个名为sort_order的列。插入行后,sort_order列应自动递增。然后,用户将能够更改sort_order值。但是mysql不允许多于一列的自动递增? 自动递增sort_order值的最佳方法是什么? 受欢迎的要求,更多的解释。 在管理区域中,用户将具有类别列表。用户可以使用java

  • 问题内容: 我正在努力实现以下目标: 我有一个ORDER BY语句,该语句可能会根据列A中存储的值而有所不同。 例如: 如果类型是成员,则按成员姓氏排序;如果类型是组,则按组名字排序 两者均以升序排列。 我对最终声明的最佳猜测是: 我知道这是错误的,但无法在其他地方找到信息。有任何想法吗? 问题答案: 好了,您可以在MySQL中使用该 函数 (请注意,因为还有一个不相关的语句,所以要重点说明)…: