* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download SQL: Queries, Constraints, Triggers
Survey
Document related concepts
Transcript
Database Management Systems Chapter 5 SQL atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Date Calculation • TimeStampDiff(unit, date_expr1, date_expre2) mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01'); -> 3 mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01'); > -1 mysql> SELECT TIMESTAMPDIFF(DAY,'2003-02-01','2003-05-01'); -> 89 atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Data Calculations CREATE TABLE SailorsNew (sid INTEGER, sname CHAR(30) NOT NULL, rating INTEGER, DOB DATE, CONSTRAINT StudentsKey PRIMARY KEY (sid)); SELECT sname, DOB, CURDATE( ), TIMESTAMPDIFF(YEAR, DOB,CURDATE( )) AS age FROM SailorsNew; SELECT sname, DOB, CURDATE( ), TIMESTAMPDIFF(YEAR, DOB,CURDATE( )) AS age FROM SailorsNew Order By sname; atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Query Results atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Extract Information from Date • Month(), Year(), DayOfMonth() atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Null Values Field values in a tuple are sometimes Unknown : a rating has not been assigned or Inapplicable : no spouse’s name for un-married person. SQL provides a special value null for such situations. The presence of null complicates many issues. atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Comparisons Using Null Values We need a 3-valued logic : true, false and unknown. Is rating>8 true or false when rating is equal to null? The answer is unknown. Special operators to check if value is/is not null. IS NULL returns true is the value is null. IS NOT NULL returns false is the valule is null. atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Logical Operator AND with One Argument as Null Value p q p AND q True True True True False False True Unknown (null) Unknown (null) False False False False Unknown (null) False atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Logical Operator OR with One Argument as Null Value p q p OR q True True True True False True True Unknown (null) True False False False False Unknown (null) Unknown atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Logical Operator NOT with a Null Value p NOT p True False False True Unknown (null) Unknown (null) atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Null Value’s Impact on SQL Constructs WHERE clause eliminates rows that don’t evaluate to true (false and null is eliminated). When corresponding columns are either equal, or both contain null, two rows are regarded as duplicates. Arithmetic operations +, -, *, and / all return null if one of their arguments is null. COUNT (*) handles null values as other values. Other aggregate operations ( SUM, AVG, MIN, MAX, and variations using DISTINCT) simply discard null values. If it applies to only null values, the result is null. atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Disallowing Null Values We can disallow null values by specifying NOT NULL as part of field definition. The fields in a primary key are not allowed as null. CREATE TABLE Students (sid CHAR(20), name CHAR(30) NOT NULL, login CHAR(20), DOB Date, gpa REAL) atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke More About Create Table • Insert values with local data file CREATE TABLE Sailors (sid INTEGER, sname CHAR(30) NOT NULL, rating INTEGER, age REAL, CONSTRAINT StudentsKey PRIMARY KEY (sid)); Load Data Local Infile '~/Sailors.txt' Into Table Sailors; 1 2 3 Tom Hanks 11 25 Tom Cruise \N 26 Hello K 10 30 NULL Tab Key \t atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Sailors.txt Clone or Copy a Table • Clone a table CREATE TABLE SailorsAnother LIKE Sailors; • Copy a table CREATE TABLE SailorsThird Select * FROM Sailors; • Copy part of a table CREATE TABLE SailorsFourth Select sid, sname FROM Sailors; • Rename a table ALTER TABLE Sailors RENAME SailorsFifth; atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Integrity Constraints (Review) An IC describes conditions that every legal instance of a relation must satisfy. Inserts/deletes/updates that violate IC’s are disallowed. Can be used to ensure application semantics (e.g., sid is a key), or prevent inconsistencies (e.g., sname has to be a string, age must be < 100) Types of IC’s: Domain constraints, primary key constraints, foreign key constraints, general constraints. atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Constraints over a Single Table Table Constraints CHECK conditional-expression Mysql does not support ! CREATE TABLE Sailors (sid INTEGER, sname CHAR(30) NOT NULL, rating INTEGER, age REAL, CONSTRAINT StudentsKey PRIMARY KEY (sid), CHECK (rating >=1 AND rating<=10) ) Rating must be an integer in the range of 1-10. atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Constraints over a Single Table CREATE TABLE Reserves (sid INTEGER, bid INTEGER, day DATE, FOREIGN KEY (sid) REFERENCES Sailors, FOREIGN KEY (bid) REFERENCES Boats, CONSTRAINT noInterlakeRes CHECK ( ‘Interlake’ <> (SELECT B.bname FROM Boats B WHERE B.bid = Reserves.bid) ) ) Interlake boats cannot be reserved. atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Triggers Trigger: procedure that starts automatically if specified changes occur to the DBMS Three parts: Event (activates the trigger) Condition (tests whether the triggers should run) Action (what happens if the trigger runs) atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Advantages of using SQL triggers • Check the integrity of data. • Catch errors in business logic in the database layer. • Run the scheduled tasks because the triggers are invoked automatically before or after a change is made to the data in the tables. • Audit the changes of data in tables. atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Disadvantages of using SQL triggers It only can provide an extended validation, not all validations. • Some simple validations have to be done in the application layer - JavaScript (client side) or JSP, PHP, ASP.NET, Perl, etc. (server side) • SQL triggers are invoked and executed invisibly from client-applications therefore it is difficult to figure out what happen in the database layer. • SQL triggers may increase the overhead of the database server. • atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Trigger Syntax CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_body trigger_time: { BEFORE | AFTER } trigger_event: { INSERT | UPDATE | DELETE } atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Association • Even data in tables are deleted or updated, if your statement does not use INSERT, DELETE or UPDATE statement to change data in a table, the triggers associated with the table are not invoked. • TRUNCATE TABLE statement removes all data of a table but does not invoke the trigger associated with that table. • Statements using the INSERT statement behind the scenes such as REPLACE statement or LOAD DATA statement will invoke the corresponding triggers associated with the table. atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Trigger Example Mysql> Delimiter / Mysql> CREATE TABLE SailorThird LIKE Sailors/ Mysql> CREATE TRIGGER SailorUpdate BEFORE INSERT ON SailorThird FOR EACH ROW BEGIN IF NEW.rating IS NULL THEN SET NEW.rating = 0; ELSEIF NEW.rating <1 THEN SET NEW.rating = 1; ELSEIF NEW.rating > 10 THEN SET NEW.rating = 10; END IF; END;/ Mysql> Load Data Local Infile ‘~/SailorsNew.txt’ Into Table SailorsThird/ Mysql> Delimiter ; atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke To Stop an Operation with Trigger CREATE TABLE Reserves Create Trigger ReservesUpdate (sid INTEGER, Before Insert On Reserves bid INTEGER, For Each Row day DATE, FOREIGN KEY (sid) REFERENCES Sailors, Begin If ‘Interlack’ = (Select B.bname From Boats B FOREIGN KEY (bid) REFERENCES Boats, Where B.bid = New.bid) CONSTRAINT noInterlakeRes Then CHECK ( ‘Interlake’ <> signal sqlstate ‘45000’; (SELECT B.bname FROM Boats B WHERE B.bid = Reserves.bid) ) ) End If; End; ; atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke Organize Triggers • In database Information_Schema, Table Triggers hold all information about triggers. SELECT * FROM information_schema.triggers WHERE trigger_schema = ‘DatabaseName’ AND trigger_name = ‘TriggerName’; SELECT * FROM information_schema.triggers WHERE trigger_schema = 'database_name' AND event_object_table = 'table_name'; SHOW TRIGGERS FROM classicmodels WHERE `table` = 'employees'; atabase Management Systems 3ed, R. Ramakrishnan and J. Gehrke