DÜŞÜR VARSA, DAMLA VAR MI?


163

Birisi bana arasında herhangi bir fark olup olmadığını söyleyebilir mi

DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]

MVC web uygulamamda JDBC şablonu kullandığım için bunu soruyorum. DROP [TABLE_NAME]Hatayı kullanırsam Tablo var dedi. Ve eğer kullanırsam DROP IF EXISTS [TABLE_NAME]kötü SQL gramer diyor. Bazıları yardımcı olabilir mi?


1
SQL Server dilbilgisi arıyorsanız, burada: stackoverflow.com/questions/7887011/…
Drew Delano

Bunun hangi veritabanı için soru üzerine bir etiketi olması gerektiğini düşünüyorum.
Tom Stickel

Yanıtlar:


293

Standart SQL sözdizimi:

DROP TABLE table_name;

IF EXISTSstandart değildir; farklı platformlar bunu farklı sözdizimi ile destekleyebilir veya hiç desteklemeyebilir. PostgreSQL'de sözdizimi

DROP TABLE IF EXISTS table_name;

Birincisi, tablo yoksa veya diğer veritabanı nesneleri ona bağlıysa bir hata atar. Çoğu zaman, diğer veritabanı nesneleri yabancı anahtar başvuruları olacaktır, ancak başkaları da olabilir. (Örneğin görünümler.) Tablo yoksa, ikincisi hata atmaz, ancak diğer veritabanı nesneleri ona bağımlıysa yine de hata verir.

Bir tabloyu ve ona bağlı diğer tüm nesneleri bırakmak için bunlardan birini kullanın.

DROP TABLE table_name CASCADE;
DROP TABLE IF EXISTS table_name CASCADE;

CASCADE'i çok dikkatli kullanın.


6
Sadece bir kişinin bir işlem bloğu ( ... ) içinde kullanmasının gerçekten iyi bir fikir olacağını söyleyeceğimi düşündüm . Bu şekilde, istemediğiniz bir grup veriyi potansiyel olarak gizlemeden önce veritabanının nasıl etkileneceği açıktır . CASCADEBEGINCOMMIT
jbowman

3
DROP IF EXISTS ( CASCADE'siz
Jovan MSFT

35

Doğrudan sorulan şey bu değildir. Ancak, tabloları düzgün bir şekilde nasıl yapacağımı ararken, bu soruyu tökezledim, sanırım diğerleri de öyle.

SQL Server 2016+ sürümünden kullanabilirsiniz

DROP TABLE IF EXISTS dbo.Table

SQL Server <2016 için yaptığım kalıcı bir tablo için aşağıdaki

IF OBJECT_ID('dbo.Table', 'U') IS NOT NULL 
  DROP TABLE dbo.Table; 

Veya bu geçici bir tablo için

IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
  DROP TABLE #T; 

17

tableSözdiziminizde şunu unuttunuz :

drop table [table_name]

bir masa düşüyor.

kullanma

drop table if exists [table_name]

tablonun düşürülmeden önce var olup olmadığını kontrol eder.
Varsa düşürülür.
Aksi takdirde, hiçbir hata gösterilmez ve herhangi bir işlem yapılmaz.


4
DROP TABLE IF EXISTS [table_name]

önce tablonun var olup olmadığını kontrol eder, eğer yaparsa tabloyu siler

DROP TABLE [table_name]

kontrol etmeden silinir, bu yüzden yoksa bir hata ile çıkar


3

Böyle bir isme sahip bir tablo yoksa, hiçbir şey DROPyapmazken hata ile başarısız olur DROP IF EXISTS.

Veritabanınızı bir komut dosyasıyla oluşturursanız / değiştirirseniz bu yararlı olur; bu şekilde tablonun önceki sürümlerinin silindiğinden emin olmanız gerekmez. Siz sadece bir yapın DROP IF EXISTSve unutun.

Tabii ki, mevcut DB motorunuz bu seçeneği desteklemeyebilir, sağladığınız bilgilerle ilgili hata hakkında daha fazla bilgi vermek zor.


Ayrıca, denerseniz drop some_table if exists;ve tablo some_tableyoksa bazı RDBMS'lerin (özellikle PostgreSQL) bir uyarı verdiğini belirtmek gerekir .

Ah, tabii ki juegen d ve Flakron haklı. DROPnesnenin türünü belirtmeniz gerekir ( TABLEbu durumda)
SJuan76
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.