[[oktatas:adatbazis-kezeles:mariadb:sql|< SQL]] ====== Adatdefiníció ====== * **Szerző:** Sallai András * Copyright (c) 2019, Sallai András * Szerkesztve: 2019-2024 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== A DDL ===== A **DDL** a **Data Definition Language** rövidítése. ===== Adatbázis létrehozás ===== create database aranybt character set utf8 collate utf8_hungarian_ci; Ellenőrzés: show databases; select @@character_set_database; select @@collation_database; ===== Tábla létrehozása ===== create table dolgozok( az int not null primary key auto_increment, nev varchar(20), city varchar(20), salary double, birth date, active boolean ); ===== Tábla módosítás ===== ==== Tábla átnevezés ==== rename table eredetinev to ujnev; ==== Mező hozzáadása ==== alter table megrendelesek add szallitoaz int; alter table tabla1 add id int first; alter table tabla1 add nev varchar(30) after id; ==== Mező módosítása ==== Elsődleges kulcs módosítása: alter table tabla1 modify id integer not null auto_increment; A varchar(30) helyett szeretnénk beállítani varchar(150)-t: alter table konyvek modify cim varchar(150); alter table konyvek modify column cim varchar(150); ==== Mező átnevezése ==== alter table Transactions change column `targetNumber` -- régi név targetId -- új név int; -- minden típusinformáció Másik példa: alter table dolgozok change nev vnev varchar(100); ==== Kulcs módosítás ==== A kulcs eldobása előtt törölni kell az auto_increment beállítást. Kulcs eldobása: alter table Accounts drop primary key; Kulcs beállítása: alter table Accounts add id int not null primary key auto_increment first; Összetett kulcs: alter table Tablanev add primary key (fid, vid); ==== Kulcs beállítása utólag ==== alter table dolgozok add primary key(az) Vagy: alter table dolgozok add constraint dolgozok_pk primary key(az) ==== Kulcs törlése ==== -- Elsődleges kulcs törlése alter table dolgozok drop primary key; ===== Idegenkulcs használata ===== ==== Hivatkozási integritás ==== A MySQL-ben hivatkozási integritás az idegenkulcs beállításával valósítható meg. Hivatkozási integritás: * új rekord felvétel csak akkor lehetséges, ha az idegenkulcsban megjelölt érték létezik a kapcsolt táblában * az elsődleges táblában nem módosítható az elsődleges kulcs értéke, ha a kapcsolt táblában hivatkoznak rá * az elsődleges táblából nem törölhetünk olyan rekordot, amelyre hivatkoznak egy másik táblából CREATE TABLE ugyfelek ( ugyfelAz INT NOT NULL, nev VARCHAR (50 ), PRIMARY KEY( ugyfelAz ) ) ENGINE=InnoDB CREATE TABLE rendelesek ( rendelesAz INT NOT NULL, koltseg INT, ugyfelAz INT NOT NULL, PRIMARY KEY(rendelesAz), INDEX ( ugyfelAz ), FOREIGN KEY(ugyfelAz) REFERENCES ugyfelek(ugyfelAz) ) ENGINE = InnoDB; ==== Kaszkádolt frissítés ==== Kapcsolt (kaszkádolt) frissítés, amikor mindkét kapcsolódó táblában egyszerre változtatjuk az értéket. ON DELETE CASCADE ON UPDATE CASCADE create table rendelesek ( rendelesAz int not null, koltseg int, ugyfelAz int not null, primary key(rendelesAz), index( ugyfelAz ), foreign key(ugyfelAz) references ugyfelek(ugyfelAz) on delete cascade on update cascade ) ENGINE = InnoDB ==== Idegenkulcs kezelése ==== Idegenkulcs hozzáadása: alter table Szemelyek add foreign key(beosztasAz) references Bosztasok(az); Megadhatjuk az idegenkulcs nevét: alter table Szemelyek add constraint `FK_Nev` foreign key(beosztasAz) references Bosztasok(az); Ellenőrzés: show create table Szemelyek; Idegenkulcs törlése: alter table táblanév drop foreign key fk_name; Idegenkulcs meghatározásának cseréje, egyetlen utasítással: alter table táblanév drop foreign key `fk_nev`, add constraint `fk_nev2` foreign key (`idegenkulcsAz`) references `Masik_tabla` (`az`) on delete cascade; Idegenkulcs másként: alter table Tablanev add primary key (fid) ===== Összetett kulcs ===== Összetett kulcs megadása: alter table Tablanev add primary key (fid, vid) ===== Bool típus ===== Boolean típus alapértelmezéssel: alter table dolgozok add enabled boolean not null default true after `fizetes`; ===== Verziókövetés ===== create table dolgozok (nev varchar(50) with system versioning); insert into dolgozok set nev="Pál"; insert into dolgozok set nev="Béla"; insert into dolgozok set nev="Teri"; update dolgozok set nev="Lola" where nev="Teri"; select * from dolgozok for system_time all; Szerkezet változtatásának engedélyezése: SET @@system_versioning_alter_history = 1; Törlés: alter table dolgozok drop system versioning; Forrás: * https://mariadb.com/resources/blog/automatic-data-versioning-in-mariadb-server-10-3/ (2022)