Aprobat de cei mai buni programatori ruși









ECK (expr) tip: TINYINT [(lungime)] [UNSIGNED] [ZEROFILL] sau SMALLINT [(lungime)] [UNSIGNED] [ZEROFILL] sau MEDIUMINT [(lungime)] [UNSIGNED] [ZEROFILL] sau INT [(lungime) ] [uNSIGNED] [ZEROFILL] sau INTEGER [(lungime)] [uNSIGNED] [ZEROFILL] sau BIGINT [(lungime)] [nesemnat] [ZEROFILL] sau REAL [(lungime, zecimale)] [uNSIGNED] [ZEROFILL] sau DOUBLE [(lungime, zecimale)] [uNSIGNED] [ZEROFILL] sau FLOAT [(lungime, zecimale)] [nesemnat] [ZEROFILL] sau DECIMAL (lungime, zecimale) [nesemnat] [ZEROFILL] sau NUMERIC (lungime, zecimale) [uNSIGNED ] [ZEROFILL] sau CHAR (lungime) [BINARY] sau VARCHAR (lungime) [BINARY] sau DATE și TIME sau TIMESTAMP sau DATETIME sau TINYBLOB sau BLOB sau MEDIUMBLOB sau LONGBLOB sau TINYTEXT sau TEXT sau MEDIUMTEXT sau LONGTEXT sau ENUM (valoare1, valoare2 , valoarea3) sau SET (valoare1, valoare2, valoarea3) index_col_name: COL_NAME [(lungime)] reference_definition: [. (index_col_name)] REFERINȚE tbl_name [POTRIVIRE FULL | .. MECI PARȚIALĂ] [ON reference_option DELETE] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | Nici o acțiune | table_options SET DEFAULT: TYPE = sau AUTO_INCREMENT = # sau AVG_ROW_LENGTH = # sau CHECKSUM = sau COMMENT = "string" sau MAX_ROWS = # sau MIN_ROWS = # sau = PACK_KEYS sau PAROLĂ = "string" sau DELAY_KEY_WRITE = sau ROW_FORMAT = sau RAID_TYPE = RAID_CHUNKS = # RAID_CHUNKSIZE = # sau UNION = (table_name, [. nume_tabelă]) sau INSERT_METHOD = sau directorului de date = "calea absolută în directorul" sau fișier index = "calea absolută în directorul" select_statement: [IGNORE | REPLACE] SELECT. (orice instrucțiune SELECT valabilă)

Instrucțiunea CREATE TABLE creează un tabel cu numele specificat în baza de date curentă. Regulile pentru nume de tabele valide sunt date în secțiunea 6.1.2 Denumiri de baze de date, tabele, coloane, aliasuri index. Dacă nu există o bază de date curentă activă sau tabelul specificat există deja, apare o eroare de execuție a comenzii.

În MySQL versiunea 3.22 și mai târziu, numele tabelului poate fi specificat ca nume db_name.tbl_name. Această formă de înregistrare funcționează indiferent dacă baza de date specificată este actuală.

În MySQL versiunea 3.23, când creați un tabel, puteți utiliza cuvântul cheie TEMPORARY. Tabelul temporar este șters automat când conexiunea este finalizată, iar numele său este valabil numai în timpul acestei conexiuni. Aceasta înseamnă că tabelele temporare cu același nume pot fi utilizate în două conexiuni diferite, fără a exista conflicte între ele sau cu un tabel existent cu același nume (tabelul existent este ascuns până când tabela temporară este șters). În MySQL 4.0.2, trebuie să aveți privilegiile CREATE TEMPORARY TABLES pentru a crea tabele temporare.

În MySQL versiunea 3.23 și mai târziu, puteți utiliza cuvintele cheie DACĂ NU EXISTĂ, astfel încât să nu apară o eroare dacă tabela specificată există deja. Ar trebui să se țină seama de faptul că acest lucru nu verifică identitatea structurilor acestor tabele.

Fiecare tabel tbl_name este reprezentat de anumite fișiere din directorul bază de date. În cazul tabelelor ca MyISAM, acestea sunt următoarele fișiere:

Fișier definiție tabel

Pentru mai multe informații despre proprietățile diferitelor tipuri de coloane, consultați secțiunea 6.2 Tipuri de coloane.

BDB sau Berkeley_db

Tabele cu suport pentru tranzacții și blocarea paginilor. Vezi tabelele BDB sau Berkeley_DB.

Datele pentru acest tabel sunt stocate numai în memorie. Vezi secțiunea 7.4 Tabele HEAP.

