假设我有一个具有以下方案的表:(请注意“帖子编号”列)
-- UserID -- Post Id -- Post Number* -- 4 -- 85 -- 1 -- 4 -- 86 -- 2 .... -- 5 -- 9362 -- 1 -- 4 -- 9363 -- 3
有没有一种方法可以独立于所有其他条目自动递增列,并且仅尊重具有相同主键的那些列?如果是这样,有人将如何实施呢?
非常感谢。
为了实现所需的功能,您必须使用Triggers。没有其他直接方法可以完成此任务(我想)。
我确实尝试了一个快速演示:
Create Table SoQuestion ( UserId int, PostId int, PostNumber int null ); CREATE TRIGGER inc_post_num BEFORE INSERT ON SoQuestion FOR EACH ROW set New.PostNumber = (select num From (select count(*) as num from SoQuestion where UserId = New.UserId) as b) + 1; insert into SoQuestion (UserId, PostId) Values (1,1); insert into SoQuestion (UserId, PostId) Values (1,10); insert into SoQuestion (UserId, PostId) Values (1,20); insert into SoQuestion (UserId, PostId) Values (2,1); insert into SoQuestion (UserId, PostId) Values (2,10); insert into SoQuestion (UserId, PostId) Values (3,1); insert into SoQuestion (UserId, PostId) Values (4,1); select * FROM SoQuestion;
这是我得到的输出:
UserId | PostId | PostNumber | ============================== 1 | 1 | 1 | 1 | 10 | 2 | 1 | 20 | 3 | 2 | 1 | 1 | 2 | 10 | 2 | 3 | 1 | 1 | 4 | 1 | 1 |
这是演示。
浏览完Auto_Increment文档后,我找到了另一种无需使用触发器即可实现此目的的方法。这个想法是关于创建一个Auto_Increment列,并添加另一个列为PRIMARY KEY。在我们的情况下,它将是UserId和AUTO_INCREMENT将会是PostNumber主键。这是这样的:
Auto_Increment
PRIMARY KEY
UserId
AUTO_INCREMENT
PostNumber
Create Table SoQuestion ( UserId int, PostId int, PostNumber int NOT NULL AUTO_INCREMENT, PRIMARY KEY (UserId, PostNumber) ); insert into SoQuestion (UserId, PostId) Values (1,1); insert into SoQuestion (UserId, PostId) Values (1,10); insert into SoQuestion (UserId, PostId) Values (1,20); insert into SoQuestion (UserId, PostId) Values (2,1); insert into SoQuestion (UserId, PostId) Values (2,10); insert into SoQuestion (UserId, PostId) Values (3,1); insert into SoQuestion (UserId, PostId) Values (4,1); select * FROM SoQuestion;
这将为我们提供与第一种方法相同的输出:
这是第二种方式的演示。