mysql 的一个表中只有递增主键一个字段,如何插入数据?

2014-07-17 09:27:33 +08:00
 iyaozhen
http://img3.tuchuang.org/uploads/2014/07/20140717091753.jpg

还有个问题,我发现discuz数据表中的主键的记录居然是重复的。有点奇怪
http://img4.picbed.org/uploads/2014/07/20140717092051.jpg
http://img2.tuchuang.org/uploads/2014/07/20140717092214.jpg
可以看出pid字段中的值是唯一的,但却没有设置递增和主键。我改如何科学的新增数据?
可能这个表和其它表有关联,但我现在要直接操作这个表。
我插入时先"SELECT MAX(pid) FROM pre_forum_post",得到pid,但总觉得有点不科学。
8468 次点击
所在节点    MySQL
13 条回复
superbear
2014-07-17 09:44:23 +08:00
第一张图片里,pid这个字段是不同的
iyaozhen
2014-07-17 09:48:34 +08:00
@superbear 你说的是第二张图吧,pid是不同呀。但tid在第二张图的表里面才是主键。
yangqi
2014-07-17 09:51:02 +08:00
pid -> post id
tid -> thread id
fid -> forum id

能看出关系了么? 一个thread可以有很多post, 至于那个pid主键单独一个表不知道什么情况
iyaozhen
2014-07-17 09:59:46 +08:00
@yangqi 嗯,这个我知道。每个主题(thread)里面的楼层(包括0楼)都是post。但从第三张图中可以看见tid是主键,但记录中的值tid有重复。(第二张图)
pid主键单独一个表那个是用来帖子分表用的,一般用不上。我只是不知道这个表只有一个递增主键我改如何新增数据。
ipconfiger
2014-07-17 10:00:24 +08:00
insert into table——name values (null)
zieglar
2014-07-17 10:02:17 +08:00
INSERT INTO `table`(pid) SELECT max(pid) +1 FROM `table`
iyaozhen
2014-07-17 10:03:50 +08:00
@zieglar 使用SELECT max(pid) +1 FROM `table`会不会有并发冲突问题。语言是php
zieglar
2014-07-17 10:12:02 +08:00
CREATE TABLE t (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY
)
INSERT INTO `t` VALUE()
iyaozhen
2014-07-17 10:13:56 +08:00
@ipconfiger 原来如此,要用'NULL',一开始老想着留空。尝试了几次发现这样也可以:
justfindu
2014-07-17 10:19:57 +08:00
应该来说不自增的主键不是唯一值, 但是整条数据必须是唯一值
sun019
2014-07-17 11:04:54 +08:00
看下discuz 的源码怎么写的吧 亲
别乱搞 小心discuz数据结构被你搞坏哈
iyaozhen
2014-07-17 11:58:30 +08:00
@justfindu 额,原来是我看错了,表里面有两个主键。PRIMARY KEY (`tid`,`position`)
position字段表示的是楼层,这样主题+楼层就可以唯一表示一个帖子了。

那个字段居然在最后,屏幕小,哭瞎了。
lincanbin
2014-07-17 12:17:53 +08:00
tid是comment对应的索引

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/123058

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX