Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.11 KB | None | 0 0
  1. Introduzione a MySQL
  2. (SQL - Structured Query Language)
  3. (prof. Ivaldi Giuliano)
  4.  
  5. Attenzione! La sintassi delle istruzioni seguenti può leggermente variare in base al DBMS utilizzato (attenzione soprattutto agli '-apici in un eventuale copia e incolla delle istruzioni)
  6.  
  7. Creazione e cancellazione Database
  8. • Creazione database​CREATE DATABASE IF NOT EXISTS nome_database;
  9. clausola IF NOT EXISTS, se il database esiste già non genera un errore
  10. • Cancellazione database​DROP DATABASE nome_database;
  11. Esempio,
  12. CREATE DATABASE prova;
  13. DROP DATABASE prova;
  14.  
  15. Tipi di attributi
  16.  
  17. VARCHAR(n)​stringhe lunghe 'n'
  18. TINYINT, INT e BIGINT​numeri interi a 1, 4 e 8 bytes FLOAT e DOUBLE​numeri reali (in virgola mobile)
  19. DECIMAL(n,m)​numero con n cifre totali di cui m decimali (a virgola fissa)
  20. DATE​date nel formato ‘AAAA-MM-GG' (es. '2055-03-01', le virgolette sono necessarie) TINYINT o VARCHAR(1) usati come tipo booleano (true o false, 0 o 1)
  21.  
  22. Manipolazione schemi
  23. • Creazione schema
  24. CREATE TABLE IF NOT EXISTS nome_tabella
  25. ( attributo1 tipo1 [NOT NULL] [AUTO_INCREMENT], attributo2 tipo2 [NOT NULL] [DEFAULT 'Valore']
  26. [CHECK (attributo2 IN ('Valore1', 'Valore2', ... , 'ValoreN'))],
  27. .​.​.
  28. attributoN tipoN [NOT NULL],
  29. PRIMARY KEY (attributo1, ..., attributoN) );
  30. attributo = campo
  31. NULL = indica che il campo può essere lasciato vuoto
  32. NOT NULL = indica che il campo è obbligatorio, bisogna cioè dargli un valore AUTO_INCREMENT = indica che verrà dato un valore automatico in ordine progressivo DEFAULT 'Valore' = imposta il valore di Default, nel caso non venga inserito nessun valore,
  33. altrimenti inserirebbe NULL
  34. CHECK = (non funziona in MySQL) imposta vincoli di dominio, cioè limita i valori che un utente può inserire in una colonna (campo)
  35. esempi,
  36. CHECK (attributo2 IN ('Valore1', 'Valore2', ... , 'ValoreN')) CHECK (attributo2 BETWEEN Valore1 AND ValoreN) CHECK (attributo2 > Valore1 AND attributo2 < Valore2)) CHECK (attributo2 LIKE 'stringa')
  37. (stringa può contenere i caratteri jolly
  38. % = carattere jolly, sostituisce un gruppo di caratteri
  39. _ = carattere jolly, sostituisce un carattere) PRIMARY KEY (nome_attributo) = crea la chiave primaria su nome_attributo
  40. • Rimozione tabella​DROP TABLE nome_tabella;
  41. • Modificare un attributo di una tabella
  42. ALTER TABLE nome_tabella CHANGE vecchio_nome_attributo nuovo_nome_attributo tipo_attributo; Esempio, ripreso da esempi seguenti
  43. ALTER TABLE Appartamenti CHANGE Inquilino Nome_Inquilino VARCHAR(30);
  44. • Aggiungere un nuovo attributo ad una tabella​ALTER TABLE nome_tabella ADD nuovo_attributo tipo_attributo; Esempio,​ALTER TABLE Spese ADD Beneficiario VARCHAR(20) ;
  45. • Rimuovere un attributo​ALTER TABLE nome_tabella DROP nome_attributo; Esempio,​ALTER TABLE Proprietari DROP Saldo;
  46. • Aggiungere un nuovo attributo chiave primaria ad una tabella
  47. ALTER TABLE nome_tabella ADD nome_attributo INT NOT NULL AUTO_INCREMENT PRIMARY KEY; Esempio​ALTER TABLE Spese ADD Cod_Spesa INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
  48. (crea la chiave primaria e le dà automaticamente dei valori nei record già esistenti)
  49. • Rimuovere una chiave primaria​ALTER TABLE nome_tabella DROP PRIMARY KEY;
  50.  
  51. MySQL
  52. Pagina 11
  53.  
  54. Esempio​ALTER TABLE Spese DROP PRIMARY KEY;
  55. • Mostra i database presenti​SHOW DATABASES;
  56. • Mostrare le tabelle del database​SHOW TABLES;
  57. • Mostrare la struttura di una tabella​DESCRIBE nome_tabella;
  58.  
  59. Esempi,
  60. Segue un esempio in cui vengono create tabelle senza utilizzare ancora le relazioni e le chiavi esterne
  61. Schema relazionale CONDOMINIO1
  62. APPARTAMENTI(Cod_App,Superficie,Vani,Inquilino,Proprietario) PROPRIETARI(Proprietario, Indirizzo,Telefono,Saldo) PAGAMENTI(Cod_Pagam,Data,Importo,Proprietario) SPESE(Cod_Spesa,Data,Voce,Importo,Cod_App)
  63. CREATE TABLE IF NOT EXISTS Appartamenti
  64. ( Cod_App​INT NOT NULL AUTO_INCREMENT,
  65. Superficie​FLOAT NOT NULL DEFAULT '0',
  66. Vani​INT NOT NULL DEFAULT '2',
  67. Inquilino​VARCHAR(30),
  68. Proprietario​VARCHAR(30) NOT NULL, PRIMARY KEY (Cod_App));
  69. CREATE TABLE IF NOT EXISTS Proprietari
  70. ( Proprietario​VARCHAR(30) NOT NULL,
  71. Indirizzo​VARCHAR(35) NOT NULL,
  72. Telefono​VARCHAR(15),
  73. Saldo​FLOAT NOT NULL,
  74. PRIMARY KEY (Proprietario, Indirizzo));
  75. CREATE TABLE IF NOT EXISTS Pagamenti
  76. ( Cod_Pagam​INT NOT NULL AUTO_INCREMENT, Data​DATE NOT NULL,
  77. Importo​FLOAT NOT NULL,
  78. Proprietario​VARCHAR(15) NOT NULL, PRIMARY KEY (Cod_Pagam));
  79. CREATE TABLE IF NOT EXISTS Spese
  80. ( Cod_Spesa​INT NOT NULL AUTO_INCREMENT,
  81. Data​DATE NOT NULL,
  82. Voce​VARCHAR(200) NOT NULL
  83. CHECK (Voce IN ('Riscaldamento', 'Scale', 'Cortile', 'Tetto')),
  84. Importo​FLOAT NOT NULL CHECK (Importo>100),
  85. Cod_App​INT NOT NULL,
  86. PRIMARY KEY (Cod_Spesa));
  87.  
  88. Gestione degli indici
  89. Tipi di indici:
  90. PRIMARY KEY: applicato ad uno o più campi di una tabella permette di distinguere univocamente ogni riga; il campo sottoposto all’indice primary key non ammette duplicati né campi nulli;
  91. UNIQUE: simile alla primary key, con la differenza che tollera valori nulli, mentre i duplicati restano vietati;
  92. COLUMN INDEX: sono gli indici più comuni, applicati ad un campo di una tabella, hanno puramente lo scopo di velocizzarne l’accesso permettendo valori duplicati e nulli; come variante, possono esistere indici “multicolonna”, che includono quindi più campi della tabella.
  93. FULLTEXT: sono indici che permettono di accelerare operazioni onerose, come la ricerca testuale su un intero campo.
  94.  
  95.  
  96. • Creare un indice in una nuova tabella
  97. CREATE TABLE IF NOT EXISTS nome_tabella (
  98. ...
  99. attributoN INT NOT NULL,
  100. ...
  101. INDEX nome_indice_ind (attributo1, ..., attributoN) );
  102.  
  103. • Aggiungere un indice ad una tabella esistente
  104. ALTER TABLE nome_tab ADD [UNIQUE,FULLTEXT] INDEX nome_indice_ind (attrib1,..., attribN); Esempio​ALTER TABLE Spese ADD INDEX Dati_ind (Voce, Importo);
  105.  
  106. • Eliminare un indice​ALTER TABLE nome tabella DROP INDEX nome_indice; Esempio​ALTER TABLE Spese DROP INDEX Dati_ind;
  107.  
  108. MySQL
  109. Pagina 11
  110.  
  111. Manipolazione delle tabelle
  112.  
  113. • Inserire una riga in una tabella
  114. INSERT INTO nome_tabella (attributo1 , … , attributoN) VALUES ('valore1', … , 'valoreN');
  115.  
  116. • Aggiornare una o più righe di una stessa tabella UPDATE nome_tabella
  117. SET​attributo1 = 'valore1'
  118. … attributoN = 'valoreN'
  119. [WHERE condizione];
  120.  
  121. • Cancellare una o più righe
  122. DELETE FROM nome_tabella [WHERE condizione];
  123.  
  124.  
  125. Esempi
  126.  
  127. a) inserire il proprietario Rossi Mario abitante in via Torino 34 a Savigliano, telefono 011.83.765, con saldo iniziale nullo
  128. INSERT INTO Proprietari
  129. (Proprietario, Indirizzo, Telefono, Saldo)
  130. VALUES ('Rossi Mario', 'via Torino 34 - Savigliano', '01183.765', 0);
  131. b) inserire i proprietari,
  132. Verdi Giuseppe abitante in via Roma 120 a Torino, telefono 011.973.34.22, con saldo iniziale 200 Bianchi Luisa abitante in via Milano 15 a Ivrea, telefono 011.965.87.44, con saldo iniziale -100
  133. INSERT INTO Proprietari
  134. (Proprietario, Indirizzo, Telefono, Saldo)
  135. VALUES ('Verdi Giuseppe', 'via Roma 120 - Torino', '011.973.34.22', 200), ('Bianchi Luisa', 'via Milano 15 - Ivrea', '011.965.87.44', -100);
  136. c) il proprietario Rossi ha cambiato indirizzo e telefono UPDATE Proprietari
  137. SET Indirizzo='nuovo indirizzo', Telefono='nuovo telefono', Saldo= 10
  138. WHERE Proprietario = 'Rossi Mario';
  139. d) addebitare il 25% di interessi di mora a ciascun proprietario che ha un saldo negativo UPDATE Proprietari
  140. SET​Saldo=1.25*Saldo WHERE Saldo<0;
  141. e) cancellare tutti i pagamenti avvenuti prima del 2058
  142. DELETE FROM Pagamenti WHERE Data<’2058-01-01’;
  143.  
  144. MySQL
  145. Pagina 11
  146.  
  147. Creazione delle Relazioni fra tabelle - Le chiavi esterne (Foreign keys)
  148.  
  149. Le chiavi esterne sono costrutti che sfruttano gli indici per collegare due tabelle mediante l’associazione di campi; applicare vincoli ai vari campi di diverse tabelle consente di mantenere la consistenza dei dati.
  150.  
  151. • Creazione di una tabella con chiave esterna
  152.  
  153. CREATE TABLE IF NOT EXISTS nome_tabella_primaria
  154. ( campo_chiave_esterna tipo1 [NOT NULL] [AUTO_INCREMENT],
  155. .​.​.
  156. attributoN tipoN [NOT NULL],
  157. PRIMARY KEY (attributo1, ..., attributoN) ) [TYPE=InnoDB];
  158.  
  159. CREATE TABLE IF NOT EXISTS nome_tabella_secondaria
  160. ( attributo1 tipo1 [NOT NULL] [AUTO_INCREMENT],
  161. .​.​.
  162. attributoN tipoN [NOT NULL],
  163. PRIMARY KEY (attributo1, ..., attributoN), CONSTRAINT FK_Nome_ForeignKey
  164. FOREIGN KEY (nome_attributo_tab_second) REFERENCES nome_tab_primaria(campo_chiave_esterna) ON DELETE Azione da attivare
  165. ON UPDATE Azione da attivare) [TYPE=InnoDB];
  166.  
  167.  
  168. 'CONSTRAINT' significa 'Vincolo': più vincoli possono essere scritti uno di seguito all'altro separati da una virgola.
  169.  
  170. TYPE=InnoDB: perché si possano impostare le chiavi esterne, entrambe le tabelle, primaria e secondaria, devono avere come Storage Engine, InnoDB (Storage Engine = motore di memorizzazione dei dati), ma ciò avviene di default, quindi questa opzione si può omettere.
  171.  
  172. Azione da attivare = azione da far attivare in caso di cancellazione o modifica di un record nella tabella primaria:
  173. • CASCADE: la cancellazione o la modifica di una riga nella tabella primaria causerà, a cascata, la medesima modifica nella tabella secondaria;
  174. • SET NULL: il campo oggetto della relazione nella tabella secondaria verrà impostato a NULL; in questo caso, è necessario che tale campo non sia stato qualificato come NOT NULL in fase di creazione;
  175. • NO ACTION o RESTRICT: impedisce che la modifica o la cancellazione nella tabella primaria venga eseguita.
  176.  
  177. Esempi,
  178. Viene ripreso l'esempio già presentato in precedenza, modificato con l'utilizzo delle relazioni e chiavi esterne. Schema relazionale CONDOMINIO2
  179. PROPRIETARI(Cod_Prop, Proprietario, Indirizzo, Telefono, Saldo) APPARTAMENTI(Cod_App, Superficie, Vani, Inquilino, Proprietario) PAGAMENTI(Cod_Pagam, Data, Importo, Proprietario) SPESE(Cod_Spesa, Data, Voce, Importo, Cod_App)
  180.  
  181.  
  182. PROPRIETARI
  183.  
  184.  
  185. APPARTAMENTI
  186.  
  187. 1ry key
  188.  
  189.  
  190.  
  191. Relazione
  192. Cod_Prop
  193. Relazione
  194.  
  195.  
  196.  
  197.  
  198. Cod_App
  199. Saldo
  200. Indirizzo
  201. 1ry key
  202.  
  203.  
  204.  
  205. 1ry key
  206.  
  207. Telefono
  208.  
  209. Chiave esterna
  210.  
  211. Proprietario
  212. Vani
  213. Proprietario
  214. Inquilino
  215. Superficie
  216. Numerico
  217. Chiave esterna
  218. PAGAMENTI
  219.  
  220. Relazione
  221.  
  222. Cod_Pagam
  223. Data
  224. Importo
  225. Proprietario
  226. Numerico
  227. ​​Chiave
  228.  
  229. SPESE
  230.  
  231. 1ry key
  232.  
  233. esterna
  234.  
  235. Cod_Spesa
  236. Data
  237. Voce
  238. Importo
  239. Cod_App
  240.  
  241. Numerico
  242.  
  243. MySQL
  244. Pagina 11
  245.  
  246. CREATE TABLE IF NOT EXISTS Proprietari
  247. ( Cod_Prop​INT NOT NULL AUTO_INCREMENT,
  248. Proprietario​VARCHAR(30) NOT NULL,
  249. Indirizzo​VARCHAR(35) NOT NULL,
  250. Telefono​VARCHAR(15),
  251. Saldo​FLOAT NOT NULL, PRIMARY KEY (Cod_Prop));
  252.  
  253. CREATE TABLE IF NOT EXISTS Appartamenti
  254. ( Cod_App​INT NOT NULL AUTO_INCREMENT,
  255. Superficie​FLOAT NOT NULL,
  256. Vani​INT NOT NULL,
  257. Inquilino​VARCHAR(30),
  258. Proprietario​INT NOT NULL, PRIMARY KEY (Cod_App), CONSTRAINT FK_PropApp
  259. FOREIGN KEY (Proprietario) REFERENCES Proprietari (Cod_Prop) ON DELETE NO ACTION
  260. ON UPDATE NO ACTION);
  261.  
  262. CREATE TABLE IF NOT EXISTS Pagamenti
  263. (Cod_Pagam​INT NOT NULL AUTO_INCREMENT,
  264. Data​DATE NOT NULL,
  265. Importo​FLOAT NOT NULL,
  266. Proprietario​INT NOT NULL, PRIMARY KEY (Cod_Pagam), CONSTRAINT FK_PropPagam
  267. FOREIGN KEY (Proprietario) REFERENCES Proprietari (Cod_Prop) ON DELETE NO ACTION
  268. ON UPDATE NO ACTION);
  269. CREATE TABLE IF NOT EXISTS Spese
  270. (Cod_Spesa​INT NOT NULL AUTO_INCREMENT,
  271. Data​DATE NOT NULL,
  272. Voce​VARCHAR(200) NOT NULL,
  273. Importo​FLOAT NOT NULL,
  274. Cod_App​INT NOT NULL,
  275. PRIMARY KEY (Cod_Spesa), CONSTRAINT FK_CodApp
  276. FOREIGN KEY (Cod_App) REFERENCES Appartamenti (Cod_App) ON DELETE CASCADE
  277. ON UPDATE CASCADE);
  278.  
  279.  
  280.  
  281. Modificare una tabella esistente aggiungendo chiavi esterne
  282.  
  283. • Creare una chiave esterna su una tabella già creata ALTER TABLE nome_tab_secondaria
  284. ADD CONSTRAINT FK_nome_ForeignKey
  285. FOREIGN KEY (nome_attributo_tab_second) REFERENCES nome_tab_primaria(campo_chiave_esterna) ON DELETE Azione da attivare
  286. ON UPDATE Azione da attivare;
  287.  
  288. Esempio
  289. ALTER TABLE Pagamenti
  290. ADD CONSTRAINT FK_PropPagam
  291. FOREIGN KEY (Proprietario) REFERENCES Proprietari (Cod_Prop) ON DELETE CASCADE
  292. ON UPDATE CASCADE;
  293.  
  294.  
  295. • Eliminare una chiave esterna
  296. ALTER TABLE nome_tab_secondaria DROP FOREIGN KEY FK_nome_ForeignKey; Esempio​ALTER TABLE Pagamenti DROP FOREIGN KEY FK_PropPagam;
  297.  
  298. MySQL
  299. Pagina 11
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement