Névjegyek

Az alter table utasítás szintaxisa. MySQL Reference Manual ALTER TABLE to Add and Remove Oszlop, Alapértelmezett értékek

ALTER TABLE tbl_name alter_spec [, alter_spec ...]

alter_specification:

ADD create_definition

vagy ADD (create_definition, create_definition, ...)

vagy ADD INDEX (index_col_name, ...)

vagy HOZZA ELSŐGOMBOT (index_col_name, ...)

vagy HOZZÁADÁS EGYEDI (index_col_name, ...)

vagy ADD FULLTEXT (index_col_name, ...)

vagy ADD FOREIGN KEY index_name (index_col_name, ...)

vagy ALTER oszlopnév (SET DEFAULT literal | DROP DEFAULT)

vagy CHANGE old_col_name create_definition

vagy MODIFY create_definition

vagy DROP oszlopnév

vagy Csepegtető elsődleges kulcs

vagy DROP INDEX index_neve

vagy letiltja a billentyűket

vagy GOMBOK ENGEDÉLYEZÉSE

vagy RENAME új_tbl_neve

vagy RENDELÉS:

vagy table_options

Az ALTER TABLE utasítás lehetővé teszi egy meglévő tábla szerkezetének módosítását. Például hozzáadhat vagy eltávolíthat oszlopokat, indexeket hozhat létre vagy dobhat el, vagy átnevezheti az oszlopokat vagy magát a táblázatot. A táblázathoz és típusához tartozó megjegyzéseket is módosíthatja.

Az ALTER TABLE utasítás ideiglenes másolatot hoz létre az eredeti táblából futás közben. A kért változtatás végrehajtásra kerül a másolaton, majd az eredeti tábla kiesik, és az új átnevezésre kerül. Ez úgy történik, hogy a sikertelen frissítések kivételével minden frissítés automatikusan bekerül az új táblázatba. Az ALTER TABLE futásidőben a forrás táblázat más ügyfelek számára is olvasható. Az ezen a táblán végrehajtott frissítések és írások szünetelnek, amíg az új tábla elkészül.

Meg kell jegyezni, hogy amikor az ALTER TABLE más opcióját használja, mint a RENAME, a MySQL mindig létrehoz egy ideiglenes táblát, még akkor is, ha az adatokat szigorúan véve nem kell másolni (például ha egy oszlop neve megváltozott). A MyISAM táblák esetében növelhető az indexrész újratelepítésének sebessége (ez a leglassabb része a táblázat újjáépítési folyamatának), ha a myisam_sort_buffer_size változót elég nagyra állítja.

Az ALTER TABLE utasítás használatához szüksége van az asztalon található ALTER, INSERT és CREATE jogosultságokra.

Az IGNORE az ANSI SQL92 MySQL kiterjesztése. Ez vezérli az ALTER TABLE működését, ha ismétlődő egyedi kulcsok vannak az új táblázatban. Ha az IGNORE opció nincs megadva, akkor a folyamat megszakad, és visszavonásra kerül a másolathoz. Ha a Figyelmen kívül van hagyva, akkor az ismétlődő egyedi kulcsokkal rendelkező soroknál csak az első sort kell használni, a többit pedig eltávolítja.

Egyszerre több ADD, ALTER, DROP és CHANGE utasítást is futtathat egyetlen ALTER TABLE parancsban. Ez az ANSI SQL92 MySQL kiterjesztése, ahol egyetlen ALTER TABLE parancsban említett kifejezések közül csak az egyik engedélyezett.

A CHANGE col_name, DROP col_name és DROP INDEX opciók szintén MySQL kiterjesztések az ANSI SQL92 -hez.

A MODIFY opció egy Oracle kiterjesztés az ALTER TABLE parancshoz.

A COLUMN opcionális szó: "" fehér zaj"" és kihagyható.

Ha az ALTER TABLE table_name RENAME nevet használja új névre minden más lehetőség nélkül, a MySQL egyszerűen átnevezi a megfelelő fájlokat adott táblázat... Ebben az esetben nincs szükség ideiglenes táblázat létrehozására. A create_definition kifejezés ugyanazt a szintaxist használja az ADD és CHANGE paraméterekhez, mint a CREATE TABLE esetében. Ne feledje, hogy ez a szintaxis tartalmazza az oszlop nevét, nem csak a típusát.

Az oszlopokat át lehet nevezni a CHANGE kifejezés használatával oszlop_neve create_definition. Ehhez meg kell adnia a régi és az új oszlopnevet, valamint az oszlop jelenlegi típusát. Például az INTEGER oszlop b -re történő átnevezéséhez tegye a következőket:

mysql> ALTER TABLE t1 CHANGE a b INTEGER;

Ha megváltoztatja az oszlop típusát, de nem a nevét, akkor a CHANGE szintaxishoz mindkét oszlopnévre szükség van, még akkor is, ha azonosak. Például:

mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;

A MySQL 3.22.16a verziójától kezdve azonban a MODIFY kifejezéssel megváltoztathatja az oszlop típusát anélkül, hogy átnevezné:

mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;

Ha a CHANGE vagy a MODIFY gombbal csökkenti az oszlop hosszát, amelyre az index épül (például egy index a VARCHAR oszlop első 10 karakterén), akkor az oszlop nem lehet rövidebb, mint az indexelt karakterek száma.

Amikor megváltoztatja az oszlop típusát a CHANGE vagy a MODIFY használatával, a MySQL megpróbálja a lehető legpontosabban átalakítani az adatokat új típusra.

