Php 如何在mysql中拥有唯一id序列

Php 如何在mysql中拥有唯一id序列,php,mysql,auto-increment,uniqueidentifier,Php,Mysql,Auto Increment,Uniqueidentifier,我已经问过这个问题,但没有得到我想要的,我有许多表的列id设置为自动递增和主键 表1 身份证、头衔、条件 表2 身份证、头衔、条件 我有一个搜索框,在这里我搜索产品,我的查询如下 $stmt = $mysqli->prepare("select * from table1 where title Like ? or id = ? "); $stmt->bind_param('ss', $searchterm, $searchterm"); $stmt->execute()

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

表1

身份证、头衔、条件

表2

身份证、头衔、条件

我有一个搜索框,在这里我搜索产品,我的查询如下

 $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 table server,那么您可以使用一个名为
序列的数据库实体来获取表的数据库范围内的唯一id值

不过,在MySQL中模拟
SEQUENCE
实体很容易,即使它有点笨重,空间效率也不高

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

CREATE TABLE sequence (
  sequence_id BIGINT NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`sequence_id`)
)
然后,创建其他表,这些表将使用这些唯一的
sequence\u 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
表中时,它会更新auto increment sequence\u id字段。然后,当您使用
LAST\u INSERT\u ID()
函数时,它会检索该序列ID最近插入的值

要非常小心地将两个
插入到
语句中,否则将无法正常工作

即使数据库服务器的许多不同客户机正在进行插入,这种方法仍然有效,原因有二

  • 自动递增是线程安全的。没有两个序列号可以相同
  • LAST\u INSERT\u ID()。不同的程序(或多线程web应用程序中的不同线程)都有自己的连接,因此它们都有自己的值
    LAST\u INSERT\u ID()

  • 顺便说一句,我在序列中使用了
    bigint
    数据,但是
    int
    也可以使用。

    这就是MySQL自动增量列的用途:自动增量列是您的唯一id。根据您使用的数据库引擎,您还可以创建一个复合主键,其中包含一个带有prefix@MarkBaker好的,但每个表中都会有id 1,当我搜索1时,它将返回与产品数量相同的数量。我怎么能加前缀?我不明白你的意思。因为您已将id设置为主键。它将是独一无二的。你的请求一次只显示一个表,所以我不明白为什么你会有重复的表results@Lmxc . . . 你可以改进你的问题,让它更容易回答。您提到了“产品”,但表中没有列出来。您显示了两个表(具有相同的结构),但示例查询只提到一个表。您应该为特定查询提供示例数据和预期结果。@Masadow我对所有表都有相同的查询。