如何在 MySQL 中使用超过 1 个自增列

How to use more than 1 auto-increment column in MySQL

我想创建一个 table 名称用户,我应该在其中包含列 UsercookieIDsessionIDGeo 然后我想要前三列自动分配一些随机的唯一值。我试图用 UserPRIMARY 和 'cookieIDandsessionIDcolumnUNIQUE` 制作所有三列 AUTO_INCREMENT。 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。 另一种方法是什么?

由于自动递增不能应用于多行,而且 MySQL 中没有顺序选项。您可以使用触发器对具有日期时间的行进行唯一更新。

更改为 table 创建单个自动增量行。

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`));

在与下面相同的 table 上创建触发器。您可以在 SET 下为任意数量的列设置唯一值。

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

现在,当您插入 table 时,如下所示。

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

你table看起来像这样。

User  cookieID  sessionID  Geo
test  20315169  0          NULL

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