itthon / A PC elsajátítása / Az alter table utasítás szintaxisa. Az alter table ALTER TABLE utasítás szintaxisa kulcsok hozzáadásához

Az alter table utasítás szintaxisa. Az alter table ALTER TABLE utasítás szintaxisa kulcsok hozzáadásához

ALTER TABLE - tábladefiníció módosítása

Szintaxis

ALTER TABLE [HA LÉTE] [CSAK] név [ * ] akció[, ... ] ALTER TABLE [ HA LÉTEZ ] [ CSAK ] név[*] ÁTNEVEZÉS [OSZLOP] oszlop_neve NAK NEK új_oszlop_neve ALTER TABLE [HA LÉTE] [CSAK] név[*] ÁTNEVEZÉS KÖRNYEZET megszorítás_neve NAK NEK új_megszorítás_neve TÁBLÁZAT MÓDOSÍTÁSA [ HA LÉTEZ ] névÁTNEVEZÉS új név TÁBLÁZAT MÓDOSÍTÁSA [ HA LÉTEZ ] név SÉMA BEÁLLÍTÁSA új_séma ALTER TABLE ALL IN TABLESSPACE név[ TULAJDONÁBAN LÉVŐ szerep_név[, ... ]] ASZTALTERÜLET BEÁLLÍTÁSA new_table_space[NINCS VÁRAKOZÁS] Ahol akció a következő lehet:[OSZLOP] HOZZÁADÁSA [HA NEM LÉTEZ] oszlop_neve adattípus[BESZÁMÍTÁS] sort_rule ] [ oszlop_kényszer[ ... ] ] HAJTJA [ OSZLOP ] [ HA LÉTEZ ] oszlop_neve[ KORLÁTOZÁS | CASCADE ] ALTER [ OSZLOP ] oszlop_neve[ADATOK BEÁLLÍTÁSA] TÍPUS adattípus[BESZÁMÍTÁS] sort_rule][ HASZNÁLAT kifejezés]ALTER [OSZLOP] oszlop_neve ALAPÉRTELMEZETTRE ÁLLÍTÁS kifejezés ALTER [ OSZLOP ] oszlop_neve DEFAULT ALTER [ OSZLOP ] oszlop_neve( SET | DROP ) NOT NULL ALTER [ OSZLOP ] oszlop_neve STATISZTIKA BEÁLLÍTÁSA egész szám ALTER [ OSZLOP ] oszlop_neve KÉSZLET( tulajdonság = jelentése[, ... ]) ALTER [ OSZLOP ] oszlop_neve VISSZAÁLLÍTÁS( tulajdonság[, ... ]) ALTER [ OSZLOP ] oszlop_neve TÁROLÓ BEÁLLÍTÁSA (SIMA | KÜLSŐ | BŐVÍTETT | FŐ) HOZZÁADÁS table_constraint[NEM ÉRVÉNYES] HOZZÁAD MÓDOSÍTÁSA KÉSZÜLÉK megszorítás_neve[HALADHATÓ | NEM HASZNÁLHATÓ ] [ EREDETI KÉSZÜLT | INDÍTÁSI AZONNALI ] Érvényesíteni kell a korlátozást megszorítás_neve HAJTJA EL KÖRNYEZETT [ HA LÉTEZ ] megszorítás_neve[ KORLÁTOZÁS | CASCADE ] TRIGGER LETILTÁSA [ trigger_name| MINDEN | FELHASZNÁLÓ] TRIGGER ENGEDÉLYEZÉSE [ trigger_name| MINDEN | FELHASZNÁLÓ ] REPLIKA TRIGGER ENGEDÉLYEZÉSE trigger_name MINDIG TRIGGER ENGEDÉLYEZÉSE trigger_name SZABÁLY LETILTÁSA rewrite_rule_name SZABÁLY ENGEDÉLYEZÉSE rewrite_rule_name REPLIKASZABÁLY ENGEDÉLYEZÉSE rewrite_rule_name MINDIG ENGEDÉLYEZÉS SZABÁLY rewrite_rule_name SORSZINTŰ BIZTONSÁG LETILTÁSA SORSZINT BIZTONSÁG ENGEDÉLYEZÉSE SORASZINTŰ BIZTONSÁG KÉNYSZERÍTÉSE NINCS BE KÉSZÍTETT SORSZINTŰ BIZTONSÁGI KLUSTER index_neve BEÁLLÍTÁS KLUSTER NÉLKÜL BEÁLLÍTÁS OIDS-EKKEL BEÁLLÍTÁS OIDS NÉLKÜL BEÁLLÍTÁS ASZTALTÉR new_table_space BEÁLLÍTÁS ( NAPLÓLÁS | UNLOGGED ) SET ( tárolási_opció = jelentése[, ...]) VISSZAÁLLÍTÁS ( tárolási_opció[, ...]) ÖRÖKÖL táblázat_szülő NINCS ÖRÖLKEDÉS táblázat_szülő NAK,-NEK type_name NEM TULAJDONOSA ( új tulajdonos| CURRENT_USER | SESSION_USER ) REPLICA IDENTITY (ALAPÉRTELMEZETT | INDEX HASZNÁLATA index_neve| TELJES | SEMMI) és táblázat_korlátja_index szerint: [ KOSZTRÁCIÓ megszorítás_neve] ( EGYEDI | ELSŐDLEGES KULCS ) INDEX HASZNÁLATA index_neve[HALADHATÓ | NEM HASZNÁLHATÓ ] [ EREDETI KÉSZÜLT | KEZDETI AZONNAL]

Leírás

ALTER TABLE megváltoztatja a definíciót meglévő táblázat. Több fajtáját az alábbiakban ismertetjük. Vegye figyelembe, hogy a különböző ízekhez különböző zárolási szintek szükségesek. Hacsak nincs kifejezetten másképp jelezve, ACCESS EXCLUSIVE zár szükséges. Több alparancs felsorolásakor a rendszer a szükséges legerősebb zárolást kéri.

OSZLOP HOZZÁADÁSA [ HA NEM LÉTEZIK ]

Ez az űrlap egy új oszlopot ad a táblázathoz, ugyanazzal a szintaxissal, mint a CREATE TABLE . Ha az IF NOT EXISTS van megadva, és már létezik azonos nevű oszlop, ez nem jelent hibát. HAJTJA EL AZ OSZLOPOT [ HA LÉTEZ ]

Ez az űrlap eltávolít egy oszlopot a táblázatból. Ez automatikusan eltávolítja az adott oszlophoz tartozó indexeket és táblázatkényszereket. Ha a táblázaton kívüli objektumok függenek ettől az oszloptól, például idegen kulcsok vagy nézetek, akkor a CASCADE tipp hozzáadásával eltávolíthatja őket. Ha a parancsban az IF EXISTS van megadva, és ez az oszlop nem létezik, akkor ez nem tekinthető hibának, hanem egyszerűen egy megjegyzés jelenik meg. ADATTÍPUS BEÁLLÍTÁSA

Ez az űrlap megváltoztatja a táblázat oszlopának típusát. Az ezt az oszlopot tartalmazó indexek és egyszerű táblázatkényszerek automatikusan az új oszloptípusra konvertálódnak az őket meghatározó kifejezés újraértelmezésével. Az opcionális COLLATE záradék meghatározza az új oszlop leválogatását; ha kihagyjuk, az új típus alapértelmezett leválogatása kerül kiválasztásra. Az opcionális USING záradék meghatározza, hogy az új oszlopérték hogyan lesz származtatva a régiből; ha hiányzik, akkor egy alapértelmezett típusadás történik, mint a régi típus értékének normál hozzárendelése az újhoz. A USING záradék kötelezővé válik, ha nincs definiálva egy implicit öntvény vagy olyan hozzárendelés, amely a régi típust az új típusba adja. ALAPÉRTELMEZETT BEÁLLÍTÁS / DROP

Ezek az űrlapok beállítják vagy eltávolítják az oszlopok alapértelmezett értékét. Az alapértelmezett értékek csak a következő INSERT vagy UPDATE utasításokra vonatkoznak; módosításaik nem jelennek meg a táblázatban már meglévő sorokban. SET / DROP NOT NULL

Ezek az űrlapok határozzák meg, hogy az oszlop elfogadja-e a NULL értékeket vagy sem. A SET NOT NULL értéket csak akkor adhatja meg, ha az oszlop nem tartalmaz NULL értékeket. STATISZTIKA BEÁLLÍTÁSA

Ez az űrlap egy oszlopstatisztika-gyűjtési célt ad meg a következő ANALYZE műveletekhez. Hatótávolság megengedett értékek tereptárgy: 0..10000; -1 esetén a rendszer alapértelmezett értéke (default_statistics_target) kerül alkalmazásra. A statisztika PostgreSQL lekérdezéstervező általi használatáról további információkat a 14.2 szakaszban talál.

A SET STATISTICS SHARE UPDATE EXCLUSIVE zárolást kér. KÉSZLET( tulajdonság = jelentése [, ... ])
VISSZAÁLLÍTÁS( tulajdonság [, ... ])

Ez az űrlap beállítja vagy visszaállítja az attribútumbeállításokat. Jelenleg az egyetlen attribútumopció az n_distinct és az n_distinct_herited , amelyek felülírják a következő ANALYZE műveletek által készített_of_dinct_values ​​becslést. Az n_distinct attribútum magának a táblának a statisztikáinak kiszámítását, az n_distinct_herited pedig a tábla és leszármazottai statisztikáit befolyásolja. Ha a megadott érték pozitív, az ANALYZE azt feltételezi, hogy az oszlop pontosan annyi különböző nem NULL értéket tartalmaz. Ha a megadott érték negatív (nagyobbnak vagy egyenlőnek kell lennie, mint -1), az ANALÍZIS azt feltételezi, hogy egy oszlopban a különböző nem NULL értékek száma lineáris a táblázat méretével; a pontos számot úgy kapjuk meg, hogy a táblázat hozzávetőleges méretét megszorozzuk a paraméter abszolút értékével. Például a -1 azt feltételezi, hogy az oszlopban lévő összes érték eltérő, a -0,5 pedig azt, hogy minden érték átlagosan kétszer ismétlődik. Ez akkor lehet hasznos, ha a tábla mérete idővel változik, mivel a tábla sorainak számával való szorzás csak a lekérdezés tervezési időpontjában történik. 0-tól a különböző értékek száma a szokásos módon kerül kiértékelésre. A statisztika PostgreSQL lekérdezéstervező általi használatáról további információkat a 14.2 szakaszban talál.