A MySQL 3.22 és újabb verzióiban az FIRST vagy ADD ... AFTER oszlopnév használatával oszlopot adhat hozzá a táblázat sorának adott pozíciójához. Alapértelmezés szerint az oszlop a végén található. A MySQL 4.0.1 -től kezdve használhatja kulcsszavak FIRST és AFTER a CHANGE vagy MODIFY lehetőségekben.

Az ALPULTER ALTER opció új alapértelmezett értéket állít be egy oszlophoz, vagy eltávolítja a régit. Ha a régi alapértelmezés eltávolításra kerül, és az adott oszlop NULL lehet, akkor az új alapértelmezett NULL lesz. Ha az oszlop nem lehet NULL, akkor a MySQL alapértelmezett értéket rendel hozzá. A DROP INDEX opció eltávolítja az indexet. Ez egy MySQL kiterjesztés az ANSI SQL92 felett. Ha az oszlopok kiesnek a táblázatból, akkor az oszlopok is kimaradnak minden olyan indexből, amelynek részét képezik. Ha az összes indexet tartalmazó oszlopot elvetik, akkor az index is kiesik.

Ha a táblázat csak egy oszlopot tartalmaz, akkor az oszlop nem dobható el. Alternatív megoldásként a DROP TABLE paranccsal eldobhatja az adott táblázatot.

A DROP PRIMARY KEY opció eltávolítja az elsődleges indexet. Ha ilyen index nem létezik az adott táblán, akkor a táblázat első EGYEDI indexe törlődik. (A MySQL az első egyedi kulcsot UNIQUE -nak jelöli, mint elsődleges kulcsot, ha más elsődleges kulcs nincs kifejezetten megadva.) Ha UNIQUE INDEX vagy PRIMARY KEY kulcsot ad hozzá egy táblázathoz, akkor azokat más, nem egyedi kulcsok előtt tárolja, hogy az ismétlődő kulcsokat a lehető leghamarabb azonosítani lehessen.

A ORDER BY lehetővé teszi, hogy új táblázatot hozzon létre sorokkal a megadott sorrendben. Kérjük, vegye figyelembe, hogy a létrehozott táblázat nem őrzi meg ezt a sorrendet a beszúrá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 a táblázat olyan oszlopelrendezéssel rendelkezik, amelyet szeretne használni a jövőben. Ez az opció főként akkor hasznos, ha előre tud egy bizonyos sorrendet, amelyben a sorokat elsősorban lekérdezi. Ennek az opciónak a használata jelentős táblázatátalakítások után lehetőséget ad a jobb teljesítmény elérésére.

Amikor az ALTER TABLE parancsot használja a MyISAM táblákon, az összes nem egyedi index külön csomagban jön létre (például REPAIR). Ez gyorsítja az ALTER TABLE parancsot, ha több index van.

A MySQL 4.0 -tól kezdve a fenti funkció kifejezetten engedélyezhető. Az ALTER TABLE ... DISBLE KEYS parancs megakadályozza, hogy a MySQL frissítse a nem egyedi indexeket a MyISAM táblákon. Ezután használhatja az ALTER TABLE ... ENGED KEYS parancsot a hiányzó indexek újbóli létrehozásához. Mivel a MySQL ezt egy speciális algoritmus segítségével teszi, amely sokkal gyorsabb, mint a kulcsok egyenként történő beillesztése, a kulcsok zárolása jelentős gyorsítást jelenthet a nagy beillesztési tömböknél.

A mysql_info () C API függvény használatával meghatározhatja, hogy hány rekordot másolt le, és (az IGNORE használatakor) hány rekordot töröltek az ismétlődő egyedi kulcsértékek miatt.

A FOREIGN KEY, CHECK és REFERENCES állítások valójában semmit sem tesznek. Ezeket csak kompatibilitási okokból vezették be, hogy megkönnyítsék a kód más SQL -kiszolgálóról való átvitelét és a hivatkozott táblákat létrehozó alkalmazások futtatását.

Az alábbiakban példákat mutatunk be az ALTER TABLE parancs néhány felhasználására. A példa a t1 táblával kezdődik, amely a következőképpen jön létre:

mysql> TÁBLÁZAT LÉTREHOZÁSA t1 (a INTEGER, b CHAR (10));

Egy táblázat átnevezése t1 -ről t2 -re:

mysql> ALTER TABLE t1 RENAME t2;

Az oszlop típusának megváltoztatása INTEGER -ről TINYINT NOT NULL -ra (a név megtartása mellett), és a bcCHAR (10) oszlop típusának módosítása CHAR (20) -ra, és átnevezése cbnc:

mysql> ALTER TABLE t2 MODINY a a TINYINT NOT NULL, CHANGE b c CHAR (20);

Új dátumú TIMESTAMP oszlop hozzáadásához:

mysql> ALTER TABLE t2 ADD d TIMESTAMP;

Ha indexet szeretne hozzáadni a d oszlophoz, és az a oszlopot szeretné elsődleges kulcsgá tenni:

mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);

A c oszlop eltávolítása:

mysql> ALTER TABLE t2 DROP COLUMN c;

Új AUTO_INCREMENT numerikus oszlop hozzáadásához c:

mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,

Vegye figyelembe, hogy az oszlop indexelt, mert az AUTO_INCREMENT oszlopokat indexelni kell; ezenkívül a c oszlopot NULL értékűvé nyilvánítják, mert az indexelt oszlopok nem lehetnek NULL értékűek.

AUTO_INCREMENT oszlop hozzáadásakor az oszlopban lévő értékek automatikusan sorszámmal kerülnek feltöltésre (a rekordok hozzáadásával). Az első sorszám a SET INSERT_ID = # parancs végrehajtásával állítható be az ALTER TABLE segítségével, vagy az AUTO_INCREMENT = # tábla beállításával.

