Mysql 6

6.5.4. Az ALTER TABLE nyilatkozat szintaxisa

Ha az ALTER TABLE utasítás változások meghatározására, hogy milyen típusú oszlopot, de leírnak tbl_name azt jelzi, hogy az oszlop nem változik, akkor lehet, MySQL figyelmen kívül hagyja ezt a módosítást, az egyik oka részben leírt 6.5.3.1 «Silent változások oszlopban definíciókat.” Például, ha megpróbálja megváltoztatni a VARCHAR oszlopot a CHAR-nek, a MySQL továbbra is a VARCHAR-ot használja. Ha ez a táblázat változó hosszúságú egyéb oszlopokat tartalmaz.

Az ALTER TABLE utasítás létrehozza a forrástáblázat átmeneti példányát futási idő alatt. A szükséges változtatás a másolaton történik, majd az eredeti táblát törli, és az új nevet átnevezik. Ez azért van, hogy automatikusan eljusson az új táblához az összes frissítést kivéve a sikerteleneket. Az ALTER TABLE végrehajtása során a forrás táblázat más ügyfelek számára olvasható. A táblázatban szereplő frissítési és rekord műveletek felfüggesztése addig történik, amíg egy új tábla készen van.

Megjegyzendő, hogy az ALTER TABLE bármelyik másik opciója, kivéve a RENAME lehetőséget. A MySQL mindig létrehoz egy ideiglenes táblát, még akkor is, ha az adatokat szigorúan nem kell másolni (például az oszlopnév megváltoztatásakor). Azt tervezzük, hogy erősít ez a jövőben, azonban, mivel ALTER TABLE nem hajtunk végre olyan gyakran, mi (MySQL fejlesztők) nem veszi figyelembe ezt a feladatot a prioritás. MyISAM táblákhoz növelheti a sebességet rekonstrukciója index részét (ami a leglassabb része a helyreállítási folyamat a táblázatban) beállításával változtatható myisam_sort_buffer_size elég nagy érték.

Az ALTER TABLE utasítás használatához ALTER jogosultságokra van szükség. INSERT és CREATE erre a táblára.

Az IGNORE lehetőség a MySQL kiterjesztése ANSI SQL92-re. Ez vezérli az ALTER TABLE működését, ha az új táblában duplikált egyedi kulcsok vannak. Ha az IGNORE opció nincs megadva, akkor ez a másolat megszakítja a folyamatot, és a folyamatot visszahúzza. Ha az IGNORE megadása megtörtént, akkor az egyedülálló kulcsok duplikátumainak soraira csak az első sor használható, a többi pedig törlődik.

Futtathat több ADD kifejezést. ALTER. DROP és CHANGE ugyanabban az ALTER TABLE parancsban. Ez a MySQL kiterjesztése ANSI SQL92-re, ahol csak az egyik ALTER TABLE parancsban megadott kifejezés engedélyezett.

CHANGE opciók col_name. A DROP col_name és a DROP INDEX az ANSI SQL92 MySQL kiterjesztései is.

A MODIFY opció az ALTER TABLE parancs Oracle kiterjesztése.

Az opcionális COLUMN szó "fehér zaj", és el lehet hagyni.

Ha az ALTER TABLE tábla_neve RENAME TO új_neve ALTERN TABLE helyett más opciókat használ, akkor a MySQL egyszerűen átnevezi a megadott táblázatnak megfelelő fájlokat. Ebben az esetben nincs szükség ideiglenes tábla létrehozására. Lásd: 6.5.5. Szakasz, "RENAME TABLE Operator Syntax."

Az ADD és CHANGE létrehozás_definíció kifejezése ugyanazt a szintaxist használja, mint a CREATE TABLE esetében. Ne feledje, hogy ez a szintaxis magában foglalja az oszlop nevét, és nem csak annak típusát. Lásd: 6.5.3. Szakasz, "A CREATE TABLE utasítás szintaxisa".

Az oszlop átnevezhető a CHANGE kifejezés column_name create_definition segítségével. Ehhez meg kell adnia a régi és új oszlopneveket és típusát a jelenlegi időben. Például az INTEGER oszlop átnevezése a-b-ból. a következőket teheti:

Ha megváltoztatja az oszlop típusát, de nem a nevét, akkor a CHANGE kifejezés szintaxisának meg kell adnia mindkét oszlop nevét, még akkor is, ha azok azonosak. Például:

A 3.22.16a verziójú MySQL verziótól azonban a MODIFY kifejezés használatával módosíthatja az oszlop típusát anélkül, hogy átnevezné:

Amikor a megváltoztatására vagy módosítására annak érdekében, hogy csökkentsék a az oszlop hossza, amelyen egy index részét (például, az index az első 10 karakter VARCHAR oszlop), az egyik lehet, hogy egy oszlop rövidebb, mint a számú indexált szimbólumok.

Ha megváltoztatod az oszloptípust a CHANGE vagy a MODIFY használatával, a MySQL megpróbálja a lehető legjobban átalakítani az adatokat egy új típusba.

A MySQL 3.22-es vagy újabb verziójában használhatja a FIRST vagy az ADD alkalmazást. Az oszlopnév után oszlopot adhat hozzá egy adott helyhez egy táblázat sorában. Alapértelmezés szerint az oszlop a végén szerepel. A MySQL 4.0.1-ből kiindulva használhatja a FIRST és AFTER kulcsszavakat a CHANGE vagy MODIFY opciókban is.

