Mysql
 sql >> база данни >  >> RDS >> Mysql

Създайте временна таблица в MySQL с индекс от избран

Борих се доста време с правилния синтаксис за CREATE TEMPORARY TABLE SELECT. След като разбрах няколко неща, исках да споделя отговорите с останалата част от общността.

Основна информация за изявлението е достъпна на следните връзки към MySQL:

СЪЗДАВАНЕ НА ИЗБОР НА ТАБЛИЦА и СЪЗДАВАНЕ НА ТАБЛИЦА .

Понякога може да бъде обезсърчително да се тълкува спецификацията. Тъй като повечето хора се учат най-добре от примери, ще споделя как съм създал работещ израз и как можете да го модифицирате, за да работи за вас.

  1. Добавяне на множество индекси

    Това изявление показва как да добавите множество индекси (обърнете внимание, че имената на индекси - с малки букви - не са задължителни):

    CREATE TEMPORARY TABLE core.my_tmp_table 
    (INDEX my_index_name (tag, time), UNIQUE my_unique_index_name (order_number))
    SELECT * FROM core.my_big_table
    WHERE my_val = 1
    
  2. Добавяне на нов първичен ключ :

    CREATE TEMPORARY TABLE core.my_tmp_table 
    (PRIMARY KEY my_pkey (order_number),
    INDEX cmpd_key (user_id, time))
    SELECT * FROM core.my_big_table
    
  3. Създайте допълнителни колони

    Можете да създадете нова таблица с повече колони, отколкото са посочени в оператора SELECT. Посочете допълнителната колона в дефиницията на таблицата. Колоните, посочени в дефиницията на таблицата и неоткрити в select, ще бъдат първите колони в новата таблица, последвани от колоните, вмъкнати от оператора SELECT.

    CREATE TEMPORARY TABLE core.my_tmp_table 
    (my_new_id BIGINT NOT NULL AUTO_INCREMENT,  
    PRIMARY KEY my_pkey (my_new_id), INDEX my_unique_index_name (invoice_number))
    SELECT * FROM core.my_big_table
    
  4. Предефиниране на типове данни за колоните от SELECT

    Можете да предефинирате типа данни на колона, която се ИЗБИРА. В примера по-долу маркерът на колоната е MEDIUMINT в core.my_big_table и аз го предефинирам до BIGINT в core.my_tmp_table.

    CREATE TEMPORARY TABLE core.my_tmp_table 
    (tag BIGINT,
    my_time DATETIME,  
    INDEX my_unique_index_name (tag) )
    SELECT * FROM core.my_big_table
    
  5. Разширени дефиниции на полета по време на създаване

    Всички обичайни дефиниции на колони са налични, както когато създавате нормална таблица. Пример:

    CREATE TEMPORARY TABLE core.my_tmp_table 
    (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    value BIGINT UNSIGNED NOT NULL DEFAULT 0 UNIQUE,
    location VARCHAR(20) DEFAULT "NEEDS TO BE SET",
    country CHAR(2) DEFAULT "XX" COMMENT "Two-letter country code",  
    INDEX my_index_name (location))
    ENGINE=MyISAM 
    SELECT * FROM core.my_big_table
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да сравним две колони в MySQL

  2. Комбиниране на две таблици с sql JOIN?

  3. Дългото цяло число се трансформира, когато се вмъкне в по-къса колона, а не се съкращава. Защо? Каква е формулата?

  4. Как да отворя MySQL на моя Raspberry Pi за външни/отдалечени връзки?

  5. Как да присвоите повторно колона AUTO_INCREMENT за всеки ред в MySQL таблица с помощта на PHP