sql - שפת הגדרת הנתונים

4
DDL Data Definition Language יצירת טבלה חדשה: CREATE TABLE table_name ( Column_name Datatype Optional Constraints, Optional Table Constrants); דוגמה: CREATE TABLE ListOfArtists( ArtistID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (ArtistID), UNIQUE KEY ArtistAK1 (LastName, FirstName)); B A מפתח ייחודי, כלומר לא יופיעו בטבלה שני צירופים זהים( B , A ) התנהגות בעדכון או מחיקה של ערכים בטבלהON DELETE / ON UPDATE עדכון/ מחיקה בטבלת ההורה יחלחל גם עבור טבלאות הילדCASCADE חסימת האפשרות לעדכן/ למחוק מטבלת ההורהNO ACTION / RESTRICT עדכון/ מחיקה בטבלת ההורה יניב איפוס הערכים התואמים בטבלאות הילדSET NULL אילוצים: The CHECK Constraint . הגדרת התחום עבור ערכים בטבלה. רצוי לתת שם לכל אילוץ ע" מ שניתן יהיה לגשת אליו לצרכי עדכון והסרה. דוגמאות: CONSTRAINT cons_Name1 PRIMARY KEY (ArtistID), CONSTRAINT cons_Name2 UNIQUE KEY (Last Name, First Name), CONSTRAINT cons_Name3 CHECK (status IN ('Single', 'Married', …)), CONSTRAINT cons_Name4 CHECK (Date of Birth< DateDeceased), CONSTRAINT cons_Name5 CHECK (Date of Birth LIKE '[1-2][0-9][0-9][0-9]')

Upload: -

Post on 02-Jun-2015

1.012 views

Category:

Education


0 download

DESCRIPTION

סיכום בנושא שפת הגדרת הנתונים, כולל דוגמאות, מונחים והגדרות

TRANSCRIPT

Page 1: SQL - שפת הגדרת הנתונים

DDL – Data Definition Language

: יצירת טבלה חדשה

CREATE TABLE table_name (

Column_name Datatype Optional Constraints,

Optional Table Constrants);

: דוגמה

CREATE TABLE ListOfArtists(

ArtistID INT NOT NULL AUTO_INCREMENT,

PRIMARY KEY (ArtistID),

UNIQUE KEY ArtistAK1 (LastName, FirstName));

B Aכלומר לא יופיעו , מפתח ייחודי

( B,A)בטבלה שני צירופים זהים

ON DELETE/ON UPDATE התנהגות בעדכון או מחיקה של ערכים בטבלה

CASCADEמחיקה בטבלת ההורה יחלחל גם עבור טבלאות הילד / עדכון

NO ACTION / RESTRICTלמחוק מטבלת ההורה / חסימת האפשרות לעדכן

SET NULLמחיקה בטבלת ההורה יניב איפוס הערכים התואמים בטבלאות הילד / עדכון

. The CHECK Constraint: אילוצים

. הגדרת התחום עבור ערכים בטבלה

. מ שניתן יהיה לגשת אליו לצרכי עדכון והסרה"רצוי לתת שם לכל אילוץ ע

: דוגמאות

CONSTRAINT cons_Name1 PRIMARY KEY (ArtistID),

CONSTRAINT cons_Name2 UNIQUE KEY (Last Name, First Name),

CONSTRAINT cons_Name3 CHECK (status IN ('Single', 'Married', …)),

CONSTRAINT cons_Name4 CHECK (Date of Birth< DateDeceased),

CONSTRAINT cons_Name5 CHECK (Date of Birth LIKE '[1-2][0-9][0-9][0-9]')

Page 2: SQL - שפת הגדרת הנתונים

: הוספת שורה חדשה לסוף הטבלה

INSERT INTO table_name (col1,col2…colN) Values ('col1_val', 'col2_val',… 'colN_val')

: כך, אז ניתן להשמיט את שמות העמודות, אם מזינים ערכים של כל העמודות לפי הסדר

INSERT INTO table_name Values ('col1_val', 'col2_val',… 'colN_val')

: שכפול של טבלה

1) CREATE TABLE table_copy (SELECT * FROM table)

2) CREATE TABLE table_copy LIKE table;

INSERT INTO table_copy(SELECT * FROM table);

: מחיקת שורה מטבלה

DELETE FROM table_name WHERE column=value

: עדכון ערכים בטבלה

UPDATE table_name SET column=value WHERE condition

ALTER –שינויים מבניים .

הוספת אילוץ

: לדוגמה

ALTER TABLE table1 ADD CONSTRAINT cons_name

FOREIGN KEY (column1) REFERENCES table2 (column1)

ON DELETE NO ACTION

