Advertisement
Guest User

Untitled

a guest
Feb 5th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 11.24 KB | None | 0 0
  1. /* 1. zadatak U bazi autoradionica: Postaviti okidač koji će prilikom brisanja zapisa iz tablice odjel provjeriti da li je taj odjel referenciran u tablici kvar ili radnik. Ako je referenciran onda će postaviti vrijednosti tih zapisa u tablicama kvar i radnik na NULL. */
  2. DROP TRIGGER IF EXISTS brisanjeOdjela1;
  3. DELIMITER //
  4. CREATE TRIGGER brisanjeOdjela1
  5.   AFTER DELETE ON odjel FOR EACH ROW
  6. BEGIN
  7.     UPDATE kvar SET sifOdjel = NULL WHERE kvar.sifOdjel = OLD.sifOdjel;
  8.     UPDATE radnik SET sifOdjel = NULL WHERE radnik.sifOdjel = OLD.sifOdjel;
  9. END;
  10. //
  11. DELIMITER ;
  12.  
  13. /* 2. zadatak U bazi autoradionica: Potrebno je izvesti isti okidač pozivom procedure (napisati proceduru koja će rješavati problematiku prethodnog zadatka te okidač koji tu proceduru poziva).*/
  14. DROP TRIGGER IF EXISTS brisanjeOdjela2;
  15. DROP PROCEDURE IF EXISTS brisanjeOdjela;
  16. DELIMITER //
  17.  
  18. CREATE TRIGGER brisanjeOdjela2
  19.   AFTER DELETE ON odjel FOR EACH ROW
  20. BEGIN
  21.   CALL brisanjeOdjela(OLD.sifOdjel);
  22. END;
  23.  
  24. CREATE PROCEDURE brisanjeOdjela(IN sifOdjelX INT)
  25. BEGIN
  26.     UPDATE kvar SET sifOdjel = NULL WHERE kvar.sifOdjel = sifOdjelX;
  27.     UPDATE radnik SET sifOdjel = NULL WHERE radnik.sifOdjel = sifOdjelX;
  28. END;
  29. //
  30. DELIMITER ;
  31.  
  32. /* 3. zadatak U bazi autoradionica: Postaviti okidač koji će prilikom unosa novog zapisa u tablicu nalog provjeriti atribut datPrimitkaNalog. Ako se datum postavlja na neku vrijednost datuma iz budućnosti, tada je potrebno datPrimitkaNalog postaviti na današnji datum (dohvatiti trenutni datum sa poslužitelja).*/
  33.  
  34. DROP TRIGGER IF EXISTS datum;
  35. DELIMITER //
  36.  
  37. CREATE TRIGGER datum
  38.   BEFORE INSERT ON nalog FOR EACH ROW
  39. BEGIN
  40.   IF NEW.datPrimitkaNalog > CURRENT() THEN
  41.       SET NEW.datPrimitkaNalog = CURRENT();
  42.     END IF;
  43. END;
  44. //
  45. DELIMITER ;
  46.  
  47. /* 4. zadatak U bazi autoradionica: Potrebno je stvoriti novu tablicu nalog_backup strukture identične strukturi tablice nalog. Napisati okidač koji će prilikom unosa novog zapisa u tablicu nalog, napraviti sigurnosnu kopiju podataka koji se unose, na način da će te iste podatke unijeti i u tablicu nalog_backup.*/
  48. CREATE TABLE nalog_backup (
  49.     sifKlijent INT,
  50.     sifKvar INT,
  51.     sifRadnik INT,
  52.     datPrimitkaNalog DATE,
  53.     prioritetNalog DATE,
  54.     OstvareniSatiRada INT);
  55.  
  56. DROP TRIGGER IF EXISTS nalogBackup;
  57. DELIMITER //
  58.  
  59. CREATE TRIGGER nalogBackup
  60.   AFTER INSERT ON nalog FOR EACH ROW
  61. BEGIN
  62.   INSERT INTO nalogBackup(sifKlijent, sifKvar, sifRadnik, datPrimitkaNalog, prioritetNalog, OstvareniSatiRada)
  63.       VALUES (NEW.sifKlijent, NEW.sifKvar, NEW.sifRadnik, NEW.datPrimitkaNalog, NEW.prioritetNalog, NEW.OstvareniSatiRada);
  64. END;
  65. //
  66. DELIMITER ;
  67.  
  68. /* 5. zadatak U bazi autoradionica: Napisati okidač koji će osigurati da se prilikom ažuriranja podataka u tablici radnik, ne može postaviti koeficijent plaće na vrijednost manju od 1 niti veću od 3. Potrebno je:
  69. a. Ako se postavlja na vrijednost manju od 1, unijeti točno 1
  70. b. Ako se postavlja na vrijednost veću od 3, unijeti točno 3*/
  71. DROP TRIGGER IF EXISTS azuriranjeRadnika;
  72. DELIMITER //
  73.  
  74. CREATE TRIGGER azuriranjeRadnika
  75.   BEFORE UPDATE ON radnik FOR EACH ROW
  76. BEGIN
  77.   IF NEW.KoefPlace > 3 THEN
  78.       SET NEW.KoefPlace = 3;
  79.     ELSEIF NEW.KoefPlace < 1 THEN
  80.       SET NEW.KoefPlace = 1;
  81.     END IF;    
  82. END;
  83. //
  84. DELIMITER ;
  85.  
  86. /* 6. zadatak U bazi studenti: Napisati okidač koji će osigurati da se prilikom unosa nove n-toke u tablicu studenti ne smije unijeti student sa dupliciranim JMBAG-om. U tom je slučaju potrebno onemogućiti unos takve n-torke. U svrthu testiranja privremeno ukloniti oznaku primary key sa atributa JMBAG.*/
  87. DROP TRIGGER IF EXISTS unosStudenta;
  88. DELIMITER //
  89.  
  90. CREATE TRIGGER unosStudenta
  91.   BEFORE UPDATE ON studenti FOR EACH ROW
  92. BEGIN
  93.   IF (SELECT COUNT(studenti.jmbag) FROM studenti WHERE studenti.jmbag = NEW.jmbag) > 1 THEN
  94.       SET NEW.jmbag = NULL;
  95.     END IF;
  96. END;
  97. //
  98. DELIMITER ;
  99.  
  100. /* 7. zadatak U bazi studenti: Tablici studenti dodati novi atribut naziva PolozenihIspita. Napisati okidač koji će se pokretati prilikom unosa nove ocjene za tog studenta. Ako se unosi nova pozitivna ocjena, potrebno je ispuniti novi atribut podatkom koliko je ukupno student položio ispita (sa pozitivnom ocjenom).*/
  101. ALTER TABLE studenti ADD PolozenihIspita INT;
  102.  
  103. DROP TRIGGER IF EXISTS unosOcjena;
  104. DELIMITER //
  105.  
  106. CREATE TRIGGER unosOcjena
  107.   BEFORE INSERT ON ocjene FOR EACH ROW
  108. BEGIN
  109.   DECLARE brojOcjena INT;
  110.   SELECT COUNT(*) INTO brojOcjena
  111.     FROM ocjene
  112.     WHERE ocjene.jmbagStudent = NEW.jmbagStudent AND NEW.ocjena > 1;
  113.    
  114.     SET NEW.PolozenihIspita = brojOcjena;
  115. END;
  116. //
  117. DELIMITER ;
  118.  
  119. /* 8. zadatak U bazi studenti u tablicu nastavnici dodati novu kolonu 'lozinkaTimestamp'.
  120. Potrebno je osigurati da se nakon svake promjene lozinke nekom od nastavnika, automatski upiše vremenska oznaka promjene lozinke u kolonu 'lozinkaTimestamp’ (za tog nastavnika).*/
  121. ALTER TABLE nastavnici ADD lozinkaTimestamp TIMESTAMP;
  122.  
  123. DROP TRIGGER IF EXISTS promjenaLozinke;
  124. DELIMITER //
  125.  
  126. CREATE TRIGGER promjenaLozinke
  127.   BEFORE UPDATE ON nastavnici FOR EACH ROW
  128. BEGIN    
  129.     SET NEW.lozinkaTimestamp = CURRENT_TIMESTAMP();
  130. END;
  131. //
  132. DELIMITER ;
  133.  
  134. /* 2. zadatak Zaključati tablicu kvar za čitanje. Pokušati unijeti promjenu u tablicu.
  135. Možete li u drugoj sesiji sesiji (ponovno se spojite sa SQLyogom na bazu bez zatvaranja prethodne konekcije i bez pokretanja UNLOCK TABLES) zaključati tablicu kvar za čitanje? Provjerite.
  136. Otključajte tablicu.*/
  137. LOCK TABLES kvar FOR READ;
  138. UNLOCK TABLES;
  139.  
  140. /* 3. zadatak Zaključati tablicu kvar za pisanje.
  141. Pokušati pročitati podatak iz tablice (SELECT) u drugoj. Je li ovakvo čitanje podataka moguće? Provjerite.
  142. Otključajte tablicu.*/
  143. LOCK TABLES kvar FOR WRITE;
  144. UNLOCK TABLES;
  145.  
  146. /* 4. zadatak U bazi studenti napisati transakciju koja će zaključati n-torke gdje je jmbag '0128051999' u tablici ocjene, te vratiti prosjek svih ocjena za tog studenta, na način da druge transakcije ne mogu mijenjati podatke ocjena za tog studenta, ali ih mogu čitati.
  147. */
  148. SET AUTOCOMMIT=0;
  149. BEGIN work;
  150.     SELECT * FROM ocjene WHERE jmbagStudent LIKE "0128051999" FOR UPDATE;
  151.     SELECT AVG(ocjena) FROM ocjene WHERE jmbagStudent LIKE "0128051999";
  152. COMMIT WORK;
  153. SET AUTOCOMMIT=1;
  154.  
  155. /* 5. zadatak Kreirajte korisnika marko za spajanje na lokalni poslužitelj (localhost) sa bilo koje adrese i dodijelite mu lozinku lozinka123. Spojite se na poslužitelj s novim podacima.
  156. */
  157. CREATE USER "marko"@"%" IDENTIFIED BY "lozinka123";
  158.  
  159. /* 6. zadatak Postavite dozvole za unos i brisanje podataka u tablici rezervacija za korisnika marko nad svojom bazom sa svojega računala. Neka marko ima mogućnost dodavati dozvole drugim korisnicima. Spojite se na poslužitelj s novim podacima.*/
  160. /* varijanta sa i bez postavljanja lozinke */
  161. GRANT INSERT, DELETE ON radionica.rezervacija TO "marko"@"localhost" IDENTIFIED BY "lozinka123" WITH GRANT OPTION;
  162. GRANT INSERT, DELETE ON radionica.rezervacija TO "marko"@"localhost" WITH GRANT OPTION;
  163.  
  164. /* 7. zadatak Obrišite dozvole za korisnika marko koje ste postavili u prethodnom zadatku. Obrišite korisnika marko.*/
  165. REVOKE INSERT, DELETE, GRANT OPTION ON radionica.rezervacija FROM "marko"@"localhost";
  166. DROP USER "marko"@"localhost";
  167.  
  168. /* 8.5 zadatak Riješiti zadatke 4 i 5 bez korištenja naredbi GRANT i REVOKE, već izmjenama u bazi naziva mysql, u odgovarajućim tablicama.*/
  169. INSERT INTO mysql.user (user, host, password) VALUES("marko", "%", PASSWORD("lozinka123"));
  170. FLUSH PRIVILEGES;
  171.  
  172. <?php
  173. /*Napisati skriptu koja će se spojiti na bazu podataka autoradionica na lokalnom poslužitelju sa sljedećim podacima:
  174. • korisničko ime: admin
  175. • lozinka: 1234
  176. Nakon toga skripta mora ispisati naziv kvara, naziv odjela na kojem se popravlja taj kvar i broj radnika (kvar.brRadnika) koji na tom kvaru rade.
  177. U ispisu se trebaju vidjeti samo gore navedene kolone.
  178. Ispis formatirajte pomoću HTML tablice te izdajte korisniku admin potrebne minimalne dozvole za rad nad bazom podataka.*/
  179.  
  180.  
  181.  
  182. // GRANT SELECT ON radionica.kvar TO 'admin'@'localhost' IDENTIFIED BY '1234';
  183. // GRANT SELECT ON radionica.odjel TO 'admin'@'localhost' IDENTIFIED BY '1234';
  184.  
  185. ?>
  186. <!DOCTYPE html>
  187. <html>
  188. <head>
  189.     <meta charset="windows-1250">
  190.     <title>Zadatak labos</title>
  191.     <style>
  192.         table, td, th { border: 1px solid gray; }
  193.     </style>
  194. </head>
  195. <body>
  196.  
  197. <?php
  198. $server = "localhost";
  199. $username = "admin";
  200. $password = "1234";
  201. $dbname = "radionica";
  202.  
  203.  
  204. $conn = mysqli_connect($server, $username, $password, $dbname);
  205.  
  206. if (!$conn) {
  207.     die("Connection failed: " . mysqli_connect_error());
  208. }
  209.  
  210. mysqli_query($conn, "SET CHARACTER SET cp1250");
  211.  
  212. $sql = "SELECT nazivKvar, nazivOdjel, brojRadnika FROM kvar INNER JOIN odjel on kvar.sifOdjel = odjel.sifOdjel";
  213. $result = mysqli_query($conn, $sql);
  214.  
  215. if (mysqli_num_rows($result) > 0) {
  216.     echo "<table>
  217.    <thead>
  218.            <tr>
  219.                <th>Naziv kvara</th>
  220.                <th>Naziv odjela</th>
  221.                <th>Broj radnika koji rade na tom kvaru</th>
  222.            </tr>
  223.    </thead>";
  224.     while($row = mysqli_fetch_assoc($result)) {
  225.         echo "<tr><td>" . $row["nazivKvar"]. "</td><td>" . $row["nazivOdjel"]. "</td><td>" . $row["brojRadnika"] . "</td></tr>";
  226.     }
  227.     echo "</table>";
  228. } else {
  229.     echo "Nema rezultata";
  230. }
  231.  
  232. mysqli_close($conn);
  233.  
  234. ?>
  235.  
  236. </body>
  237. </html>
  238.  
  239.  
  240. <?php
  241. /*Napisati skriptu koja će se spojiti na bazu podataka autoradionica na lokalnom poslužitelju sa sljedećim podacima:
  242. • korisničko ime: admin
  243. • lozinka: 1234
  244. Napisati skriptu koja će omogućiti unos novog naloga u tablicu nalog. Potrebno je omogućiti unos vrijednosti za sve atribute osim za datPrimitkaNalog.
  245. Vrijednost tog atributa automatski je potrebno postaviti na današnji datum (datum kada se nalog stvarno unosi u bazu).
  246. Izdajte korisniku admin potrebne minimalne dozvole za rad nad bazom podataka.*/
  247.  
  248.  
  249.  
  250. // GRANT INSERT ON radionica.nalog TO 'admin'@'localhost' IDENTIFIED BY '1234';
  251.  
  252. if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['submit'])){
  253.  
  254. $server = "localhost";
  255. $username = "admin";
  256. $password = "1234";
  257. $dbname = "radionica";
  258.  
  259.  
  260. $conn = mysqli_connect($server, $username, $password, $dbname);
  261.  
  262. if (!$conn) {
  263.     die("Connection failed: " . mysqli_connect_error());
  264. }
  265.  
  266. $query = "INSERT INTO nalog (sifKlijent, sifKvar, sifRadnik, datPrimitkaNalog, prioritetNalog, OstvareniSatiRada)
  267.                            VALUES(".$_POST['sifKlijent'].", ".$_POST['sifKvar'].", ".$_POST['sifRadnik'].", ".date("Y-m-d").", ".$_POST['prioritetNalog'].", ".$_POST['OstvareniSatiRada'].")" or die(mysqli_error($conn));
  268.  
  269. $result = mysqli_query($conn, $query);
  270.     echo "<h2>Nalog uspješno dodan.</h2>";
  271. }
  272.  
  273. ?>
  274. <!DOCTYPE html>
  275. <html>
  276. <head>
  277.     <meta charset="UTF-8">
  278.     <title>Zadatak labos</title>
  279. </head>
  280. <body>
  281. <h1>Unos novog naloga</h1>
  282. <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  283.  
  284.     <input name="sifKlijent" placeholder="sifKlijent" required><br>
  285.     <input name="sifKvar" placeholder="sifKvar" required><br>
  286.     <input name="sifRadnik" placeholder="sifRadnik" required><br>
  287.     <input name="prioritetNalog" placeholder="prioritetNalog" required><br>
  288.     <input name="OstvareniSatiRada" placeholder="OstvareniSatiRada" required><br>
  289.  
  290.     <button type="submit" name="submit">Dodaj</button>
  291. </form>
  292. </body>
  293. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement