mysql表中的主键值始终相同

时间:2011-10-05 21:38:39

标签: php mysql insert

我创建了一个mysql表,其中包含一个名为'uid'的列,它是主键但不是自动增量。这是因为我正在使用php rand(00000000,99999999)或其他什么来填充'uid'。它工作了一段时间,直到我试图删除表中的行。除非我检查它们并使用底部的删除X,否则它们不会在phpmyadmin中删除。与记录在同一行的X将不会执行任何操作。所以...当我最终删除它们时,我从我的php脚本中尝试了一些INSERT,现在uid与之前的相同,即使插入的随机数是不同的。所以,我想“我想我不需要让uid成为主键”,所以我删除了它,我只有一个名为uid的普通列。但问题仍然存在。我试着刷新mysql表。我试着放下桌子并重新创建它无济于事。任何想法都会非常有用。感谢。

这是表格(删除了一些列)

CREATE TABLE `members` (  
 `uid` int(13) NOT NULL,  
 `emailAddress` varchar(150) NOT NULL,
 `emailAddressVerified` tinyint(1) NOT NULL default '0',
 `agreesToTerms` varchar(5) NOT NULL,
 `timestampJoined` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

3 个答案:

答案 0 :(得分:2)

使用主键作为自动增量。删除行时,密钥将永远不会再次使用。

答案 1 :(得分:2)

你似乎对一些事感到困惑。所有phpMyAdmin都隐藏了实际SQL命令的详细信息。要删除行,请使用DELETE FROM TABLE WHERE ...

这与将列声明为主键无关。但是,它将使用主键进行单列删除。

你没有说明为什么要制作一个uid,但是当你有一把主键时,会发生两件事:

  1. 主键保证唯一性
  2. 创建唯一索引
  3. 至于使用rand()作为生成uid的基础,这不是一个好主意,因为总有可能获得重复的id。毕竟,这是随机的。然而,php确实有一个你可以使用的功能:uniqid()。根据参数,您可以获得13个字符或23个字符的返回值。

    我不确定您当前问题的解释是什么,但我们需要知道您的表的结构。在sql表中获取此功能的一种方法是从phpmyadmin sql表单发出:

    show create table yourtablename
    

答案 2 :(得分:1)

为什么不使用自动增量?

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) ENGINE=MyISAM

或者更糟糕的是“在重复键上”:

INSERT INTO table (a,b,c) VALUES (1,2,3)  ON DUPLICATE KEY UPDATE c=c+1;