Programa inițială a mesei. Vezi tabelele ISAM.

Tabele cu suport pentru tranzacții și blocare de rânduri. Vezi secțiunea 7.5 Tabele InnoDB.

Un set de tabele MyISAM, folosit ca o singură masă. Vezi secțiunea 7.2 Tabelele MERGE.

Alias ​​pentru mesele MERGE

Un nou handler care oferă portabilitatea tablelor în formă binară, care înlocuiește ISAM. Vezi tabelele MyISAM.

Consultați secțiunea 7 Tipuri de tabele MySQL. Dacă specificați un tip de tabel care nu este acceptat de această versiune, MySQL va selecta cel mai apropiat unul de tipul specificat din tipurile posibile. De exemplu, dacă specificați TYPE = BDB și această distribuție MySQL nu suportă tabelele BDB. atunci tabelul MyISAM va fi creat în schimb. Alte opțiuni tabulare sunt utilizate pentru a optimiza caracteristicile tabelului. În majoritatea cazurilor, aceste opțiuni nu necesită o instalare specială. Aceste opțiuni funcționează cu toate tipurile de tabele, dacă nu se specifică altfel:

Următoarea valoare este AUTO_INCREMENT. care ar trebui setat pentru acest tabel (MyISAM).

Valoarea aproximativă a lungimii medii a unui rând pentru un tabel dat. Este logic să instalați numai pentru tabele extinse cu înregistrări cu lungime variabilă.

Ar trebui să fie setat la 1. pentru a se asigura că sumele de control pentru toate rândurile sunt suportate în MySQL (acest lucru face ca tabelele să fie ușor mai mici la upgrade, dar facilitează găsirea tabelelor corupte) (MyISAM).

Numărul maxim de rânduri care vor fi stocate în acest tabel.

Numărul minim de rânduri care vor fi stocate în acest tabel.

Ar trebui setat la 1 pentru a obține un index mai mic. De obicei, aceasta încetinește actualizarea și accelerează citirea (MyISAM.ISAM). Setarea la 0 va dezactiva compactarea tastelor. Când este instalat în DEFAULT (MySQL 4.0), manipulatorul de tabele va comprima doar coloane lungi CHAR / VARCHAR.

Criptează fișierul .frm cu o parolă. Această opțiune nu funcționează în versiunea standard a MySQL.

Setarea la 1 întârzie operația de actualizare a tabelului cheilor până când tabela specificată (MyISAM) este închisă.

Specifică modul de stocare a rândurilor. În prezent, această opțiune funcționează numai cu tabelele MyISAM. care suportă formatele liniei DYNAMIC și FIXED. Consultați secțiunea 7.1.2 Formate de tabelă MyISAM.

