php - mysql数据库结构(唯一id)

标签 php mysql sql

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

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

例如:

数据库:

ID | column1 | column2 | ... | columnN
--------------------------------------
1 | abcdefgh | asdasda | ... | asdasdN
2 | asdasddd | asdasda | ... | asdasdN
...
N | asdewfew | asddsad | ... | asddsaN

PHP:

for($i = 0; $i <= $n; $i++){
   $sql = mysql_query("SELECT * FROM db WHERE ID = '$i' ");
   //Code;
}

*$n = ID 的最后一列值


我是否需要重新组织整个数据库以获得正确的“流程”(1、2、3、.. n)?还是我需要更新每个单元格?

最佳答案

感谢AUTO_INCREMENT,你在这里做的事情是不必要的在 MySQL 中。从 PhpMyAdmin(或其他数据库管理系统)运行此命令:

ALTER TABLE db MODIFY COLUMN ID INT NOT NULL AUTO_INCREMENT;

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

INSERT INTO db (id, column1, column2) VALUES(NULL, 'abc', 'def');

SELECT * FROM db;:

+--+-------+-------+
|id|column1|column2|
+--+-------+-------+
|1 |old    |oldrow |
+--+-------+-------+
|2 |abc    |def    | <--- Your newly inserted row, with unique ID
+--+-------+-------+

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


此外,如果您需要获取一组 ID(例如,存储在数组中),使用 IN 语句执行一个查询会更有效。

$ids = array(1,2,3,4,5,6);
$in = implode(',', $ids);
mysql_query('SELECT * FROM db WHERE id IN ('.$in.')');

但是,如果您想要所有行,只需使用:

SELECT * FROM dbs;

但厌倦了bobby tables .

关于php - mysql数据库结构(唯一id),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8964944/

相关文章:

javascript - 构建一个脚本以从 HTML 表单中获取数据并将其放置在

php - Laravel 5 中的 "Call to a member function put() on null"

PHP Define() 和 PDO 连接字符串问题

php - 将 1 添加到 mysql 表的最后一行

php - 如何强制 PHP Mongo 驱动程序将结果作为对象而不是数组返回

mysql - Django 选择其中字段是字符串和列值的串联

php - 来自 html 表的 mysql 帖子

java - Spring 与 Hibernate 和 JPA 集成 - 一张表不是在启动时创建的,其他表是在启动时创建的

MySQL 从另一个存储过程调用存储过程

sql - 尝试按列分组,同时通过排序选择所有其他信息