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我对所有表都有相同的查询。