it-swarm-vi.tech

MySql - Tạo bảng nếu không tồn tại cắt bỏ?

Đây là câu hỏi cập nhật:

truy vấn hiện tại đang làm một cái gì đó như:

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

Lần đầu tiên phương thức chứa phương thức này được chạy, nó sẽ tạo ra một thông báo lỗi trên phần cắt vì bảng chưa tồn tại.

Là lựa chọn duy nhất của tôi để thực hiện CREATE TABLE, chạy TRUNCATE TABLE, sau đó điền vào bảng? (3 truy vấn riêng)

câu hỏi ban đầu là:

Tôi đã có một thời gian khó khăn để cố gắng tìm hiểu xem những điều sau đây có thể có trong MySql mà không phải viết khối sql:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Nếu tôi chạy cắt ngắn riêng trước bảng tạo và bảng không tồn tại, thì tôi nhận được thông báo lỗi. Tôi đang cố gắng loại bỏ thông báo lỗi đó mà không phải thêm bất kỳ truy vấn nào.

Mã này sẽ được thực thi bằng PHP.

20
shmuel613

shmuel613, sẽ tốt hơn nếu cập nhật câu hỏi ban đầu của bạn thay vì trả lời. Sẽ tốt nhất nếu có một nơi duy nhất chứa câu hỏi hoàn chỉnh thay vì đặt nó trong một cuộc thảo luận.

Câu trả lời của Ben là hợp lý, ngoại trừ anh ta dường như có một "không" nơi anh ta không muốn. Bỏ bảng chỉ khi nó không tồn tại không hoàn toàn đúng.

Bạn thực sự sẽ cần nhiều báo cáo. Hoặc có điều kiện tạo sau đó dân cư:

  1. TẠO BẢNG TẠM THỜI NẾU KHÔNG EXISTS fubar (id int, name varchar (80))
  2. BẢNG TRUNCATE
  3. CHỌN VÀO fubar CHỌN * TỪ barfu

hoặc chỉ cần thả và tái tạo

  1. BẢNG DROP NẾU EXISTS fubar
  2. TẠO BẢNG TẠM THỜI fubar CHỌN id, tên TỪ barfu

Với SQL thuần túy, đó là hai lớp giải pháp thực sự của bạn. Tôi thích thứ hai tốt hơn.

(Với một thủ tục được lưu trữ, bạn có thể giảm nó thành một câu lệnh đơn giản

22
mdahlman

thực hiện bất kỳ truy vấn nếu bảng tồn tại.

Cách sử dụng: call Edit_table(database-name,table-name,query-string);

  • Quy trình sẽ kiểm tra sự tồn tại của tên bảng dưới tên cơ sở dữ liệu và sẽ thực thi chuỗi truy vấn nếu nó tồn tại. [.__.] Sau đây là thủ tục được lưu trữ:
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 ;

Thông tin thêm về Mysql

3
kedar

Bạn có thể thực hiện cắt ngắn sau 'tạo nếu không tồn tại'. [.__.

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

làm thế nào về:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

Hay bạn có nghĩa là bạn chỉ muốn làm điều đó với một truy vấn duy nhất?

2
Ben

Được rồi, không tệ. Để cụ thể hơn, truy vấn hiện tại đang làm một cái gì đó như:

[.__.] $ sql1 = "TRUNCATE TABLE fubar"; [.___

Lần đầu tiên phương thức chứa phương thức này được chạy, nó sẽ tạo ra một thông báo lỗi trên phần cắt vì bảng chưa tồn tại.

Là lựa chọn duy nhất của tôi để thực hiện "TẠO BẢNG", chạy "BẢNG TRUNCATE", sau đó điền vào bảng? (3 truy vấn riêng)

PS - cảm ơn vì đã trả lời rất nhanh!

0
shmuel613

Nếu bạn đang sử dụng PHP, hãy sử dụng mysql_list_tables để kiểm tra xem bảng có tồn tại trước TRUNCATE không.

0
Lastnico