A SHARE UPDATE EXCLUSIVE zárra van szükség az attribútumbeállítások módosításához. TÁROLÁS BEÁLLÍTÁSA

Ez az űrlap az oszlop tárolási módját állítja be. Meghatározza, hogy az adatok egy táblában vagy egy külön TOAST táblában tárolódnak-e, és hogy tömörítve vannak-e. A PLAIN módot kell használni rögzített hosszúságú értékekhez, például egész számokhoz; ez egy belső tárolási lehetőség, tömörítés nélkül. A MAIN módot a belső, de tömörített adatok tárolására, a KÜLSŐ módot a tömörítetlen adatok külső tárolására, a EXTENDED a tömörített adatok külső tárolására használják. A BŐVÍTETT az alapértelmezett a legtöbb olyan adattípusnál, amely támogatja a nem egyszerű tárolást. Az EXTERNAL használatával felgyorsíthatja a részkarakterlánc-műveleteket nagyon nagy szöveg- és bájtértékeken, a tárhely rovására. Ne feledje, hogy a SET STORAGE záradék önmagában semmit nem változtat a táblán, csak azt a stratégiát határozza meg, amelyet a tábla jövőbeni módosításai esetén alkalmazni kell. További információkért lásd a 62.2 szakaszt. HOZZÁAD table_constraint[NEM ÉRVÉNYES]

Ez az űrlap egy új megszorítást ad a táblához, ugyanazzal a szintaxissal, mint a CREATE TABLE , egy további NOT VALID záradékkal, amely jelenleg csak az idegen kulcshoz és az ellenőrzési megszorításokhoz engedélyezett. Ha a megszorítás NOT VALID jelölésű, akkor a potenciálisan hosszadalmas kezdeti ellenőrzés, hogy minden sor megfelel-e annak, kimarad. Ez a megszorítás azonban érvényben lesz az adatok későbbi kiegészítésére vagy módosítására (azaz ezek a műveletek nem hajtódnak végre, ha az új sor megsérti az ellenőrzési kényszerfeltételt, vagy ha nincs megfelelő sor a főtáblázatban, ha van egy idegen kulcs). Az adatbázis azonban nem feltételezi, hogy a megszorítás a tábla összes sorában teljesül, amíg azt a VALIDATE CONSTRAINT tipp segítségével nem ellenőrizték. HOZZÁAD táblázat_korlátja_index szerint

Ez az űrlap egy új ELSŐDLEGES KULCS vagy EGYEDI kényszert ad a táblához egy meglévő egyedi index alapján. Ez a megszorítás az adott index összes oszlopát fogja tartalmazni.

Az index nem lehet részleges, és nem tartalmazhat kifejezés oszlopokat. Ezenkívül egy B-fa indexnek kell lennie az alapértelmezett rendezési sorrendben. Ezekkel a korlátozásokkal a hozzáadott indexek nem különböznek a szokásos ADD PRIMARY KEY és ADD UNIQUE parancsok által létrehozott indexektől.

Az ELSŐDLEGES KULCS megadása esetén, ha az index oszlopai még nincsenek megjelölve NEM NULL, parancsot adott megpróbálja az ALTER COLUMN SET NOT NULL beállítást minden oszlophoz. Ehhez teljes táblázatvizsgálatra lesz szükség, hogy megbizonyosodjon arról, hogy az oszlop(ok) nem NULL-ek. Minden más esetben ez egy gyors művelet.

Ha megszorítási nevet adunk meg, akkor az index átnevezi a megadott névre. Ellenkező esetben a megszorítás neve az index neve lesz.

A parancs végrehajtása után az index a következő lesz "tartozó" megszorítást, mintha egy normál ADD PRIMARY KEY vagy ADD UNIQUE paranccsal hozták volna létre. Ez különösen azt jelenti, hogy egy kényszer törlésekor az index törlődik vele együtt.

jegyzet

Meglévő indexen alapuló kényszer hozzáadása hasznos olyan helyzetekben, amikor új megszorítást kell hozzáadni anélkül, hogy blokkolná a tábla módosításait hosszú ideje. Ehhez létrehozhat egy indexet a CREATE INDEX CONCURRENTLY paranccsal, majd ezt a bejegyzést teljes kényszerként használhatja. Lásd a következő példát.

MÓDOSÍTÁSA KÉSZÜLÉK

Ez az űrlap megváltoztatja a korábban létrehozott kényszer attribútumait. Jelenleg csak az idegen kulcs megszorításai módosíthatók. VALIDATE CONSTRAINT

Ez az űrlap érvényesíti a korábban a NOT VALID paraméterrel létrehozott idegen kulcsot vagy érvényesítési megszorítást a teljes tábla átvizsgálásával, hogy megbizonyosodjon arról, hogy minden sor megfelel a megszorításnak. Ha a megszorítás már igaznak van jelölve, semmi sem történik.

A nagy asztalok ellenőrzése meglehetősen hosszadalmas lehet. A csekk elválasztásának a kényszer létrehozásától az a lényege, hogy lehetővé teszi az ellenőrzés elhalasztását egy kevesebb tevékenység időszakára, vagy extra munka Val vel meglévő hibákat miközben megakadályozza az újakat. Vegye figyelembe azt is, hogy amíg az ellenőrzés folyamatban van, az önmagában nem akadályozza meg a normál táblaírási parancsok végrehajtását.

Az érvényesítés csak egy SHARE UPDATE EXCLUSIVE zárolást kér a céltáblán. Az idegenkulcs-megszorításokhoz a megszorítás által hivatkozott táblán is szükség van egy ROW SHARE zárra. HAJTJA EL KÖRNYEZETT [ HA LÉTEZ ]

Ez az űrlap eltávolítja a megadott táblakényszert. Ha az IF EXISTS van megadva, és a megadott megszorítás nem létezik, akkor ez nem tekinthető hibának. Ebben az esetben csak jegyzet kerül kiadásra. LETILTÁS / ENGEDÉLYEZÉS [ REPLIKA | MINDIG] TRIGGER

Ezek az űrlapok konfigurálják a táblához tartozó trigger(ek) aktiválását. A letiltott trigger továbbra is fennáll a rendszerben, de nem hajtódik végre, amikor az eseményindító esemény bekövetkezik. Késleltetett triggereknél az engedélyezési állapot az esemény bekövetkezésekor kerül ellenőrzésre, nem pedig a trigger függvény tényleges meghívásakor. Ez a parancs letilthat vagy engedélyezhet egy triggert név szerint, vagy az összes tábla triggert, vagy csak az egyéni triggereket (kivéve a belsőleg generált kényszerindítókat, például az olyan triggereket, amelyek az idegen kulcs megszorításait vagy a késleltetett egyedi vagy kizárási kényszereket valósítják meg). Superuser jogosultságok szükségesek a generált rendszeren belüli korlátozási triggerek letiltásához vagy engedélyezéséhez; Óvatosan le kell tiltani őket, mert nyilvánvalóan lehetetlen garantálni a kényszerek integritását, ha a triggerek nem működnek. Az eseményindító aktiválási mechanizmusát a session_replication_role konfigurációs változó is befolyásolja. A további utasítások nélkül engedélyezett triggerek akkor aktiválódnak, ha a replikációs szerepkör " eredet "(alapértelmezett) vagy " helyi ». A REPLICA ENGEDÉLYEZÉSE által engedélyezett triggerek csak akkor aktiválódnak, ha az aktuális munkamenet mód " replika », és az ENABLE ALWAYS megadása után az aktuális replikációs módtól függetlenül aktiválja a tüzet.

Ez a parancs SHARE ROW EXCLUSIVE zárolást kér. LETILTÁS / ENGEDÉLYEZÉS [ REPLIKA | MINDIG] SZABÁLY

Ezek az űrlapok konfigurálják a táblára jellemző átírási szabályok aktiválását. A letiltott szabályt elmenti a rendszer, de nem alkalmazza a lekérdezés átírása során. Lényegében ezek a műveletek hasonlóak a triggerek engedélyezésének/letiltásának műveleteihez. Ez azonban nem vonatkozik az ON SELECT szabályokra – ezeket mindig alkalmazzák annak biztosítására, hogy a nézetek továbbra is működjenek, még olyan munkamenetekben is, amelyek nem elsődleges replikációs szerepet töltenek be. SORSZINTŰ BIZTONSÁG LETILTÁSA / ENGEDÉLYEZÉSE

Ezek az űrlapok szabályozzák a táblaspecifikus sorvédelmi házirendek alkalmazását. Ha a biztonság engedélyezve van, de a táblához nincsenek meghatározva házirendek, akkor a rendszer az alapértelmezett hozzáférés-megtagadási házirendet alkalmazza. Vegye figyelembe, hogy házirendek akkor is meghatározhatók egy táblához, ha a sorszintű biztonság le van tiltva – ebben az esetben a házirendek NEM kerülnek alkalmazásra, és a korlátozásaikat figyelmen kívül hagyja. Lásd még: SZABÁLYZAT LÉTREHOZÁSA. NO FORCE / FORCE ROW SZINTŰ BIZTONSÁG

