标签: lastinsertid

SELECT last id,没有INSERT

我正在尝试检索一个表A的id以插入另一个表B.我不能使用last_insert_id(),因为我没有在A中插入任何内容.有关如何做到这一点的任何想法?

$n = mysql_query("SELECT max(id) FROM tablename"); 似乎不起作用,也不起作用

$n = mysql_query("SELECT max(id) FROM tablename GROUP BY id");
Run Code Online (Sandbox Code Playgroud)

mysql lastinsertid

7
推荐指数
2
解决办法
8万
查看次数

通过PHP使用LAST_INSERT_ID()?

当我在MySQL控制台中执行以下操作时,它可以正常工作:

INSERT INTO videos (embed_code) VALUES ('test code here');
SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)

但是,当我通过PHP执行上述查询时,结果为空.

在数据抽象下,我使用的是名为的数据库访问类DB.这就是我通过PHP尝试上述查询的方法:

$embedCode = htmlentities($_POST['embed_code']);

//Insert video in database **WORKS**
DB::query("INSERT INTO videos (embed_code) VALUES ('$embedCode');");

//Retrieve id **DOES NOT WORK**
$row = DB::getSingleRow("SELECT LAST_INSERT_ID();");
$videoId = $row[0];
Run Code Online (Sandbox Code Playgroud)

我不能通过embed_code选择新的id,因为embed_code可以重复.

谢谢!

php mysql lastinsertid

7
推荐指数
1
解决办法
3万
查看次数

"PDO :: lastInsertId"/"mysql_insert_id"的替代方案

我总是听说使用"lastInsertId"(或者如果你不使用PDO,则使用mysql_insert_id())是邪恶的.在触发器的情况下,它显然是,因为它可以返回一些完全不是INSERT创建的最后一个ID.

$DB->exec("INSERT INTO example (column1) VALUES ('test')");
// Usually returns your newly created ID.
// However when a TRIGGER inserts into another table with auto-increment:
// -> Returns newly created ID of trigger's INSERT
$id = $DB->lastInsertId();
Run Code Online (Sandbox Code Playgroud)

有什么选择?

php mysql auto-increment lastinsertid mysql-insert-id

6
推荐指数
1
解决办法
1万
查看次数

ON DUPLICATE KEY UPDATE在有UPDATE触发器时不起作用

我的INSERT声明如下:

INSERT INTO officer (officer_number,
                     name,
                     bank_id)    
VALUES ('',
        '',
        8)

ON DUPLICATE KEY UPDATE officer_number = '',
                        name = '',
                        bank_id = 8,
                        id = LAST_INSERT_ID(id)
Run Code Online (Sandbox Code Playgroud)

这样做的方式一直很好.当我添加以下触发器时它停止工作:

CREATE TRIGGER officer_update BEFORE UPDATE ON `officer`
FOR EACH ROW SET NEW.updated_at = NOW(), NEW.created_at = OLD.created_at
Run Code Online (Sandbox Code Playgroud)

并不是officer记录没有被插入.似乎触发器是劫持LAST_INSERT_ID()或其他东西.我这样说是因为下一个执行的查询是这样的:

INSERT INTO account (import_id,
                     branch_id,
                     account_number,
                     officer_id,
                     customer_id,
                     open_date,
                     maturity_date,
                     interest_rate,
                     balance,
                     opening_balance)
