it-swarm-id.com

MySql - Buat Tabel Jika Tidak Ada Truncate Lain?

Ini pertanyaan terbaru:

kueri saat ini melakukan sesuatu seperti:

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

Pertama kali metode yang mengandung ini dijalankan, ia menghasilkan pesan kesalahan pada truncate karena tabel belum ada.

Apakah satu-satunya pilihan saya untuk melakukan CREATE TABLE, menjalankan TRUNCATE TABLE, dan kemudian mengisi tabel? (3 pertanyaan terpisah)

pertanyaan asli adalah:

Saya mengalami kesulitan untuk mencari tahu apakah hal berikut ini dimungkinkan di MySql tanpa harus menulis blok sql:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Jika saya menjalankan truncate secara terpisah sebelum membuat tabel, dan tabel tidak ada, maka saya mendapatkan pesan kesalahan. Saya mencoba menghilangkan pesan kesalahan itu tanpa harus menambahkan pertanyaan lagi.

Kode ini akan dieksekusi menggunakan PHP.

20
shmuel613

shmuel613, akan lebih baik untuk memperbarui pertanyaan awal Anda daripada menjawab. Lebih baik jika ada satu tempat yang berisi pertanyaan lengkap daripada menyebar dalam diskusi.

Jawaban Ben masuk akal, kecuali ia tampaknya memiliki 'tidak' di mana ia tidak menginginkannya. Menjatuhkan tabel hanya jika tidak ada tidak tepat.

Anda memang membutuhkan banyak pernyataan. Buat dengan kondisional lalu isi:

  1. BUAT TABEL SEMENTARA JIKA TIDAK ADA fubar (id int, name varchar (80))
  2. TRUNCATE TABLE fubar
  3. Masukkan ke dalam fubar PILIH * DARI barfu

atau cukup jatuhkan dan buat ulang

  1. DROP TABEL JIKA ADA Fubar
  2. BUAT TABEL SEMENTARA id SELECT fubar, nama DARI barfu

Dengan SQL murni itu adalah dua kelas solusi nyata Anda. Saya suka yang kedua lebih baik.

(Dengan prosedur tersimpan Anda bisa menguranginya menjadi satu pernyataan. Sesuatu seperti: TruncateAndPopulate (fubar) Tetapi pada saat Anda menulis kode untuk TruncateAndPopulate () Anda akan menghabiskan lebih banyak waktu daripada hanya menggunakan SQL di atas.)

22
mdahlman

jalankan permintaan apa pun jika tabel ada.

Penggunaan: call Edit_table(database-name,table-name,query-string);

  • Prosedur akan memeriksa keberadaan nama-tabel di bawah nama-database dan akan mengeksekusi query-string jika ada. Berikut adalah prosedur tersimpan:
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 ;

Lebih lanjut tentang Mysql

3
kedar

Anda dapat melakukan pemotongan setelah 'buat jika tidak ada'. Dengan begitu akan selalu ada ... dan selalu kosong pada saat itu.

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

bagaimana tentang:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

Atau maksud Anda hanya ingin melakukannya dengan satu permintaan?

2
Ben

Baiklah kalau begitu, tidak buruk. Untuk lebih spesifik, permintaan saat ini melakukan sesuatu seperti:

 $ sql1 = "TRUNCATE TABLE fubar"; 
 $ sql2 = "CREATE TABEL SEMENTARA JIKA TIDAK ADA FUBAR SELECT id, beri nama FROM barfu";

Pertama kali metode yang mengandung ini dijalankan, ia menghasilkan pesan kesalahan pada truncate karena tabel belum ada.

Apakah satu-satunya pilihan saya untuk melakukan "CREATE TABLE", jalankan "TRUNCATE TABLE", dan kemudian isi tabelnya? (3 pertanyaan terpisah)

PS - terima kasih telah merespons begitu cepat!

0
shmuel613

Jika Anda menggunakan PHP, gunakan mysql_list_tables untuk memeriksa bahwa tabel ada sebelum TRUNCATE.

0
Lastnico