Ezek az űrlapok szabályozzák a táblaspecifikus sorvédelmi házirendek alkalmazását, ha a felhasználó a tábla tulajdonosa. Ha ez a viselkedés engedélyezve van, a sorszintű biztonsági házirendek a tábla tulajdonosára is vonatkoznak. Ha le van tiltva (alapértelmezett), a sorszintű biztonság nem érinti a tábla tulajdonosát. Lásd még: SZABÁLYZAT LÉTREHOZÁSA. CLUSTER BE

Ez az űrlap alapértelmezett indexet választ ki a következő CLUSTER műveletekhez. A tábla tényleges klaszterezése ebben az esetben nem történik meg.

A fürtözési beállítások módosításához egy SHARE UPDATE EXCLUSIVE zárra van szükség. BEÁLLÍTÁS CLUSTER NÉLKÜL

Ez az űrlap eltávolítja a CLUSTER utoljára megadott index-útmutatót. Hatása tükröződik a jövőbeni fürtözési műveletekben, amelyekhez nincs beállítva index.

A fürtözési beállítások módosításához egy SHARE UPDATE EXCLUSIVE zárra van szükség. AZ OIDS BEÁLLÍTÁSA

Ez az űrlap hozzáadja az oid rendszer oszlopot a táblázathoz (lásd 5.4. szakasz). Ha a táblának már van ilyen oszlopa, az nem csinál semmit.

Vegye figyelembe, hogy ez nem ugyanaz, mint az OSZLOP HOZZÁADÁSA oid oid paranccsal (ez a parancs egy rendes oszlopot ad hozzá, nem rendszeroszlopot a megfelelő oid névvel). OIID NÉLKÜLI BEÁLLÍTÁS

Ez az űrlap eltávolítja az oid rendszer oszlopát a táblázatból. Ez pontosan ugyanaz, mint a DROP COLUMN oid RESTRICT, kivéve, hogy nem lesz hiba, ha az oid oszlop hiányzik. ASZTALTERÜLET BEÁLLÍTÁSA

Ez az űrlap megváltoztatja a tábla táblaterületét a megadottra, és áthelyezi a táblához tartozó adatfájlokat az új helyre. A táblázat indexei, ha vannak, nem kerülnek áthelyezésre; azonban további SET TABLESPACE parancsokkal külön-külön is mozgathatók. Az ALL IN TABLESPACE űrlap lehetővé teszi az aktuális adatbázis összes táblájának áthelyezését egy másik táblaterületre úgy, hogy először zárolja az összes táblát, majd mindegyiket áthelyezi. Ez az űrlap támogatja a OWNED BY tippet is, amely csak a megadott tulajdonos tábláit mozgatja. Ha a NOWAIT van megadva, a parancs sikertelen lesz, ha nem tudja azonnal megszerezni az összes szükséges zárolást. Vegye figyelembe, hogy ez az űrlap nem mozgatja át a rendszerkönyvtárakat; Ha át szeretné helyezni őket, használja az ALTER DATABASE vagy az ALTER TABLE kifejezett hívását. Az information_schema kapcsolatok nem minősülnek a rendszerkatalógusok részének, és áthelyezhetők. Lásd még A TÁBLÁZAT LÉTREHOZÁSA. BEÁLLÍTÁS (NAPLÓLALT | NAPLÓLHATATLAN)

Ez az űrlap megváltoztatja a tábla naplózási jellemzőit, így a táblát naplózza, illetve naplózza (lásd: UNLOGGED). Ideiglenes asztalra nem vonatkozik. KÉSZLET( tárolási_opció = jelentése [, ... ])

Ez az űrlap egy vagy több táblázattárolási beállítást módosít. Az engedélyezett beállításokkal kapcsolatos részletekért lásd: Tárolási beállítások. Vegye figyelembe, hogy ez a parancs nem változtatja meg azonnal a tábla tartalmát; a beállítástól függően szükség lehet a táblázatok felülírására a kívánt hatás eléréséhez. Ezt megteheti a VACUUM FULL , CLUSTER parancsokkal vagy az ALTER TABLE űrlapok valamelyikével, amely erőszakosan felülírja a táblát.

A SHARE UPDATE EXCLUSIVE zár szükséges a kitöltési tényező és az automatikus vákuum beállításainak módosításához.

jegyzet

Míg a CREATE TABLE lehetővé teszi az OIDS megadását a WITH szintaxisban ( tárolási_opció) , az ALTER TABLE nem fogadja el az OIDS-t tárolási lehetőségként. Ezért a SET WITH OIDS és SET WITHOUT OIDS formákat kell használni az OID jellemzőinek megváltoztatásához.

VISSZAÁLLÍTÁS( tárolási_opció [, ... ])

Ez az űrlap egy vagy több tárolási beállítást visszaállít az alapértelmezett értékre. A SET-hez hasonlóan a tábla teljes frissítéséhez szükség lehet a táblázat felülírására. ÖRÖKÖL táblázat_szülő

Ez az űrlap a céltáblát a megadott szülőtábla gyermekeként jelöli ki. Ezt követően a szülőtábla lekérdezései tartalmazni fogják a céltábla rekordjait is. Ahhoz, hogy egy tábla gyermek legyen, ugyanazokat az oszlopokat kell tartalmaznia, mint a szülőtáblának (bár tartalmazhat további oszlopokat). Az oszlopoknak azonos adattípusúaknak kell lenniük, és ha bármelyiküknek a szülőtáblában NOT NULL megszorítása van, akkor a gyermektáblában is rendelkeznie kell NOT NULL megszorítással.

Ezenkívül a szülőtábla összes CHECK kényszerének jelen kell lennie a gyermektáblában, kivéve a nem öröklötteket (azaz az ALTER TABLE ... ADD CONSTRAINT ... NO INHERIT parancs által létrehozottakat), amelyek figyelmen kívül hagyva; azonban a leszármazott táblázatban szereplő összes vonatkozó megszorítás nem lehet nem öröklődő. Jelenleg az UNIQUE , PRIMARY KEY és FOREIGN KEY megszorításokat figyelmen kívül hagyjuk, de ez a jövőben változhat. NINCS ÖRÖLKEDÉS táblázat_szülő

Ez az űrlap eltávolítja a céltáblát a megadott szülőtábla gyermeklistájából. A szülőtáblára vonatkozó lekérdezések eredményei többé nem tartalmazzák a céltáblából vett rekordokat. NAK,-NEK type_name

Ez az űrlap úgy társítja a táblát egy összetett típushoz, mintha a CREATE TABLE OF paranccsal hozták volna létre. Ebben az esetben az oszlopok névsorának és típusának pontosan meg kell egyeznie azzal, ami az összetett típust alkotja; a különbség az oid rendszer oszlopában lehetséges. Ezenkívül az asztal nem lehet más asztal gyermeke. Ezek a korlátozások biztosítják, hogy a CREATE TABLE OF parancs lehetővé tegye egy azonos definíciójú tábla létrehozását. NEM AZ

Ez az űrlap szétválasztja a beírt táblát a típusától. TULAJDONOS

Ez az űrlap megváltoztatja egy tábla, sorozat, nézet, materializált nézet vagy idegen tábla tulajdonosát a megadott felhasználóra. REPLIKA IDENTITÁS

Ez az űrlap módosítja a visszaírási naplóba írt információkat, hogy azonosítsa a módosított vagy törölt sorokat. Ez a paraméter csak logikai replikáció használata esetén működik. ALAPÉRTELMEZETT mód (a nem rendszertáblázatok alapértelmezett beállítása) az elsődleges kulcs oszlopainak régi értékeit írja, ha vannak ilyenek. AZ INDEX mód HASZNÁLATA a megadott indexet alkotó oszlopok régi értékeit írja ki, amelyeknek egyedinek, nem részlegesnek, nem halasztottnak kell lenniük, és csak a NEM NULL jelzésű oszlopokat kell tartalmazniuk. A FULL mód a sor összes oszlopának régi értékét írja, míg a NOTHING mód (a rendszertáblázatok alapértelmezése) nem ír információt a régi sorról. A régi értékek minden esetben csak akkor kerülnek naplózásra, ha az új sorban legalább egy naplózandó oszlop megváltozott. ÁTNEVEZÉS

Az ÁTNEVEZÉS űrlapok megváltoztatják a tábla (vagy index, sorozat, nézet, materializált nézet vagy idegen tábla) nevét, az egyes táblaoszlopok nevét vagy a táblakényszer nevét. Nem befolyásolja a tárolt adatokat. SÉMA BEÁLLÍTÁSA

Ez az űrlap áthelyezi a táblát egy másik sémába. A táblával együtt a hozzá tartozó indexek és megszorítások, valamint a tábla oszlopaihoz tartozó sorozatok is átkerülnek.

Minden ALTER TABLE, amely ugyanazt a táblát érinti, kivéve a RENAME és SET SCHEMA , több módosítást tartalmazó listává kombinálható és együtt alkalmazható. Például egy parancsban több oszlopot is hozzáadhat és/vagy módosíthatja az oszlopok típusát. Ez különösen nagy asztaloknál hasznos, mivel a teljes táblázat egy menetben kerül feldolgozásra.

Csak a megfelelő tábla tulajdonosa hajthatja végre az ALTER TABLE parancsot. Egy tábla sémájának vagy táblaterületének módosításához CREATE jogosultsággal kell rendelkeznie az új sémán vagy táblaterületen. Ahhoz, hogy egy táblázat egy másik tábla gyermekévé váljon, a szülőtábla tulajdonosának is kell lennie. A tulajdonjog megváltoztatásához az új tulajdonosi szerepkör közvetlen vagy közvetett tagjának kell lennie, és ennek a szerepkörnek CREATE engedéllyel kell rendelkeznie a táblasémához. (Ezekkel a korlátozásokkal a tulajdonjog megváltoztatása nem tesz semmi olyat, amit ne lehetne megtenni egy tábla eldobásának és újbóli létrehozásának jogával. A szuperfelhasználók azonban így is megváltoztathatják a tábla tulajdonosát.) Oszlop hozzáadásához módosítsa a oszloptípust, vagy használjon OF záradékot, akkor a megfelelő adattípushoz USAGE jogosultsággal is kell rendelkeznie.

