CREATE DROP DATABASE IF EXISTS personnel CREATE DATABASE
Πώς ορίζουμε βάση δεδομένων και πίνακες. Δήλωση CREATE DROP DATABASE IF EXISTS personnel; CREATE DATABASE personnel; USE personnel; CREATE TABLE DEPT (DEPTNO INT(2) NOT NULL, DNAME CHAR(14), LOC CHAR(13)); CREATE TABLE EMP (EMPNO INT (4) NOT NULL, ENAME CHAR(10), JOB CHAR(9), MGR INT (4), HIREDATE, SAL FLOAT(7, 2), COMM FLOAT(7, 2), DEPTNO INT(2)); CREATE TABLE PROJ (PROJNO INT(3) NOT NULL, PNAME CHAR(5), BUDGET FLOAT (7, 2)); CREATE TABLE ASSIGN(EMPNO INT(4) NOT NULL, PROJNO INT(3) NOT NULL, PTIME INT(3)); SHOW TABLES; 3
Πώς τροποποιούμε ορισμό πίνακα – Δήλωση ALTER TABLE Για να προσθέσουμε στο πίνακα ΕΜΡ τη στήλη EMPNO σαν κύριο κλειδί: ALTER TABLE DEPT ADD CONSTRAINT PK_DEPTNO PRIMARY KEY(DEPTNO); ALTER TABLE EMP ADD CONSTRAINT PK_EMPNO PRIMARY KEY(EMPNO); ALTER TABLE EMP ADD CONSTRAINT FK_EMP_DEPTNO FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO); DESCRIBE DEPT; DESCRIBE EMP; 4
5
6
Μπορούμε να ορίσουμε κύρια και ξένα κλειδιά και χωρίς ρητή δήλωση constraint CREATE DATABASE NEW_DB; CREATE TABLE DEPT (DEPTNO INT(2) NOT NULL, DNAME CHAR(14), LOC CHAR(13)); CREATE TABLE EMP (EMPNO INT (4) NOT NULL, ENAME CHAR(10), JOB CHAR(9), MGR INT (4), HIREDATE, SAL FLOAT(7, 2), COMM FLOAT(7, 2), DEPTNO INT(2)); Προσθέστε κύρια κλειδιά. ALTER TABLE EMP ADD PRIMARY KEY(EMPNO); ALTER TABLE DEPT ADD PRIMARY KEY(DEPTNO); ALTER TABLE PROJ ADD PRIMARY KEY(PROJNO); ALTER TABLE ASSIGN ADD PRIMARY KEY(EMPNO, PROJNO); 7
Θα αλλάξουμε στον πίνακα ΕΜΡ τις στήλες ΕΝΑΜΕ και JOB. ALTER TABLE EMP MODIFY ENAME CHAR(20); ALTER TABLE EMP MODIFY JOB CHAR(20); DESCRIBE EMP; 8
Προσθήκη ξένων κλειδιών ALTER TABLE EMP ADD FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO); ALTER TABLE ASSIGN ADD FOREIGN KEY(EMPNO) REFERENCES EMP(EMPNO); ALTER TABLE ASSIGN ADD FOREIGN KEY(PROJNO) REFERENCES PROJ(PROJNO); DESCRIBE ASSIGN; 9
10
12
13
19
Εισαγωγή στοιχείων INSERT INTO DEPT VALUES(10, “ΛΟΓΙΣΤΗΡΙΟ”, “ΑΘΗΝΑ“); INSERT INTO DEPT VALUES(30, “ΠΩΛΗΣΕΙΣ”, “ΑΘΗΝΑ“); SELECT * FROM DEPT; INSERT INTO EMP VALUES(7512, “NIKOY N. ”, “ΠΩΛΗΤΗΣ”, 7890, “ 2019 -01 -01”, 1000, NULL, 30); INSERT INTO EMP VALUES(7612, “ΑΝΔΡΕΟΥ”, “ΠΩΛΗΤΗΣ”, 7890, “ 2009 -01 -01”, 1000, NULL, 30); INSERT INTO EMP VALUES(7522, ”ΑΝΔΡΕΟΥ N. ”, “ΚΛΗΤΗΡΑΣ”, 7890, “ 2017 -01 -01”, 1000, NULL, 30); INSERT INTO EMP VALUES (6956, “ΣΚΟΥΡΑΣ”, “ΠΩΛΗΤΗΣ”, 7890, “ 2019 -01 -01”, 1000, NULL, 30 ) ; INSERT INTO EMP VALUES(7890, “ΑΝΔΡΕΟΥ N. ”, “MANAGER”, 7890, “ 2007 -01 -01”, 3000, 500, 30); 22
Πρωτόκολλο COMMIT / ROLLBACK Στην επόμενη συνεδρία (session) με το σύστημα μπορούμε να κατανοήσουμε καλύτερα το πρωτόκολο. (1) SELECT NAME FROM CUSTOMER WHERE CUSTNO=7654; (2) Επιστρέφει E. CODD (3) UPDATE CUSTOMERS SET NAME = ‘P. D. JAMES’ WHERE CUSTNO=7654; (4) COMMIT; (5) SELECT NAME FROM CUSTOMER WHERE CUSTNO=7654; (6) Επιστρέφει P. D. JAMES (7) UPDATE CUSTOMERS SET NAME = ‘P. JAMES’ WHERE CUSTNO=7654; (8) ROLLBACK; (9) SELECT NAME FROM CUSTOMER WHERE CUSTNO=7654; (10) Επιστρέφει P. D. JAMES 24
Μηχανισμός ROLLBACK Στην επόμενη συνεδρία (session) με το σύστημα μπορούμε να κατανοήσουμε καλύτερα τη δήλωση ROLLBACK. (1) SELECT NAME FROM CUSTOMER WHERE CUSTNO=7654; (2) Επιστρέφει E. CODD (3) UPDATE CUSTOMERS SET NAME = ‘P. D. JAMES’ WHERE CUSTNO=7654; (4) SELECT NAME FROM CUSTOMER WHERE CUSTNO=7654; Επιστρέφει P. D. JAMES ROLLBACK; (7) SELECT NAME FROM CUSTOMER WHERE CUSTNO=7654; (8) Επιστρέφει E. CODD 25
Έναρξη συναλλαγών στο προϊόν My. SQL. SET AUTOCOMMIT=0; -- start transactions 27
INSERT INTO Accounts (acct. ID, balance) VALUES (101, 1000); INSERT INTO Accounts (acct. ID, balance) VALUES (202, 2000); COMMIT; -- end of the first transaction SELECT * FROM accounts; UPDATE ACCOUNTS SET BALANCE=BALANCE-100 WHERE ACCTID=101; UPDATE ACCOUNTS SET BALANCE=BALANCE+100 WHERE ACCTID=202; SELECT * FROM accounts; ROLLBACK; -- end of the second transaction SELECT * FROM accounts; 2
29
INSERT INTO ASSIGN VALUES(7890, 15, 100), (6956, 12, 30), (6956, 15, 70), (7512, 15, 100); SELECT * FROM ASSIGN; 34
SELECT ASSIGN. EMPNO, ENAME, ASSIGN. PROJNO, PNAME, PTIME FROM EMP, ASSIGN, PROJ WHERE EMPNO =ASSIGN. EMPNO AND ASSIGN. PROJNO=PROJNO AND ASSIGN. PROJNO=15; CREATE VIEW PROJ_15 (EMP_CODE, ENAME, PROJ_CODE, PROJECT, PTIME) AS SELECT ASSIGN. EMPNO, ENAME, ASSIGN. PROJNO, PNAME, PTIME FROM EMP, ASSIGN, PROJ WHERE EMPNO =ASSIGN. EMPNO AND ASSIGN. PROJNO=PROJNO AND ASSIGN. PROJNO=15; SELECT * FROM PROJ_15; 35
36
Ποιοί υπάλληλοι εργάζονται σε κάποια από τα έργα και ποιά είναι τα έργα αυτά SELECT ASSIGN. EMPNO, ENAME, ASSIGN. PROJNO, PNAME, PTIME FROM EMP, ASSIGN, PROJ WHERE EMPNO =ASSIGN. EMPNO AND ASSIGN. PROJNO=PROJNO; 37
CREATE VIEW PROJSTAFF (EMP_CODE, ENAME, PROJ_CODE, PROJECT, PTIME) AS SELECT ASSIGN. EMPNO, ENAME, ASSIGN. PROJNO, PNAME, PTIME FROM EMP, ASSIGN, PROJ WHERE EMPNO =ASSIGN. EMPNO AND ASSIGN. PROJNO=PROJNO; 38
Ποιοί υπάλληλοι εργάζονται σε έργα με έδρα ΑΘΗΝΑ και ποιά είναι τα έργα αυτά; SELECT ASSIGN. EMPNO, ENAME, ASSIGN. PROJNO, PNAME, PTIME, DNAME, LOC FROM DEPT, EMP, ASSIGN, PROJ WHERE DEPTNO=EMP. DEPTNO AND EMPNO =ASSIGN. EMPNO AND ASSIGN. PROJNO=PROJNO; 39
CREATE VIEW ATHENS_PROJECTS (EMP_CODE, NAME, PROJ_CODE, PROJ, PTIME, DNAME, LOC) AS SELECT ASSIGN. EMPNO, ENAME, ASSIGN. PROJNO, PNAME, PTIME, SELECT * DNAME, LOC FROM ATHENS_PROJECTS FROM DEPT, EMP, ASSIGN, PROJ WHERE DEPTNO=EMP. DEPTNO WHERE LOC = “ΑΘΗΝΑ”; AND EMPNO =ASSIGN. EMPNO AND ASSIGN. PROJNO=PROJNO; 40
Δώστε νέα αύξηση 30% στους υπάλληλους 6956 και 7512. UPDATE EMP SET SAL=SAL*1. 30 WHERE EMPNO IN (6956, 7512); SELECT EMPNO, ENAME, SAL FROM EMP; 42
Διαγράψτε και τον νέο υπάλληλο 8888. DELETE FROM EMP WHERE EMPNO=8888; SELECT * FROM EMP; UPDATE CHECKSAL SET COMM=700 WHERE Εκτελείται! Πως θα διορθώσουμε το πρόβλημα DROP VIEW CHECKSAL; EMPNO=7890; CREATE VIEW CHECKSAL AS SELECT * FROM emp WHERE sal > 1800 WITH CHECK OPTION ; 47
SET AUTOCOMMIT=0; DELETE FROM EMP WHERE EMPNO=7777; SELECT * FROM EMP; ROLLBACK; SELECT * FROM EMP; 49
Εκχώρηση και αφαίρεση δικαιωμάτων Δημιουργία χρήστη CREATE USER 'jim'@'localhost' IDENTIFIED BY 'adams'; Κατάργηση χρήστη DROP USER 'jim'@'localhost'; Δημιουργία χρήστη και εκχώρηση δικαιωμάτων CREATE USER 'jim'@'localhost' IDENTIFIED BY 'adams'; GRANT ALL ON personnel. * TO 'jim'@'localhost'; SHOW GRANTS FOR 'jim'@'localhost'; 51
Αλλαγή δικαιωμάτων ALTER USER 'jim'@'localhost' WITH MAX_QUERIES_PER_HOUR 90; Πίνακας χρηστών DESCRIBE mysql. user; SELECT HOST, USER, SELECT_PRIV, INSERT_PRIV, UPDATE_PRIV, DELETE_PRIV FROM mysql. user; 52
GRANT και REVOKE. Εκχώρηση και αφαίρεση δικαιωμάτων CREATE USER 'jim'@'localhost' IDENTIFIED BY 'adams'; GRANT ALL ON personnel. * TO 'jim'@'localhost'; SHOW GRANTS FOR 'jim'@'localhost'; 53
55
56
SELECT deptno, AVG(sal), COUNT(*) FROM emp GROUP BY deptno HAVING AVG(sal) >= 1200 ORDER BY deptno; 59
# FLOOR μεγαλύτερος ακέραιος μικρότερος ή ίσος με τον αριθμό SELECT FLOOR(5. 2) FROM DUAL; SELECT FLOOR(-5. 2) FROM DUAL; # MOD υπόλοιπο διαιρέσεως SELECT MOD(12, 5) FROM DUAL; SELECT MOD(12. 3, 7. 1) FROM DUAL; 61
# SIGN πρόσημο αριθμού SELECT SIGN(5. 7) FROM DUAL; SELECT SIGN(-3) FROM DUAL; SELECT SIGN(0) FROM DUAL; 63
# SQRT τετραγωνική ρίζα αριθμού SELECT SQRT(64) FROM DUAL; SELECT SQRT(-64) FROM DUAL; 64
Δημιουργία νέου πίνακα βασιζόμενου σε υπάρχοντα SELECT * FROM DEPT; DROP TABLE IF EXISTS NEW_DEPT; CREATE TABLE NEW_DEPT(DEPTNO INT(2) NOT NULL, DNAME CHAR(14)); INSERT INTO NEW_DEPT SELECT DEPTNO, CASE dname WHEN 'ΛΟΓΙΣΤΗΡΙΟ' THEN 'ACCOUNTING' WHEN 'ΠΩΛΗΣΕΙΣ' THEN 'SALES' ELSE 'Unknown level' end FROM dept; SELECT * FROM NEW_DEPT; 69
70
- Slides: 71