Dacă utilizați tabele MySQL MyISAM evalueaza expresia MAX_ROWS * avg_row_length. pentru a determina cât de mare va fi masa de rezultat. În cazul în care nu este specificat, nici una dintre opțiunile de mai sus, dimensiunea maximă a tabelului va fi de 4 GB (2 GB sau dacă sistemul de operare acceptă numai până la dimensiunea de 2 GB a tabelului). Acest lucru este de a se asigura că în cazul în care nu este nevoie reală pentru fișiere mari, pentru a limita dimensiunea unui pointer, care va face indicele mai mici și mai repede. În cazul în care opțiunea PACK_KEYS nu este utilizat, implicit este sigilat doar siruri de caractere, dar nu numere. Când se utilizează PACK_KEYS = 1 numărul va fi sigilat. Atunci când compactarea cheie numerică binară MySQL va utiliza compresie prefix. Acest lucru înseamnă că beneficiile acestei vor fi semnificative numai în cazul unui număr mare de numere identice. La comprimarea prefixe pentru fiecare nevoile cheie un octet suplimentar, care indică cât de multe bytes cheie anterioare sunt aceleași ca și pentru următoarele (rețineți că indicatorul într-un șir de caractere stocate în ordinea de „big-octet-pentru-lansare“, imediat după ce cheia - pentru a îmbunătăți compresie). Acest lucru înseamnă că, atunci când există mai multe chei identice în două rânduri de înregistrare pentru toate "cheile ulterioare` similare vor ocupa doar 2 octeți (inclusiv indicatorul liniei). Comparați: în cazul obișnuit pentru stocarea cheilor necesare razmer_hraneniya_klyucha ulterioare + razmer_ukazatelya (de obicei 4) bytes. Pe de altă parte, dacă toate cheile sunt total diferite, fiecare tastă va ocupa un octet mai mult în cazul în care cheia nu poate avea o valoare NULL (în acest caz, cheia ambalate vor fi stocate în același octet, care este utilizat pentru a indica faptul că cheia este NULL) .
  • Dacă comanda SELECT este specificată după comanda CREATE. atunci MySQL va crea noi câmpuri pentru toate elementele din acest SELECT. De exemplu: Această comandă va crea un tabel MyISAM cu trei coloane a. b și c. Rețineți că coloanele din comanda SELECT sunt atașate la tabelul din dreapta, mai degrabă decât suprapuse. Luați în considerare următorul exemplu: Fiecare rând din tabelul foo este adăugat la bara de tabel cu valoarea lui de la foo. Valorile implicite sunt scrise în coloanele noi din tabelul de bare. Comanda CREATE TABLE. SELECT nu creează automat indici. Acest lucru se face în mod deliberat, astfel încât echipa să fie cât mai flexibilă posibil. Pentru a avea indici în tabelul creat, trebuie să le specificați înainte de această comandă SELECT. Dacă apare o eroare la copierea datelor într-un tabel, acestea vor fi șterse automat. Pentru a vă asigura că puteți utiliza jurnalul de actualizare / jurnalul binar pentru a restaura tabelele, în MySQL, în timpul executării comenzii CREATE TABLE. SELECT nu permite inserții paralele.
  • Utilizând opțiunea RAID_TYPE. Puteți diviza fișierul de date MyISAM în secțiuni pentru a depăși limita de 2GB / 4GB a sistemului de fișiere aflat sub control OS care nu acceptă fișiere mari. Pauza nu se aplică fișierului index. Rețineți că pentru sistemele de fișiere care acceptă fișiere mari această opțiune nu este recomandată! Pentru a obține o viteză de intrare / ieșire mai mare, puteți plasa directoarele RAID pe diferite discuri fizice. RAID_TYPE va funcționa în orice sistem de operare dacă configurația MySQL este efectuată cu opțiunea --with-raid. În prezent, numai opțiunea STRIPED este disponibilă pentru opțiunea RAID_TYPE (1 și RAID0 sunt alias-uri pentru aceasta). Dacă specificați RAID_TYPE = STRIPED pentru tabela MyISAM. atunci MyISAM va crea subdirectoarele RAID_CHUNKS cu numele `00 '. `01 '. `02 'din directorul bazei de date. În fiecare dintre aceste directoare MyISAM va crea un fișier numit `table_name.MYD '. Când scrieți date pe un handler RAID fișier de date va stabili prima linie RAID_CHUNKSIZE * 1024 bytes la primul-menționat fișier, următoarele RAID_CHUNKSIZE * 1024 bytes - fișierul următor și așa mai departe.
  • Opțiunea UNION este utilizată dacă doriți să utilizați un set de tabele identice ca tabel. Funcționează numai cu mesele MERGE. Vezi secțiunea 7.2 Tabelele MERGE. În prezent, pentru tabele care sunt mapate în tabelul MERGE. trebuie să aveți privilegii SELECT. UPDATE și DELETE. Toate tabelele mapate trebuie să aparțină aceleiași baze de date ca și tabelul MERGE.
  • Pentru a introduce date în tabela MERGE, trebuie să o specificați cu INSERT_METHOD. în care tabelă trebuie introdusă această linie. Vezi secțiunea 7.2 Tabelele MERGE. Această opțiune a fost introdusă în MySQL 4.0.0.
  • În tabelul creat, tasta PRIMARY va fi plasată mai întâi, urmată de toate tastele UNIQUE și apoi tastele simple. Acest lucru ajută optimizatorul MySQL să determine prioritățile cheilor folosite și să determine mai rapid cheile UNIQUE duplicate.
  • Utilizarea opțiunilor DATA DIRECTORY = "director" sau INDEX DIRECTORY = "director". puteți specifica locul unde manipulatorul de tabele ar trebui să își plaseze tabelele și fișierele index. Rețineți că parametrul director specificat trebuie să fie calea completă la directorul necesar (și nu calea relativă). Aceste opțiuni funcționează numai pentru tabelele MyISAM din MySQL 4.0, cu excepția cazului în care utilizați opțiunea --skip-symlink. Vezi secțiunea 5.6.1.2 Utilizarea legăturilor simbolice pentru tabele.
  • MySQL.RU. Aprobat de cei mai buni programatori ruși