VALUES ('123',
        '4567',
        '789',
        '0', # This is the officer id which is of course …
Run Code Online (Sandbox Code Playgroud)

mysql triggers lastinsertid

6
推荐指数
1
解决办法
2805
查看次数

带有last_insert_id()的Mysql mulitple row insert-select语句

好.所以缺点是,我试图做一个INSERT SELECT,例如:

START TRANSACTION;  
INSERT INTO dbNEW.entity (commonName, surname)  
SELECT namefirst, namelast  
FROM dbOLD.user;  
SET @key = LAST_INSERT_ID();  
INSERT INTO dbNEW.user (userID, entityID, other)  
SELECT user_id, @key, other  
FROM dbOLD.user;  
COMMIT;
Run Code Online (Sandbox Code Playgroud)

当然@key不会从每个插入返回每个后续的LAST_INSERT_ID(),而只返回最后一个插入的ID.

基本上,我将旧的USER表拆分为ENTITY和USER,如:

 dbOLD.user
 +-------------+---------------------+------+-----+------------+----------------+
 | Field       | Type                | Null | Key | Default    | Extra          |
 +-------------+---------------------+------+-----+------------+----------------+
 | user_id     | int(10) unsigned    | NO   | PRI | NULL       | auto_increment |
 | namefirst   | varchar(20)         | NO   |     |            |                |
 | namelast    | varchar(20)         | NO   | …
Run Code Online (Sandbox Code Playgroud)

mysql sql lastinsertid

6
推荐指数
1
解决办法
5306
查看次数

最快的插入方式,如果不存在,则在MySQL中获取id

有这张桌子.

| id | domain |
Run Code Online (Sandbox Code Playgroud)

id是主键.domain是一个独特的钥匙.

我想要:

  1. 如果新域已不存在,请插入新域.
  2. 获取该id域名.

现在我这样做:

INSERT INTO domains
SET domain = 'exemple.com'
ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id)
Run Code Online (Sandbox Code Playgroud)

然后PDO::lastInsertId()得到id.

但关键是这个速度尽可能快,所以我会问:我可以用更好的方式做到这一点吗?

mysql optimization performance pdo lastinsertid

6
推荐指数
1
解决办法
2249
查看次数

对于PDO :: lastInsertId()方法,参数"sequence name"是什么意思?(PHP - PDO)

我正在尝试使用PDO的lastInsertId方法,但文档声明对于某些rdbms我需要一个序列名作为参数.只熟悉mysql,我不太确定序列名是什么.它们是指包含自动增量ID的列的名称吗?以下是该方法的文档:

http://php.net/manual/en/pdo.lastinsertid.php

任何有关这方面的信息将不胜感激.谢谢.

php pdo lastinsertid

6
推荐指数
1
解决办法
1257
查看次数

我们什么时候给 LAST_INSERT_ID() 一个参数?

引用自这里

mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
mysql> SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)

上面的用例是什么(有什么好处)?

我以前从未将 LAST_INSERT_ID 与任何参数一起使用过......

更新

我的问题是,为什么人们想要以这种方式模拟这种序列,当它可以通过自动递增主键自动开箱即用时?

mysql lastinsertid

5
推荐指数
1
解决办法
2277
查看次数

PHP/MYSQL 如何在事务中获取 last_insert_id

我有 2 个 MySQL 表

表#1 - 容器:

container_id INT (PK AI)
start_time DATETIME
Run Code Online (Sandbox Code Playgroud)

表#2 - 预订

reservation_id INT (PK AI) 
reservation_time DATETIME
container_id INT (FK)
Run Code Online (Sandbox Code Playgroud)

PHP代码:

mysqli_query($dbc,'SET AUTOCOMMIT=0');
mysqli_query($dbc,'START TRANSACTION');

$q1 = "INSERT INTO container (start_time) VALUES
      ('2012-07-03 11:00:00')";
$q2 = "INSERT INTO reservation (reservation_time, container_id) VALUES
      ('2012-07-03 11:00:00', LAST_INSERT_ID())";

$r1 = mysqli_query($dbc, $q1);
$r2 = mysqli_query($dbc, $q2);

if ($r1 && r2){
    mysqli_query($dbc, 'COMMIT');
} else {
    mysqli_query($dbc, 'ROLLBACK');
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?$r2 返回假。LAST_INSERT_ID() 不起作用

php mysql transactions lastinsertid

5
推荐指数
1
解决办法
7946
查看次数

如何从phonegap android中的sqlite获取最后插入的行id

我正在创建一个应用程序,我在表中插入数据.在表中插入数据后,我想得到该行的id,以便我可以根据它进行进一步的操作.我试图使用sqlite的last_insert_rowid()函数,但没有找到运气.任何人都可以告诉哪个是最后一个插入行id的最佳方法.任何想法都表示赞赏.提前致谢.

lastinsertid cordova android-sqlite

5
推荐指数
1
解决办法
1万
查看次数