ON UPDATE NO ACTION

:הוספת עמודה

ALTER TABLE table1 ADD COLUMN column1 DataType(Size) {NULL/NOT NULL}

:הסרת עמודה

ALTER TABLE table_name DROP COLUMN column_name

(טבלה וירטואלית)יצירת תצוגה

CREATE VIEW view_name AS SELECT…

.ניתן לגשת לעמודות התצוגה באותו האופן בו היינו ניגשים לטבלה רגילה, לאחר יצירת התצוגה

: לדוגמה

SELECT * FROM view_name WHERE condition

Drop –הסרה .

DROP TABLE table_name

DROP TRIGGER trigger_name

DROP VIEW view_name

Page 3: SQL - שפת הגדרת הנתונים

Joins –צירוף של עמודות ממספר טבלאות .

Inner join

:לדוגמה

SELECT lastname, title FROM listofartists, work

WHERE listofartists.artistid = work.artistid

: ובאופן שקול

SELECT lastname, title FROM listofartists

JOIN work ON Listofartists.artistid = work.artistID

: במידת הצורךJoinsניתן לשרשר יותר

SELECT C.Lastname, A.Lastname

FROM customer AS C JOIN customer_artist_int AS C1

ON C.customerID = C1.customerID

JOIN listofartist AS A

ON C1.artistID = A.artistID

: ובאותו אופן שקול

SELECT C.lastname, A.lastname

FROM customer AS C, customer_artist_int AS C1, listofartists AS A

WHERE C.customerID=C1.CustomerID AND C1.artistID=A.artistID

Outer Join .

Left join – כל השורות בטבלה הראשונה שמוצגת בהוראה תהיינה מוכלות בתוצאה .

Right Join – כל השורות בטבלה השניה שמוצגת בהוראה תהיינה מוכלות בתוצאה .

ייתכנו בקלות מצבים בהם נקבל שעבור ישות מסוימת , נבחין שלא נדרשת התאמה בין המבנים של הטבלאות ועל כן

. בשדות עבורם אין מידעNULLיופיע ערך , במקרה זה. אין נתונים מסוימים

: דוגמה

SELECT C.lastname, C.firstname, T.transactionID, T.salesprice

FROM Customer AS C LEFT JOIN trans AS T ON

C.customerID=T.customerID ORDER BY T.transactionID;

. בשדות עבורם אין נתוניםNULLכאמור יופיע , ...גם אלו שלא ביצעו טרנזקציות, הלקוחותכלכך שיופיעו

. אנו נקבל רק את אלו שיש עבורם טרנזקציה, RIGHT JOIN בLEFT JOINאם נחליף את , במקרה שכזה*

Page 4: SQL - שפת הגדרת הנתונים

Triggers .

. טריגר משויך לטבלאות ומופעל בעת שינוי של הנתונים בטבלה מסוימת

. מחיקה או עדכון של רכיב בטבלה, ניתן לקבוע האם הטריגר יבצע הכנסה

. $$ ונועל של הטריגר יהיה delimiter $$פתיח של טריגר הוא הביטוי

delimiter $$

CREATE TRIGGER trigger_name

{AFTER, BEFORE} {INSERT, UPDATE, DELETE} ON tablename FOR EACH row

BEGIN...END $$

: בגוף הטריגר יכולות להופיע הגדרות כגון

- Declare –מתבצע באופן הבא, להגדרת עמודה חדשה:

DECLARE ArtistNationality CHAR(30);

- SELECT… INTO – בדומה ל SELECT… FROM ,בוחרים את המקור ממנו יילקחו הנתונים , רק הפוך

:לעמודת היעד

SELECT Nationality INTO ArtistNationality FROM…

- INSERT INTO… - הכנסת שורה חדשה לטבלה קיימת :

INSERT INTO table_name (SELECT *…)

:IF... THEN ... התניות -

IF (ArtistNationalit = 'Mexican') THEN

IF (New. Salesprice < New.AskingPrice) THEN

UPDATE trans SET…

END IF; END IF

יש לקחת בחשבון שב– MySQLיש לעבוד עם , לא ניתן לעדכן את הטבלה עליה מורץ טריגר ועל כן

. במקביל dummyטבלת

NEWזוהי השורה החדשה שהוכנסה .

ביטול :

DROP TRIGGER trigger_name

DROP TABLE table_name

DELETE FROM table WHERE column =value

מימוש שלCHECK באמצעות TRIGGER:

CREATE TRIGGER trigger_name

BEFORE UPDATE ON table_name

FOR EACH ROW BEGIN

IF NEW.Column NOT BETWEEN 0 AND 100 THEN

SET NEW.column = 1/0;

END IF; END;