相关疑难解决方法(0)

是否可以在主要SQL数据库中回滚CREATE TABLE和ALTER TABLE语句?

我正在研究一个发布DDL的程序.我想知道是否CREATE TABLE可以回滚和类似的DDL

  • Postgres的
  • MySQL的
  • SQLite的

描述每个数据库如何使用DDL处理事务.

sql ddl transactions create-table

103
推荐指数
4
解决办法
7万
查看次数

如果外键不存在,如何创建外键?

我正在使用PostgreSQL 9.1.

我有一个表common.client_contact,我使用此代码创建外键:

ALTER TABLE common.client_contact 
ADD FOREIGN KEY (contact_id) REFERENCES common.contact_item(id);
Run Code Online (Sandbox Code Playgroud)

如果我执行这个代码,我会用不同的名称(如一些外国键client_contact_contact_id_fkey1,client_contact_contact_id_fkey2,client_contact_contact_id_fkey3等).

因此,在创建新约束之前,我需要检查它是否存在.

我检查pg_constraint表中是否存在此约束:

SELECT * FROM pg_constraint WHERE conname = 'client_contact_contact_id_fkey'
Run Code Online (Sandbox Code Playgroud)

现在我需要将它们组合在一起.就像是

IF NOT EXISTS
    (SELECT * FROM pg_constraint WHERE conname = 'client_contact_contact_id_fkey')
ALTER TABLE common.client_contact
    ADD CONSTRAINT client_contact_contact_id_fkey
    FOREIGN KEY (contact_id) REFERENCES common.contact_item(id)
Run Code Online (Sandbox Code Playgroud)

要不就

ALTER TABLE common.client_contact 
ADD FOREIGN KEY IF NOT EXISTS (contact_id) REFERENCES common.contact_item(id)
Run Code Online (Sandbox Code Playgroud)

但是这两个查询都会产生语法错误.那么,我怎么能在PostgreSQL中做到这一点?

postgresql postgresql-9.1

12
推荐指数
2
解决办法
8915
查看次数