T&R splet blog o spletnih storitvah. Razgaljamo tehnologijo!

reference spletnih strani
10th August

MySQL kreiranje tabele s SELECT stavkom

Vsi poznamo standardni SQL stavek, ki nam kreira tabelo z določenimi polji, indexi, auto_increment poljem in tako naprej. Obstajajo pa tudi drugi način za kreiranje tabel in sicer s SELECT stavkom.

Primer standardnega SQL CREATE stavka:

MySQL:
  1. CREATE TABLE `example` (
  2. `id` BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
  3. `fid` BIGINT( 20 ) UNSIGNED NOT NULL ,
  4. `status` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0',
  5. PRIMARY KEY ( `id` ) ,
  6. INDEX ( `fid` )
  7. ) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci

Kot že rečeno pa obstaja tudi možnost kreiranje tabele z SELECT stavkom. Kako deluje? Izvedemo SELECT stavek z določene tabele ter pred SELECT stavkom dodamo CREATE TABLE `ime tabele`. Nato CREATE stavek kreira tabelo na podlagi rezultatov, ki jih vrne SELECT. Kreira natako toliko število stolpcev (enakega tipa kot je struktura rezultata - SELECT) ter vrstic.

Preprost primer:

MySQL:
  1. DROP TABLE IF EXISTS `example`;
  2. CREATE TABLE `example` SELECT CONCAT_WS(' ', name, surname) AS name, email FROM `members`

Sledeči stavek kreira tabelo z dvema stolpcema, kjer združimo name ter surname v en stolpec. Struktura kreirane tabele:

MySQL:
  1. CREATE TABLE `example` (
  2.  `name` VARCHAR(511) DEFAULT NULL,
  3.  `email` VARCHAR(255) DEFAULT NULL
  4. ) ENGINE=INNODB DEFAULT CHARSET=utf8

Kot vidite se struktura tabele prilagodi glede ne strukturo rezultata (varchar (xyz)). Kaj pa če želimo za vsako vrstico določiti zaporedni unique ID? Uporabimo @spremenljivko:

MySQL:
  1. SELECT @row_id := 0;
  2. CREATE TABLE `example` SELECT @row_id := @row_id + 1 As id, CONCAT_WS(' ', name, surname) AS name, email FROM `members`

Za dodatek pa lahko še dodamo indexe, ko je tabela že kreirana:

MySQL:
  1. ALTER TABLE `example` ADD PRIMARY KEY ( `id` );
  2. ALTER TABLE `example` CHANGE `id` `id` BIGINT( 20 ) UNSIGNED NULL AUTO_INCREMENT;

Dodatne informacije:

Ste tudi vi že kdaj kreirali tabelo s SELECT stavkom? Uporabljate/poznate tudi kakšne druge podobne načine?

Deli s skupnostjo:

  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Podobni članki:

  1. MySQL dupliciranje podatkov z INSERT INTO SELECT stavkom
  2. MySQL date BETWEEN – DATE FORMAT
  3. MySQL – date funkcije – current date, now, add date, sub date, interval
  4. Preprosta skripta – kreiranje Excel datoteke iz PHP tabele/array
  5. MySQL iskanje LIKE vs FULL-TEXT
  6. Konverzija CP1250, ISO-8859-1 baze v UTF-8 – šumniki UTF-8 – cp1250 to utf8
  7. Pretvorba PHP MySQL aplikacije v PHP MS SQL aplikacijo (apache, php, mdb2, mysql => iis, php, mdb2, mssql)
  8. Kako preveriti ali že obstaja določena MySQL tabela
  9. UTF-8 tabele, vendar latin1 podatki ter povezava
  10. Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like

5x komentirano na “MySQL kreiranje tabele s SELECT stavkom”

  1. brezimenko je napisal:

    Zanimivo. Mogoče še en konkreten primer aplikacije, kjer bi bilo tole uporabno?

  2. ace je napisal:

    če dobro pomislim, sem tabele kreiral z queryji samo na enem projektu do zdaj, sicer pa to vedno počne phpmyadmin namesto mene. :) Kreiranje z selectom iz druge tabele, je pa res še za kanček bolj specifičen feature in si je kar težko zamisliti nek case study, kot je ugotovil že komentator pred mano. :)

  3. ace je napisal:

    P.S. če človek ne vpiše emaila ob komentarju, dobi Internal server error. To je pa kar resen error. :)

  4. Roky je napisal:

    @ace bom pogledal, hvala za poročilo.

    Uporaben primer? Naprimer ko imaš neko tabelo z preveč podatki, ki opočasnujejo zadevo. Zato kreiraš tabelo (ki pa mora biti permanentna, ne kot view ali temp table), ki vsebuje strukturo, ki jo nujno potrebuješ in s tem pohitriš celoten proces. To recimo pride v poštev za RES veliko vrstic, kjer se vsaka minimalna stvar pozna:) Ja, najbrš je tut kakšen drug način zato ... ampak tale CREATE from select je pač ena izmed teh.

  5. MySQL dupliciranje podatkov s INSERT INTO SELECT stavkom | .: TRSplet - internetne storitve :. je napisal:

    [...] Kreiranje tabele oz. strukture tabele s pomočjo SELECT stavka [...]

Dodaj komentar