如何在 MySQL 中使用超过 1 个自增列
How to use more than 1 auto-increment column in MySQL
我想创建一个 table 名称用户,我应该在其中包含列 User
、cookieID
、sessionID
、Geo
然后我想要前三列自动分配一些随机的唯一值。我试图用 User
列 PRIMARY
和 'cookieIDand
sessionIDcolumn
UNIQUE` 制作所有三列 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
如果值是自动递增的,你想保持两个值相同。然后在插入新值时将一列的值复制到另一列。
我想创建一个 table 名称用户,我应该在其中包含列 User
、cookieID
、sessionID
、Geo
然后我想要前三列自动分配一些随机的唯一值。我试图用 User
列 PRIMARY
和 'cookieIDand
sessionIDcolumn
UNIQUE` 制作所有三列 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
如果值是自动递增的,你想保持两个值相同。然后在插入新值时将一列的值复制到另一列。