ALTER TABLE tbl_name alter_spec [, alter_spec ...] alter_specification: ADD create_definition vagy ADD (create_definition, create_definition, ...) vagy ADD INDEX (index_col_name, ...) vagy ADD PRIMARY KEY (index_col_name, ...) vagy ADD UNIQ [index_col_name, ...] vagy ADD FULLTEXT (index_col_name, ...) vagy ADD FOREIGN KEY index_name (index_col_name, ...) vagy ALTER col_name (SET DEFAULT literal | DROP DEFAULT) vagy CHANGE old_col_name create_definition vagy MODIFY create_definitionname vagy DRO DROP PRIMARY KULCS vagy DROP INDEX index_név vagy TILTÁS KULCSOK vagy KULCSOK ENGEDÉLYEZÉSE vagy új_tbl_név átnevezése, vagy RENDELÉS oszlop vagy tábla_beállítások szerint

Az ALTER TABLE utasítás lehetővé teszi egy meglévő tábla szerkezetének módosítását. Például hozzáadhat vagy eltávolíthat oszlopokat, indexeket hozhat létre vagy dobhat el, vagy átnevezheti az oszlopokat vagy magát a táblázatot. A táblázathoz és típusához tartozó megjegyzéseket is módosíthatja. Lásd a szakaszt.

Ha az ALTER TABLE utasítást egy oszlop típusdefiníciójának módosítására használják, de a DESCRIBE tbl_name azt jelzi, hogy az oszlop nem változott, akkor előfordulhat, hogy a MySQL figyelmen kívül hagyja a módosítást a 6.5.3.1. Például amikor egy VARCHAR oszlopot CHAR-ra kíván módosítani, a MySQL továbbra is a VARCHAR-t fogja használni, ha az adott táblázat más változó hosszúságú oszlopokat tartalmaz.

Az ALTER TABLE utasítás futás közben létrehozza az eredeti tábla ideiglenes másolatát. A kért változtatás végrehajtásra kerül a másolaton, majd az eredeti tábla kiesik, és az új átnevezésre kerül. Ez úgy történik, hogy a sikertelen kivételével minden frissítés automatikusan bekerül az új táblázatba. Az ALTER TABLE végrehajtása során az eredeti táblázat más ügyfelek számára is olvasható. Az ezen a táblán végrehajtott frissítések és írások szünetelnek, amíg az új tábla elkészül.

Meg kell jegyezni, hogy amikor az ALTER TABLE más opcióját használja, mint a RENAME, a MySQL mindig létrehoz egy ideiglenes táblát, még akkor is, ha az adatokat szigorúan véve nem kell másolni (például ha egy oszlop neve megváltozott). Azt tervezzük, hogy a jövőben ezt kijavítjuk, mivel azonban az ALTER TABLE -t nem gyakran hajtják végre, mi (a MySQL -fejlesztők) nem tartjuk ezt elsődleges prioritásnak. A MyISAM tábláknál az myisam_sort_buffer_size változó kellően magasra állításával növelheti az indexrész (amely a táblázat újjáépítési folyamatának leglassabb része) újjáépítésének sebességét.

  • Az ALTER TABLE utasítás használatához ALTER, INSERT és CREATE jogosultságokra van szüksége az asztalon.
  • Az IGNORE egy MySQL kiterjesztés az ANSI SQL92 felett. Ez vezérli az ALTER TABLE működését, ha ismétlődő egyedi kulcsok vannak az új táblázatban. Ha az IGNORE nincs megadva, a folyamat megszakad ennél a példánynál, és visszaáll. Ha az IGNORE van megadva, akkor az ismétlődő egyedi kulcsokkal rendelkező soroknál csak az első sort kell használni, a többit pedig eltávolítani.
  • Egyszerre több ADD, ALTER, DROP és CHANGE utasítást is futtathat egyetlen ALTER TABLE parancsban. Ez az ANSI SQL92 MySQL kiterjesztése, ahol egyetlen ALTER TABLE parancsban említett kifejezések közül csak az egyik engedélyezett.
  • A CHANGE col_name, DROP col_name és DROP INDEX opciók szintén MySQL kiterjesztések az ANSI SQL92 -hez.
  • A MODIFY opció egy Oracle kiterjesztés az ALTER TABLE parancshoz.
  • Az opcionális COLUMN szó fehér zajt jelent, és elhagyható.
  • Ha az ALTER TABLE table_name RENAME -t új_name -re más opciók nélkül használja, a MySQL egyszerűen átnevezi az adott táblának megfelelő fájlokat. Ebben az esetben nincs szükség ideiglenes táblázat létrehozására. Lásd a 6.5.5 TÁBLÁZAT ÁTNEVEZÉSE szintaxist.
  • A create_definition utasítás ADD és CHANGE esetén ugyanazt a szintaxist használja, mint a CREATE TABLE esetében. Ne feledje, hogy ez a szintaxis tartalmazza az oszlop nevét, nem csak a típusát. Lásd a 6.5.3 TÁBLÁZAT LÉTREHOZÁSA szintaxist.
  • Az oszlopokat át lehet nevezni a CHANGE kifejezés oszlop_neve create_definition használatával. Ehhez meg kell adnia a régi és az új oszlopnevet, valamint az oszlop jelenlegi típusát. Például, ha egy INTEGER oszlopot a -ból b -re szeretne átnevezni, akkor tegye a következőket: mysql> ALTER TABLE t1 CHANGE a b INTEGER; Ha megváltoztatja az oszlop típusát, de nem a nevét, a CHANGE szintaxisa továbbra is megköveteli mindkét oszlopnév megadását, még akkor is, ha azonosak. Például: mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL; A MySQL 3.22.16a verziójától kezdve azonban a MODIFY kifejezéssel megváltoztathatja az oszlop típusát anélkül, hogy átnevezné: mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
  • Ha a CHANGE vagy a MODIFY gombbal csökkenti az oszlop hosszát, amelyre az index épül (például egy index a VARCHAR oszlop első 10 karakterén), akkor az oszlop nem lehet rövidebb, mint az indexelt karakterek száma.
  • Amikor megváltoztatja az oszlop típusát a CHANGE vagy a MODIFY használatával, a MySQL megpróbálja a lehető legpontosabban átalakítani az adatokat új típusra.
  • A MySQL 3.22 és újabb verzióiban az FIRST vagy ADD ... AFTER oszlopnév használatával oszlopot adhat hozzá a táblázat sorának adott pozíciójához. Alapértelmezés szerint az oszlop a végén található. A MySQL 4.0.1 -től kezdve az ELSŐ és az UTOLSÓ kulcsszavakat is használhatja a MÓDOSÍTÁS vagy MÓDOSÍTÁS opciókban.
  • Az ALTER COLUMN opció új alapértelmezett értékre állítja az oszlopot, vagy eltávolítja a régit. Ha a régi alapértelmezés eltávolításra kerül, és az adott oszlop NULL lehet, akkor az új alapértelmezett NULL lesz. Ha az oszlop nem lehet NULL, akkor a MySQL alapértelmezett értéket rendel a 6.5.3 TÁBLÁZAT LÉTREHOZÁSA szintaxis szakaszban leírtak szerint.
  • A DROP INDEX opció lecsökkenti az indexet. Ez egy MySQL kiterjesztés az ANSI SQL92 felett. Lásd a 6.5.8 DROP INDEX szintaxis részt.
  • Ha az oszlopok kiesnek a táblázatból, akkor az oszlopok is kimaradnak minden olyan indexből, amelynek részét képezik. Ha az összes indexet tartalmazó oszlopot elvetik, akkor az index is kiesik.
  • Ha a táblázat csak egy oszlopot tartalmaz, akkor az oszlop nem dobható el. Ehelyett a DROP TABLE paranccsal eldobhatja az adott táblát.
  • A DROP PRIMARY KEY opció elveti az elsődleges indexet. Ha nincs ilyen index az adott táblán, akkor az adott táblázat első EGYEDI indexe kiesik. (A MySQL az első egyedi UNIQUE kulcsot jelöli elsődleges kulcsként, ha más elsődleges kulcs nincs kifejezetten megadva.) Ha UNIQUE INDEX vagy PRIMARY KEY kulcsot ad hozzá egy táblázathoz, akkor azokat más, nem egyedi kulcsok előtt tárolja, hogy az ismétlődő kulcsokat a lehető leghamarabb azonosítani lehessen.
  • A ORDER BY opció lehetővé teszi, hogy új táblázatot hozzon létre a sorokkal a megadott sorrendben. Kérjük, vegye figyelembe, hogy a létrehozott táblázat nem őrzi meg ezt a sorrendet a beszúrási és törlési műveletek után. Bizonyos esetekben ez megkönnyítheti a rendezést a MySQL -ben, ha a táblázat olyan oszlopelrendezéssel rendelkezik, amelyet szeretne a jövőben. Ez az opció főként akkor hasznos, ha előre tud egy bizonyos sorrendet, amelyben a sorokat elsősorban lekérdezzük. Ennek az opciónak a használata jelentős táblázatátalakítások után lehetőséget ad a jobb teljesítmény elérésére.
  • Amikor az ALTER TABLE parancsot használja a MyISAM táblákon, az összes nem egyedi index külön csomagban jön létre (például REPAIR). Ez gyorsítja az ALTER TABLE parancsot, ha több index van.
  • A MySQL 4.0 -tól kezdve a fenti funkció kifejezetten engedélyezhető. ALTER TABLE ... DISABLE GOMBOK blokkolja a MySQL-t a nem egyedi indexek frissítésétől a MyISAM táblákon. Ezután az ALTER TABLE ... ENGED KEYS paranccsal újra létrehozhatja a hiányzó indexeket. Mivel a MySQL ezt egy speciális algoritmus segítségével teszi, amely sokkal gyorsabb, mint a kulcsok egyenként történő beillesztése, a kulcsok zárolása jelentős gyorsítást jelenthet a nagy beillesztési tömböknél.
  • A mysql_info () C API függvény használatával meghatározhatja, hogy hány rekordot másolt le, és (az IGNORE segítségével) hány rekordot töröltek az ismétlődő egyedi kulcsértékek miatt.
  • A FOREIGN KEY, CHECK és REFERENCES állítások valójában semmit sem tesznek. Ezeket csak kompatibilitási okokból vezették be, hogy megkönnyítsék a kód más SQL -kiszolgálóról való átvitelét és a hivatkozott táblákat létrehozó alkalmazások futtatását. Lásd az 1.9.4 szakaszt MySQL különbségek az ANSI SQL92 -től.

Az alábbiakban példákat mutatunk be az ALTER TABLE parancs néhány felhasználására. A példa a t1 táblával kezdődik, amely a következőképpen jön létre:

MySQL> T1 TÁBLÁZAT LÉTREHOZÁSA (a INTEGER, b CHAR (10));

Egy táblázat átnevezése t1 -ről t2 -re:

