Вы находитесь на странице: 1из 11

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_de !n!t!"n#$$$%] [table_"&t!

"n'] ['elect_'tatement]

ou :
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(] LI(E "ld_tbl_name [%]) create_de !n!t!"n* c"l+mn_de !n!t!"n , [CONSTRAINT ['-mb"l]] PRIMARY (EY [!nde._t-&e] (!nde._c"l_name#$$$% , (EY [!nde._name] [!nde._t-&e] (!nde._c"l_name#$$$% , IN/EX [!nde._name] [!nde._t-&e] (!nde._c"l_name#$$$% , [CONSTRAINT ['-mb"l]] 0NI10E [IN/EX] [!nde._name] [!nde._t-&e] (!nde._c"l_name#$$$% , [F0LLTEXT,SPATIAL] [IN/EX] [!nde._name] (!nde._c"l_name#$$$% , [CONSTRAINT ['-mb"l]] FOREI2N (EY [!nde._name] (!nde._c"l_name#$$$% [re erence_de !n!t!"n] , C3EC( (e.&r% c"l+mn_de !n!t!"n* c"l_name t-&e [NOT N0LL , N0LL] [/EFA0LT de a+lt_4al+e] [A0TO_INCREMENT] [[PRIMARY] (EY] [COMMENT 5'tr!n65] [re erence_de !n!t!"n] t-&e* TINYINT[(len6t7%] [0NSI2NE/] [8EROFILL] , SMALLINT[(len6t7%] [0NSI2NE/] [8EROFILL] , ME/I0MINT[(len6t7%] [0NSI2NE/] [8EROFILL] , INT[(len6t7%] [0NSI2NE/] [8EROFILL] , INTE2ER[(len6t7%] [0NSI2NE/] [8EROFILL] , BI2INT[(len6t7%] [0NSI2NE/] [8EROFILL] , REAL[(len6t7#dec!mal'%] [0NSI2NE/] [8EROFILL] , /O0BLE[(len6t7#dec!mal'%] [0NSI2NE/] [8EROFILL] , FLOAT[(len6t7#dec!mal'%] [0NSI2NE/] [8EROFILL] , /ECIMAL(len6t7#dec!mal'% [0NSI2NE/] [8EROFILL] , N0MERIC(len6t7#dec!mal'% [0NSI2NE/] [8EROFILL] , /ATE , TIME , TIMESTAMP , /ATETIME , C3AR(len6t7% [BINARY , ASCII , 0NICO/E] , 9ARC3AR(len6t7% [BINARY] , TINYBLOB , BLOB , ME/I0MBLOB , LON2BLOB , TINYTEXT , TEXT , ME/I0MTEXT , LON2TEXT , EN0M(4al+e:#4al+e;#4al+e<#$$$% , SET(4al+e:#4al+e;#4al+e<#$$$% , '&at!al_t-&e !nde._c"l_name* c"l_name [(len6t7%] [ASC , /ESC] re erence_de !n!t!"n* REFERENCES tbl_name [(!nde._c"l_name#$$$%]

[MATC3 F0LL , MATC3 PARTIAL] [ON /ELETE re erence_"&t!"n] [ON 0P/ATE re erence_"&t!"n] re erence_"&t!"n* RESTRICT , CASCA/E , SET N0LL , NO ACTION , SET /EFA0LT table_"&t!"n'* table_"&t!"n [table_"&t!"n] $$$ table_"&t!"n* =EN2INE,TYPE> ? =B/B,3EAP,ISAM,Inn"/B,MER2E,MR2_MYISAM,MYISAM> , A0TO_INCREMENT ? 4al+e , A92_RO@_LEN2T3 ? 4al+e , C3EC(S0M ? =A , :> , COMMENT ? 5'tr!n65 , MAX_RO@S ? 4al+e , MIN_RO@S ? 4al+e , PAC(_(EYS ? =A , : , /EFA0LT> , PASS@OR/ ? 5'tr!n65 , /ELAY_(EY_@RITE ? =A , :> , RO@_FORMAT ? = /EFA0LT , /YNAMIC , FIXE/ , COMPRESSE/ > , RAI/_TYPE ? = : , STRIPE/ , RAI/A > RAI/_C30N(S ? 4al+e RAI/_C30N(SI8E ? 4al+e , 0NION ? (tbl_name[#tbl_name]$$$% , INSERT_MET3O/ ? = NO , FIRST , LAST > , /ATA /IRECTORY ? 5ab'"l+te &at7 t" d!rect"r-5 , IN/EX /IRECTORY ? 5ab'"l+te &at7 t" d!rect"r-5 , [/EFA0LT] C3ARACTER SET c7ar'et_name [COLLATE c"llat!"n_name] 'elect_'tatement* [I2NORE , REPLACE] [AS] SELECT $$$ CREATE TABLE (S"me le6al 'elect 'tatement%

Cre une table avec le nom donn, dans la base de donnes courante. Vous avez besoin des droits de CREATE pour crer une table. Les rgles de nommage des tables sont disponibles dans section 10.2 Noms de bases, tables, inde , colonnes et alias. !ar d"aut, une table est cre dans la base de donnes courante. #ne erreur est a""ic$e s%il n%& a pas de base courante, si la base de donnes n%e iste pas ou si la table e iste d'(. )n *&+,L -.22 et plus rcent, le nom de la table peut .tre spci"i avec la s&nta e db_name$tbl_name, pour crer une table dans une base spci"i/ue. Cela "onctionne m.me s%il n%& a pas de base courante. +i vous utilisez les identi"iants protgez, et mettez le nom de la base et de lui de la table entre guillemets, sparment. !ar e emple, BmadbB$BmatblB est valide, mais Bmadb$matblB ne l%est pas. 0epuis la version -.22 de *&+,L, vous pouvez utiliser le mot rserv TEMPORARY lors/ue vous crez une table. #ne table temporaire sera immdiatement e""ace ds /ue la conne ion se termine. Cela signi"ie /ue vous pouvez utiliser le m.me nom de table temporaire depuis deu conne ions di""rentes sans ris/ue de con"lit entre les conne ions. Vous pouvez aussi utiliser une table temporaire /ui a le m.me nom /u%une table e istante 1la table e istante est alors cac$e tant /ue dure la table temporaire2. )n *&+,L version 3.0.2 ou plus rcent, vous avez 'uste ( avoir le privilge CREATE TEMPORARY TABLES pour crer des tables temporaires.

0epuis la version -.2- de *&+,L, vous pouvez utiliser le mot rserv IF NOT EXISTS, de "a4on ( ce /u%aucune erreur ne soit a""ic$ si la table /ue vous essa&ez de crer e iste d'(. Notez /u%il n%& a pas de comparaisons entre les structures de table lors du test d%e istence. *&+,L reprsente c$a/ue table par un "ic$ier de d"inition de table B$ rm5, plac dans le dossier de la base de donnes. Le moteur de la table peut crer d%autres "ic$iers complmentaires. 0ans le cas des tables M-ISAM, le moteur de stoc5age utilise trois "ic$iers, avec le nom n"m_de_table :
Fichier Rle

n"m_de_table$ rm Fichier de dfinition de la table n"m_de_table$MY/ Fichier de donnes n"m_de_table$MYI Fichier d'index

Les "ic$iers crs par les moteurs de stoc5ages pour reprsenter les tables sont dcrits dans la section section 16 7&pes de tables *&+,L. !our des in"ormations gnrales sur les proprits des di""rentes colonnes, vo&ez section 12 7&pes de colonnes. !our des in"ormations sur les t&pes de donnes spatiau , vo&ez section 18 0onnes spatiales avec *&+,L.

+i ni N0LL, ni NOT N0LL n%est spci"i, une colonne utilisera par d"aut l%attribut N0LL 1elle acceptera les valeurs N0LL2. #ne colonne de nombre entier peut se voir attribuer l%attribut A0TO_INCREMENT. Lors/ue vous insrez la valeur N0LL 1recommande2 ou A dans une colonne A0TO_INCREMENT, la colonne prendra automati/uement la valeur de 4al+eC:, o9 value est la plus grande valeur positive courante dans cette colonne. La srie des valeurs A0TO_INCREMENT commence ( :. +ee section 21.2.-.-2 m-'Dl_!n'ert_!d(%. 0epuis *&+,L 3.1.1, en spci"iant l%option NO_A0TO_9AL0E_ON_8ERO pour le mode EE'DlE m"de ou la variable serveur 'Dl_m"de permet de stoc5er la valeur A dans les colonnes de t&pe A0TO_INCREMENT, au lieu de voir A prendre le proc$ain numro de s/uence. +ee section 6.2.1 :ptions de ligne de commande de m-'Dld. Note : ;l ne peut & avoir /u%une seule colonne de t&pe A0TO_INCREMENT dans une table, et elle doit .tre inde e. *&+,L version -.2- ne "onctionnera correctement /ue si cette colonne n%accueille /ue des valeurs positives. ;nsrer un nombre ngati" sera considr comme insrer un nombre de trs grande taille, mais positi". Ceci est "ait pour viter les problmes de prcision lors/ue les nombres passe de positi" ( ngati" lors/u%ils atteignent leur valeur ma imale positive. C%est aussi pour viter /u%une colonne de t&pe A0TO_INCREMENT ne contienne de valeur 0. +i vous e""acez la ligne contenant la valeur ma imale dans la colonne A0TO_INCREMENT, cette valeur sera rutilise dans les tables de t&pe ISAM mais pas dans les tables de t&pe M-ISAM. +i vous e""acez toutes les lignes dans la table avec la commande /ELETE FROM n"m_de_table 1sans la clause @3ERE% en mode A0TOCOMMIT, la srie des valeurs A0TO_INCREMENT recommencera ( A. <vec les tables M-ISAM et B/B, vous pouvez spci"ier une colonne secondaire d%A0TO_INCREMENT dans une cle" multi=colonnes. +ee section -.>.8 #tiliser A0TO_INCREMENT. !our rendre *&+,L avec certaines applications O/BC, vous pouvez retrouver la valeur de la dernire valeur automati/uement gnre avec la re/u.te suivante :
SELECT F FROM n"m_de_table @3ERE a+t"_c"l IS N0LL

0epuis *&+,L 3.1, la d"inition des colonnes peut inclure un attribut C3ARACTER SET pour spci"ier le 'eu de caractres, et ventuellement la collation de la colonne. !our des dtails, vo&ez section 11 ?eu de caractres et #nicode.
CREATE TABLE t (c C3AR(;A% C3ARACTER SET +t G COLLATE +t G_b!n%)

0epuis la version 3.1 aussi, *&+,L interprte les spci"ications de longueur de colonne en caractres. Les anciennes versions l%interprte comme des octets.

La valeur N0LL est traite di""remment dans les colonnes de t&pe TIMESTAMP. Vous ne pouvez pas stoc5er de valeur N0LL littrale dans une colonne TIMESTAMP@ insrer une valeur N0LL dans une telle colonne revient ( insrer la date et l%$eure courante. Car les colonnes TIMESTAMP ignorent les attributs N#LL et NOT N0LL. Cela "acilite grandement l%utilisation des colonnes TIMESTAMP pour les clients *&+,L : le serveur indi/ue /ue ces colonnes peuvent se voir assigner une valeur N0LL 1ce /ui est vrai2, m.me si les colonnes TIMESTAMP ne contiendront 'amais de valeur N0LL. Vous pouvez le constater lors/ue vous utiliser la commande /ESCRIBE n"m_de_table pour avoir une description de votre table. Notez /u%a""ecter la valeur A ( une colonne TIMESTAMP n%est pas la m.me c$ose /ue lui a""ecter la valeur N0LL, car A est une valeur TIMESTAMP valide. #ne valeur /EFA0LT doit .tre une constante, 4a ne peut .tre une "onction ou une e pression. Cela signi"ie notamment /ue vous ne pouvez pas donner une valeur par d"aut ( une colonne de date, le rsultat de la "onction NO@(% ou C0RRENT_/ATE. +i aucune valeur par d"aut 1attribut /EFA0LT2 n%est spci"ie, *&+,L en assigne une automati/uement +i la colonne accepte les valeur N0LL, la valeur par d"aut sera la valeur N0LL. +i la colonne est dclare comme NOT N0LL 1non=nulle2, la valeur par d"aut dpendra du t&pe de colonne : " !our les t&pes numri/ues sans l%attribut A0TO_INCREMENT, la valeur sera A. !our une colonne A0TO_INCREMENT, la valeur par d"aut sera la proc$aine valeur de la srie. " !our les t&pes dates et $eures autres /ue TIMESTAMP, la valeur par d"aut est la date zro approprie. !our les colonnes TIMESTAMP, la valeur par d"aut est la date et l%$eure courante. +ee section 12.- Les t&pes date et $eure. " !our les t&pes de c$aAnes autres /ue EN0M, la valeur par d"aut est la c$aAne vide. !our EN0M, la valeur par d"aut est la premire valeur de l%numration. Les colonnes BLOB et TEXT ne peuvent pas recevoir de valeur par d"aut.

#n commentaire pour une colonne peut .tre spci"ie avec COMMENT. Le commentaire est a""ic$ par la commande S3O@ CREATE TABLE, et par S3O@ F0LL COL0MNS. Cette option est disponible depuis *&+,L 3.1. ;l tait autoris, mais ignor dans les anciennes versions. 0epuis *&+,L version 3.1.0, l%attribut SERIAL peut .tre utilis comme alias pour les colonnes BI2INT 0NSI2NE/ NOT N0LL A0TO_INCREMENT 0NI10E. C%est une "onctionnalit de compatibilit. (EY est un s&non&me de IN/EX. 0epuis la version 3.1, l%attribut de cl PRIMARY (EY peut aussi .tre spci"i avec la clause (EY. ;l a t implment pour assurer la compatibilit avec les autres bases.

<vec *&+,L, une cl 0NI10E peut avoir uni/uement avoir deu valeurs distinctes. #ne erreur surviendra si vous essa&ez d%a'outer une ligne dont la cl correspond ( une ligne e istante. #ne cl primaire 1PRIMARY (EY2 est un inde 0NI10E avec la contrainte supplmentaire /ue les toutes les colonnes utilises doit avoir l%attribut NOT N0LL. )n *&+,L, cette cl est dite PRIMARY. #ne table ne peut avoir /u%une seule cl primaire. +i vous n%avez pas de PRIMARY (EY et /ue des applications demandent la PRIMARY (EY dans vos tables, *&+,L retournera la premire cl 0NI10E, /ui n%a aucune valeur N0LL. 0ans une table cre, la cl primaire PRIMARY (EY est place en premire, suivie de tous les inde 0NI10E, et en"in, les inde non=uni/ue. Cela permet ( l%optimiseur *&+,L d%utiliser en priorit les inde , et de dtecter rapidement les doublons pour les cls 0NI10E. #ne PRIMARY (EY peut .tre multi=colonnes. Cependant, vous ne pouvez pas crer d%inde multi=colonnes avec l%attribut PRIMARY (EY dans une spci"ication de colonne. )n "aisant cela, le seul rsultat sera /ue cette seule colonne sera mar/ue comme cl primaire. Vous devez absolument utiliser la s&nta e PRIMARY (EY 1!nde._n"m_de_c"l"nne, ...2. +i une cl primaire 1PRIMARY2 ou uni/ue 10NI10E2 est tablit sur une seule colonne, et /ue cette colonne est de t&pe entier, vous pouvez aussi "aire r"rence ( cette colonne sous le nom _r"H!d 1nouveau en version -.2-.112. <vec *&+,L, le nom de la cl primaire PRIMARY (EY est PRIMARY. +i vous ne donnez pas de nom ( un inde , l%inde prendra le nom de la premire colonne /ui le compose, avec ventuellement un su""i e 1_;, _<, ...2 pour le rendre uni/ue. Vous pouvez voir les noms des inde avec la commande S3O@ IN/EX FROM tbl_name. +ee section 13.6.-.B :btenir des in"ormations sur les bases, tables, colonnes et inde . 0epuis *&+,L 3.1.0, certains moteurs de stoc5age vous permettent de spci"ier un t&pe d%inde lors de la cration d%un inde . La s&nta e de !nde._t-&e est 0SIN2 t-&e_name. Les valeurs possibles de t-&e_name /ui sont supportes par les di""rents moteurs de stoc5ages sont lists ci=dessous. Lors/ue des inde multiples sont lists, le premier rencontr est celui par d"aut, si aucun !nde._t-&e n%est spci"i.
Moteur de table Types d'index

M-ISAM Inn"/B MEMORYI3EAP

BTREE BTREE 3AS3, BTREE

) emple :
CREATE TABLE l""J+& (!d INT# IN/EX 0SIN2 BTREE (!d%% EN2INE ? MEMORY) TYPE t-&e_name peut .tre utilis comme s&non&me de 0SIN2 t-&e_name, pour spci"ier un t&pe d%inde . Cependant, 0SIN2 est la "orme recommande. 0e plus,

le nom d%inde /ui prcde le t&pe d%inde dans la s&nta e de spci"ication n%est pas optionnelle avec TYPE. Ceci est dC au "ait /ue contrairement ( 0SIN2, TYPE n%est pas un mot rserv, et donc, il pourrait .tre interprt comme un nom d%inde . +i vous spci"iez un t&pe d%inde /ui n%est pas lgal pour le moteur de stoc5age, mais /u%il & a un autre t&pe d%inde /ue le moteur peut utiliser sans a""ecter les rsultats de la re/u.te, le moteur utilisera ce t&pe en remplacement.

+euls, les "ormats de table M-ISAM, Inn"/B, et B/B supportent des inde sur des colonnes /ui peuvent contenir des valeurs N0LL. 0ans les autres situations, vous devez dclarer ces colonnes NOT N0LL ou une erreur sera gnre. <vec la s&nta e n"m_de_c"l"nne(l"n6+e+r%, vous pouvez spci"ier un inde /ui n%utilise /u%une partie de la colonne C3AR ou 9ARC3AR. Cela peut rduire la taille des "ic$iers d%inde . +ee section B.3.- ;nde de colonnes. Le "ormat de table M-ISAM, et depuis la version *&+,L 3.0.13, Inn"/B, supportent l%inde ation des colonnes BLOB et TEXT. Lors/ue vous a'outez un inde ( une colonne BLOB ou TEXT, vous devez ABSOLUMENT spci"ier une longueur d%inde :
CREATE TABLE te't (bl"b_c"l BLOB# IN/EX(bl"b_c"l(:A%%%)

Le pr"i e peut valoir 'us/u%( 266 octets de long 1o9 1000 octets pour les tables M-ISAM et Inn"/B depuis *&+,L 3.1.22. Notez /ue le pr"i e est mesur en octets, alors /ue la longueur du pr"i e de CREATE TABLE est interprt comme un nombre de caractres. !renez cela en compte lors/ue vous spci"iez une longueur de pr"i e pour une colonne dont le 'eu de caractres est multi=octets.

#ne spci"ication !nde._c"l_name peut se terminer avec ASC ou /ESC. Ces mots cls sont prvus pour des e tensions "utures /ui permettront un stoc5age dans un ordre donn. <ctuellement, ils sont reconnus mais ignors : les inde sont stoc5s en ordre ascendant. Lors/ue vous utilisez une clause OR/ER BY ou 2RO0P BY sur une colonne de t&pe TEXT ou BLOB, seuls, les ma._'"rt_l"n6+e+r premiers octets seront lus. +ee section 12.3.2 Les t&pes BLOB et TEXT. )n *&+,L version -.2-.2- ou plus rcent, vous pouvez aussi crer des inde spcial F0LLTEXT. ;ls sont utiliss pour "aire des rec$erc$es en te te plein. +eul, le "ormat de table M-ISAM supporte les inde F0LLTEXT. ;ls peuvent .tre crs uni/uement pour les colonnes de t&pe 9ARC3AR et TEXT. L%inde ation est alors e cute sur toute la colonne, et les inde ations partielles ne sont pas supportes. supported. Voir section 1-.> Dec$erc$e en te te intgral 1F+llEte.t2 dans M-S1L pour les dtails. )n *&+,L version 3.1 ou plus rcent, vous pouvez crer les inde spciau SPATIAL pour les colonnes gograp$i/ues. Les t&pes spatiau sont supports par les tables M-ISAM, et les colonnes inde es doivent .tre dclares comme NOT N0LL. Vo&ez section 18 0onnes spatiales avec *&+,L. )n *&+,L version -.2-.33 et plus rcent, les tables Inn"/B supportent la vri"ication de cl trangres. +ee section 1> 7ables Inn"/B. Notez /ue la s&nta e des cls trangres FOREI2N (EY de Inn"/B est plus restrictive /ue la s&nta e prsente ci= dessus. Inn"/B ne permet pas la spci"ication d%un !nde._name, et les colonnes de la table r"rence doivent .tre e plicitement nommes. 0epuis la version 3.0.E, Inn"/B supporte les clauses ON /ELETE et ON 0P/ATE avec les cls trangres. Vo&ez le manuel Inn"/B pour la s&nta e prcise. section 1>.B.3 Contraintes de cls trangres FOREI2N (EY. !our les autres t&pes de tables, le serveur *&+,L n%anal&se pas les clauses FOREI2N (EY, C3EC( et REFERENCES dans les commandes CREATE TABLE, et aucune action n%est ralise. +ee section 1.E.6.6 Les cls trangres. !our les tables M-ISAM et ISAM, c$a/ue colonne N0LL re/uiert un bit supplmentaire, arrondi ( l%octet suprieur le plus proc$e. La taille ma imale d%enregistrement peut .tre calcule comme ceci :
r"H l"n6+e+r ? : C ('"mme de' l"n6+e+r' de c"l"nne'% C (n"mbre de c"l"nne' N0LL C K%IG

delete_ la6

C (n"mbre de c"l"nne' L ta!lle 4ar!able%

vaut 1 pour les tables avec un "ormat "i e. Les tables ( "ormat "i e utilisent un bit dans les lignes pour un mar/ueur, /ui indi/ue si la ligne a t e""ace. delete_ la6 vaut 0 pour les tables ( ligne d&nami/ue, car le mar/uer est stoc5 dans l%ent.te de la ligne. Ces calculs ne s%appli/uent pas au tables Inn"/B, /ui ne "ont pas la di""rente entre les colonnes N0LL et les colonnes NOT N0LL. Les options "&t!"n'_de_table et SELECT ne sont implmentes /ue dans *&+,L version -.2- et plus rcent. Les options EN2INE et TYPE spci"ie le t&pe de moteur de table. EN2INE a t a'out en *&+,L 3.0.1E, pour la srie des 3.0 et 3.1.2, pour la srie des 3.1. C%est le nom d%attribut recommand pour ces versions et TYPE est maintenant abandonn. TYPE sera support dans les sries 3. , mais abandonne probablement en *&+,L 6.1. Les di""rents t&pes de tables sont :
Table type Description Tables avec transactions. See section 15.4 Tables B/B ou BerJele-/B. Les donnes de ces tables ne sont stockes u'en !!oire. See section 15." Tables 3EAP. Le #estionnaire ori#inel de tables. See section 15.5 Tables ISAM. Tables transactionnelles avec verrou de li#nes. See section 1$ Tables Inn"/B. Un alias de 3EAP. %&n fait, de'uis ()S*L 4.1, MEMORY est le ter!e reco!!and.+ Un e!se!ble de tables M-ISAM utilises co!!e une seule et !,!e table. See section 15.- Tables asse!bles MER2E. Le nouveau #estionnaire de table binaire et 'ortable. See section 15.1 Le !oteur de tables

B/B 3EAP ISAM Inn"/B MEMORY MER2E

BerJele-/B Un alias de B/B.

MR2_M-ISAM Un s)non)!e 'our (&./& les tables. M-ISAM M-ISAM.

+ee section 16 7&pes de tables *&+,L. +i un t&pe de table est demand, mais /ue ce t&pe particulier n%est pas disponible, *&+,L va c$oisir le t&pe de table le plus proc$e de celui /ui est spci"i. !ar e emple, si TYPE?B/B est spci"i, et /ue la distribution de *&+,L ne supporte pas les tables B/B, la table /ui sera cre sera du t&pe M-ISAM. Les autres options de tables sont utilises pour optimiser le comportement de la table. 0ans la plupart des cas, vous n%avez pas ( les spci"ier. Les options "onctionnent pour tous les t&pes de tables 1sau" contre=indication2 :
A0TO_INCREMENT

A92_RO@_LEN2T3

La proc$aine valeur A0TO_INCREMENT de votre table 1M-ISAM2. Ne "onctionne /ue pour les tables M-ISAM. !our donner la premire valeur ( une colonne A0TO_INCREMENT Inn"/B, insrez une ligne bidon, avec la valeur dsire moins un, puis supprimez la ligne.

C3EC(S0M

La taille mo&enne approc$e des lignes de votre table. Vous ne devez "ournir cette valeur /ue pour les tables ( taille de ligne variable, de trs grande taille. Lors/ue vous crer une table M-ISAM, *&+,L utilise le produit des options MAX_RO@S et A92_RO@_LEN2T3 pour dcider de la taille du rsultat. +i vous ne spci"iez aucune option, la taille ma imale de la table sera de 3Fo 1ou 2Fo si votre s&stme d%e ploitation ne supporte /ue les tables de 2Fo2. Ceci sert ( conserver la taille des pointeurs d%inde petite, et rapide, si nous n%avez pas besoin de gros "ic$iers. +i vous voulez /ue vos tables dpassent 3Fo de taille, et /ue vous voulez garder les tables petites taille un peu plus lentes et grosses /ue ncessaire, vous pouvez augmenter la taille du pointeur d%inde en modi"iant la variable s&stme globale m-!'am_data_&"!nter_'!Me, /ui a t a'oute en *&+,L 3.1.2. +ee section 6.2.Variables serveur s&stme. !assez 1 si vous voulez /ue *&+,L gnre une somme de vri"ication 1ce /ui "acilite la rec$erc$e des lignes corrompues, mais ralentit les mises ( 'our2. La commande C3EC(S0M TABLE rapporte cette somme. M-ISAM uni/uement.

COMMENT MAX_RO@S MIN_RO@S PAC(_(EYS

#n commentaire pour votre table 1>0 caractres2. Nombre de lignes ma imum /ue vous pensez stoc5er dans la table. Nombre de minimum lignes /ue vous pensez stoc5er dans la table. +pci"iez 1 si vous voulez un inde plus compact. Fnralement cela rend les mises ( 'our plus lentes, mais les lectures plus rapides. +pci"ier la valeur de 0 dsactive tout le compactage de cl. +pci"ier la valeur /EFA0LT 1*&+,L 3.02 indi/ue au moteur de stoc5age de ne stoc5er /ue les colonnes C3ARG9ARC3AR. 1M-ISAM et ISAM uni/uement2 +i vous n%utilisez pas PAC(_(EYS, le comportement par d"aut est de ne stoc5er /ue les c$aAnes, et non pas les nombres. +i vous utilisez PAC(_(EYS?:, les nombres seront aussi compacts. Lors du compactage, *&+,L utilise une compression de pr"i e : C$a/ue cl re/uiert un octet de plus pour indi/uer combien d%octets sont identi/ues dans la cl prdcente. Le pointeur de ligne est stoc5 au "ormat grand=octet=en=premier, directement aprs la cl, pour amliorer la compression. Cela signi"ie /ue si vous avez de nombreuses cls proc$es sur des lignes conscutives, les cls successives HHidenti/ues%% ne prendront gnralement /ue deu octets 1incluant le pointeur de ligne2. Comparez cela ( la situation ordinaire, o9 les cls successives occupent ta!lle_de_cle C ta!lle_de_&"!nte+r 1o9 la taille du pointeur est gnralement de 32. )n cons/uence, vous tirerez le meilleur parti de cette compression si vous avez plusieurs nombres identi/ues. +i toutes les cls sont totalement di""rentes, vous utiliserez un octet de plus par cl, si la cl n%accepte pas les valeurs N0LL. 0asn ce cas, la taille de la cl sera stoc5e dans le m.me octet /ue celui /ui indi/ue /ue la cl est N0LL.2

PASS@OR/

/ELAY_(EY_@RITE

C$i""re le "ic$ier B$ rm5 avec un mot de passe. Cette option ne "ait rien du tout pour la version standard de *&+,L. +pci"iez 1 si vous voulez attendre la "ermeture de la table pour mettre ( 'our les inde . M-ISAM uni/uement.

RO@_FORMAT

RAI/_TYPE

0"init la mt$ode de stoc5age des lignes 1rserv pour le "utur2. <ctuellement, cette option "onctionne uni/uement avec des tables M-ISAM /ui supportent le /YNAMIC et FIXE/ en "ormat de ligne. +ee section 16.1.- Iormats de table M-ISAM. L%option RAI/_TYPE vous permet de dpasser la limite de 2FoG3Fo de votre "ic$ier de donnes M-ISAM 1mais pas le "ic$ier d%inde 2, pour les s&stmes d%e ploitation /ui ne supportent pas les grands "ic$iers. Cette option n%est pas recommande pour les s&stmes d%e ploitation /ui supportent les grands "ic$iers. Vous pouvez rduire les ralentissements d%)G+ en pla4ant les dossiers RAI/ sur di""rents dis/ues p$&si/ues. <ctuellement, le seul t&pe RAI/_TYPE est STRIPE/. : et RAI/A sont des alias de STRIPE/. +i vous spci"iez l%option RAI/_TYPE pour une table M-ISAM, speci"iez les options RAI/_C30N(S et RAI/_C30N(SI8E en m.me temps. La valeur ma imale de RAI/_C30N(S est 266. M-ISAM va crer RAI/_C30N(S sous=dossiers appels BAA5, BA:5, BA;5, ... BAN5, BAa5, BAb5, ... dans le dossier de donnes. 0ans c$a/ue dossier, M-ISAM va crer un "ic$ier Btbl_name$MY/5. Lors de l%criture dans le "ic$ier de donnes, le gestionnaire RAI/ place les RAI/_C30N(SI8EF:A;O premiers octets dans le premier "ic$ier, les seconds RAI/_C30N(SI8EF:A;O octets dans le "ic$ier suivant, etc. RAI/_TYPE "onctionne sur tous les s&stmes d%e ploitation, tant /ue vous avez compil *&+,L avec EEH!t7Era!d, avec le script c"n !6+re. !our dterminer si votre serveur a le support des tables RAI/, utilisez S3O@ 9ARIABLES LI(E 57a4e_ra!d5 pour voir si sa valeur vaut YES.

0NION

INSERT_MET3O/

sert lors/ue vous voulez /ue plusieurs tables identi/ues se comporte comme une seule table. Cela "onctionne avec les tables MER2E. +ee section 16.2 7ables assembles MER2E. !our le moment, vous devez avoir les droits de SELECT, 0P/ATE et /ELETE pour les tables intgres dans la table MER2E. :riginalement, toutes les tables utilises devaient .tre dans la m.me base de donnes, /ue la table MER2E. Cette restriction a t leve depuis *&+,L 3.1.1.
0NION

+i vous voulez insrer des donnes dans une table MER2E, vous devez spci"ier la table d%insertion avec l%attribut INSERT_MET3O/. L%option INSERT_MET3O/ est utilise uni/uement avec les tables MER2E. Cette option a t introduite en *&+,L 3.0.0. +ee section 16.2 7ables assembles MER2E.
/ATA /IRECTORY IN/EX /IRECTORY

)n utilisant /ATA /IRECTORY?5d!rect"r-5 ou IN/EX /IRECTORY?5d!rect"r-5, vous pouvez spci"ier o9 le moteur de stoc5age M-ISAM doit placer les donnes de la table et le "ic$ier d%inde . Notez /ue vous devez donner un c$emin absolu, et non un c$emin relati". Ces options ne "onctionnent /ue pour les tables M-ISAM depuis *&+,L 3.0, lors/ue vous n%utilisez pas l%option EE'J!&E'-ml!nJ. Votre s&stme d%e ploitation doit aussi disposer d%une "onction real&at7(% compatible avec les t$reads. +ee section B.>.1.2 #sing +&mbolic Lin5s "or 7ables on #ni . 0epuis *&+,L -.2-, vous pouvez crer une table ( partir d%une autre, en a'outant une commande SELECT aprs la commande CREATE TABLE :
CREATE TABLE neH_tbl SELECT F FROM "r!6_tbl)

*&+,L va crer une nouvelle colonne pour c$a/ue colonne de rsultat de la commande SELECT. !ar e emple :

m-'DlP CREATE TABLE te't (a INT NOT N0LL A0TO_INCREMENT# EP PRIMARY (EY (a%# (EY(b%% EP TYPE?M-ISAM SELECT b#c FROM te't;)

Cela crer une table M-ISAM avec trois colonnes a, b, et c. Notez /ue les colonnes de la commande SELECT sont a'outes ( droite de la table, et non dans la liste des colonnes. !ar e emple :
m-'DlP SELECT F FROM CEEEC , n , CEEEC , : , CEEEC "")

m-'DlP CREATE TABLE bar (m INT% SELECT n FROM 1+er- O(# : r"H a ected (A$A; 'ec% Rec"rd'* : /+&l!cate'* A @arn!n6'* A m-'DlP SELECT F FROM bar) CEEEEEECEEEC , m , n , CEEEEEECEEEC , N0LL , : , CEEEEEECEEEC : r"H !n 'et (A$AA 'ec%

"")

!our c$a/ue ligne de la table "", une ligne est insre dans la colonne bar avec la valeur issue de "" et la valeur par d"aut pour les nouvelles colonnes. +i une erreur survient durant la copie de la table, la table est automati/uement e""ace. ne va pas crer automati/uement les inde pour vous. Ceci est "ait intentionnellement pour rendre la commande aussi souple /ue possible. +i vous voulez avoir les m.mes inde , vous devez les spci"ier dans la commande avant le SELECT :
CREATE TABLE $$$ SELECT m-'DlP CREATE TABLE bar (0NI10E (n%% SELECT n FROM "")

Certaines conversions de t&pe pourraient avoir lieu. !ar e emple, l%attribut A0TO_INCREMENT n%est pas prserv, et les colonnes 9ARC3AR peuvent devenir des colonnes C3AR. Lors de la cration de la table avec CREATE $$$ SELECT, assurez vous de mettre un nom d%alias ( toutes les "onctions ou e pression de la re/u.te. +i vous ne le "aAtes pas, la commande CREATE peut c$ouer ou donner des noms de colonnes inattendus.
CREATE TABLE art!'t'_and_H"rJ' SELECT art!'t$name# CO0NT(H"rJ$art!'t_!d% AS n+mber_" _H"rJ' FROM art!'t LEFT QOIN H"rJ ON art!'t$!d ? H"rJ$art!'t_!d 2RO0P BY art!'t$!d)

0epuis *&+,L 3.1, vous pouvez spci"ier e plicitement le t&pe de colonne gnr :
CREATE TABLE "" (a TINYINT NOT N0LL% SELECT bC: AS a FROM bar)

)n *&+,L 3.1, vous pouvez aussi utiliser la clause LI(E pour crer une table base sur la d"inition d%une autre table, & compris les attributs de colonnes et les inde originau :
CREATE TABLE neH_tbl LI(E "r!6_tbl) CREATE TABLE $$$ LI(E ne copie pas les options de tables /ATA /IRECTORY /IRECTORY /ui taient spci"ies dans la table originale.

et IN/EX

Vous pouvez "aire prcder SELECT par I2NORE ou REPLACE pour indi/uer comment grer les cls doublons. <vec I2NORE, les nouvelles lignes /ui sont en double seront ignors. <vec REPLACE, les nouvelles lignes remplaceront les lignes prcdentes, /ui avaient la m.me valeur d%inde . +i ni I2NORE, ni REPLACE ne sont spci"i, les doublons gnreront une erreur. !our s%assurer /ue le log binaire peut .tre rutilis pour recrer la table originale, *&+,L ne permettra pas les insertions concurrentes durant une commande CREATE TABLE $$$ SELECT.

Вам также может понравиться