[[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)