Mysql> ALTER TABLE t1 RENAME t2;

Az oszlop típusának megváltoztatása INTEGER -ről TINYINT NOT NULL -ra (a név megtartása mellett), és a b oszlop típusának megváltoztatása CHAR (10) -ről CHAR (20) -ra, és átnevezése b -ről c -re:

Mysql> ALTER TABLE t2 MODINY a a TINYINT NOT NULL, CHAN (b) CHAR (20);

Új dátumú TIMESTAMP oszlop hozzáadásához:

Mysql> ALTER TABLE t2 ADD d TIMESTAMP;

Ha indexet szeretne hozzáadni a d oszlophoz, és az a oszlopot szeretné elsődleges kulcsgá tenni:

Mysql> ALKALMAZÁSI TÁBLÁZAT t2 HOZZÁADÁS (d), ELSŐKULCS HOZZÁADÁSA (a);

A c oszlop eltávolítása:

Mysql> ALTER TABLE t2 DROP COLUMN c;

Új AUTO_INCREMENT numerikus oszlop hozzáadásához c:

Mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);

Ne feledje, hogy a c oszlop indexelve van, mivel az AUTO_INCREMENT oszlopokat indexelni kell, és a c oszlopot NULL értékűvé nyilvánítják, mert az indexelt oszlopok nem lehetnek NULL.

AUTO_INCREMENT oszlop hozzáadásakor az oszlop értékei automatikusan sorszámmal kerülnek feltöltésre (rekordok hozzáadásakor). Az első sorszám a SET INSERT_ID = # parancs végrehajtásával állítható be az ALTER TABLE előtt, vagy az AUTO_INCREMENT = # tábla beállításával. Lásd az 5.5.6 SET szintaxis fejezetet.

Ha a MyISAM táblák AUTO_INCREMENT oszlopa nem változik, akkor a sorszám változatlan marad. Ha töröl egy AUTO_INCREMENT oszlopot, majd hozzáad egy másik AUTO_INCREMENT oszlopot, a számok újra 1 -től kezdődnek.

Ezen SQL lecke megnézzük, hogyan kell használni az ALTER parancsot egy adatbázis táblájában. Az ALTER parancsot főleg oszlopok hozzáadására, módosítására és törlésére használják egy relációs adatbázis, például az Oracle, a Sybase és az SQL Server indexeiben és táblázati korlátozásaiban. Bár az ALTER nem része a klasszikus CRUD műveletnek, az egyik fontos csapatok DDL. Az ALTER parancs egyik leggyakoribb használata az SQL -ben az indexek hozzáadása és elhagyása a teljesítmény javítása érdekében SQL lekérdezések SELECT. Ebben az oktatóanyagban az ALTER parancs használatának különböző módjait fogjuk látni. Az ALTER paranccsal hozzáadhat, szerkeszthet vagy módosíthat táblázatokat, nézeteket az adatbázisokban. Hozzáadhatunk egy új oszlopot a táblázathoz, megváltoztathatjuk az oszlop értékét, vagy átnevezhetjük az oszlopot.

10 Példák az ALTER parancsra az SQL -ben

Nézzük az ALTER parancs SQL -ben leggyakrabban használt példáit. Ebben a részben megvizsgáljuk, hogyan használhatjuk az ALTER parancsot a táblázatban lévő oszlopok hozzáadásához, módosításához és törléséhez.

1. példa: Hogyan lehet oszlopot hozzáadni egy meglévő táblázathoz az ALTER használatával az SQL -ben:

Tegyük fel, hogy van egy diák nevű táblánk, melyen roll_number, stu_name, class, subject, és hozzá akarunk adni egy újabb oszlopot, mint a parancsokatVÁLTOZTAT.

ALTER TABLE Student ADD marks_ megszerzett szám (3);

Ha ezt a mezőt hozzáadja a táblázathoz, akkor az alapértelmezett nulla értéket fog tartalmazni.

2. példa: Hogyan lehet meglévő oszlopot megváltoztatni az ALTER paranccsal az SQL -ben :

Tegyük fel, hogy most a fent hozzáadott mark_obtained mezőt szeretnénk számról tizedes adattípusra változtatni, használhatjuk az oszlopmódosításokat az alter paranccsal együtt.

ALTER TABLE Diák ALTER COLUMN marks_ megszerzett DECIMAL (5, 2);

3. példa: Hogyan lehet eltávolítani egy meglévő oszlopot a táblázatból az ALTER paranccsal az SQL -ben:

Ha most meg akarunk dobni egy meglévő oszlopot a táblázatból, akkor a DROP -t használjuk az ALTER paranccsal együtt

ALTER TABLE Diák DROP oszlop jelei_szerzés;

Példa 4. Hogyan lehet eldobni egy elsődleges kulcsot az ALTER paranccsal egy adatbázisban :

Tegyük fel, hogy van egy „pk_roll_num” nevű elsődleges kulcs a Hallgatói táblázat roll_number oszlopához, és el akarjuk törölni ezt a korlátozást

ALTER TABLE Student DROP CONSTRAINT "pk_roll_num";

5. példa: Hogyan adhat hozzá elsődleges kulcskorlátozásokat az ALTER paranccsal az SQL -ben:

Most egy elsődleges kulcskorlátozást szeretnénk hozzáadni a Hallgatói táblázathoz, a „pk_roll_num” nevet a roll_number ’oszlophoz. Ezt tesszük

ALTER TABLE Student ADD Constraint "pk_roll_num PRIMARY KEY (roll_number)

6. példa: Hogyan lehet visszaállítani egy idegen kulcsra vonatkozó kényszert az ALTER paranccsal:

