我有以下表结构。
我想在插入新记录时为item_image_name
插入相同的值作为item_id
的值(这是AUTO_INCREMENT)。
修改 我想在插入时想要这个
INSERT INTO items(user_id, item_image_name) VALUES ('','LAST_INCREMENT_VALUE + 1')
答案 0 :(得分:1)
您可以通过在桌面上定义before insert
触发器来实现此目的
在正文中,首先您可以找到要分配给主键字段的下一个自动增量值,并将其用于image_name
字段。
示例:
delimiter //
drop trigger if exists bi_on_items //
create trigger bi_on_items before insert on items
for each row
begin
if NEW.item_image_name is null OR length( trim( NEW.item_image_name ) ) = 0 then
set NEW.item_image_name := ( SELECT AUTO_INCREMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'items'
AND TABLE_SCHEMA = DATABASE() );
end if;
end;
//
delimiter ;
答案 1 :(得分:0)
您可以使用mysql_insert_id()获取当前连接上的最后一个插入ID。
答案 2 :(得分:0)
mysql_insert_id
- 获取上次查询中生成的ID
答案 3 :(得分:0)
使用
$sid=mysql_insert_id();
我插入第一行$sid
应为1
要插入下一次使用$sid+1
修改强>
对于您的问题:撰写查询以获取最后一个item_id
并使用该id + 1
填充当前item_image_name
。
注意:新项目item_id
和item_image_name
应该相同。
答案 4 :(得分:0)
$id = mysqli_insert_id();
这应该用来代替mysql_insert_id(),因为在PHP 5.5上已经弃用了本机MySQL驱动程序。
答案 5 :(得分:0)
简短的回答:你做不到。仅在成功插入后才会生成自动增量ID。因此,在插入过程中,您将无法访问。
另一种方法是首先进行插入,然后使用mysql_insert_id()
获取最后一个id,然后使用检索到的id更新同一行。
PS:您应该停止使用v5.5之后正式弃用的mysql_*
函数。尽快切换到PDO或mysqli。
答案 6 :(得分:0)
您可以尝试这样:
首先插入然后获取最后插入的id并更新item_image_name的值
$mysqli = new mysqli("localhost", "my_user", "my_password", "db");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "your insert query";// insert with all fields and set item_image_name to empty
if( $mysqli->query($query)){
$id= $mysqli->insert_id;
$query = "UPDATE your_table set item_image_name= '$id' where item_id = $id LIMIT 1 ";//now update the value of item_image_name
$mysqli->query($query);
}
USE MYSQLI_*
或PDO
不使用mysql_*
,因为mysql_*
已被弃用。
答案 7 :(得分:0)
您可以使用
SHOW TABLE STATUS LIKE 'tablename'
获取下一个自动增加的ID。
$result = mysql_query("SHOW TABLE STATUS LIKE 'table_name'");
$row = mysql_fetch_array($result);
$nextId = $row['Auto_increment'];
然后在插入查询中使用变量$ nextId
INSERT INTO items(user_id, item_image_name) VALUES ('',$nextId)
答案 8 :(得分:0)
你使用的是什么mysql驱动程序?
如果您使用的是mysql驱动程序,那么您将使用mysql_insert_id();
用于PDO驱动程序:PDO::lastInsertId();
注意:不推荐使用PHP 5.5(http://php.net/manual/en/migration55.deprecated.php)
中的mysql驱动程序答案 9 :(得分:0)
首先获取最后插入的ID。
select item_id as lastId from items order by id desc limit 0,1
现在在查询中使用lastId。
INSERT INTO items(user_id, item_image_name) VALUES ('','lastId+1')
希望这有帮助。
答案 10 :(得分:0)
您可以使用插入选择查询
INSERT INTO items(user_id, item_image_name) VALUES ('','SELECT MAX(item_id)+1 FROM items')