【发布时间】:2018-07-17 14:03:02
【问题描述】:
我需要创建一个表的副本(如果它不存在),并且该副本需要现有列之一成为主键。
目前我有以下 SQL 命令(在 Python 脚本中):
CREATE TABLE IF NOT EXISTS FilteredTable AS SELECT * FROM RawTable WHERE <cond>
ALTER TABLE FilteredTable ADD COLUMN IF NOT EXISTS (NewCol1 TEXT, etc TEXT)
ALTER TABLE FilteredTable ADD PRIMARY KEY (ColumnNameFromRaw)
这第一次工作正常,但是当表已经存在后再次运行时,它会抱怨主键已经存在。有没有办法将ADD PRIMARY KEY 与CREATE TABLE ... 命令结合起来,以便它只在需要创建表时尝试设置主键?
编辑
可以使用 Python 代码。
SQL:10.1.23-MariaDB
Python:2.7
【问题讨论】:
-
在不使用存储过程和/或一些动态 SQL 的情况下,您似乎无法做到这一点。 See here 一些选项。
-
该死。好的,谢谢。除了畏缩因素之外,发生该错误是否有任何危害?
-
实际上,如果它失败并且没有做任何事情,并带有令人讨厌的错误消息,那是 IMO 更好的结果。根据我的阅读,它实际上可能会创建另一个索引,而您可能不希望在生产中发生这种情况。
-
是的,我最不想要的就是在使用多年后不知何故拥有数千个主键实例......
-
我认为最好先检查表是否存在
select * from information_schema.tables where table_schema="db_name" and table_name="FilteredTable",如果不存在则创建主键。
标签: python mysql python-2.7 mariadb