我创建了一个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
答案 0 :(得分:2)
使用主键作为自动增量。删除行时,密钥将永远不会再次使用。
答案 1 :(得分:2)
你似乎对一些事感到困惑。所有phpMyAdmin都隐藏了实际SQL命令的详细信息。要删除行,请使用DELETE FROM TABLE WHERE ...
这与将列声明为主键无关。但是,它将使用主键进行单列删除。
你没有说明为什么要制作一个uid,但是当你有一把主键时,会发生两件事:
至于使用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;