Lehetőségek

A módosítani kívánt meglévő tábla neve (opcionálisan séma minősítésű). Ha a tábla neve előtt ONLY van megadva, akkor csak a megadott tábla módosul. ONLY nélkül mind az adott tábla, mind az összes leszármazottja (ha van) módosul. A tábla neve után megadhat egy opcionális * jelet is, amely kifejezetten jelzi, hogy az összes alárendelt tábla változhat. oszlop_neve

Egy új vagy meglévő oszlop neve. új_oszlop_neve

Egy meglévő oszlop új neve. új név

Új táblanév. adattípus

Az új oszlop adattípusa vagy egy meglévő oszlop új adattípusa. table_constraint

Új tábla kényszer. megszorítás_neve

Az új vagy meglévő kényszer neve. VÍZESÉS

Automatikusan törölje a törölni kívánt oszloptól vagy kényszertől függő objektumokat (például az oszlopot tartalmazó nézeteket), és az összes, tőlük függő objektumot (lásd: 5.13. szakasz). KORLÁTOZ

Ha vannak olyan objektumok, amelyek attól függnek, ne dobjon el egy oszlopot vagy kényszert. Ez az alapértelmezett viselkedés. trigger_name

Az aktiváláshoz vagy letiltáshoz szükséges eseményindító neve. ÖSSZES

A táblához tartozó összes trigger letiltása vagy engedélyezése. (Ehhez szuperfelhasználói jogok szükségesek, ha ezek a triggerek belsőleg generált kivételtriggereket tartalmaznak, például olyanokat, amelyek idegen kulcs-megszorításokat vagy késleltetett egyediség- és kivételkényszereket valósítanak meg.) FELHASZNÁLÓ

Tiltsa le vagy engedélyezze a táblához tartozó összes triggert, kivéve a belsőleg generált kivételindítókat, például azokat, amelyek idegen kulcs-megszorításokat vagy késleltetett egyediség- és kivételkényszereket valósítanak meg. index_neve

Egy meglévő index neve. tárolási_opció

A tábla tárolási paraméterének neve jelentése

A táblázat tárolási beállításának új értéke. Ez lehet egy szám vagy egy karakterlánc, a paramétertől függően. táblázat_szülő

Az a szülőtábla, amelyhez ez a tábla hozzá lesz kapcsolva vagy le lesz kapcsolva. új tulajdonos

A tábla új tulajdonosaként hozzárendelendő felhasználó neve. new_table_space

Annak a táblaterületnek a neve, amelybe a tábla átkerül. új_séma

A séma neve, amelybe a tábla átkerül.

Megjegyzések

A COLUMN kulcsszónak nincs jelentése, és elhagyható.

Ha egy oszlopot az ADD COLUMN paranccsal ad hozzá, a táblázat összes létező sorában az oszlop az alapértelmezett értékre van inicializálva (vagy NULL, ha az oszlophoz nincs DEFAULT záradék). Ha nincs DEFAULT záradék, akkor ez csak egy metaadat-módosítás, nincs közvetlen változás a táblázat adataiban; A hozzáadott NULL értékek olvasáskor kerülnek kiadásra.

Egy DEFAULT záradékkal rendelkező oszlop hozzáadása vagy egy meglévő oszlop típusának megváltoztatása felülírja a teljes táblát és indexeit. Kivétel azonban lehetséges egy meglévő oszlop típusának megváltoztatásakor: ha a USING záradék nem változtatja meg az oszlop tartalmát, és a régi típust binárisan átírják az új típusba, vagy az új típus tetején lévő korlátlan tartomány , a táblázatot nem kell átírni; bár az érintett oszlopokat tartalmazó indexeket még újra kell építeni. Az oid rendszer oszlop hozzáadásakor vagy eltávolításakor a teljes táblázatot is felül kell írni. A nagy táblák és/vagy indexeik újraépítése nagyon időigényes eljárás lehet, amely átmenetileg kétszer annyi lemezterületet igényel.

A CHECK or NOT NULL megszorítás hozzáadása azt jelenti, hogy meg kell vizsgálni a táblát annak ellenőrzésére, hogy minden létező sor megfelel-e a megszorításnak, de ez nem igényli a tábla újraírását.

A több módosítás egyetlen ALTER TABLE paranccsal történő kombinálásának lehetősége elsősorban azért hasznos, mert lehetővé teszi az ezen műveletek által igényelt táblázatvizsgálatok és -átírások kombinálását és egy menetben történő végrehajtását.

A DROP COLUMN űrlap fizikailag nem dobja el az oszlopot, egyszerűen láthatatlanná teszi az SQL műveletek számára. A későbbi hozzáadási vagy frissítési műveletek NULL értéket írnak ebbe az oszlopba. Így egy oszlop törlése gyors, de a lemezen lévő táblázat mérete nem csökken, mivel a törölt oszlop által elfoglalt hely nem szabadul fel. Ez a hely idővel felszabadul, ahogy a meglévő sorok módosulnak. (Ha eldobja az oid rendszer oszlopát, ez a viselkedés nem figyelhető meg, mert a táblázat azonnal felülíródik.)

Egy eldobott oszlop által elfoglalt szabad terület kényszerítéséhez az ALTER TABLE űrlapok egyikét használhatja a teljes tábla felülírására. Ennek eredményeként az összes sor újra létrejön, így a törölt oszlopban NULL lesz.

Az ALTER TABLE űrlapok felülírása nem biztonságos az MVCC számára. A felülírás után a tábla üresnek tűnik az egyidejű tranzakciók számára, ha a felülírás előtt készült pillanatképen dolgoznak. A részletekért lásd a 13.5. szakaszt.

A SET DATA TYPE záradék USING záradékában tulajdonképpen a régi sorértékekkel is írhatunk kifejezést; vagyis utalhat mind a konvertálandó oszlopokra, mind másokra. Ez lehetővé teszi nagyon általános adattranszformációk írását a SET DATA TYPE-ba. E rugalmasság miatt a USING kifejezés nem vonatkozik az oszlop alapértelmezett értékére (ha van ilyen); az eredmény nem biztos, hogy egy állandó kifejezés, ami az alapértelmezett értékhez szükséges. Ez azt jelenti, hogy kifejezett öntés hiányában vagy a régi típus hozzárendelése az újhoz, előfordulhat, hogy a SET DATA TYPE nem tudja átalakítani az alapértelmezett értéket, még akkor sem, ha a USING záradékot alkalmazza. Ezekben az esetekben el kell távolítania az alapértelmezett értéket a DROP DEFAULT segítségével, meg kell tennie az ALTER TYPE parancsot, majd a SET DEFAULT segítségével új, megfelelő alapértelmezett értéket kell beállítania. Hasonló megfontolások érvényesek az oszlop indexeire és megszorításaira.

Ha egy táblában vannak alárendelt táblák, akkor nem adhat hozzá, ne nevezhet át, nem módosíthatja az oszlop típusát, illetve nem nevezhet át öröklött kényszert a szülőtáblában anélkül, hogy ugyanezt az összes utódtáblában megtenné. Vagyis az ALTER TABLE ONLY parancs nem kerül végrehajtásra. Ez biztosítja, hogy a gyermektáblák mindig ugyanazokat az oszlopokat tartalmazzák, mint a szülő.

A rekurzív DROP COLUMN művelet csak akkor távolít el egy oszlopot az utódtáblából, ha az oszlopot nem örökölte valamelyik másik szülő, és nincs önállóan definiálva az utódtáblában. A nem rekurzív DROP COLUMN művelet (azaz ALTER TABLE ONLY ... DROP COLUMN) soha nem dobja el az örökölt oszlopokat, hanem függetlenként definiáltként jelöli meg őket, nem pedig öröklöttként.

A TRIGGER , CLUSTER , OWNER és TABLESPACE műveletek soha nem terjednek rekurzív módon a gyermektáblákra; vagyis mindig úgy futnak le, mintha CSAK megadták volna. A kényszer hozzáadása művelet csak a NINCS ÖRÖLÉS jelöléssel nem rendelkező megszorítások ELLENŐRZÉSE esetén kerül végrehajtásra.

A rendszerkatalógus-táblázatok módosítása nem megengedett.

Többért Részletes leírás az érvényes opciókért lásd a TÁBLÁZAT LÉTREHOZÁSA című részt. Az 5. fejezetben tudhat meg többet az öröklődésről.

Példák

Varchar oszlop hozzáadása a táblázathoz:

ALTER TABLE elosztók ADD COLUMN cím varchar(30);

Oszlop eltávolítása a táblázatból:

ALTER TABLE elosztók DROP COLUMN cím RESTRICT;

Két meglévő oszlop típusának módosítása egy műveletben:

ALTER TABLE elosztók ALTER COLUMN cím TYPE varchar(80), ALTER COLUMN név TYPE varchar(100);

Módosítsa a Unix-stílusú időt tartalmazó egész oszlop típusát időzóna-típusú időbélyegzőre a USING záradék használatával:

ALTER TABLE foo ALTER COLUMN foo_timestamp SET DATA TYPE időbélyeg időzónával HASZNÁLATA timestamp időzónával "epoch" + foo_timestamp * intervallum "1 másodperc";

Ugyanez, de abban az esetben, ha az oszlop alapértelmezett értéke nem konvertálódik automatikusan új adattípusra:

ALTER TABLE foo ALTER COLUMN foo_timestamp DROP DEFAULT, ALTER COLUMN foo_timestamp TYPE időbélyeg időzónával USING timestamp időzónával "epoch" + foo_timestamp * intervallum "1 second", ALTER COLUMN foo_timestamp SET DEFAULT now(SET DEFAULT);

Meglévő oszlop átnevezése:

ALTER TABLE forgalmazók RENAME COLUMN címet városra;

