sql - שפת הגדרת הנתונים
DESCRIPTION
סיכום בנושא שפת הגדרת הנתונים, כולל דוגמאות, מונחים והגדרותTRANSCRIPT
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]')
: הוספת שורה חדשה לסוף הטבלה
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
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אם נחליף את , במקרה שכזה*
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;