首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql数据库结构(唯一id)

问mysql数据库结构(唯一id)
EN

Stack Overflow用户
提问于 2012-01-22 21:40:47
回答 6查看 1.4K关注 0票数 1

我认为大多数人在将值/数据插入数据库(mysql)时遇到了严重的问题。当我在数据库中插入一个值时,我为该行分配了一个惟一的id (INT)。当我查询数据库时,我可以轻松地读取/修改/删除该行。

使用函数for() (在php中),我可以轻松地从数据库读取值/数据。当我删除一行时(例如在中间),问题就会发生。

例如:

DB:

代码语言:javascript
复制
ID | column1 | column2 | ... | columnN
--------------------------------------
1 | abcdefgh | asdasda | ... | asdasdN
2 | asdasddd | asdasda | ... | asdasdN
...
N | asdewfew | asddsad | ... | asddsaN

php:

代码语言:javascript
复制
for($i = 0; $i <= $n; $i++){
   $sql = mysql_query("SELECT * FROM db WHERE ID = '$i' ");
   //Code;
}

*$n = ID中的最后一列值

我是否需要重组整个数据库才能有一个正确的“流”(1,2,3,..n)?还是我需要更新每个手机?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-22 21:52:13

由于mysql中的AUTO_INCREMENT,您在这里所做的一切都是不必要的。从PhpMyAdmin (或另一个DB管理系统)运行此命令:

代码语言:javascript
复制
ALTER TABLE db MODIFY COLUMN ID INT NOT NULL AUTO_INCREMENT;

现在,当向db中插入一行时,mysql将为您分配ID:

代码语言:javascript
复制
INSERT INTO db (id, column1, column2) VALUES(NULL, 'abc', 'def');

SELECT * FROM db;

代码语言:javascript
复制
+--+-------+-------+
|id|column1|column2|
+--+-------+-------+
|1 |old    |oldrow |
+--+-------+-------+
|2 |abc    |def    | <--- Your newly inserted row, with unique ID
+--+-------+-------+

如果删除一行,则确实会出现ID顺序上的不一致,但这是可以的。in并不表示表中某一行的数字位置。它们旨在唯一地标识每一行,以便您可以对其执行操作,并从其他表中引用外键。

另外,如果您需要获取一组ID(例如,存储在数组中),那么使用IN语句执行一次查询要高效得多。

代码语言:javascript
复制
$ids = array(1,2,3,4,5,6);
$in = implode(',', $ids);
mysql_query('SELECT * FROM db WHERE id IN ('.$in.')');

但是,如果希望所有行只使用:

代码语言:javascript
复制
SELECT * FROM dbs;

但要厌倦鲍比桌。

票数 2
EN

Stack Overflow用户

发布于 2012-01-22 21:44:38

可以使用查询选择所有行。

代码语言:javascript
复制
SELECT * FROM db

然后做你想做的事

票数 1
EN

Stack Overflow用户

发布于 2012-01-22 21:46:46

您永远无法确保ids是连续的。正如您自己所注意到的,在删除一行之后会出现空白,但是即使在您在事务中插入行而不提交行时也是如此,因为有些东西失败了,您需要恢复事务。ID是标识符,而不是行号。

例如,如果您想从某个地方(或类似的地方)选择X项,请查看LIMIT和OFFSET

代码语言:javascript
复制
SELECT * FROM mytable ORDER BY created DESC LIMIT 10 OFFSET 20;

这将选择按其创建时间排序的行21至30。注意,我不使用id进行排序,但您不能依赖它(如前所述)。

如果您确实希望通过它们的ID来获取行,那么您肯定需要首先获取ID。您还可以获取一系列ID,如

代码语言:javascript
复制
SELECT * FROM mytable WHERE id IN (1,2,3,4);

但别以为你会收到4行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8964944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档