Meglévő tábla átnevezése:

ALTER TABLE forgalmazók ÁTNEVEZÉS beszállítókra;

Meglévő korlátozás átnevezése:

ALTER TABLE forgalmazók RENAME CONSTRAINT zipchk TO zip_check;

NOT NULL kényszer hozzáadása egy oszlophoz:

ALTER TABLE elosztók ALTER COLUMN street SET NOT NULL;

NOT NULL kényszer eltávolítása egy oszlopból:

ALTER TABLE elosztók ALTER COLUMN utca DROP NOT NULL;

Ellenőrzési kényszer hozzáadása egy táblához és az összes leszármazottjához:

ALTER TABLE elosztók ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);

Ellenőrzési kényszer hozzáadása csak egy táblához, a leszármazottaihoz nem:

ALTER TABLE elosztók ADD CONSTRAINT zipchk ELLENŐRZÉS (karakterhossz(irányítószám) = 5) NO HERIT;

(Ezt az ellenőrzési kényszert a jövőbeli gyerekek sem öröklik.)

Ellenőrzési kényszer eltávolítása egy táblából és az összes leszármazottjából:

ALTER TABLE elosztók DROP CONSTRAINT zipchk;

Ellenőrzési kényszer eltávolítása magából a táblából:

ALTER TABLE ONLY elosztók DROP CONSTRAINT zipchk;

(Az ellenőrzési kényszer minden gyermektáblában megmarad.)

Idegenkulcs-kényszer hozzáadása egy táblához:

ALTER TABLE forgalmazók ADD CONSTRAINT distfk IDEGEN KULCS (cím) REFERENCIÁK címek (cím);

Idegenkulcs-kényszer hozzáadása egy táblához, amely a legkevésbé befolyásolja mások működését:

ALTER TABLE forgalmazók ADD CONSTRAINT distfk IDEGEN KULCS (cím) REFERENCIÁK címek (cím) NEM ÉRVÉNYES; ALTER TABLE elosztók VALIDATE CONSTRAINT distfk;

Egyedi megszorítás hozzáadása egy táblázathoz (több oszlopon):

ALTER TABLE forgalmazók ADD CONSTRAINT dist_id_zipcode_key EGYEDI (dist_id, irányítószám);

Automatikusan elnevezett elsődleges kulcs hozzáadása egy táblához (vegye figyelembe, hogy egy táblának csak egy elsődleges kulcsa lehet):

ALTER TABLE elosztók ADD PRIMARY KEY (dist_id);

Táblázat áthelyezése másik táblaterületre:

ALTER TABLE elosztók SET TABLESPACE fasttablespace;

Táblázat áthelyezése másik sémába:

ALTER TABLE myschema.distributors SET SCHEMA yourschema;

Elsődleges kulcs megkötésének újbóli létrehozása anélkül, hogy az index-újraépítés során a változtatásokat zárolná:

EGYEDI INDEX EGYIDEJŰ LÉTREHOZÁSA dist_id_temp_idx terjesztőkön (dist_id); ALTER TABLE elosztók DROP CONSTRAINT distributors_pkey, ADD CONSTRAINT distributors_pkey ELSŐDLEGES KULCS AZ INDEX HASZNÁLATA dist_id_temp_idx;

Kompatibilitás

Az ADD (INDEX HASZNÁLATA nélkül), DROP , SET DEFAULT és SET DATA TYPE (USING nélkül) űrlapok az SQL szabványt követik. Más űrlapok a PostgreSQL-ben implementált SQL-szabvány kiterjesztései. Ez egy olyan kiterjesztés is, amely lehetővé teszi több módosítási művelet megadását egyetlen ALTER TABLE parancsban.

ALTER TABLE DROP COLUMN lehetővé teszi, hogy egyetlen oszlopot dobjon el a táblázatban, és a táblázatot oszlopok nélkül hagyja el. Ez az SQL szabvány kiterjesztése, amely nem engedélyezi a nulla oszlopot tartalmazó táblázatokat.

Módosítja a táblázat szerkezetét a megadott módon.

Szintaxis:

ALTER TABLE TableName1 ADD | ALTER FieldName1 FieldType [(nFieldWidth [, nPrecision])] ] ] - VAGY - ALTER TABLE TableName1 ALTER FieldName2 ] - VAGY - ALTER TABLE TableName1 FieldName3] ] ] TAGNAME4] REFERENCES TÁBLÁZAT Név2

Lehetőségek:
Táblanév1
Megadja annak a táblának a nevét, amelynek szerkezete módosul.
Mezőnév HOZZÁADÁSA1
Megadja a hozzáadott mező nevét.
ALTER FieldName1
Meghatározza egy meglévő módosítandó mező nevét.
FieldType [(nFieldWidth [, nPrecision]])
Meghatározza a mező típusát, szélességét és pontosságát (tizedesjegyek számát) egy új vagy módosított mezőhöz.
mező típusa ez egy betű, amely a mező adattípusát jelzi. Egyes mezőtípusokat meg kell adni nFieldWidthés/vagy nPrecizitás.
A következő táblázat felsorolja a paraméterértékeket mező típusa; mindegyiknél fel van tüntetve, hogy szükségesek-e a paraméterek nFieldWidthés nPrecizitás.

FieldType nFieldWidth nPrecision Leírás C n - N D szélességű karaktermező - - Egész számok mező B - d Dupla adatmező Y - - Pénznem mező L - - Logikai M - - Memo mező G - - Általános mező

Lehetőségek nFieldWidthés nPrecizitás figyelmen kívül hagyja a D, T, I, Y, L, M, G és P típusokat. N, F vagy B típus esetén az érték nPrecizitás nincs megadva, alapértelmezés szerint nulla (tizedesjegyek nélkül).
NULLA
Lehetővé teszi egy mező számára, hogy értékeket fogadjon el NULLA.
NEM NULLA
Megakadályozza, hogy egy mező értéket fogadjon el NULLA.
Ha az ajánlatokat kihagyják NULLAés NEM NULLA, akkor az értékek elfogadhatósága NULLA mert a mezőt az aktuális beállítás határozza meg SET NULL. Ha azonban kihagyjuk a mondatokat NULLAés NEM NULLAés kérdezd meg ELSŐDLEGES KULCS vagy EGYEDI, jelenlegi telepítés SET NULL figyelmen kívül hagyja, és a mező alapértelmezett értéke lesz NEM NULLA.
ELLENŐRIZZE az lExpression1-et
Meghatároz egy mezőszintű érvényesítési szabályt. számítás lKifejezés1 logikus kifejezést kell adnia; ez lehet egy felhasználó által definiált függvény vagy egy tárolt eljárás. Vegye figyelembe, hogy ez a szabály be van jelölve, ha üres bejegyzést ad hozzá. Ha egy ezt a szabályt nem engedélyezi a null mező értékeket a csatolt rekordban, hiba keletkezik.
HIBA cMessageText1
Megadja a hiba észlelésekor megjelenő hibaüzenet szövegét a mezőszabály szerint. Ez az üzenet csak akkor jelenik meg, ha a nézetablakban vagy a szerkesztőablakban módosul az adat.
ALAPÉRTELMEZETT eExpression1
Beállítja a mező alapértelmezett értékét. Kifejezés adattípusa e-kifejezés1 meg kell egyeznie a mező adattípusával.
ELSŐDLEGES KULCS
Létrehoz egy elsődleges indexcímkét. A címke neve megegyezik a mező nevével.
EGYEDI
Létrehoz egy jelölt indexcímkét a mezővel megegyező névvel. A jelölt indexekkel kapcsolatos további információkért lásd a Fejlesztői útmutató 7. fejezetét, Munka a táblázatokkal.
Megjegyzés Jelölt indexek (amely a EGYEDI parancsok közé tartozik ALTER TABLEés TÁBLÁZAT LÉTREHOZÁSA a kompatibilitás érdekében ANSI) eltérnek az opcióval létrehozott indexektől EGYEDI parancsokat INDEX. Opció által létrehozott index EGYEDI csapatban INDEX, lehetővé teszi az indexkulcsok megkettőzését; duplikált kulcsok nem megengedettek a jelölt indexekben.
Az értékek nem megengedettek az elsődleges vagy jelölt indexhez használt mezőben NULLAés ismétlődő bejegyzések.
Ha új mezőt hoz létre az ADD COLUMN záradékkal, a Visual FoxPro nem generál hibát, amikor elsődleges vagy jelölt indexet hoz létre egy nullázható mezőn. Ha azonban NULL értéket vagy másodpéldányt próbál beírni egy elsődleges vagy jelölt indexhez használt mezőbe, Visual FoxPro hibát fog adni.
Ha egy meglévő mezőt módosít, és az elsődleges vagy jelölt indexkifejezés csak a mező nevéből áll, Visual FoxPro ellenőrizze, hogy a mező nem tartalmaz-e értékeket NULLA vagy ismétlődő bejegyzések. Ha ilyen értékeket találunk, Visual FoxPro hibát generál, és a táblázat változatlan marad. Ha egy indexkifejezés több mezőt vagy egyetlen mezőt tartalmazó kifejezést tartalmaz, Visual FoxPro nem ellenőrzi az értékek létezését NULLA vagy ismétlődő bejegyzések.
HIVATKOZÁSOK TableName2 TAG Címkenév1
Megadja azt a szülőtáblát, amellyel állandó kapcsolatot kell létrehozni. TAG Címkenév1 A reláció alapjául szolgáló szülőtábla indexcímkéjét adja meg. Az indexcímke neve legfeljebb 10 karakter hosszú lehet.
NOCPTRANS
Megtiltja a karakter- és megjegyzésmezők másik kódlapra való lefordítását. Ha a táblát egy másik kódtáblázattá alakítják, a NOCPTRANS opciót tartalmazó mezők nem vesznek részt a fordításban. NOCPTRANS csak karaktermezőkhöz és jegyzetmezőkhöz állítható be.
A következő példa egy nevű táblát hoz létre MINTABLE, amely két karaktermezőt és két jegyzetmezőt tartalmaz. A második karaktermező char2 és a második memo mező memo2 az opcióval vannak megadva NOCPTRANS az átvitel megakadályozására.

CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,; memo1 M, memo2, M NOCPTRANS)

ALTER FieldName2
Meghatározza egy meglévő módosítandó mező nevét.
ALAPÉRTELMEZETT eExpression2 BEÁLLÍTÁSA
Megad egy új értéket, amely egy meglévő mező alapértelmezett értéke lesz. Kifejezés adattípusa e-kifejezés2 meg kell egyeznie a mezőben meghatározott adattípussal.
SET CHECK lExpression2
Új szabályt ad meg egy meglévő mezőhöz. számítás lKifejezés2 logikai értéket kell megadnia; ez lehet egy felhasználó által definiált függvény vagy egy tárolt eljárás.
HIBA cMessageText2
Megadja a hibaüzenet szövegét. Ez az üzenet akkor jelenik meg, ha hibát talál a mezőszintű szabály szerint. Az üzenet csak akkor kerül kiadásra, ha a nézet ablakban vagy a szerkesztőablakban változás áll be.
DEFAULT
Felülbírálja egy meglévő mező alapértelmezett értékét.
DROP CHECK
Törli a szabályt egy meglévő mezőre vonatkozóan.
DROP Mezőnév3
Megadja a táblázatból eltávolítandó mezőt. Ha eltávolít egy mezőt a táblázatból, akkor az adott mező alapértelmezett értékét is eltávolítja.
Ha egy mező indexkulcs-kifejezést vagy trigger-kifejezést ad meg, akkor ezek a kifejezések a mező törlésekor már nem érvényesek. Ebben az esetben a mező törlése nem generál hibát, de hibák lépnek fel érvénytelen indexkulcs vagy trigger kifejezések esetén futás közben.
SET CHECK lExpression3
Táblaszintű szabályt ad meg. számítás lKifejezés3 logikai kifejezést kell adnia, ez lehet egy felhasználó által definiált függvény vagy egy tárolt eljárás.
HIBA cMessageText3
Megadja a hiba észlelésekor megjelenő hibaüzenet szövegét egy táblázatszintű szabály szerint. Ez az üzenet csak akkor jelenik meg, ha a nézetablakban vagy a szerkesztőablakban módosul az adat.
DROP CHECK
Töröl egy táblázatszintű szabályt.
ELSŐDLEGES KULCS HOZZÁADÁSA eExpression3 TAG Címkenév2
Elsődleges indexet ad a táblázathoz. e-kifejezés3 elsődleges indexkulcs kifejezést ad meg, és Címkenév2 az elsődleges index címkeneve. Az indexcímke neve legfeljebb 10 karakter hosszú lehet. Ha egy TAG Címkenév2 kimaradt, és e-kifejezés3 egyetlen mezőt határoz meg, az elsődleges indexcímke ugyanazt a nevet kapja, mint a kifejezésben megadott mező e-kifejezés3.
HAJTJA LE AZ ELSŐDLEGES KULCSOT
Eltávolítja az elsődleges indexet és címkéjét. Mivel egy táblának csak egy elsődleges kulcsa lehet, a neve elhagyható. Az elsődleges index eltávolításakor az elsődleges kulcson alapuló összes állandó kapcsolat is eltávolításra kerül.
EGYEDI e-kifejezés hozzáadása4
Hozzáad egy jelölt indexet a táblázathoz. e-kifejezés4 megad egy jelölt index kulcskifejezést, és Címkenév3 a jelölt index címke neve. Az indexcímke neve legfeljebb 10 karakter hosszú lehet. Ha a kifejezés TAG Címkenév3 kimaradt, és e-kifejezés4 Ha egyetlen mezőt határoz meg, akkor a jelölt indexcímke ugyanazt a nevet kapja, mint a kifejezésben megadott mező e-kifejezés4.
DROP EGYEDI CÍMKE
Törli a jelölt indexet és címkéjét. Mivel egy táblának több jelöltkulcs is lehet, meg kell adnia az eltávolítandó jelölt indexcímke nevét.
IDEGEN KULCSCÍMKE HOZZÁADÁSA Címkenév4
Idegen (az elsődlegestől eltérő) indexet ad a táblához. e-kifejezés5 egy idegen index kulcs kifejezést ad meg, és Címkenév4 a külső index címke neve. Az indexcímke neve legfeljebb 10 karakter hosszú lehet.
HIVATKOZÁSOK TableName2
Megadja azt a szülőtáblát, amellyel állandó kapcsolatot kell létrehozni. Ha egy meglévő indexcímke alapján szeretne kapcsolatot létrehozni egy szülőtáblával, adja meg TAG Címkenév5. Az indexcímke neve legfeljebb 10 karakter hosszú lehet. Ha egy TAG Címkenév5 kihagyva a kapcsolat a szülőtábla elsődleges indexcímkéjével jön létre.
DROP FORIGN KEY TAG TagName6
Töröl egy idegen kulcsot, amelynek indexcímkéje TagName6. Ha kihagyja MEGMENT, az indexcímke eltávolításra kerül a szerkezeti indexből. Beleértve MEGMENT, akkor megakadályozza a címke eltávolítását a szerkezeti indexből.
OSZLOP ÁTNEVEZÉSE 4. mezőnév 5. mezőre
Lehetővé teszi egy mező nevének megváltoztatását a táblázatban. Mezőnév4 megadja a módosítandó mező nevét. Mezőnév5új mezőnevet ad meg.
Vigyázat Legyen óvatos a táblamezők, indexkifejezések, mező- és táblaérvényesítési szabályok, parancsok, függvények stb. átnevezésekor. továbbra is a régi mezőnevekre hivatkozhat.
NOVALIDATE
Azt jelzi Visual FoxPro olyan változtatásokat tesz lehetővé a táblázat szerkezetében, amelyek sérthetik a táblázatos adatok integritását. Alapértelmezett Visual FoxPro tiltja a csapatot ALTER TABLE olyan romboló változtatásokat hajtanak végre a szerkezeten. Opció engedélyezése NOVALIDATE lehetővé teszi ennek a korlátozásnak a megszüntetését.

Csapat ALTER TABLE-ra használják kiegészítéseket, eltávolítás vagy módosítások oszlopok egy meglévőben asztal.

ALTER TABLE parancs

Csapat ALTER TABLE módosítja a táblázat definícióját a következő módok egyikén:

  • oszlopot ad hozzá
  • integritási korlátozást ad hozzá
  • felülír egy oszlopot (adattípus, méret, alapértelmezett érték)
  • oszlopot töröl
  • módosítja a memória jellemzőit vagy más paramétereket
  • engedélyez, letilt vagy eltávolít egy integritási kényszert vagy eseményindítót.

Állapot: A táblának a felhasználó sémájában kell lennie, vagy a felhasználónak rendszerjogosultsággal kell rendelkeznie MINDEN TÁBLÁZAT MÓDOSÍTÁSA.

Korlátozott oszlop hozzáadása NEM NULLA, fejlesztő vagy rendszergazda DB számos tényezőt kell figyelembe venni. Először létre kell hoznia egy korlát nélküli oszlopot, majd az összes sorába be kell írnia az értékeket. Miután az oszlop összes értéke lesz NULLA-értékeket, korlátozást alkalmazhat rá NEM NULLA. Ha egy kényszerű oszlop NEM NULLA megpróbálja hozzáadni a felhasználót, hibaüzenet jelenik meg, amely szerint vagy a táblázatnak üresnek kell lennie, vagy az oszlopnak minden létező sorhoz értéket kell tartalmaznia (emlékezz rá, hogy az oszlopra vonatkozó megszorítás után NEM NULLA nem lehet benne jelen. NULLA-értékek a meglévő sorok egyikében sem). NÁL NÉL DBMS Oracle, a 8i verziótól kezdve törölheti az oszlopokat.

Meglévő oszlopok adattípusainak megváltoztatásakor vagy oszlopok adatbázistáblához való hozzáadásakor számos feltételnek kell teljesülnie. Általánosan elfogadott, hogy a növekedés jó, a csökkenés pedig általában nem túl jó. Megengedett nagyítások:

  • Egy oszlop méretének növelése CHAR vagy VARCHAR2
  • Egy oszlop méretének növelése SZÁM
  • Új oszlopok hozzáadása a táblázathoz

A táblázat különböző jellemzőinek csökkentése, beleértve egyes oszlopadattípusokat és a táblázatban lévő oszlopok tényleges számát, speciális lépéseket igényel. Gyakran a módosítás előtt meg kell győződnie arról, hogy a megfelelő oszlopban vagy oszlopokban minden érték megfelelő NULLA-értékek. Ahhoz, hogy ilyen műveleteket hajtson végre az adatokat tartalmazó táblázatoszlopokon, a fejlesztőnek meg kell találnia vagy létre kell hoznia valamilyen területet ezen adatok ideiglenes tárolására. Például hozzon létre egy táblázatot a paranccsal TÁBLÁZAT LÉTREHOZÁSA KIVÁLASZTÁSKÉNT A, amely lekéri az adatokat az elsődleges kulcsból és a módosítandó oszlopból vagy oszlopokból. Engedélyezett változtatások:

  • Egy oszlop méretének csökkentése SZÁM
  • Egy oszlop méretének csökkentése CHAR vagy VARCHAR2(csak üres oszloppal minden sornál)
  • Egy oszlop adattípusának módosítása (csak akkor, ha az oszlop minden sorban üres)

ALTER TABLE 1. példa

Oszlop hozzáadása a táblázathoz:

ALTER TABLE t1(pólus1 karakter(10));

ALTER TABLE 2. példa

Táblázat oszlopának átméretezése:

ALTER TABLE t1 MÓDOSÍT(field1 char(20));

