Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用“AS SELECT”时如何设置自动增量主键_Mysql_Sql - Fatal编程技术网

Mysql 使用“AS SELECT”时如何设置自动增量主键

Mysql 使用“AS SELECT”时如何设置自动增量主键,mysql,sql,Mysql,Sql,我正在尝试创建一个临时表,现在我正在执行以下操作: 如果不存在,则创建tempdb.student表作为SELECT*FROM student LIMIT 0 然后 ALTER TABLE tempdb.student MODIFY id INT20 NOT NULL自动增量主键 但是,我需要找到一种不使用ALTER语句的方法来执行此操作,因为这两个语句都在一起运行,如果表已经创建,则由于多个主键,我将收到一个错误。有什么建议吗?谢谢您可以在AS关键字之前定义列、索引、表选项和分区 这是设置某些

我正在尝试创建一个临时表,现在我正在执行以下操作:

如果不存在,则创建tempdb.student表作为SELECT*FROM student LIMIT 0

然后

ALTER TABLE tempdb.student MODIFY id INT20 NOT NULL自动增量主键


但是,我需要找到一种不使用ALTER语句的方法来执行此操作,因为这两个语句都在一起运行,如果表已经创建,则由于多个主键,我将收到一个错误。有什么建议吗?谢谢

您可以在AS关键字之前定义列、索引、表选项和分区

这是设置某些列或表选项(如自动增量)的唯一方法

但这意味着您必须定义所有列,而不仅仅是id

由于您使用的是限制0,这意味着您实际上不需要源表中的任何行。我猜您只是想复制表结构,但没有任何数据

在这种情况下,您可能希望使用以下选项:

CREATE IF NOT EXISTS TABLE tempdb.student LIKE student;

这将复制其他列和表选项、索引和分区。新表的主键将具有AUTO_INCREMENT选项。

您可以在AS关键字之前定义列、索引、表选项和分区

这是设置某些列或表选项(如自动增量)的唯一方法

但这意味着您必须定义所有列,而不仅仅是id

由于您使用的是限制0,这意味着您实际上不需要源表中的任何行。我猜您只是想复制表结构,但没有任何数据

在这种情况下,您可能希望使用以下选项:

CREATE IF NOT EXISTS TABLE tempdb.student LIKE student;
这将复制其他列和表选项、索引和分区。新表的主键将具有自动递增选项

您可以显式检查表是否存在。如果代码可以并行执行,则需要小心: 如果您的临时表仅用于会话,我将使用创建临时表。。。喜欢并根据需要进行修改。 您可以显式检查表是否存在。如果代码可以并行执行,则需要小心: 如果您的临时表仅用于会话,我将使用创建临时表。。。喜欢并根据需要进行修改。
看起来,像那样使用可能是最好的;是否可以像使用第一种方法一样添加其他列?谢谢你的帮助!不,它只是创建一个与原始表完全相同的表。要自定义列,您可以使用上面显示的第一个方法,或者使用CREATETABLE。。。喜欢然后,最好使用额外的列来添加它;是否可以像使用第一种方法一样添加其他列?谢谢你的帮助!不,它只是创建一个与原始表完全相同的表。要自定义列,您可以使用上面显示的第一个方法,或者使用CREATETABLE。。。喜欢然后使用ALTERTABLE添加额外的列。
SELECT
    COUNT(*) INTO @exists
FROM
    information_schema.tables
WHERE
        table_schema = 'tempdb'
    AND table_name = 'student'
;

IF @exists = 0 THEN
    CREATE TABLE tempdb.student AS (SELECT * FROM student LIMIT 0); -- or use LIKE syntax 
    ALTER TABLE tempdb.student MODIFY id INT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY;
END IF;