如何使用mysql unix_timestamp()作为自动增量的起点?

时间:2019-02-15 18:51:54

标签: mysql jpa mysql-workbench

我想知道是否可以创建一个表,该表具有以unix时间戳记(表创建的时间)开始的自动增量,即

create table something(
    something_id bigint not null primary key auto_increment,
    something_name varchar(10) not null,
    something_random varchar(3) not null
) engine=InnoDB auto_increment=round(unix_timestamp(curtime(4)) * 1000);

请注意,我可以将auto_increment=round(unix_timestamp(curtime(4)) * 1000)替换为select round(unix_timestamp(curtime(4)) * 1000);的值。但是我想要的是一种在创建表时自动执行此操作的方法。

在阅读mysql select section之后,我尝试的所有操作都给了我一个编译器错误。

谢谢。

1 个答案:

答案 0 :(得分:1)

一种方法可能是使用执行此操作的stored procedure

接收表创建命令并在末尾连接(CONCAT function)表达式值的过程。由于查询是字符串格式,因此Prepared Statement用于执行查询。

DELIMITER $$

DROP PROCEDURE IF EXISTS `createTable`$$

CREATE PROCEDURE createTable(IN strCreateQuery TEXT)
BEGIN
        SET @query = CONCAT(strCreateQuery, " auto_increment=", ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000));

        PREPARE stmt FROM @query;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;    
END$$

DELIMITER ;


创建后,只需对所需表的创建查询执行该过程即可。

CALL createTable("
create table something(
    something_id bigint not null primary key auto_increment,
    something_name varchar(10) not null,
    something_random varchar(3) not null
) engine=InnoDB");