我想知道是否可以创建一个表,该表具有以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之后,我尝试的所有操作都给了我一个编译器错误。
谢谢。
答案 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");