ALTER TABLE 3. példa

Táblázat oszlopának törlése:

ALTER TABLE t1 DROP OSZLOP pólus1;

Az ALTER TABLE paranccsal megváltoztathatja a tábla nevét anélkül, hogy ténylegesen fizikai információkat továbbítana az adatbázisba:

ALTER TABLE t1 ÁTNEVEZÉS t2;

Hasonló művelet hajtható végre a RENAME paranccsal:

ÁTNEVEZÉS t1 NAK NEK t2;

Az adatbázisban lévő oszlopok és táblák integritására vonatkozó korlátozások módosíthatók, valamint tilthatók, engedélyezettek és törölhetők. Ez lehetővé teszi a fejlesztő számára, hogy létrehozzon, módosítson és töröljön adatokat korlátozó üzleti szabályokat. Fontolja meg megszorítások hozzáadását az adatbázishoz. Ennek a folyamatnak az egyszerűsége vagy összetettsége bizonyos körülményektől függ. Ha nem tud megszorítást létrehozni az adatbázissal együtt, a legegyszerűbb módja, ha hozzáadja azt az adatok megadása előtt:

ALTER TABLE 4. példa

Táblázat szerkezetének módosítása

ALTER TABLE t1 MÓDOSÍT(1. pólus NEM NULLA);

TÁBLÁZAT LÉTREHOZÁSA t2

(pólus1 CHAR(10) ELSŐDLEGES KULCS);

ALTER TABLE t1 HOZZÁAD

(KÉNYSZER fk_t1 IDEGEN KULCS(1. pólus)

IRODALOM t2(pólus1));

ALTER TABLE t1 HOZZÁAD (EGYEDI(p_név));

