【问题标题】:How to use more than 1 auto-increment column in MySQL如何在 MySQL 中使用超过 1 个自增列
【发布时间】:2020-11-20 22:42:06
【问题描述】:

我想创建一个表名用户,我应该有列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 sql unique primary-key auto-increment


【解决方案1】:

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

【讨论】:

  • 我需要这些值是相互独立的,并且不一样。有什么办法吗?
【解决方案2】:

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

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

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

在同一个表上创建一个触发器,如下所示。您可以在 SET 下为任意数量的列设置唯一值。

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

你的桌子是这样的。

User  cookieID  sessionID  Geo
test  20315169  0          NULL

【讨论】:

    猜你喜欢
    • 2022-10-25
    • 2014-05-06
    • 2011-09-25
    • 2021-11-23
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多