我认为大多数人在将值/数据插入数据库 (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/