it-swarm-tr.com

MySql - Başka Kesin Olmuyorsa Tablo Oluştur?

İşte güncellenmiş soru:

mevcut sorgu şöyle bir şey yapıyor:

$sql1 = "TRUNCATE TABLE fubar";
$sql2 = "CREATE TEMPORARY TABLE IF NOT EXISTS fubar SELECT id, name FROM barfu";

Bunu içeren yöntem ilk defa çalıştırıldığında, tablo henüz mevcut olmadığından kesilmede bir hata mesajı oluşturur.

CREATE TABLE yapmak için tek seçeneğim var mı, TRUNCATE TABLE dosyasını çalıştırın ve sonra tabloyu doldurun mu? (3 ayrı sorgu)

asıl soru şuydu:

MySQL'de aşağıdakilerin sql bloğu yazmak zorunda kalmadan mümkün olup olmadığını anlamakta zorlanıyorum:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Oluşturma tablosundan önce ayrı ayrı truncate çalıştırıyorsam ve tablo mevcut değilse, bir hata mesajı alıyorum. Daha fazla sorgu eklemek zorunda kalmadan bu hata mesajını ortadan kaldırmaya çalışıyorum.

Bu kod PHP kullanılarak yürütülecektir.

20
shmuel613

shmuel613, cevap vermek yerine orijinal sorunuzu güncellemeniz daha iyi olur. Bir soruyu yaymak yerine, tüm soruyu içeren tek bir yer varsa en iyisidir.

Ben'in cevabı makul, çünkü istemediği bir “değil” gibi görünüyor. Masayı yalnızca yoksa var ise düşürmek doğru değildir.

Gerçekten birden fazla ifadeye ihtiyacınız olacak. Ya koşullu olarak oluşturun, sonra doldurun:

  1. Fubar yoksa ORTAM OLMAYAN TABLO OLUŞTURMA (id int, varchar (80))
  2. TRUNCATE TABLO fubar
  3. Fubar SELECT * barfu içinden INSERT

ya da sadece bırak ve yeniden yarat

  1. DAMLA TABLO VARSA fubar
  2. TEMPORARY TABLO OLUŞTURMA fubar SELECT kimliği, barfu'dan isim

Saf SQL ile bunlar sizin iki gerçek çözüm sınıfınızdır. İkincisini daha çok seviyorum.

(Saklı yordamla, onu tek bir ifadeye indirgeyebilirsiniz. Şunun gibi bir şey: TruncateAndPopulate (fubar) Ancak, TruncateAndPopulate () kodunu yazdığınızda, yalnızca yukarıdaki SQL'i kullanmaktan daha fazla zaman harcarsınız.)

22
mdahlman

tablo varsa herhangi bir sorguyu yürütün.

Kullanım: call Edit_table(database-name,table-name,query-string);

  • Prosedür, veritabanı adı altında tablo adının varlığını kontrol eder ve varsa sorgu dizesini yürütür. Saklı yordam aşağıdadır:
DELIMITER $$

DROP PROCEDURE IF EXISTS `Edit_table` $$
CREATE PROCEDURE `Edit_table` (in_db_nm varchar(20), in_tbl_nm varchar(20), in_your_query varchar(200))
DETERMINISTIC
BEGIN

DECLARE var_table_count INT;

select count(*) INTO @var_table_count from information_schema.TABLES where TABLE_NAME=in_tbl_nm and TABLE_SCHEMA=in_db_nm;
IF (@var_table_count > 0) THEN
  SET @in_your_query = in_your_query;
  #SELECT @in_your_query;
  PREPARE my_query FROM @in_your_query;
  EXECUTE my_query;

ELSE
  select "Table Not Found";
END IF;

END $$
DELIMITER ;

Mysql hakkında daha fazlası

3
kedar

Kısaltmayı 'yoksa, yarat' ifadesinden sonra yapabilirsiniz. Bu şekilde her zaman var olur ... ve her zaman o noktada boş kalır.

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar
3
Mark Janssen

peki ya:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

Yoksa sadece tek bir sorguyla yapmak istediğini mi söyledin?

2
Ben

Tamam o zaman, fena değil. Daha açık olmak gerekirse, geçerli sorgu şöyle bir şey yapıyor:

 $ sql1 = "TRUNCATE TABLE fubar"; 
 $ sql2 = "fubar SELECT kimliği yoksa, barfu'DAN ADAMAK" SADECE TABLO OLUŞTUR "; 

Bunu içeren yöntem ilk defa çalıştırıldığında, tablo henüz mevcut olmadığından kesilmede bir hata mesajı oluşturur.

"CREATE TABLE" yapmak, "TRUNCATE TABLE" ı çalıştırmak ve sonra tabloyu doldurmak için tek seçeneğim var mı? (3 ayrı sorgu)

PS - Çok hızlı yanıt verdiğiniz için teşekkür ederiz!

0
shmuel613

PHP kullanıyorsanız, tablonun TRUNCATE'ten önce var olduğunu kontrol etmek için mysql_list_tables kullanın.

0
Lastnico