Tegyük fel, hogy a „Jelek” táblázat „roll_number” oszlopában található „fk_roll_num” nevű idegen kulcskorlátozás, és el akarjuk hagyni ezt a korlátozást.

ALTER TABLE Jelzések DROP CONSTRAINT "fk_roll_num";

Példa 7: Idegen kulcs korlátozások hozzáadása az ALTER paranccsal

Most idegen kulcskorlátozást szeretnénk hozzáadni a jegyek táblához, az 'fk_roll_num' névvel a roll_number oszlophoz. Ezt fogjuk tenni:

ALTER TABLE Marks ADD Constraint "fk_roll_num FOREIGN KEY (roll_number) REFERENCIA Diákok (roll_number);

8. példa: Egyedi kulcskorlátok hozzáadása az ALTER paranccsal

Most ha hozzá akarjuk tenni egyedi a korlátozó kulcsot a Hallgatói táblához, amelyet a „egyedi_tekercs_szám” nevű „roll_number” oszlopnak neveznek. Ezt fogjuk tenni:

ALTER TABLE Student ADD CONSTRAINT unique_roll_no UNIQUE (roll_Number);

9. példa : Az egyedi kényszerítő kulcs eltávolítása az ALTER paranccsal

Ha most el akarjuk dobni az egyedi korlátozó kulcsot a Hallgatói táblázatban, az „egyedi_tekercs_szám” elnevezésű roll_number oszlopban. Ezt fogjuk tenni:

ALTER TABLE Student DROP CONSTRAINT unique_roll_no);

10. példa: SNEC hozzáadása az ALTER paranccsal az SQL -ben

Az ellenőrző megszorítás táblához való hozzáadásának alapvető szintaxisa a következő:

ALTER TABLE table_name ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);

Ez az ALTER parancs példáiról szól az SQL -ben. 10 különböző módot láttunk az ALTER parancs SQL használatára. Az ALTER az egyik legfontosabb, amikor bármilyen adatbázisban dolgozik, például MySQL, Oracle vagy SQL Server, különösen parancs sor... Mivel gyakran hozzá kell adnunk, módosítanunk és törölnünk kell a táblázatban lévő oszlopokat, indexeket és korlátozásokat.

Az ellenőrzési korlátozások következő szintjei különböztethetők meg:

  • attribútum (oszlop) szint,
  • sor (sor) szint,
  • kapcsolat szintje (táblázat).

Oszlopszintű korlátozásban csak egyetlen oszlopérték kerül ellenőrzésre, más szóval a korlátozás ilyen típusú a táblázatnak csak egy oszlopára van hivatkozás, amelynek meghatározásában ez a korlátozás szerepel. Hogy példát adjunk egy ilyen korlátozásra, térjünk vissza a Computer Firm diagramhoz. A Termék táblázatban a típus oszlop három érték egyikét tartalmazhatja. A következő korlátozásokkal megtilthatjuk, hogy ebben az oszlopban más információkat is megadjunk:

    CHECK (írja be ("nyomtató", "pc", "laptop"))

Térjünk rá, hogy megismerkedjünk az ALTER TABLE utasítással, amely lehetővé teszi számunkra, hogy megváltoztassuk a táblázat szerkezetét anélkül, hogy minden alkalommal újra kellene készítenünk. Ez annál is fontosabb, mert szükség lehet a szerkezet megváltoztatására, ha a táblázat már tartalmaz adatokat.

Az ALTER TABLE utasítás használatával hozzáadhat vagy eltávolíthat oszlopokat, alapértelmezett értékeket és korlátozásokat.

Jelenleg érdekel a korlátozás hozzáadása a típus oszlophoz, ezért először itt van a kényszer hozzáadására szolgáló operátor szintaxisa:

    ALTER TABLE

    KAPCSOLAT HOZZÁADÁSA;

Tegyük most hozzá a korlátozásunkat, és teszteljük, hogyan működik.

    ALTER TABLE Termék

    ADD CONSTRAINT chk_type CHECK (írja be (IN ("pc", "laptop", "nyomtató")));

Annak érdekében, hogy a korlátozás a várt módon működjön, próbáljunk új típusú modellt hozzáadni:

    BELÉPÉS A termékértékekbe ("A", 1122, "notebook");

A várakozásoknak megfelelően hibaüzenetet kapunk válaszul:

Az INSERT utasítás ütközött a "chk_type" CHECK korlátozással. Az ütközés a "learn" adatbázisban, a "dbo.product" táblázatban, a "type" oszlopban történt. A nyilatkozatot megszüntették.

(INSERT ütközés a "chk_type" CHECK kényszerrel. Konfliktus történt a "learn" adatbázisban, a "dbo.product" táblázatban, a "type" oszlopban. Ezt az állítást megszakították.)

Ahogy sejtheti, a sor szintű korlátozás több oszlopreferenciát tartalmaz. Ebben az esetben a korlátozást minden egyes módosított sorra külön -külön ellenőrzik. A sor hozzáadható (vagy módosítható), ha a megszorítást nem sértik meg.

Példaként tiltsuk meg a Z gyártótól, hogy a nyomtatókon kívül bármit kiadjon.

    ALTER TABLE Termék

    ADD megszorítás chk_maker_Z CHECK ((készítő = "Z" ÉS típus = "nyomtató") VAGY "Z" készítő);

Tehát a korlátozás ellenőrzi, hogy a Terméktáblázatban szereplő modellnek a Z gyártó (gyártó = "Z" és típus = "nyomtató") vagy bármely más gyártó (de nem Z) nyomtatója kell -e lennie.

