2012-02-14 24 views
16

Điều này DROP TABLE IF EXISTS hoạt động, quá tệ là RENAME TABLE IF EXISTS không hoạt động.Mysql: RENAME BẢNG NẾU DANH SÁCH

Có ai có thể đề xuất giải pháp cho truy vấn này không?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS video_top_day TO video_top_day_for_delete' at line 1 

truy vấn:

RENAME TABLE IF EXISTS video_top_day TO video_top_day_for_delete 
+0

Bạn đã quên đăng truy vấn chưa? – Schiavini

+0

Phiên bản nào của máy chủ Mysql được tham gia? Thông báo lỗi/mã là gì? – rkosegi

+0

phiên bản của mysql là 5.5.8 – Somebody

Trả lời

29

tôi đã quản lý để thực thi một mã mà luôn luôn làm việc và tạo ra không lỗi khi bàn không tồn tại:

SELECT Count(*) 
INTO @exists 
FROM information_schema.tables 
WHERE table_schema = [DATABASE_NAME] 
    AND table_type = 'BASE TABLE' 
    AND table_name = 'video_top_day'; 

SET @query = If(@exists>0, 
    'RENAME TABLE video_top_day TO video_top_day_for_delete', 
    'SELECT \'nothing to rename\' status'); 

PREPARE stmt FROM @query; 

EXECUTE stmt; 

khi bạn không muốn thay thế [DATABASE NAME] bằng tay bạn có thể sử dụng sau biến

SELECT DATABASE() INTO @db_name FROM DUAL; 
+1

Tôi sẽ sử dụng cách tiếp cận tương tự. +1 – rkosegi

+1

Thuật toán Slick, +1 !!! – RolandoMySQLDBA

+1

Đã thay đổi chủ sở hữu câu trả lời. – Somebody

2
create table table2 like table1; 
insert into table2 select * from table1; 
drop table table1; 
+1

Để lại một bình luận khi bạn downvote – matino

+1

điều này không giải quyết được vấn đề. nếu table1 không tồn tại thì sao? Ngoài ra, bạn đang sao chép toàn bộ bảng vào một bảng khác chỉ để thay đổi tên của nó! – vulkanino

+0

Thay đổi 'TẠO BẢNG 'thành' TẠO BẢNG NẾU KHÔNG TUYỆT VỜI' và bạn có một giải pháp công bằng. –

9

Không có giải pháp chính thức được nêu ra. Đã có feature request được gửi vào năm 2004, không bao giờ đóng

+0

Cảm ơn bạn đời, vì vậy tôi đoán tôi sẽ phải thực hiện một truy vấn khác trước khi đổi tên SHOW BẢNG THÍCH 'video_top_day'. Tôi sẽ sớm chấp nhận câu trả lời của bạn. – Somebody

9

Tạo bảng đầu tiên IF NOT EXISTS. Sau đó RENAME nó, vì vậy nó sẽ luôn luôn tồn tại!

Nếu không, hãy đổi tên bảng và nếu nó không tồn tại, hãy xử lý lỗi.

Điều hiển nhiên, nhưng nó hoạt động.

+0

Tôi sẽ không sử dụng IF NOT EXISTS. : D Mate bạn giống như Captain Obviousness. – Somebody

+0

Tôi sẽ tạo một truy vấn khác trong một chuỗi để kiểm tra xem bảng đó có tồn tại hay không. Nhưng lỗi xử lý cũng sẽ hoạt động. Hmm thậm chí có thể tốt hơn kiểm tra, tôi có thể chuyển sang chuỗi chuỗi tiếp theo. – Somebody

0

Nếu bạn đã quen với PL/SQL, sau đó bạn có thể kiểm tra sự tồn tại của bảng bằng cách truy vấn bảng information_schema và trên cơ sở này thực hiện đổi tên

-2

đổi tên bảng oldtablename thành newtablename

Các vấn đề liên quan