Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chèn bảng MySQL Temp

làm việc theo những gì Code-Monk đã viết, hãy xem xét những điều sau:

drop procedure if exists uspK;
DELIMITER $$
create procedure uspK ()
BEGIN
    drop temporary table if exists temp; -- could be some other random structure residue

    create temporary table temp
    SELECT aID, bID
    FROM tags
    WHERE placeID = "abc" AND tagID = "def";

    -- use the temp table somehow
    -- ...
    -- ...
    -- ...

    drop temporary table temp; -- otherwise it survives the stored proc call
END
$$ -- signify end of block
DELIMITER ; -- reset to default delimiter

Quy trình lưu trữ thử nghiệm

call uspK(); -- test it, no warnings on edge conditions

Không nên làm gì

Một người sẽ không tìm thấy nhiều may mắn với những điều sau đây. Nếu bạn nghĩ vậy, hãy chạy nó một vài lần;

drop procedure if exists uspK;
DELIMITER $$
create procedure uspK ()
BEGIN
    -- drop temporary table if exists temp;

    create temporary table if not exists temp
    SELECT aID, bID
    FROM tags
    WHERE placeID = "abc" AND tagID = "def";

    -- use the temp table somehow
    -- ...
    -- ...
    -- ...

    -- drop temporary table temp; -- otherwise it survives the stored proc call
END
$$ -- signify end of block
DELIMITER ; -- reset to default delimiter

bởi vì create temporary table if not exists temp có vảy

Nhận xét chung

Người ta không nên bắt tay vào viết các tài liệu lưu trữ cho đến khi phần nào thông thạo về chủ đề đơn giản của DELIMITERS. Đã viết về chúng trong một phần tại đây được gọi là Dấu phân cách . Chỉ hy vọng giúp bạn thoát khỏi thời gian lãng phí không cần thiết cho một việc đơn giản như vậy, còn hơn có thể lãng phí nhiều thời gian gỡ lỗi.

Ngoài ra, ở đây trong câu hỏi của bạn, cũng như trong tài liệu tham khảo đó, hãy nhớ rằng việc tạo bảng là DDL cái đó có thể có một tỷ lệ lớn của cấu hình tổng thể (hiệu suất). Nó làm chậm một proc so với việc sử dụng một bảng có sẵn từ trước. Người ta có thể nghĩ rằng cuộc gọi là tức thời, nhưng không phải vậy. Do đó, về hiệu suất, việc sử dụng một bảng có sẵn với những kết quả được đưa vào rowId được phân đoạn của riêng chúng sẽ nhanh hơn nhiều so với việc chịu đựng chi phí DDL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể chèn dữ liệu vào cơ sở dữ liệu bằng cách sử dụng tùy chọn (textarea)

  2. Mysql Real Escape String Hàm PHP Thêm \ vào Mục nhập Trường của Tôi

  3. Ví dụ về cách sử dụng bind_result và get_result

  4. Lỗi # 2002 Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/Application/MAMP/tmp/mysql/mysql.sock' (2)

  5. Nhiều khóa ngoại trong một bảng này sang một bảng khác trong mysql