Mysql 使用“AS SELECT”时如何设置自动增量主键
我正在尝试创建一个临时表,现在我正在执行以下操作: 如果不存在,则创建tempdb.student表作为SELECT*FROM student LIMIT 0 然后 ALTER TABLE tempdb.student MODIFY id INT20 NOT NULL自动增量主键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关键字之前定义列、索引、表选项和分区 这是设置某些
但是,我需要找到一种不使用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;