ALTER TABLE t1 HOZZÁAD(p_sizeCHAR(4) JELÖLJE BE

(p_size IN ('P', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL')));

A fenti első parancs a MODIFY konstrukciót használja egy NOT NULL kényszer hozzáadásához egy oszlophoz, az ADD konstrukciót pedig az összes többi típusú táblaintegritási megkötés hozzáadásához. Az oszlopnak, amelyre a korlátozást hozzáadta, már léteznie kell az adatbázistáblában; ellenkező esetben a kényszer nem hozható létre.

ALTER TABLE 5. példa

Integritási megszorítások hozzáadásához elhagyhatja a létrehozandó kényszer nevét kulcsszó KÉNYSZER. Ebben az esetben a parancs így fog kinézni:

TÁBLÁZAT MÓDOSÍTÁSA t1 IDEGEN KULCS HOZZÁADÁSA (1. pólus) HIVATKOZÁSOK t2 (pólus1);

A korlátozások létrehozásának számos feltétele van:

  • Elsődleges kulcsok: Az oszlopok nem tartalmazhatnak NULL értékeket, és minden értéknek egyedinek kell lennie.
  • Idegen kulcsok: más táblázatok azon oszlopaiban, amelyekre hivatkozunk, olyan értékeket kell tartalmazniuk, amelyek megfelelnek a hivatkozó oszlopok összes értékének, vagy ez utóbbiak értékének NULL értéknek kell lennie.
  • EGYEDI megszorítások: Minden oszlopértéknek egyedinek vagy NULL-nak kell lennie.
  • ELLENŐRIZZE a megszorításokat: Az új megszorítás csak a létrehozása után hozzáadott vagy módosított adatokra vonatkozik.
  • NOT NULL: NULL értékek nem megengedettek az oszlopokban.

A korlátozások engedélyezhetők vagy letilthatók. Egy engedélyezett megszorítás úgy látja el funkcióját, hogy a táblába bevitt adatokhoz üzleti szabályokat implementál, míg a tiltott megszorítás érvénytelenné válik, mintha eltávolították volna, szabályai pedig nem valósulnak meg.

ALTER TABLE 6. példa

Korlátozási tilalom:

ALTER TABLE t1 ELSŐDLEGES KULCS LETILTÁSA;
ALTER TABLE t1 EGYEDI LETILTÁS(p_név);

ALTER TABLE 7. példa

Bizonyos esetekben bonyolult lehet az elsődleges kulcs letiltása, amelytől az idegen kulcsok függnek, például:

ALTER TABLE t2 LETILTÁS ELSŐDLEGES KULCS;

Hiba az 1. sorban: Nem lehet letiltani a kényszert…. – függőségek léteznek(nem lehet letiltani a kényszert – vannak függőségek)

Elsődleges kulcs eldobása, ha vannak tőle függő idegen kulcsok az ALTER TABLE DISABLE parancsban<ограничения>kötelező építés CASCADE:

ALTER TABLE t2 LETILTÁS ELSŐDLEGES KULCS VÍZESÉS;

ALTER TABLE 8. példa

A tiltott korlátozás a következőképpen oldódik meg:

ALTER TABLE t1 ELSŐDLEGES KULCS ENGEDÉLYEZÉSE;

ALTER TABLE t1 EGYEDI ENGEDÉLYEZÉS(p_név);

Csak azokat a korlátozásokat engedélyezheti, amelyeket korábban beállítottak, de jelenleg tiltottak.

Az a megszorítás, amelynek létrehozási folyamata meghiúsult, nem létezik tiltott állapotban, és a hiba elhárítása után megoldásra vár. Általában a tábla tulajdonosa, vagy valaki, aki megkapta a megfelelő jogokat, eltávolíthatja a korlátozást:

ALTER TABLE t1 DROP EGYEDI(p_név);

Utolsó frissítés: 2017.09.07

Talán valamikor meg akarunk változtatni egy meglévő táblát. Például oszlopok hozzáadása vagy eltávolítása, az oszlopok típusának módosítása, kényszerek hozzáadása vagy eltávolítása. Azaz módosítania kell a táblázat definícióját. Az ALTER TABLE utasítás a táblák módosítására szolgál.

Az általános formális parancs szintaxisa a következő:

ALTER TABLE táblanév (ADD oszlopnév oszlopadattípus [oszlop_attribútumok] | DROP COLUMN oszlopnév | ALTER COLUMN oszlopnév oszlopadattípus | Kényszer_meghatározás hozzáadása | DROP kényszer_neve)

Így az ALTER TABLE segítségével sokféle forgatókönyvet hajthatunk végre a táblázat megváltoztatására. Nézzünk meg néhányat közülük.

Új oszlop hozzáadása

Adjon hozzá egy új Cím oszlopot az Ügyfelek táblához:

ALTER TABLE Ügyfelek ADD Cím NVARCHAR(50) NULL;

Ebben az esetben a Cím oszlop NVARCHAR típusú, és null attribútum van definiálva hozzá. De mi van, ha olyan oszlopot kell hozzáadnunk, amely nem fogad el NULL értékeket? Ha vannak adatok a táblázatban, akkor a következő parancs nem kerül végrehajtásra:

ALTER TABLE Ügyfelek ADD Cím NVARCHAR(50) NOT NULL;

Tehát ebben az esetben a megoldás az alapértelmezett érték beállítása a DEFAULT attribútummal:

ALTER TABLE Ügyfelek ADD Cím NVARCHAR(50) NOT NULL DEFAULT "Ismeretlen";

Ebben az esetben, ha a táblában már vannak adatok, akkor az "Ismeretlen" érték kerül hozzáadásra a Cím oszlophoz.

Oszlop törlése

Távolítsuk el a Cím oszlopot az Ügyfelek táblázatból:

ALTER TABLE Ügyfelek DROP COLUMN Cím;

Oszlop típusának megváltoztatása

Változtassuk meg a Vevők tábla Keresztnév oszlopának adattípusát NVARCHAR(200) értékre:

ALTER TABLE Ügyfelek ALTER COLUMN Keresztnév NVARCHAR(200);

CHECK kényszer hozzáadása

Megszorítások hozzáadásakor az SQL Server automatikusan ellenőrzi a meglévő adatokat a hozzáadott megszorításokkal. Ha az adatok nem felelnek meg a korlátozásoknak, akkor ilyen korlátozások nem kerülnek hozzáadásra. Például állítsuk be a Vevők tábla Életkor oszlopát úgy, hogy Kor > 21 legyen.

ALTER TABLE Ügyfelek ADD CHECK (életkor > 21);

Ha a táblázatban vannak olyan sorok, amelyeknek értékei vannak az Életkor oszlopban, amelyek nem felelnek meg ennek a korlátozásnak, akkor az sql parancs meghiúsul. Az egyezés ilyen ellenőrzésének elkerülése érdekében, és a nem egyező adatok ellenére is megszorítást adjon hozzá, használja a WITH NOCHECK utasítást:

TÁBLÁZAT MÓDOSÍTÁSA NOCHECK-EL rendelkező ügyfelek ADD CHECK (életkor > 21);

Az alapértelmezés a WITH CHECK, amely ellenőrzi a megszorításokat.

Idegen kulcs hozzáadása

Tegyük fel, hogy kezdetben két tábla kerül az adatbázisba, amelyek semmilyen módon nem kapcsolódnak egymáshoz:

TÁBLÁZAT LÉTREHOZÁSA Ügyfelek (azonosító INT ELSŐDLEGES KULCS AZONOSÍTÁSA, életkor INT ALAPÉRTELMEZETT 18, Keresztnév NVARCHAR(20) NOT NULL, Vezetéknév NVARCHAR(20) NOT NULL, E-mail VARCHAR(30) UNIQUE, Telefon VARCHAR(20) UNIQUE); CREATE TABLE Orders (Id INT IDENTITY, CustomerId INT, CreatedAt Date);

Adjon hozzá egy idegenkulcs-megkötést a Rendelések tábla CustomerId oszlopához:

TÁBLÁZAT RENDELÉSEK MÓDOSÍTÁSA IDEGEN KULCS (Ügyfélazonosító) REFERENCIÁK HOZZÁADÁSA Ügyfelek (Id);

Elsődleges kulcs hozzáadása

A fent definiált Rendelések tábla segítségével adjunk hozzá egy elsődleges kulcsot az Id oszlophoz:

ALTER TABLE Orders ADD PRIMARY KEY(Id);

Megszorítások hozzáadása nevekkel

Megszorítások hozzáadásakor a CONSTRAINT utasítással, majd a megszorítás nevével adhatunk meg nekik egy nevet:

ALTER TABLE Orders ADD CONSTRAINT PK_Orders_Id PRIMARY KEY (Id), CONSTRAINT FK_Oders_To_Customers FOREIGN KEY(CustomerId) REFERENCES Customers(Id); ALTER TABLE Ügyfelek ADD CONSTRAINT CK_Age_Greater_Than_Zero CHECK (életkor > 0);

Korlátozások megszüntetése

A korlátozások eltávolításához ismernie kell a nevüket. Ha nem tudjuk pontosan a megszorítás nevét, akkor az SQL Server Management Studio-n keresztül megtalálható:

A Kulcsok alcsomópont tábláinak csomópontját kibontva láthatja az elsődleges és az idegen kulcs megszorításainak nevét. Az idegen kulcs megszorítások neve „FK”-val kezdődik. A Constraints alcsomópontban pedig megtalálható az összes CHECK és DEFAULT kényszer. A CHECK megszorítások "CK"-val kezdődnek, a DEFAULT kényszerek pedig "DF"-vel kezdődnek.

Például, ahogy a képernyőképen is látható, az én esetemben a Megrendelések táblában az idegen kulcs megszorításának neve "FK_Orders_To_Customers". Ezért az idegen kulcs eltávolításához a következő kifejezést használhatom:

ALTER TABLE Megrendelések DROP FK_Rendelések_To_Customers;

Ha a projektben vannak olyan táblázatok, amelyek mérete gigabájtban van kiszámítva, és egy ilyen táblázat szerkezetének megváltoztatásához több órára le kell állítania az összes szolgáltatást - ez a cikk az Ön számára lesz.

Adott: egy több tíz gigabájtnyi adatot tartalmazó táblázat. A feladat a táblázat szerkezetének megváltoztatása.

Azonnal előre futok, a módszer csak tranzakciós táblákon fog működni. Ha van egy MyISAM táblája több tíz gigabájtra, akkor ez olyan, mint abban a viccben - "bánja meg a saját problémáit". Példát adunk egy InnoDB táblára.

Tegyük fel, hogy a táblázat szerkezete a következő:

CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(40) NOT NULL DEFAULT "", `password_hash` char(32) NOT NULL DEFAULT "", `regisztrációs_dátum` int(11) NEM NULL ALAPÉRTELMEZETT "0", ELSŐDLEGES KULCS (`id`)) ENGINE=InnoDB ALAPÉRTELMEZETT CHARSET=utf8
Ehhez a táblázathoz szeretnénk hozzáadni egy last_login mezőt.

Milyen lehetőségeink vannak.

Előre

ALTER TABLE `users` ADD COLUMN `last_login` int(11) NOT NULL ALAPÉRTELMEZETT 0;
Az opció kiválóan működik kis projekteknél, ahol a táblázat mérete ritkán haladja meg az 50 000 rekordot. Az opció nem felel meg nekünk. Az ALTER túl sokáig fut, és ez idő alatt a tábla mind írás, mind olvasás céljából zárolva lesz. Ennek megfelelően a szolgáltatást erre az időre le kell állítani.

Kapcsolja be az agyat

Egyáltalán nem érintheti meg a táblázatot, de készítsen egy külön "users_lastvisits" paramétert:
TÁBLÁZAT LÉTREHOZÁSA `users_lastvisits` (`user_id` int(11) NOT NULL, `last_login` int(11) NOT NULL ALAPÉRTELMEZETT "0", ELSŐDLEGES KULCS (`user_id`)) ENGINE=InnoDB ALAPÉRTELMEZETT CHARSET=utf8;
Most már minden olyan lekérdezésben CSATLAKOZhat a last_login táblával, ahol a last_login szükséges. Természetesen lassabban fog működni, és a JOIN hozzáadása a lekérdezésekhez szintén plusz idő, de általában ez néha elég, és ezen a ponton meg lehet állni.

És mégis - hozzá kell adni egy mezőt

Felállíthatja a mester-szolga replikációt, végrehajthatja az ALTER műveletet a szolga kiszolgálón, majd felcserélheti őket. Hogy őszinte legyek, még soha nem csináltam ilyet, talán könnyebb, mint a következő módszer, de nem mindig lehet replikációt emelni.

Az én utam a következő

Létrehozunk egy új, végleges szerkezetű táblát, az első táblán triggereket hozunk létre, amelyek naplózzák az összes változást, ezzel egyidejűleg megkezdjük az adatok átvitelét az első táblából a másodikba, és a végén „beöntjük” a módosított adatokat, és nevezze át a táblákat.

Tehát 2 táblázatot készítünk - az elsőt a kívánt szerkezettel, a másodikat a változások naplózására.
CREATE TABLE `_users` (`id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(40) NOT NULL DEFAULT "", `password_hash` char(32) NOT NULL DEFAULT "", `regisztrációs_dátum` int(11) NOT NULL ALAPÉRTELMEZETT "0", `lastvisit` int(11) NOT NULL ALAPÉRTELMEZETT 0, ELSŐDLEGES KULCS (`id`)) ENGINE=InnoDB ALAPÉRTELMEZETT CHARSET=utf8; CREATE TABLE `users_updated_rows` (`id` int(11) NOT NULL AUTO_INCREMENT, `row_id` int(11) NOT NULL DEFAULT "0", `action` enum("frissítve", "törölt") NOT NULL ALAPÉRTELMEZETT "frissítve" , ELSŐDLEGES KULCS (`id`)) ENGINE=InnoDB ALAPÉRTELMEZETT CHARSET=utf8;
Triggerek beállítása:
DELIMITER ;; CREATE TRIGGER users_after_delete TÖRLÉS UTÁN A felhasználók MINDEN SORHOZ KEZDÉS BESZÁMÍTÁSA users_updated_rows ÉRTÉKEK (0, RÉGI.ID, "törölt"); VÉGE;; TRIGGER LÉTREHOZÁSA users_after_insert AFTER INSERT ON user FOR MINDEN SOR KEZDETÉSE INSERT INTO users_updated_rows VALUES (0, NEW.id, "frissítve"); VÉGE;; TRIGGER LÉTREHOZÁSA users_after_update FRISSÍTÉS UTÁN A felhasználók MINDEN SORÁNAK KEZDÉSE HA (RÉGI.ID != ÚJ.ID) MAJD BEHELYEZZE BE A user_updated_rows ÉRTÉKEKET (0, RÉGI.id, "törölt"); VÉGE HA; INSERT INTO user_updated_rows VALUES(0, NEW.id, "frissítve"); VÉGE;; DELIMITER ;
Most elkezdjük önteni. Ehhez meg kell nyitnia 2 kapcsolatot az adatbázissal. Az egyikben a túlcsordulás megy tovább, a másikban egy időre le kell zárni az asztalt az íráshoz.
mysql> TÁBLÁZATOK LEZÁRÁSA felhasználók ÍRÁS; Lekérdezés OK, 0 sor érintett (0,00 mp) mysql> -- a triggereket már be kell állítani mysql> CRONATE users_updated_rows; Lekérdezés OK, 0 sor érintett (0,17 mp) mysql> -- futtassa a mysql> transzfúziót egy másik konzolon INSERT INTO _users SELECT id, email, password_hash, register_date, 0 FROM users; mysql> -- ismét az első konzolban mysql> UNLOCK TABLES;
Ennyi, most a táblázat öntése közben van időnk azon gondolkodni, hogy miként öntjük be az öntés kezdete óta megváltozott adatokat. Nincs itt semmi bonyolult - nem adom meg a szkriptet, csak ki kell vennie egy rekordot a users_updated_rows táblából abban a sorrendben, ahogyan azokat hozzáadták (elsődleges kulcs szerint rendezve), és frissítenie vagy törölnie kell a _users táblában;

Tehát a táblázat kitöltése már véget ért, be kell önteni a többi adatot. Elindítjuk a forgatókönyvet. A szkriptnek folyamatosan futnia kell, és frissítenie kell a naplóhoz hozzáadott összes bejegyzést, amikor az összes adatot kitölti, át kell neveznie a táblákat:
mysql> A user_updated_rows CRONÁLÁSA; Lekérdezés OK, 0 sor érintett (0,16 mp) mysql> A TABLE felhasználók ÁTNEVEZÉSE __felhasználóknak, _felhasználóknak a felhasználóknak; Lekérdezés OK, 0 sor érintett (0,11 mp)
Érdemes megjegyezni, hogy ebben a pillanatban kismértékű adatvesztés lehetséges. a lekérdezések nem atomi módon hajtódnak végre. Ha ez kritikus, jobb egy időre kikapcsolni a szolgáltatást, hogy ne legyenek változtatási kérelmek. Például megvonhatja az írási engedélyeket egy felhasználótól, és parancsokat hajthat végre egy másik felhasználó alatt.

Ha minden helyesen történik, az adatok nem vesznek el, és gyakorlatilag nem lesz fennakadás a szolgáltatásban. Amire szükségünk volt. Ugyanígy lehet adatokat átvinni egy másik szerverre, csak az átvitel módja változik. Ahelyett
mysql> INSERT INTO _users SELECT id, email, password_hash, regisztrációs_dátum, 0 FROM felhasználóktól;
át kell töltened a mysqldump-on:
$ mysqldump -h host1 db felhasználók --single-transaction -ecQ | pv | mysql -h host2
Így nagyjából 12 óra alatt sikerült egy 60Gb méretű és 400 millió soros táblát átvinnem egy másik szerverre anélkül, hogy a szolgáltatások leálltak volna.

A biciklit egyébként már a Facebook is feltalálta, és ún