Az ALTER COLUMN opció beállítja az oszlopot egy új alapértelmezett értékre, vagy törli a régiet. Ha a régi érték alapértelmezés szerint eltávolítva van, akkor ez az oszlop NULL lehet. akkor az új alapértelmezett érték NULL. Ha az oszlop nem lehet NULL. A MySQL hozzárendeli az alapértelmezett értéket a 6.5.3. Szakasz "CREATE TABLE utasítás szintaxis" című részében leírtak szerint.

A DROP INDEX opció törli az indexet. Ez a MySQL kiterjesztése ANSI SQL92-re. Lásd: 6.5.8. Szakasz, "DROP INDEX Operator Syntax".

Ha az oszlopok törlésre kerülnek a táblázatban, akkor ezek az oszlopok törlődnek minden olyan indexből, amelyet a részeként tartalmaznak. Ha az indexet alkotó összes oszlop törlődik, akkor ez az index is törölve lesz.

Ha a táblázat csak egy oszlopot tartalmaz, akkor ezt az oszlopot nem lehet törölni. E táblát a DROP TABLE parancs segítségével törölheti.

A DROP PRIMARY KEY opció törli az elsődleges indexet. Ha nincs ilyen index ebben a táblázatban, az első UNIQUE index ebben a táblázatban törlődik. (A MySQL az első egyedi UNIQUE kulcsot jelöli elsődleges PRIMARY KEY kulcsként, ha nincs más elsődleges kulcs, melyet kifejezetten megadtak). Ha UNIQUE INDEX vagy PRIMARY KEY elemet ad hozzá egy asztalhoz, azokat a többi nem egyedi kulcs előtt tárolja, hogy a lehető leghamarabb azonosíthassa a másodpéldányokat.

Az ORDER BY lehetőség lehetővé teszi, hogy új táblát hozzon létre a megadott sorrendben elhelyezett sorokkal. Ne feledje, hogy a létrehozott táblázat nem fogja tárolni a sorrendet a beillesztési és törlési műveletek után. Bizonyos esetekben ez a szolgáltatás megkönnyítheti a rendezési műveletet a MySQL-ben, ha az asztal olyan oszlopkiosztással rendelkezik, amelyet a jövőben szeretne. Ez a lehetőség főként akkor hasznos, ha előre tudod, hogy milyen sorrendben kell kérni a sorokat. Ezt a beállítást a táblázat jelentős átváltása után lehetőséget kapja a nagyobb teljesítmény elérésére.

Amikor az ALTER TABLE parancsot használja a MyISAM táblákhoz, az összes nem egyedi index egy külön csomagban (a REPAIR-hoz hasonlóan) jön létre. Ennek köszönhetően az ALTER TABLE parancs gyorsabban működik, ha több index van.

A MySQL 4.0-dal kezdődően a fenti szolgáltatás kifejezetten aktiválható. Az ALTER TABLE parancs. A DISABLE KEYS zárolja a MySISZ-frissítéseket a nem egyedi mutatókhoz a MyISAM táblákhoz. Ezután használhatja az ALTER TABLE parancsot. Engedélyezze a KEYS gombokat a hiányzó mutatók újbóli létrehozásához. Mivel a MySQL ezt egy speciális algoritmussal végzi, amely sokkal gyorsabb, mint a kulcsok egyenként történő behelyezése, a záró kulcsok jelentősen gyorsíthatják a nagy beillesztési tömböket.

A C API függvény használata mysql_info (). meg tudja határozni, hogy hány rekordot másolt, valamint (amikor IGNORE-t használ) - hány rekordot töröltek az egyedi kulcsok ismétlése miatt.

Az alábbi példák mutatják néhány esetet, amikor az ALTER TABLE parancsot használják. A példa t1 táblával kezdődik. amely a következőképpen jön létre:

A táblázat átnevezése t1-ről t2-re.

Módosításához az oszlop típusát egész szám tinyint NOT NULL (hagyva a név azonos), és változtatni B oszlop a CHAR (10) CHAR (20) átnevezés azt a b c.

Új TIMESTAMP oszlop hozzáadásához d.

Adjon hozzá egy indexet a d oszlophoz, és adja meg az A oszlop elsődleges kulcsát:

C oszlop törlése c.

Új számjegy oszlop hozzáadása az AUTO_INCREMENT névvel c.

Ne feledje, hogy a c oszlop indexelt, mivel az AUTO_INCREMENT oszlopokat indexelni kell, emellett a c oszlop NOT NULL értékű. mert az indexelt oszlopok nem NULL lehetnek.

Amikor hozzáadja az AUTO_INCREMENT oszlopot, az oszlop értékei automatikusan egymást követő számokkal kerülnek feltöltésre (rekordok hozzáadásakor). Az első sorszámot úgy állíthatjuk be, hogy a SET INSERT_ID = # parancsot az ALTER TABLE vagy az AUTO_INCREMENT = # tábla opció használatával futtatjuk. Lásd: 5.5.6. Szakasz, "Beállít parancsok szintaxisa".

Ha az AUTO_INCREMENT oszlop a MyISAM táblákhoz tartozik. nem változik, a sorozatszám ugyanaz marad. Ha törli az AUTO_INCREMENT oszlopot, majd hozzáad egy másik AUTO_INCREMENT oszlopot, a számok újra 1-től kezdődnek.

Kapcsolódó cikkek