【问题标题】:Recover indexes primary key恢复索引主键
【发布时间】:2013-10-10 21:27:00
【问题描述】:

哪个中间更安全,可以恢复和排序索引主键,避免整个数据库不必要的更新?你能给我举个例子吗?

我只是希望主键是恒定的和动态的。我只是希望主键是约束和动态的

ps:MySQL 数据库


         User's Table

||用户名 ||用户名 ||用户姓氏

 #1            Alexandre               Doria
 #2            Ilya                    Bursov
 #3            Anybody                 Anybody

所以,如果我删除#2 行并插入新行,则#3 行的主键是重复的。

我的 PHP 代码在这里:

$user_id_cont = mysql_query("select 'user_id' from user"); $user_id = mysql_num_rows($user_id_cont)+1;

【问题讨论】:

  • mysql中主键总是排序的,recover是什么意思?
  • 删除一行后,主键总是重复的。如何获取后续主键的索引等于删除的最后一行的索引?
  • 我不确定您是否正确使用了术语,您无法获取后续主键的索引。您可以获得新的自动增量主键的值,如果删除行,自动增量键不会重复
  • 如果我放入 user_id AUTO_INCREMENT 列,我应该怎么做才能使索引在行被删除后不会“跳转”?我认为应该更容易
  • “跳跃”是什么意思?

标签: mysql indexing primary-key


【解决方案1】:

在你的代码中计算主键是绝对错误的

首先 - 将 user_id 列更改为主键(它也将是唯一的),并将其设置为 auto_increment,因此您的表创建语句必须是:

create table sample_users (
`user_id` int unsigned not null auto_increment,
`first` varchar(255),
`last` varchar(255),
primary key (`user_id`)
);

接下来,您需要将数据插入到您的表中,因此您可以直接插入:

INSERT into `sample_users` (`first`, `last`) values('fname', 'lname');
INSERT into `sample_users` (`first`, `last`) values('fname2', 'lname2');
...

mysql 将为每一行生成适当的 user_id,即使你删除了其中的一些 - mysql 仍然会为你提供唯一的值

另外一种情况是——如果你需要知道mysql生成什么id,你可以使用PHPmysql_insert_id或者MySQLLAST_INSERT_ID函数来实现

仅供参考:方法错误,但适用于“学校项目”,请将代码更改为:

$user_id_cont = mysql_query("select max('user_id') from user");
$user_id = mysql_fetch_array($user_id_cont, MYSQL_NUM);
$user_id = $user_id[0]+1;

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多