Saya bingung, saya tidak tahu bagaimana cara melakukan ini.
Pada dasarnya saya hanya ingin membuat tabel, tetapi jika ada, harus dijatuhkan dan dibuat kembali, tidak dipotong, tetapi jika tidak ada, buat saja.
Adakah yang bisa membantu?
Terima kasih, George
διαγραφή πίνακα, εφόσον υπάρχει
.Jawaban:
Letakkan
DROP TABLE IF EXISTS `tablename`;
sebelumCREATE TABLE
pernyataan Anda .Pernyataan itu menjatuhkan tabel jika ada tetapi tidak akan membuat kesalahan jika tidak.
sumber
DROP TABLE IF EXISTS 'table1', 'table2';
danDROP VIEW IF EXISTS 'view1', 'view2';
PS- Sihir apa yang Anda gunakan untuk memiliki kode inline !?Cukup gunakan
DROP TABLE IF EXISTS
:Coba cari dokumentasi MySQL terlebih dahulu jika Anda memiliki masalah lain.
sumber
Baiklah ... Hah. Selama bertahun-tahun tidak ada yang menyebutkan satu hal yang halus.
Meskipun
DROP TABLE IF EXISTS `bla`; CREATE TABLE `bla` ( ... );
tampaknya masuk akal, ini mengarah ke situasi ketika tabel lama sudah hilang dan yang baru belum dibuat: beberapa klien mungkin mencoba mengakses tabel subjek tepat pada saat ini.Cara yang lebih baik adalah membuat tabel baru dan menukarnya dengan yang lama (isi tabel hilang):
CREATE ...
dan jangan melanjutkan jika ada kesalahan , karena kegagalan berarti bahwa utas lain tidak menyelesaikan skrip yang sama: baik karena terhenti di tengah atau baru saja tidak selesai - itu ide yang baik untuk periksa semuanya sendiri.RENAME ...
dan jangan melanjutkan jika berhasil : seluruh operasi berhasil diselesaikan; bahkan lebih, menjalankan selanjutnyaRENAME ...
dapat (dan akan) tidak aman jika utas lain sudah memulai urutan yang sama (lebih baik untuk menutup kasus ini daripada tidak untuk menutupi, lihat mengunci catatan di bawah).RENAME ...
secara atom menggantikan definisi tabel, lihat manual MySQL untuk detailnya.DROP ...
membersihkan meja lama, jelas.Membungkus semua pernyataan dengan sesuatu seperti
SELECT GET_LOCK('__upgrade', -1); ... DO RELEASE_LOCK('__upgrade');
memungkinkan untuk menjalankan semua pernyataan secara berurutan tanpa pengecekan kesalahan, tapi saya rasa itu bukan ide yang bagus: kompleksitas meningkat dan fungsi penguncian di MySQL tidak aman untuk replikasi berbasis pernyataan.Jika data tabel harus selamat dari peningkatan definisi tabel ... Untuk kasus umum, ini adalah cerita yang jauh lebih kompleks tentang membandingkan definisi tabel untuk menemukan perbedaan dan menghasilkan
ALTER ...
pernyataan yang tepat , yang tidak selalu memungkinkan secara otomatis, misalnya ketika kolom diganti nama.Side note 1: Anda dapat menangani dengan pemandangan menggunakan pendekatan yang sama, dalam hal ini
CREATE/DROP TABLE
hanya mengubah keCREATE/DROP VIEW
sedangkanRENAME TABLE
sisa-sisa tidak berubah. Bahkan Anda bahkan dapat mengubah tabel menjadi tampilan dan sebaliknya.Catatan 2: Pengguna MariaDB harus senang
CREATE OR REPLACE TABLE/VIEW
, yang sudah peduli dengan masalah subjek dan itu poin yang baik.sumber
Saya perlu menjatuhkan tabel dan membuat ulang dengan data dari tampilan. Saya membuat tabel di luar tampilan dan inilah yang saya lakukan:
Di atas bekerja untuk saya menggunakan MySQL MariaDb.
sumber
CREATE OR REPLACE <table_name> AS SELECT * FROM <view>;