Ha megpróbáljuk hozzáadni a Z gyártó PC -modelljét,

A táblázatok manipulálása az egyik leggyakoribb tevékenység, amelyet az adatbázis -adminisztrátorok és a programozók végeznek, amikor adatbázis -objektumokkal dolgoznak. Ez a rész részletesen leírja a táblázatok létrehozását és módosítását.

Az ANSI szabvány némileg a legalacsonyabb közös nevező minden gyártó számára, bár nem minden lehetőség standard verzió A CREATE TABLE és az ALTER TABLE utasításokat minden gyártó megvalósítja. Az ANSI szabvány azonban minden platformon használható alapforma.

A platformok viszont számos bővítményt és kiegészítést kínálnak az ANSI CREATE TABLE és az ALTER TABLE utasításokhoz.

Általános szabály, hogy alaposan meg kell gondolnia az asztal kialakítását és létrehozásának módját. Ezt a folyamatot adatbázis -tervezésnek nevezik. A táblázat és a saját adatai, valamint az adatbázis többi táblája közötti kapcsolat elemzésének folyamatát normalizálásnak nevezzük. Javasoljuk, hogy a programozók és az adatbázis -adminisztrátorok tanulmányozzák a tervezési és normalizálási elveket, mielőtt használnák a DATABASE CREATE parancsokat.

SQL 2003 szintaxis

Az SQL 2003 CREATE TABLE utasítás végrehajtásakor egy állandó vagy ideiglenes tábla jön létre az adatbázisban. A szintaxis a következő.

LÉTREHOZÁS [(LOCAL TEMPORARY) GLOBAL TEMPORARY]] TÁBLÁZAT table_name (oszlopnév adattípus attribútumai [, ...]) | [oszlopnév OPTIONS BEÁLLÍTÁSOKKAL] | | (RENDSZER GENERÁLT | FELHASZNÁLÓ GENERÁLT | SZÁRMAZOTT)] [,…]] [tábla_definíció]] tábla_neve adattípus attribútumai] | oszlopnév BEÁLLÍTÁS alapértelmezett_érték] | oszlopnév DROP DEFAULT] | oszlop_neve HOZZÁADÁS tábla_neve | oszlopnév DROP SCOPE (RESTRICT | CASCADE)] | oszlop_neve (KORLÁTOZOTT | KASZKÁD)] | |

Kulcsszavak

IDEIGLENES

Egy állandó vagy ideiglenes (ÁTMENETI) tábla helyi (LOCAL) vagy globális (GLOBAL) hatókörrel van deklarálva. A helyi ideiglenes táblák csak a létrehozó munkamenetből érhetők el, és automatikusan törlődnek, amikor az őket létrehozó munkamenet véget ér. A globális ideiglenes táblák minden aktív munkamenetből elérhetők, de automatikusan törlődnek, amikor az őket létrehozó munkamenet véget ér. Ne minősítse az ideiglenes táblaneveket a séma nevével.

(oszlop_neve adattípus attribútumai [,])

Lista van definiálva, amelyben egy vagy több oszlop szerepel, vesszővel elválasztva, azok adattípusai és további attribútumai, például nullázhatósága. Minden táblázat deklarációnak tartalmaznia kell legalább egy oszlopot, amelyhez megadhatja:

oszlop_neve

Az oszlop neve meg van adva. Olyan azonosítónak kell lennie, amely egy adott RDBMS -irányelv szempontjából érvényes. A névnek értelmesnek kell lennie!

adattípus

Egy adott adattípust az oszlop_neve nevű oszlophoz társít. Azoknak az adattípusoknak, amelyek lehetővé teszik a hosszuk megadását, van kiegészítő paraméter hosszúságú, például VARCHAR (255). Az adattípusnak érvényesnek kell lennie az RDBMS -ben. Per teljes leírás az egyes gyártókra érvényes adattípusokat és azok változatait lásd a 2. fejezetben

A megadott korlátozási attribútumokat az oszlophoz köti. Egy oszlop_neve nevű oszlophoz több attribútum is megadható. Nem szükséges vessző. A tipikus ANSI attribútumok a következők.

NEM NULLA

A NULL értékek nem megengedettek az oszlopban (vagy megengedettek, ha a NOT NULL záradék ki van hagyva). Minden olyan INSERT és UPDATE utasítás, amely a NULL értéket egy NOT NULL oszlopba próbálja beilleszteni, sikertelen lesz, és visszaáll.

DEFAULT kifejezés

Az oszlop a kifejezés értékét fogja használni, ha az INSERT vagy UPDATE utasítás nem ad meg értéket. A kifejezésnek érvényesnek kell lennie az oszlop adattípusára; az INTEGER oszlopban például nem használható betűrendes karakter. A kifejezés lehet karakterlánc vagy numerikus literál, de megadhat egy felhasználó által definiált vagy rendszerfüggvényt is. Az SQL 2003 szabvány lehetővé teszi a következő rendszerfunkciók használatát az DEFAULT záradékban: NULL, USER, CURRENTJJSER, SESSION_USER, SYSTEMJJSER, CURRENT_PATH, CURRENT_D AND TE, CURRENTJIME, LOCALTIME, CURRENTJIMESTAMP, LOCALRJ.

COLLATE collation_name

