gpt4 book ai didi

php - 如何在mysql中有一个序列的唯一id

转载 作者:行者123 更新时间:2023-11-29 00:24:24 25 4
gpt4 key购买 nike

我已经问过这个但没有得到我要找的东西,我有许多表的 id 列设置为自动递增和主键。

表1

id, title, condition...

表2

id, title, condition...

我有一个搜索框,我可以在其中搜索产品,我的查询类似于

 $stmt = $mysqli->prepare("select * from table1 where title Like ? or id = ? ");
$stmt->bind_param('ss', $searchterm, $searchterm");
$stmt->execute();

$stmt = $mysqli->prepare("select * from table2 where title Like ? or id = ? ");
$stmt->bind_param('ss', $searchterm, $searchterm");
$stmt->execute();

因此,如果我搜索“1”,那么我将获得 ID 或标题为 1 的所有产品,但我想要的是每一行都有一个唯一的标识符。我怎样才能做到这一点?当我处理产品时,每个产品都应该有一个唯一的 ID。

或者可以在 id 前面加一个字母表,比如 T1、T2、T3 之类的吗?

最佳答案

如果您使用的是 Oracle 表服务器,您将使用一个名为 SEQUENCE 的数据库实体来为您的表获取数据库范围内的唯一 ID 值。

不过,在 MySQL 中模拟 SEQUENCE 实体非常容易,即使它有点笨重并且不那么节省空间。

首先,自己创建一个这样的表。

CREATE TABLE sequence (
sequence_id BIGINT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`sequence_id`)
)

然后,创建您的其他表,这些表将使用这些唯一的 sequence_id 值。这是一个例子:

CREATE TABLE gadget (
sequence_id BIGINT NOT NULL,
gname VARCHAR(20) DEFAULT NULL,
gvalue VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (sequence_id)
)

还有一个:

CREATE TABLE widget (
sequence_id BIGINT NOT NULL,
wname VARCHAR(20) DEFAULT NULL,
wvalue VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (sequence_id)
)

然后,无论何时您向其他表中插入一行,都按如下方式进行:

INSERT INTO sequence () VALUES() ;
INSERT INTO widget (sequence_id, wname, wvalue)
VALUES (LAST_INSERT_ID(), 'whatever', 'you_want');

或者,对于另一个示例表,

INSERT INTO sequence () VALUES() ;
INSERT INTO gadget (sequence_id, gname, gvalue)
VALUES (LAST_INSERT_ID(), 'another', 'gadget');

技巧是这样的:当您将每一行(看似空的)插入 sequence 表时,它会更新自动递增的 sequence_id 字段。然后,当您使用 LAST_INSERT_ID() 函数时,它会检索该 sequence_id 的最近插入值。

要非常小心地保持你的两个 INSERT INTO 语句连续,否则这将停止正常工作。

即使数据库服务器的许多不同客户端都在执行插入操作,这仍然有效,原因有二;

  1. 自动递增是线程安全的。任何两个序列号都不能相同。
  2. LAST_INSERT_ID() 值为与 MySQL 数据库的每个不同连接维护一个。不同的程序(或多线程 Web 应用程序中的不同线程)每个都有自己的连接,因此它们每个都有自己的 LAST_INSERT_ID() 值。

顺便说一句,我为序列使用了 bigint 数据,但是 int 也同样有效。

关于php - 如何在mysql中有一个序列的唯一id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19624303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com