מסדי נתונים / בחירת מסד הנתונים האידיאלי / MySQL, SQL, DDL ו DML


MySQL, SQL, DDL ו DML


ברוב המקרים, התקשורת עם MySQL נעשית ע"י דיבור בשפתו : SQL. בגדול, השפה מחולקת לשני חלקים עיקריים.
הראשון הוא DDL - Data Definition Language. נשתמש בחלק הזה של SQL כדי להורות ל MySQL ליצור טבלאות.
חלקה השני של השפה הוא DML - Data Manipulation Language. בחלק זה נשתמש כדי לצפות במידע המאוכסן בטבלאות.

וזו התוכנית. אני אפעיל את mysql , אצור טבלה, אכניס בתוכה קצת מידע ואז אצפה במידע שרק הכנסתי.
(פה ושם יהיו גם הערות מודגשות על קטעי הקוד, אז רצוי שתהיו ערניים).

rdice:# mysql test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 to server version: 3.21.28-gamma-log Type 'help' for help. mysql> create table albums ( here I'm using DDL -> title varchar(100), to set up a table where -> artist varchar(100), I'll store some -> released date); musical info Query OK, 0 rows affected (0.07 sec)
בשלב הזה אכניס את הפקודות DML שיגרמו לMySQL להכניס רשומה לטבלת ה albums.

mysql> insert into albums(title,artist,released) -> values('Selling England By The Pound','Genesis','1973-01-01'); Query OK, 1 row affected (0.08 sec)


כאן תבוא הצהרת DML שתאפשר לי לראות את המידע שהכנסתי כרגע, שימו לב ל * משמעותה היא "כל העמודות" בשפת ה sql.

mysql> select * from albums; +---------------------------------------+----------+-------------+ | title | artist | released | +------------------------------+-------+-------------------------+ | Selling England By The Pound | Genesis | 1973-01-01 | +------------------------------+-------+-------------------------+ 1 row in set (0.06 sec)


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

create table TABLENAME ( COLUMN1 column1datatype, COLUMN2 column2datatype, ... COLUMN_x column_xdatatype )


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

כדי לסיים הצהרה בmysql, עלינו להשתמש בנקודה-פסיק, מלווה בלחיצה על מקש הEnterבשלב הזה MySQL יגיד לנו מה מצב ה"query" (זהו המינוח עבור כל הפקודות) שלנו ומה הזמן לקח לו לבצע אותה.

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

insert into TABLE(column1,column2,...,column_x) values(value1,value2,...,value_x)


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

אם היו לי כמה מאות של שמות תקליטים מסודרים במסד הנתונים שלי, והייתי בוחר לראות רק את אלו של להקת "Genesis", יכולתי ליצור בקלות הצהרת select שתפיק לי בדיוק את המידע המבוקש.

select title, released from albums where artist ='Genesis' order by released


במקרה הזה ציינתי את שם הטור המבוקש באופן ספציפי.
מכיוון שתוצאות ההצהרה ממילא יתייחסו אך ורק לתקליטים של ג'נסיס, אין שום סיבה לכלול את הטור שנקרא "שם אמן" ברשימת השדות שיראו. בנוסף לכך, חשבתי לעצמי שיהיה ממש מגניב אם MySQL תחזיר את שמות התקליטים מסודרים לפי תאריך הוצאתם, רק למקרה הנדיר ביותר שמי מכם לא יודע את סדר יציאת התקליטים.
בנוסף לinsert וselect ישנן עוד שתי הצהרות DML בסיסיות:
update שמאפשרת לעדכן מידע המאוכסן בשורה בטבלה וdelete שמאפשר לך למחוק שורה שלמה.

והרי הדרך להשתמש בפקודות האלו:


בדיוק החלטתי לעצמי שתאריך ההוצאה של Selling England הוא הראשון לפברואר ולא הראשון לינואר. העדכון יראה כך:

mysql> update albums -> set released = '1973-02-01' -> where title = 'Selling England by the Pound' -> and artist = 'Genesis'; Query OK, 1 row affected (0.03 sec) mysql> select * from albums; +------------------------------------+----------+---------------+ | title | artist | released | +------------------------------------+----------+---------------+ | Selling England by the Pound | Genesis | 1973-02-01 | | Wind & Wuthering | Genesis | 1976-01-01 | | We Can't Dance | Genesis | 1991-01-01 | +------------------------------------+----------+---------------+ 3 rows in set (0.00 sec)


יודעים מה, זה כבר לא משנה, ממילא מעולם לא סבלתי את ג'נסיס...

mysql> delete from albums where artist = 'Genesis'; Query OK, 3 rows affected (0.00 sec) mysql> select * from albums; Empty set (0.00 sec)


ביחד עם הצהרות update וdelete אתם חייבים לציין את ביטוי ה where (אחרת כל שורה ושורה במסד הנתונים שלך תתעדכן, או חלילה תימחק, וזה דבר שכדאי להיזהר ממנו).
על ידי שיטוט באינטרנט תוכלו למצוא מדריכי SQL טובים מאוד. לא כולם מדויקים ביחס
ל-MySQL, אבל זה מפני שישנן המון גרסאות לשפת SQL. בכל מקרה, הבסיס זהה.
נסיים את השיעור להיום במבט אחרון חביב על מסד הנתונים שלנו:

rdice:# mysqlshow test Database: test +--------+ | Tables | +--------+ | albums | +--------+ rdice:# mysqlshow test albums Database: test Table: albums Rows: 0 +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | title | varchar(100) | YES | | | | | artist | varchar(100) | YES | | | | | released | date | YES | | | | +----------+--------------+------+-----+---------+-------+


mysqlshow תיעד את כל העבודה שביצענו ב mysql. כשמבקשים מ mysqlshow להציג מידע לגבי טבלה, הוא לא מספר דבר לגבי המידע שבטבלה מלבד מספר השורות הנוכחי. מה שהוא כן מציג הזה מבנה העמודות. אנחנו כבר מכירים את המושגים "שדה" ו "סוג משתנה", שאר העמודות מתייחסות למידע מתקדם יותר לגבי הטבלה (שוב, ניתן למצוא בתיעוד הסבר מפורט לגבי זה).



עמוד הבא: סיכום >>




מבט כללי
שעור 1
הטכנולוגיה הלא נכונה
לבעיה הלא נכונה

דמיין את כל האנשים
(נכנסים לאתר שלך)

מה האופציות שלי?
למה באינטרנט?
אבל איך?
משהו ללעוס בדרך
שעור 2
הכרות עם שדה
המשחקים

Windows NT לעומת
Linux

התקנת לינוקס והתוכניות
הנלוות

ציפיות
שעור 3
מבוא
MySQL ושאר עניני
שרת/מסד נתונים

MySQL,SQL,DDL
ו-DML >
סיכום
שעור 4
פילוסופית-Embedded
Web-Programming

ePerl-כשפרל פוגשת את
HTML

DBI-ממשק מסד הנתונים
של פרל

הדרך שלפנינו
שעור 5
מתחילים לעבוד
CGI.pm הבלתי נמנע
Escape Sequences
ומסד הנתונים שלך

הטבעת ביטויים יחסיים
במחרוזת
Here-Document

הטבעת תת-רוטינות
מחברים את הכל
מטפלים בטפסים עם
שאילתות SQL

מעבדים את תוצאות
הטופס עם-CGI.pm