如何在mysql中使用多个自动增量列

xurqigkl  于 2021-07-27  发布在  Java
关注(0)|答案(2)|浏览(342)

我想创建一个表名users,其中我应该有列 User , cookieID , sessionID , Geo 然后我想让前三列自动分配一些随机的唯一值。我试着把三列都列出来 AUTO_INCREMENTUserPRIMARY 还有cookieid and 会话ID column 唯一的'。sql代码是:

CREATE TABLE `users` ( `User` VARCHAR(20) NOT NULL AUTO_INCREMENT ,
 `cookieID` INT(20) NULL DEFAULT NULL AUTO_INCREMENT ,
 `sessionID` INT(20) NULL DEFAULT NULL AUTO_INCREMENT ,
 `Geo` VARCHAR(30) NULL DEFAULT NULL ,
 PRIMARY KEY (`User`), UNIQUE (`cookieID`), UNIQUE (`sessionID`), UNIQUE (`Geo`));

但是,由于只有一列可以声明为 AUTO_INCREMENT 那一定是 PRIMARY . 另一种方法是什么?

j13ufse2

j13ufse21#

因为自动递增不能应用于多个to行,而且mysql中没有sequence选项。可以使用触发器对具有datetime的行进行唯一更新。
将表创建更改为单自动增量行。

CREATE TABLE `users` ( `User` VARCHAR(20) NOT NULL,
 `cookieID` INT(20) NULL DEFAULT NULL,
 `sessionID` INT(20) NULL DEFAULT NULL AUTO_INCREMENT ,
 `Geo` VARCHAR(30) NULL DEFAULT NULL,
 PRIMARY KEY (`User`), UNIQUE (`cookieID`), UNIQUE (`sessionID`), UNIQUE (`Geo`));

在同一个表上创建触发器,如下所示。您可以根据需要为任意多个列设置集合下的唯一值。

CREATE DEFINER=`root`@`localhost` TRIGGER `users_BEFORE_INSERT` BEFORE INSERT ON `users` FOR EACH ROW BEGIN
SET 
NEW.cookieID = (SELECT curdate()+curtime());
END

现在当你插入下表时。

insert into `users`(`User`) values("test");

你的table看起来像这样。

User  cookieID  sessionID  Geo
test  20315169  0          NULL
9vw9lbht

9vw9lbht2#

如果值是自动递增的,则希望两个值保持相同。然后在插入新值时将一列的值复制到另一列。

相关问题