Meghatározzák az alkalmazott szortírozást, vagyis a megfelelő oszlopban található rendezési sorrendet. A leképezés neve platformfüggő. Ha nincs megadva egy leválogatási név, akkor az alapértelmezett az oszlopban használt karakterkészlet alapján történő szortírozás. A REFERENCIÁK ELLENŐRIZZE Ez a paraméter határozza meg, hogy a hatókör opcióval megadott REF oszlopban található hivatkozások ellenőrizve vannak -e. Az opcionális ON DELETE záradék határozza meg, hogy a törölt rekord által hivatkozott rekordok értékei NULL értékre lesznek -e állítva, vagy a művelet korlátozva lesz.

CONSTRAINT korlátozás neve [constraint_type [constraint]]

A paraméter korlátozást rendel az oszlophoz, és opcionálisan kényszernevet. A korlátozások típusait a 2. fejezet tárgyalja. Mivel a korlátozás egy adott oszlophoz van társítva, a korlátozási nyilatkozat feltételezi, hogy ez az oszlop az egyetlen a korlátozásban. A tábla létrehozása után a korlátozás táblázatszintű korlátozásnak minősül.

oszlop_neve

Az oszlop speciális beállításokkal van definiálva, például hatókör -beállítással, alapértelmezett beállítással, oszlopszintű megkötéssel vagy COLLATE záradékkal. Sok megvalósításban a WITH OPTIONS záradék a gépelt táblák létrehozására korlátozódik.

LIKE tábla_neve

Létrejön egy új táblázat, ugyanazokkal az oszlopdefiníciókkal, mint a meglévő táblázat tábla_neve.

REFIS oszlop_neve (RENDSZER GENERÁLT | FELHASZNÁLÓ GENERÁLT SZERVETT]

Megadja az objektumazonosító (OID) oszlopot a gépelt táblázatokban. Az objektumazonosító a táblahierarchia gyökértáblázatához szükséges. Ennek a paraméternek megfelelően a REF oszlopot a rendszer automatikusan generálhatja (SYSTEM GENERATED), a felhasználó manuálisan megadhatja, amikor belép egy sorba (USER GENERATED), vagy egy másik REF oszlop alapján (DERIVED). A paraméter megköveteli, hogy a REFERENCES attribútum szerepeljen az oszlop_neve oszlopban.

CONSTRAINT megszorítás típusa [kényszer neve] [, ...]

Egy vagy több korlátozás van hozzárendelve a táblázathoz. Ez a beállítás jelentősen különbözik az oszlopszintű korlátozásoktól, mivel feltételezzük, hogy az oszlopszintű korlátozások csak arra az oszlopra vonatkoznak, amelyhez társítva vannak. Táblázatszintű megszorítások esetén lehetőség van több oszlop társítására a korlátozással. Például egy értékesítési táblázatban egyedi korlátozást kell deklarálnia a tárolóazonosító, a rendelési_azonosító és a rendelési_dátum összekapcsolt kulcson. Ezt csak táblaszintű megszorítással lehet megtenni. A korlátozások részletes tárgyalását lásd a 2. fejezetben.

OF típusú_név [tábla_definíció]

A táblázat egy előre meghatározott, felhasználó által definiált típuson alapul. Ebben a helyzetben a táblázat csak egy oszlopot tartalmazhat minden strukturált típus attribútumhoz, valamint egy további oszlopot, amelyet a REF IS záradék határoz meg. A REF adattípust részletesen a "CREATE / ALTER TOURE utasítás" szakasz írja le. Ez a záradék nem kompatibilis a LIKE table_name záradékkal. Ahol:

SUPER ALATT [definíció / táblázatok]

Ugyanebben a sémában (ha létezik) azonnali szupertablont deklarálunk az aktuális táblához. Opcionálisan megadhatja a supertable teljes táblázat_definícióját, kitöltve oszlopokkal, megszorításokkal és hasonlókkal.

VÁLLALKOZÁSRA (SOROK TARTALMAZÁSA SOROK TÖRLÉSE)

Az ON COMMIT PRESERVE ROWS záradék megőrzi az ideiglenes tábla adatsorát a COMMIT utasítás végrehajtásakor. Az ON COMMIT DELETE RO WS záradék törli az összes adatsort az ideiglenes táblából a COMMIT utasítás végrehajtásakor.

ADD oszlop_név adattípus attribútumokat

A megfelelő adattípussal és attribútumokkal rendelkező oszlop hozzáadásra kerül a táblázathoz.

ALTER oszlopnév BEÁLLÍTÁS alapértelmezett_érték

Alapértelmezett érték kerül hozzáadásra az oszlophoz (ha nem létezik), vagy egy meglévő érték módosul.

ALTER oszlopnév DROP DEFAULT

Az alapértelmezett beállítás teljesen törlődik a megadott oszlopból.

ALTER oszlop_neve HOZZÁADÁS tábla_neve

A hatókör hozzáadódik a megadott oszlophoz. A hatókör hivatkozás egy egyéni adattípusra.

ALTER oszlopnév DROP SCOPE

A hatókör eltávolításra kerül a megadott oszlopból. A RESTRICT és CASCADE mondatok a lista végén találhatók.

DROP COLUMN oszlop_neve

A megadott oszlop eltávolításra kerül a táblázatból. A RESTRICT és CASCADE mondatok a lista végén találhatók.

ADD table_constraint

A megadott névvel és jellemzőkkel rendelkező korlátozás hozzáadásra kerül a táblázathoz.

DROP CONSTRAINT korlátozás neve

A meglévő korlátozás eltávolításra kerül a táblázatból.

KORLÁTOZ

Amikor ezt a záradékot megadta, az RDBMS törli a parancsot, ha az objektumtól függő objektumokat talál az adatbázisban.

Amikor ezt a záradékot megadta, az RDBMS eltávolítja az objektumtól függő összes többi objektumot.



Tetszett a cikk? Oszd meg