100% found this document useful (5 votes)
574 views41 pages

Learn Oracle

يتناول المستند مفاهيم أساسية حول قواعد البيانات ولغة أوراكل. يشرح الفرق بين لغة قواعد البيانات ولغة البرمجة. كما يذكر ميزات أوراكل الرئيسية.

Uploaded by

alsawi
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (5 votes)
574 views41 pages

Learn Oracle

يتناول المستند مفاهيم أساسية حول قواعد البيانات ولغة أوراكل. يشرح الفرق بين لغة قواعد البيانات ولغة البرمجة. كما يذكر ميزات أوراكل الرئيسية.

Uploaded by

alsawi
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 41

‫ﺑﺴﻢ ﺍﷲ ﺍﻟﺮﺣﻤﻦ ﺍﻟﺮﺣﻴﻢ‬

‫ﺳﻠﺴﻠ ـﺔ ‪‬ﺗﻌﻠـ ـﻢ‬ ‫‪‬‬

‫‪‬‬
‫ﺑﺴﻬﻮﻟ‪‬ــ ـ ـﺔ‬
‫‪‬‬
‫‪                  ‬‬ ‫‪‬‬
‫‪ ‬‬
‫ﻧﺴﺘﺘﻨﺞ ﻣـﻦ ﺍﻟـﺪﺭﻭﺱ ﺍﻟﺴـﺎﺑﻘﺔ ﻋـﻦ ﻣﻔـﺎﻫﻴﻢ ﻋﻠـﻢ ﻗﻮﺍﻋـﺪ ﺍﻟﺒﻴﺎﻧـﺎﺕ ؛ ﺃﻥﱠ ﻗﻮﺍﻋـﺪ ﺍﻟﺒﻴﺎﻧـﺎﺕ ﻋﺒـﺎﺭﺓ ﻋـﻦ‬
‫ﺗﺠﻤﻴﻊ ﻟﻜﻤﻴﺔ ﻛﺒﻴـﺮﺓ ﻣـﻦ ﺍﻟﻤﻌﻠﻮﻣـﺎﺕ ﺃﻭﺍﻟﺒﻴﺎﻧـﺎﺕ ﻭﻋﺮﺿـﻬﺎ ﺑﻄﺮﻳﻘـﺔ ﺃﻭ ﺃﻛﺜـﺮ ﻣـﻦ ﻃﺮﻳﻘـﺔ ﻟﻴﺴـﻬﻞ‬
‫ﺍﻻﺳﺘﻔﺎﺩﺓ ﻣﻨﻬﺎ ‪.‬‬
‫‪ ‬‬
‫ﺃ‪ -‬ﺇﺿﺎﻓﺔ ﻣﻌﻠﻮﻣﺔ ﺃﻭ ﺑﻴﺎﻧﺎﺕ ﺇﻟﻰ ﺍﻟﻤﻠﻒ ‪.‬‬
‫ﺏ‪ -‬ﺣﺬﻑ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻘﺪﻳﻤﺔ ‪.‬‬
‫ﺟـ ‪ -‬ﺗﻐﻴﻴﺮ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ‪.‬‬
‫ﺩ‪ -‬ﺗﺮﺗﻴﺐ ﻭﺗﻨﻈﻴﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺩﺍﺧﻞ ﺍﻟﻤﻠﻔﺎﺕ ‪.‬‬
‫ﻫـ ‪ -‬ﻋﺮﺽ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻋﻠﻰ ﺷﻜﻞ ﺗﻘﺮﻳﺮ ﺃﻭ ﻧﻤﻮﺫﺝ ‪.‬‬
‫ﻭﻛﺘﻄﺒﻴﻖ ﻟﻬﺬﻩ ﺍﻟﻤﻔﺎﻫﻴﻢ ‪ ،‬ﺳﻨﺘﻌﻠﻢ ﻟﻐﺔ ﺃﻭﺭﺍﻛﻞ ﻣﻦ ﺍﻟـﺼﻔﺮ ﺑﺈﺫﻥ ﺍﷲ ﺗﻌﺎﻟﻰ ‪..‬‬
‫ﺇﻥﹶّ ﺍﻻﻭﺭﺍﻛﻞ ﻻﺗﻌﺘﺒﺮ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻭﺇﻧﻤـﺎ ﻫـﻲ ﻟﻐـﺔ ﻗﻮﺍﻋـﺪ ﺑﻴﺎﻧـﺎﺕ ﻣﺒﺮﻣﺠـﺔ ﻟﻘﻮﺍﻋـﺪ ﺍﻟﺒﻴﺎﻧـﺎﺕ ﻓﻴﺠـﺐ‬
‫ﻋﻠﻴﻨــﺎ ﺍﻥ ﻧﻌــﺮﻑ ﻫــﺬﺍ ﺍﻟﻔــﺮﻕ ﺍﻻﺳﺎﺳــﻲ ﺑــﻴﻦ ﻟﻐــﺔ ﻗﻮﺍﻋــﺪ ﺍﻟﺒﻴﺎﻧــﺎﺕ ﺍﻻﻭﺭﺍﻛــﻞ ﻭﺑــﻴﻦ ﻟﻐــﺎﺕ ﺍﻟﺒﺮﻣﺠــﺔ‬
‫ﺍﻻﺧﺮﻯ‪ ،‬ﻓﻬﻲ ﺷﺒﻴﻬﺔ ﺇﻟـﻰ ‪ Microsoft Access‬ﻭﺃﻗـﺮﺏ ﺇﻟـﻰ ‪ ، Microsoft SQL Server‬ﻳﻌﻨـﻲ ﺃﻧﻬـﺎ‬
‫ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﻭﻟﻴﺴﺖ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺴﺘﻘﻠﺔ ﺑﺤﺪ ﺫﺍﺗﻬﺎ ﻓﻤﺜﻼ ﻓﺒﺠﻮﺍﻝ ﺑﻴﺴﻚ ﺗﻌﺘﺒﺮ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻷﻧﻬﺎ‬
‫ﺗﻤﻜﻨــﻚ ﻣــﻦ ﻋﻤــﻞ ﺑــﺮﺍﻣﺞ ﺫﺍﺕ ﺃﻫــﺪﺍﻑ ﻣﺘﻌــﺪﺩﺓ ﻭﻻ ﻳﺸــﺘﺮﻁ ﺃﻥ ﺗﻜــﻮﻥ ﺑــﺮﺍﻣﺞ ﻗﻮﺍﻋــﺪ ﺑﻴﺎﻧــﺎﺕ‬
‫ﻓﻴﻤﻜﻨﻚ ﻋﻤﻞ ﺑﺮﻧﺎﻣﺞ ﺭﺳﻢ ﻛﻤﺎ ﺑﺮﻧﺎﻣﺞ ﺍﻟﺮﺳﺎﻡ ﻓﻲ ﻭﻳﻨﺪﻭﺯ ﻭﻳﻤﻜﻨـﻚ ﺍﻟـﺘﺤﻜﻢ ﺑﻬـﺎ ﻋﻠـﻰ ﺣـﺪ‬
‫ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻤﺮﻭﻧﺔ ﻭﺍﻹﻣﻜﺎﻧﻴﺎﺕ ﺍﻟﺘﻲ ﺗﺴﻤﺢ ﻟﻚ ﺣﺘﻰ ﺑﺎﻻﺭﺗﺒﺎﻁ ﺑﻘﻮﺍﻋـﺪ ﺑﻴﺎﻧـﺎﺕ ﻣﺘﻌـﺪﺩﺓ ﻭﻟﻜـﻦ‬
‫ﺃﻭﺭﺍﻛﻞ ﺗﺘﻤﻴﺰ ﺑﺒﻤﻴﺰﺍﺕ ﻋﺎﻟﻴﺔ ﺗﻤﻴﺰﻫﺎ ﻋﻦ ﻏﻴﺮﻫﺎ ﻣﻦ ﻟﻐﺎﺕ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻧﺬﻛﺮ ﻣﻨﻬﺎ ‪:‬‬
‫• ﺃﻧﻬﺎ ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﻗﻮﻳـﺔ ﻭ ﺁﻣﻨـﺔ ؛ ﺇﺫ ﺗﺘﻤﺘـﻊ ﺑﺄﻣـﺎﻥ ﻋـﺎﻟﻲ ﺟـﺪﺍﹰ ‪ ،‬ﻭﻫـﻮ ﺳـﺒﺐ ﺃﺳﺎﺳـﻲ ﻻﻧﺘﺸـﺎﺭﻫﺎ‬
‫ﺍﻟﻬﺎﺋﻞ ﺭﻏﻢ ﺍﻟﺘﻜﻠﻔﺔ ﺍﻟﺒﺎﻫﻈﺔ ﻟﻬﺎ‪..‬‬
‫• ﺃﻧﻬﺎ ﺗﻌﺘﺒﺮ ﻗﻮﺍﻋﺪ ﺑﻴﺎﻧﺎﺕ ﺿﺨﻤﺔ ‪ ،‬ﻣﻘﺎﺭﻧﺔﹰ ﺑﻐﻴﺮﻫﺎ ‪.‬‬
‫• ﻳﻮﺟــﺪ ﻟــﺪﻳﻬﺎ ﺃﺩﻭﺍﺕ ﺗﺴــﺎﻋﺪﻫﺎ ﻟﻠﺘﻌﺎﻣــﻞ ﻣﻌﻬــﺎ ﻭﺇﻇﻬﺎﺭﻫــﺎ ﻓــﻲ ﺃﺷــﻜﺎﻝ ﻣﺘﻌــﺪﺩﺓ ‪ ،‬ﺑﻤــﺎ ﻳﺴــﻤﻰ‬
‫ﺗﻄﺒﻴﻘﺎﺕ ﺃﻭﺭﺍﻛﻞ ؛ ﺃﻱ ﺍﻟـ ‪ ، DEVELOPER‬ﺣﻴﺚ ﻳﻤﻜﻨﻚ ﺇﺩﺧﺎﻝ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﺳﺘﺨﺮﺍﺟﻬﺎ ﻋـﻦ‬
‫ﻃﺮﻳــﻖ ﻧﻤــﺎﺫﺝ ﻭﺗﻘــﺎﺭﻳﺮ ﻭﺭﺳــﻮﻡ ﺑﻴﺎﻧﻴــﺔ ﻭﻟﻜــﻦ ﻻ ﻳﻤﻜﻨﻬــﺎ ﺍﻟﺘﻌﺎﻣــﻞ ﻣــﻊ ﻗﺎﻋــﺪﺓ ﺑﻴﺎﻧــﺎﺕ ﻏﻴــﺮ‬
‫ﺃﻭﺭﺍﻛﻞ ﻛﻤﺎ ﺃﻧﻬﺎ ﻻ ﺗﻤﻜﻨﻚ ﻣﻦ ﻋﻤﻞ ﺑﺮﺍﻣﺞ ﻣﺜﻞ ﺍﻟﺮﺳﺎﻡ ‪.‬‬
‫‪ ‬‬
‫‪ -١‬ﻣﺪﻳﺮ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻻﻭﺭﺍﻛﻞ )‪٠ (Administer‬‬
‫‪ -٢‬ﻣﻄﻮﺭ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻻﻭﺭﺍﻛﻞ ) ‪. ( Developer‬‬
‫ﻭﻧﺤﻦ‪ ‬ﺑﺼﺪﺩ ﺍﻟﺘﻌﻠﻢ ﻟﻠﻮﺻﻮﻝ ﺇﻟﻰ ﻣﻄﻮﺭ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻭﺣﺘﻰ ﻧﺘﻌﻠﻤـﻪ‪ ،‬ﻳﺠـﺐ ﺃﻥ ﻧـﺘﻘﻦ ﻟﻐـﺔ ‪ SQL‬ﻭ‬
‫‪.. PL/SQL‬ﺛـﻢ ﻧـﺪﺧﻞ ﻓـﻲ ﺍﻟــ ‪ DEVELOPER‬ﺑﺠﺰﺃﻳـﻪ ﺍﻟــ ‪ FORM‬ﻭﺍﻟــ ‪ ..REPORT‬ﻭﺳـﻮﻑ ﻧﺒـﺪﺃ ﻫﻨـﺎ‬
‫ﺑﻜﻮﺭﺱ ﻣﺘﻮﺍﺿﻊ ﻋﻦ ﺍﻟـ ‪ SQL‬ﺛﻢ ‪.. PL/SQL‬‬

‫‪  ‬‬


‫‪Structured Query Language‬‬
‫ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻷﻭﺍﻣـﺮ ﺍﻟﺘـﻲ ﺗﺤﺘﺎﺟﻬـﺎ ﺍﻟﺒـﺮﺍﻣﺞ ﻭﻛـﺬﻟﻚ ﺍﻟﻤﺴـﺘﺨﺪﻣﻴﻦ ﻟﻠﻮﺻـﻮﻝ ﻟﻠﺒﻴﺎﻧـﺎﺕ‬
‫ﺍﻟﻤﻮﺟﻮﺩﺓ ﺿﻤﻦ ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﺃﻭﺭﺍﻛﻞ ‪..‬‬
‫ﺗﻢ ﺗﻄـﻮﻳﺮ ﻫـﺬﻩ ﺍﻟﻠﻐـﺔ ﺍﻟﺒﺪﺍﻳـﺔ ﻣـﻦ ﻗﺒـﻞ ﺷـﺮﻛﺔ ‪ IBM‬ﻭﺫﻟـﻚ ﻓـﻲ ﻣﻨﺘﺼـﻒ ﺍﻟﺴـﺒﻌﻴﻨﺎﺕ ‪ ،‬ﻭﻛﺎﻧـﺖ‬
‫ﺗﺴﻤﻰ ‪ System R‬ﺣﻴﺚ ﻛﺎﻧﺖ ﻋﺒﺎﺭﺓ ﻋﻦ ﻧﻤﻮﺫﺝ ﻟﻨﻈﺎﻡ ﺇﺩﺍﺭﺓ ﻗﻮﺍﻋﺪ ﺑﻴﺎﻧﺎﺕ ﻋﻼﻗﺌﻴﺔ ‪.‬‬
‫ﺑﻌﺪﻫﺎ ﺗﻢ ﺗﻮﺻﻴﻒ ﻟﻐﺔ ‪ SQL‬ﻓﻲ ‪١٩٧٦‬ﻡ ﻓﻲ ﻣﺠﻠﺔ ‪ INM Journal of R&D‬ﺑﺎﺳﻢ ‪ SEQUEL2‬ﻭﻣﻦ‬
‫ﺛﻢ‪ ‬ﻗﺎﻣﺖ ﺷﺮﻛﺔ ‪ ORACLE‬ﻓﻲ ‪١٩٧٩‬ﻡ ﺇﻧﺰﺍﻝ ﺃﻭﻝ ﻧﺴﺤﺔ ﺗﺠﺎﺭﻳﺔ ﻣﻦ ﻟﻐﺔ ‪. SQL‬‬
‫ﻭﻟﻐـﺔ ‪ SQL‬ﻫـﻲ ﻋﺒـﺎﺭﺓ ﻋـﻦ ﻟﻐـﺔ ﻏﻴـﺮ ﺇﺟﺮﺍﺋﻴـﺔ ‪، Non-Procedural Language‬ﻷﻧﻬـﺎ ﺗﺘﻌﺎﻣـﻞ ﻣـﻊ‬
‫ﻣﺠﻤﻮﻋﺔ ﺳﺠﻼﺕ ﻓﻲ ﺍﻟﻮﻗﺖ ﻧﻔﺴﻪ ﻭﻟﻴﺲ ﻣﻊ ﺳﺠﻞ ﻭﺣﻴﺪ ﻛﻤﺎ ﺃﻧﻬﺎ ﺗﻤﻜﻨﻨﺎ ﻣﻦ ﺍﺳﺘﻜﺸﺎﻑ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﺗﻠﻘﺎﺋﻴﺎ ‪.‬‬
‫ﻭﺗﺤﺘﻮﻱ ﻟﻐﺔ ‪ SQL‬ﻋﻠﻰ ﺗﻌﻠﻴﻤﺎﺕ ﺗﻔﻴﺪ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﻭﺗﻤﻜﻨﻬﻢ ﻣﻦ ﺇﺩﺍﺭﺓ ﺍﻟﻨﻈـﺎﻡ ﻭﻗﻮﺍﻋـﺪ ﺍﻟﺒﻴﺎﻧـﺎﺕ‬
‫ﻭﺍﻟﺘﻄﺒﻴﻘــﺎﺕ ﻋﻠﻴﻬــﺎ ‪ ،‬ﻛﻤــﺎ ﺃﻧﻬــﺎ ﺗﺤﺘــﻮﻱ ﻋﻠــﻰ ﺃﻭﺍﻣــﺮ ﻹﻧﺠــﺎﺯ ﻣﻬــﺎﻡ ﻣﺨﺘﻠﻔــﺔ ﻭﻣﺘﻌــﺪﺩﺓ ﻛﺎﻟﺒﺤــﺚ ﻋــﻦ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﺴﺠﻼﺕ ﻭﺗﻀﻤﻦ ﺗﻨﺎﺳﻖ ﻭﺗﻜﺎﻣﻠﻴﺔ ﺍﻟﺒﺒﻴﺎﻧﺎﺕ ‪..‬‬
‫‪ SQL*Plus SQL ‬‬
‫ﻭﻛﻤﺎ ﻧﻌﻠﻢ ﺃﻥ ‪ SQL‬ﻋﺒﺎﺭﺓ ﻋﻦ ﻟﻐﺔ ﺗﻌﻠﻴﻤﺎﺕ ﻟﻺﺗﺼﺎﻝ ﺑﻤﺨﺪﻡ ﺃﻭﺭﺍﻛﻞ ‪ Oracle Server‬ﻣـﻦ ﺧـﻼﻝ‬
‫ﺃﻳﺔ ﺃﺩﺍﺓ ﺃﻭ ﺃﻱ ﺗﻄﺒﻴﻖ ‪ ،‬ﻭﻋﻨﺪﻣﺎ ﺗﻘﻮﻡ ﺑﻜﺘﺎﺑﺔ ﺗﻌﻠﻴﻤﺔ ‪ ، SQL‬ﻳﺘﻢ ﺗﺨﺰﻳﻨﻬﺎ ﻓﻲ ﺟﺰﺀ ﻣـﻦ ﺍﻟـﺬﺍﻛﺮﺓ‬
‫ﻳﺴﻤﻰ ﺫﺍﻛﺮﺓ ‪ SQL‬ﺍﻟﻤﺆﻗﺘﺔ ‪ SQL buffer‬ﻭﺗﺒﻘﻰ ﻓﻴﻬﺎ ﺣﺘﻰ ﺗﻘﻮﻡ ﺑﻜﺘﺎﺑﺔ ﺗﻌﻠﻴﻤﺔ ﺟﺪﻳﺪﺓ ‪.‬‬
‫ﺃﻣــﺎ ‪ SQL*Plus‬ﻓﻬــﻲ ﻋﺒــﺎﺭﺓ ﻋــﻦ ﺃﺩﺍﺓ ﻣــﻦ ﺃﺩﻭﺍﺕ ﺃﻭﺭﺍﻛــﻞ ﻳﻤﻜﻨﻬــﺎ ﺍﻟﺘﻌــﺮﻑ ﻋﻠــﻰ ﺗﻌﻠﻴﻤــﺎﺕ ‪SQL‬‬
‫ﻭﺇﺭﺳﺎﻟﻬﺎ ﺇﻟﻰ ﻣﺨﺪﻡ ﺃﻭﺭﺍﻛﻞ ﻟﺘﻨﻔﻴﺬﻫﺎ ‪،‬ﻭﻫﻲ ﺗﻤﺘﻠﻚ ﺗﻌﻠﻴﻤﺎﺕ ﺇﺿـﺎﻓﻴﺔ ﺧﺎﺻـﺔ ﺑﻬـﺎ ﺳـﻨﻘﻮﻡ ﺑﺸـﺮﺣﻬﺎ‬
‫ﻓﻲ ﺍﻟﺪﺭﺱ ﺍﻟﺜﺎﻧﻲ ﺇﻥ ﺷﺎﺀ ﺍﷲ ‪.‬‬
‫ﻭﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻧﺘﻌﺎﻣﻞ ﻣﻦ ﺧﻼﻟﻬﺎ ﻣﻊ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺃﻭﺭﺍﻛـﻞ ‪ ،‬ﺃﻱ ﺃﻧـﻪ ﻣـﻦ ﺧـﻼﻝ ﻫـﺬﻩ ﺍﻟﻠﻐـﺔ ﻧﺴـﺘﻄﻴﻊ‬
‫ﺇﻋﻄﺎﺀ ﺍﻟﺼـﻼﺣﻴﺎﺕ ﻟﻤﺴـﺘﺨﺪﻡ ﺑﺈﻋﻄﺎﺋـﻪ ﺻـﻼﺣﻴﺔ ﺍﻻﺗﺼـﺎﻝ ﺑﻘﺎﻋـﺪﺓ ﺍﻟﺒﻴﺎﻧـﺎﺕ )‪ ، (GRANT‬ﻭﻣﻨﺤـﻪ‬
‫ﺻـﻼﺣﻴﺎﺕ ﻭﺍﻣﺘﻴـﺎﺯﺍﺕ ﻣﻤﺎﺭﺳـﺔ ﻋﻤﻠﻴـﺎﺕ ﻣﻌﻴﻨـﺔ ) ‪ ، ( REVOKE‬ﻛـﺬﻟﻚ ﺑﺈﻣﻜﺎﻧﻨـﺎ ﺇﻧﺸـﺎﺀ ﺍﻟﺠـﺪﺍﻭﻝ‬
‫)‪ ، (ALTER‬ﻭﺣـــﺬﻑ ﺍﻟﺠـــﺪﺍﻭﻝ )‪ (DROP‬ﺍﻟﻐﻴـــﺮ ﻣﺮﻏـــﻮﺏ ﻓﻴﻬـــﺎ ‪،‬‬ ‫)‪ ، (CREATE‬ﻭﺍﻟﺘﻌـــﺪﻳﻞ ﻋﻠﻴﻬـــﺎ‬
‫ﻭﻛـــﺬﻟﻚ ﻧﺴـــﺘﻄﻴﻊ ﻣـــﻞﺀ ﺍﻟﺠـــﺪﺍﻭﻝ ﺑﺎﻟﺒﻴﺎﻧـــﺎﺕ )‪ ، (INSERT‬ﻭﺍﻟﺘﻌـــﺪﻳﻞ ﻋﻠـــﻰ ﺍﻟﺒﻴﺎﻧـــﺎﺕ ﺍﻟﻤﺪﺧﻠـــﺔ‬
‫)‪ ، (UPDATE‬ﻭﺣﺬﻑ ﺃﻱ ﺑﻴﺎﻧﺎﺕ )‪ (DELETE‬ﻏﻴـﺮ ﻣﺮﻏـﻮﺏ ﻓﻴﻬـﺎ‪ .‬ﻭﺑﻌـﺪ ﺃﻥ ﺗﻜﺘﻤـﻞ ﻟـﺪﻳﻨﺎ ﺍﻟﺠـﺪﺍﻭﻝ‬
‫ﻧﺴﺘﻄﻴﻊ ﺍﻻﺳﺘﻌﻼﻡ ﻋﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺪﺧﻠﺔ ﻭﺫﻟﻚ ﺑﺎﻷﻣﺮ )‪. (SELECT‬‬
‫ﻣﻤﺎ ﺳﺒﻖ ﻳﻤﻜﻨﻨﺎ ﺗﻘﺴﻴﻢ ﺃﻭﺍﻣﺮ ‪ SQL‬ﺇﻟﻰ ﺛﻼﺛﺔ ﺃﻗﺴـﺎﻡ ‪،‬ﺣﻴـﺚﹸ ﺗﺸـﻜﻞ ﻛـﻞ ﻣﺠﻤﻮﻋـﺔ ﺃﻭﺍﻣـﺮ ﻟﻐـﺔ‬
‫ﻓﺮﻋﻴﺔ ﻣﻦ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻭﻫﻲ ﻛﺎﻟﺘﺎﻟﻲ ‪:‬‬
‫‪-: (DDL) Data Definition Language‬‬ ‫‪ -١‬‬
‫ﻭﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺛﻼﺙ ﺃﻭﺍﻣﺮ ﻭﻫﻲ ‪:‬‬
‫ﻳﺴﺘﺨﺪﻡ ﻹﻧﺸﺎﺀ ﺍﻟﺠﺪﺍﻭﻝ ) ‪.( CREATE TABLE‬‬
‫ﻳﺴﺘﺨﺪﻡ ﻟﻠﺘﻌﺪﻳﻞ ﻋﻠﻰ ﺟﺪﻭﻝ ﻣﻨﺸﺄ ﺳﺎﺑﻘﺎﹰ ) ‪.( ALTER TABLE‬‬
‫ﻳﺴﺘﺨﺪﻡ ﻟﺤﺬﻑ ﺟﺪﻭﻝ ﻏﻴﺮ ﻣﺮﻏﻮﺏ ﻓﻴﻪ ) ‪.( DROP TABLE‬‬
‫ﺣﻴــﺚ ﻳﻘﺘﺼــﺮ ﻋﻤــﻞ ﻫــﺬﻩ ﺍﻷﻭﺍﻣــﺮ ﻋﻠــﻰ ﺍﻟﺠــﺪﺍﻭﻝ ﻭﺣﻘﻮﻟﻬــﺎ ﻓﻘــﻂ ﺩﻭﻥ ﺍﻟﺘﻌــﺮﺽ ﻟﻠﺒﻴﺎﻧــﺎﺕ ﺍﻟﺘــﻲ‬
‫ﺑﺪﺍﺧﻞ ﺍﻟﺠﺪﺍﻭﻝ ‪.‬‬
‫‪-: (DML) Data Manipulation Language  -٢‬‬
‫ﻭﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺃﺭﺑﻊ ﺃﻭﺍﻣﺮ ﻭﻫﻲ ‪:‬‬
‫ﺃﻣﺮ ﺇﺩﺧﺎﻝ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺇﻟﻰ ﺍﻟﺠﺪﻭﻝ ) ‪.( INSERT INTO‬‬
‫ﺃﻣﺮ ﺍﻟﺘﻌﺪﻳﻞ ﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺠﺪﻭﻝ ) ‪. ( UPDATE‬‬
‫ﺃﻣﺮ ﺣﺬﻑ ﺑﻴﺎﻧﺎﺕ ﻣﻦ ﺍﻟﺠﺪﻭﻝ ) ‪. ( DELETE‬‬
‫ﺃﻣﺮ ﺍﻻﺳﺘﻌﻼﻡ ﻋﻦ ﺷﻲﺀ ﻣﻌﻴﻦ ﻓﻲ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺠﺪﻭﻝ ) ‪. ( SELECT‬‬
‫ﻭﺗﻌﻤﻞ ﻫﺬﻩ ﺍﻷﻭﺍﻣـﺮ ﻋﻠـﻰ ﺍﻟﺒﻴﺎﻧـﺎﺕ ﺍﻟﺘـﻲ ﺑـﺪﺍﺧﻞ ﺍﻟﺠـﺪﺍﻭﻝ ﻭﺫﻟـﻚ ﻣـﻦ ﺇﺩﺧـﺎﻝ ﺑﻴﺎﻧـﺎﺕ ‪ ،‬ﻭﺗﻌـﺪﻳﻞ‬
‫ﺑﻴﺎﻧﺎﺕ ﻣﺪﺧﻠﻪ ‪ ،‬ﻭﺣﺬﻑ ﺑﻴﺎﻧﺎﺕ ﻣﺪﺧﻠﻪ ﻭﺍﻻﺳﺘﻌﻼﻡ ﻋﻦ ﺑﻴﺎﻧﺎﺕ ﻣﻌﻴﻨﻪ ‪.‬‬
‫‪-: (DCL) Data Control Language‬‬ ‫‪‬‬ ‫‪-٣‬‬
‫ﻭﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺃﻣﺮﻳﻦ ﺍﺛﻨﻴﻦ ﻫﻤﺎ ‪:‬‬
‫ﺃﻣﺮ ﺇﻋﻄﺎﺀ ﺍﻻﻣﺘﻴﺎﺯﺍﺕ ﻭﺍﻟﺼﻼﺣﻴﺎﺕ )‪. (GRANT‬‬
‫ﺃﻣﺮ ﻣﻨﺢ ﺍﻻﻣﺘﻴﺎﺯﺍﺕ ﻭﺍﻟﺼﻼﺣﻴﺎﺕ )‪. (REVOKE‬‬
‫ﻭﺳﻨﻘﻮﻡ ﺑﺪﺭﺍﺳﺔ ﻛﻞ ﺃﻣﺮ ﻋﻠﻰ ﺣﺪﻩ ﻭﺍﻟﺘﻌـﺮﻑ ﻋﻠـﻰ ﻭﻇﻴﻔﺘـﻪ ﻭﻛﻴﻔﻴـﺔ ﺍﻟﺘﻌﺎﻣـﻞ ﻣﻌـﻪ ﻭﻛﺘﺎﺑﺘـﻪ ﻓـﻲ‬
‫ﺩﺭﻭﺳﻨﺎ ﺍﻟﻘﺎﺩﻣﺔ ﺑﺈﺫﻥ ﺍﷲ ﺗﻌﺎﻟﻰ ‪..‬‬
‫‪ ‬‬
‫• ﺗﺘﻤﻴﺰ ﺃﻭﺭﺍﻛﻞ ﺑﺒﻤﻴﺰﺍﺕ ﻋﺎﻟﻴﺔ ﺗﻤﻴﺰﻫﺎ ﻋﻦ ﻏﻴﺮﻫﺎ ﻣﻦ ﻟﻐﺎﺕ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪.‬‬
‫• ﻟﻐﺔ ‪ SQL‬ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ ﻟﻐﺔ ﻏﻴﺮ ﺇﺟﺮﺍﺋﻴﺔ )‪، ( Non-Procedural Language‬ﻷﻧﻬـﺎ‬
‫ﺗﺘﻌﺎﻣـﻞ ﻣــﻊ ﻣﺠﻤﻮﻋـﺔ ﺳــﺠﻼﺕ ﻓـﻲ ﺍﻟﻮﻗــﺖ ﻧﻔﺴــﻪ ﻭﻟـﻴﺲ ﻣــﻊ ﺳـﺠﻞ ﻭﺣﻴــﺪ‪ ،‬ﻭﻫـﻲ ﻟﻐــﺔ ﺗﻌﻠﻴﻤــﺎﺕ‬
‫ﻟﻺﺗﺼﺎﻝ ﺑﻤﺨﺪﻡ ﺃﻭﺭﺍﻛﻞ ‪ Oracle Server‬ﻣﻦ ﺧﻼﻝ ﺃﻳﺔ ﺃﺩﺍﺓ ﺃﻭ ﺃﻱ ﺗﻄﺒﻴﻖ ‪..‬‬
‫• ‪ SQL*Plus‬ﻋﺒــﺎﺭﺓ ﻋــﻦ ﺃﺩﺍﺓ ﻣــﻦ ﺃﺩﻭﺍﺕ ﺃﻭﺭﺍﻛــﻞ ؛ ﻳﻤﻜﻨﻬــﺎ ﺍﻟﺘﻌــﺮﻑ ﻋﻠــﻰ ﺗﻌﻠﻴﻤــﺎﺕ ‪SQL‬‬
‫ﻭﺇﺭﺳﺎﻟﻬﺎ ﺇﻟﻰ ﻣﺨﺪﻡ ﺃﻭﺭﺍﻛﻞ ﻟﺘﻨﻔﻴﺬﻫﺎ ‪،‬ﻭﻫﻲ ﺗﻤﺘﻠﻚ ﺗﻌﻠﻴﻤﺎﺕ ﺇﺿﺎﻓﻴﺔ ﺧﺎﺻﺔ ﺑﻬﺎ‪.‬‬
‫• ﺗ‪‬ﻘﺴﻢ ﺃﻭﺍﻣﺮ ‪ SQL‬ﺇﻟﻰ ﺛﻼﺛﺔ ﺃﻗﺴﺎﻡ ‪:‬‬
‫‪ -١‬ﺃﻭﺍﻣﺮ ﺗﻌﺮﻳﻒ ﺍﻟﺒﻴﺎﻧﺎﺕ )‪. ( DDL‬‬
‫‪ -٢‬ﺃﻭﺍﻣﺮ ﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ )‪. ( DML‬‬
‫‪ -٣‬ﺃﻭﺍﻣﺮ ﺍﻟﺘﺤﻜﻢ ﺑﺎﻟﺒﻴﺎﻧﺎﺕ )‪.( DCL‬‬
‫ﻭﻓﻲ ﺍﻟﺪﺭﺱ ﺍﻟﻘﺎﺩﻡ ﺑﺈﺫﻥ ﺍﷲ ﺳﻨﺘﺤﺪﺙ ﻋﻦ ﻛﻴﻔﻴﺔ ﺍﻟﺪﺧﻮﻝ ﺇﻟﻰ ‪SQL * Plus 3.3‬‬
‫ﻭﺧﻄﻮﺍﺕ ﺇﻧﺸﺎﺀ ﻣﺴﺘﺨﺪﻡ ﺟﺪﻳﺪ ‪ ،‬ﻓﺈﻟﻰ ﻟﻘﺎﺀ ﻗﺮﻳﺐ ﺑﺈﺫﻥ ﺍﷲ ﺗﻌﺎﻟﻰ ‪.‬‬
‫ﻭﺳﺎﻣﺤﻮﻧﺎ ﻋﻠﻰ ﺍﻟﺘﻘﺼﻴﺮ ‪ ،‬ﻭﻓﻖ ﺍﷲ ﺍﻟﺠﻤﻴﻊ ﻟﻤﺎ ﻳﺤﺒﻪ ﻭﻳﺮﺿﺎﻩ ‪..‬‬
‫ﺍﻷﺳﻴــــــــــــــ ــــــــــــــــــــــﻒ‬

‫‪Email:[email protected]‬‬
‫ﺑﺴﻢ ﺍﷲ ﺍﻟﺮﺣﻤﻦ ﺍﻟﺮﺣﻴﻢ‬

‫ﺳﻠﺴﻠــﺔ ‪‬ﺗﻌﻠـــﻢ‬
‫‪‬‬

‫ﺑﺴﻬﻮﻟ‪‬ــ ـ ـﺔ‬
‫‪‬‬

‫‪SQL * Plus 3.3‬‬ ‫‪‬‬


‫‪‬‬
‫ﻋﺎﺩﺓﹰ ﺇﻥ ﻟﻢ ﻳﻜﻦ ﺩﺍﺋﻤﺎﹰ ﻣﺎ ﺗﺒﺪﺃ ﺩﺭﻭﺱ ‪ SQL‬ﺍﻟﺘﻲ ﻧﻘﺮﺃﻫﺎ ؛ ﺑﺸﺮﺡ ﺃﻭﺍﻣﺮ ﻟﻐﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪Data‬‬
‫‪ ، (DML) Manipulation Language‬ﻭﺑــﺎﻷﺧﺺ ﺗﻌﻠﻴﻤــﺔ ﺍﻹﺳــﺘﻌﻼﻡ ﻋــﻦ ﺍﻟﺒﻴﺎﻧــﺎﺕ ﻭ ﺍﺳﺘﻌﺮﺍﺿــﻬﺎ‬
‫‪.. Select‬ﻟﻜﻨﻨــﺎ ﻫﻨــﺎ ﻓــﻲ ﻫــﺬﻩ ﺍﻟﺴﻠﺴــﺔ ﺍﻟﻤﺘﻮﺍﺿــﻌﺔ ‪ ،‬ﻧــﻮﺩ ﺃﻥ ﻧﺨﻄــﻮﺍ ﻋﻠــﻰ ﻣﻨﻬــﺎﺝ ﺃﻭﺭﺍﻛــﻞ ﺑﻘــﺪﺭ‬
‫ﺍﻟﻤﺴﺘﻄﺎﻉ ‪ ،‬ﻓﻨﺒﺪﺃ ﺑﺸﺮﺡ ﻗﻮﺍﺋﻢ ﺍﻟﻠﻐﺔ ﻧﻔﺴﻬﺎ ﻭﺃﻭﺍﻣﺮ ﺍﻟﺘﺤﺮﻳﺮ ﻭﺍﻟﻤﻠﻔـﺎﺕ ﻓﻴﻬـﺎ ‪ ،‬ﺣﺘـﻰ ﻳﻜـﻮﻥ ﺍﻷﺳـﺎﺱ‬
‫ﻟﺪﻯ ﺍﻟﻤﺘﻌﻠﻢ ﻗﻮﻳﺎﹰ ﻭﻣﺘﻮﺍﻓﻘﺎﹰ ﻣﻊ ﻣﻨﻬﺠﻴﺔ ﺃﻭﺭﺍﻛﻞ ‪..‬‬
‫ﻟـﺬﻟﻚ ﺳﻨﺸـﺮﺡ ﻫـﺬﺍ ﺍﻷﺳـﺎﺱ ﻋﻠـﻰ ﺩﺭﺳـﻴﻦ ‪ ،‬ﺃﻭﻻﻫﻤـﺎ ﻧﺘﺤـﺪﺙ ﻓﻴـﻪ ﻋـﻦ ﻗـﻮﺍﺋﻢ ‪، SQL * Plus 3.3‬‬
‫ﻭﻛﻴﻔﺔ ﺇﻧﺸﺎﺀ ﻣﺴﺘﺨﺪﻡ ﺧﺎﺹ ﺑﺎﺳﻤﻨﺎ ‪ ،‬ﻭﻣﻨﺤـﻪ ﺻـﻼﺣﻴﺔ ﺍﻻﺗﺼـﺎﻝ ﺑﻘﺎﻋـﺪﺓ ﺍﻟﺒﻴﺎﻧـﺎﺕ ‪..‬ﻭﺛﺎﻧﻴﻬـﺎ ﻋـﻦ‬
‫ﺃﻭﺍﻣﺮ ﺍﻟﻘﻮﺍﺋﻢ ﺍﻟﺘﺤﺮﻳﺮ ﻭﺍﻟﻤﻠﻔﺎﺕ ﻓﻲ ‪.. SQL * Plus 3.3‬ﻭﻧﺒﺪﺃ ﻋﻠﻰ ﺑﺮﻛﺔ ﺍﷲ ‪..‬‬
‫‪-: SQL * Plus 3.3 ‬‬

‫ﻋﻨﺪ ﺗﺤﻤﻴﻠﻚ ﻟﻠﻐﺔ ‪ ،‬ﺳﺘﺠﺪ ﺃﻳﻘﻮﻧﺔ ﻓﻲ ﺳﻄﺢ ﺍﻟﻤﻜﺘﺐ ﺑﺎﺳﻢ ‪... SQL * Plus 3.3‬‬

‫ﻭﻋﻨﺪ ﺗﺸﻐﻴﻠﻚ ﻟﻬﺎ ﺗﻈﻬﺮ ﻟﻚ ﺷﺎﺷﺔ ﺗﻘـﻮﻡ ﺑﺴـﺆﺍﻟﻚ ﻋـﻦ ﺍﺳـﻢ ﺍﻟﻤﺴـﺘﺨﺪﻡ ‪ User name‬ﻭﻛﻠﻤـﺔ‬
‫ﺍﻟﻤــﺮﻭﺭ ‪ Password‬ﻭﺗﻌﺮﻳــﻒ ﺍﺳــﻢ ﻗﺎﻋــﺪﺓ ﺍﻟﺒﻴﺎﻧــﺎﺕ ‪ Database‬ﻓــﻲ ﺣــﺎﻝ ﻛﻨــﺖ ﺗﺴــﺘﺨﺪﻡ ﺍﻟﻨﺴــﺨﺔ‬
‫ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺸﺨﺼـﻲ ﻓﻴﻤﻜﻨـﻚ ﺍﺳـﺘﺨﺪﺍﻡ ﺍﺳـﻢ ﺍﻟﻤﺴـﺘﺨﺪﻡ ﻭﻛﻠﻤـﺔ ﺍﻟﻤـﺮﻭﺭ ﻓﻘـﻂ ﻓـﻲ‬
‫ﺣﺎﻝ ﻟﻢ ﻳﻜﻦ ﻟﺪﻳﻚ ﺃﻛﺜﺮ ﻣﻦ ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻮﺿﻊ ﺍﻻﻓﺘﺮﺍﺿﻲ ﻋﻨﺪ ﺗﺸﻐﻴﻠﻪ ﻷﻭﻝ ﻣﺮﺓ ﻫﻮ ﻛﺘﺎﺑﺔ‬
‫ﺍﺳﻢ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﻛﻠﻤﺔ ﺍﻟﻤﺮﻭﺭ ﻭﻟﻜﻦ ﻓﻲ ﺣﺎﻝ ﻛﻤﺒﻴﻮﺗﺮ ﺍﻟﺸﺒﻜﺔ ﻓﻤﻦ ﺍﻟﻤﺴﺘﺤﺴﻦ ﻛﺘﺎﺑـﺔ ﺍﺳـﻢ‬
‫ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ‪..‬ﻭﻳﻤﻜﻨﻚ ﺍﺧﺘﻴﺎﺭ ﺃﺣﺪ ﻫﺬﻩ ﺍﻷﺳﻤﺎﺀ ﻟﻠﻌﻤﻞ ﺑﻬﺎ ﺣﺘﻰ ﺗ‪‬ﻨﺸﺊ ﻣﺴـﺘﺨﺪﻡ ﺧـﺎﺹ ﺑـﻚ‬
‫‪..‬ﻛﻤﺎﻳﻠﻲ ‪:‬‬

‫* ﺍﻻﺳﻢ ﺍﻻﻭﻝ ‪ system‬؛ ﻭﻫﻮ ﻣﺎ ﻳﻤﺜﻞ ﺃﻭﺍﺭﻛﻞ ﺃﻭ ﺍﻟﻨﻈﺎﻡ ﺑﻤﻌﻨﻰ ﺃﺻﺢ ‪..‬ﻭﻫﻮ ﺍﻓﺘﺮﺍﺿﻲ ‪..‬‬

‫‪system‬‬

‫‪manager ‬‬
‫ﺃﻭ ﻣﻦ ﺧﻼﻝ ﺍﻻﺳﻢ ﺍﻟﺜﺎﻧﻲ ﻭﻫﻮ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻻﻓﺘﺮﺍﺿﻲ ‪.. scott‬‬

‫‪scott ‬‬
‫‪tiger ‬‬

‫ﻭﻛﻠﻤﺔ ﺍﻟﺴﺮ ﻫﺬﻩ ﻫﻲ ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﺑﻬﺎ ﻣﺪﻳﺮﺍﹰ ﻟﻘﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﺘـﻲ ﻳﻤﻜﻨـﻚ ﻋـﻦ ﻃﺮﻳﻘـﻪ ﺍﻟﺤﺼـﻮﻝ‬
‫ﻋﻠﻰ ﻛﺎﻓﺔ ﺍﻟﺴﻤﺎﺣﻴﺎﺕ ﻭﻳﻤﻜﻨﻚ ﻣﻦ ﺗﻌﺮﻳﻒ ﺣﺴﺎﺏ ﻣﺴﺘﺨﺪﻡ ﺟﺪﻳﺪ ﺧـﺎﺹ ﺑـﻚ ‪..‬ﻛﻤـﺎ ﺗﺴـﺘﺨﺪﻡ‬
‫ﺗﺴــﺘﺨﺪﻡ ﻹﻋﻄﺎﺋــﻚ ﺑﻌــﺾ ﺍﻟﺴــﻤﺎﺣﻴﺎﺕ )ﺍﻟﺼــﻼﺣﻴﺎﺕ( ﻣﺜــﻞ ﺍﻻﺗﺼــﺎﻝ ﻭﺍﻹﺿــﺎﻓﺔ ﻭﺍﻟﺤــﺬﻑ ﻭﺍﻟﺘﻌــﺪﻳﻞ‬
‫ﻭﺍﻻﺳﺘﻌﻼﻡ ‪..‬ﻭﺍﻵﻥ ﺳﻨﺘﻠﻢ ﻛﻴﻔﻴﺔ ﺇﻧﺸﺎﺀ ﻣﺴﺘﺨﺪﻡ ﺧﺎﺹ ﺑﻚ ‪..‬‬

‫‪ ‬‬
‫ﻋﺮﻓﻨﺎ ﺳـﺎﺑﻘﺎﹰ ﺃﻥ ﻟﻐـﺔ ‪ DCL‬ﻫـﻲ ﺍﻟﻤﺴـﺆﻭﻟﺔ ﻋـﻦ ﺫﻟـﻚ ﺑﺎﺳـﺘﺨﺪﺍﻡ ﺍﻻﻣـﺮﻳﻦ ‪ grant‬ﻭ ‪، revoke‬ﻭﺣﺘـﻰ‬
‫ﻧﺴﺘﻄﻴﻊ ﺍﻧﺸﺎﺀ ﻣﺴـﺘﺨﺪﻡ ﺟﺪﻳـﺪ ‪ ،‬ﺳـﻨﺤﺘﺎﺝ ﺣﺎﻟﻴـﺎﹰ ﻟﻸﻣـﺮ ‪ ، grant‬ﻭﻓـﻲ ﺩﺭﻭﺱٍ ﻣﺘﻘﺪﻣـﺔ ﺇﻥ ﺷـﺎﺀ ﺍﷲ ؛‬
‫ﺳﻨﺘﺘﺨﺪﻡ ﺍﻷﻣﺮ ‪ revoke‬ﻹﻋﻄﺎﺀ ﺻﻼﺣﻴﺎﺕ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻟﻪ ‪..‬ﻭﻓﻴﻤﺎ ﻳﻠﻲ ﺧﻄﻮﺍﺕ ﺇﻧﺸﺎﺀ ﻣﺴﺘﺨﺪﻡ ﺟﺪﻳﺪ‬
‫ﻭﻣﻨﺤﻪ ﺑﻌﺾ ﺍﻟﺼﻼﺣﻴﺎﺕ ﻭﺍﻻﻣﺘﻴﺎﺯﺍﺕ ‪ ،‬ﻟﻜﻦ ﻟﻦ ﺗﺘﻘﻦ ﻫﺬﻩ ﺍﻟﺨﻄـﻮﺍﺕ ﺃﺧـﻲ ﺍﻟﻔﺎﺿـﻞ ؛ ﺣﺘـﻰ ﺗﻄﺒﻘﻬـﺎ‬
‫ﺣﺮﻓﻴﺎﹰ ‪ ،‬ﻭﺧﻄﻮﺓ ﺧﻄﻮﺓ ﻣﻊ ﺑﻌﻀﻨﺎ ﺍﻟﺒﻌﺾ ‪..‬‬
‫‪ -١‬ﻧﺒﺪﺃ ﺑﻜﺘﺎﺑﺔ ﺍﻷﻣﺮ ﺍﻟﺘﺎﻟﻲ ‪ ..‬ﻭﻟﻴﻜﻦ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺬﻱ ﻧﺮﻳﺪ ﺍﻧﺸﺎﺀﻩ ﻫﻮ ‪ ali :‬ﺑﻜﻠﻤﺔ ﺍﻟﺴﺮ‬
‫‪).. aaa‬ﻃﺒﻌﺄﹰ ﻛﻞ ﻭﺍﺣﺪ ﻳ‪‬ﻨﺸﻰﺀ ﻣﺴﺘﺨﺪﻡ ﺑﺎﺳﻤﻪ ‪ ،‬ﻭﻛﻠﻤﺔ ﺳﺮ ﺳﻬﻠﺔ ‪ ،‬ﺣﺘﻰ ﻻ ﻳﻨﺴﺎﻫﺎ ( ‪..‬‬
‫; ‪SQL> create user ali identified by aaa‬‬

‫ﻭﻣﻌﻨﺎﻩ ‪ :‬ﺃﻧﺸﺊ ﻣﺴﺘﺨﺪﻡ ﺑﺎﻹﺳﻢ ‪ ، ali‬ﻳﻜﻮﻥ ﻣﻌﺮﻓﺎﹰ ﺑﻜﻠﻤﺔ ﺍﻟﺴﺮ ‪.. aaa :‬‬
‫ﻭﻟﻜﻦ ﺳﺘﻈﻬﺮ ﻟﻚ ﺭﺳﺎﻟﺔ ﺍﻟﺨﻄﺄ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬‬
‫‪ERROR at line 1 :‬‬
‫ﺻﻼﺣﻴﺎﺕ ﻏﻴﺮ ﻛﺎﻓﻴﺔ‪ORA-01031 :‬‬

‫ﻭﻣﻔﺎﺩ ﻫﺬﻩ ﺍﻟﺮﺳﺎﻟﺔ ‪ :‬ﺃﻧﻚ ﻟﻴﺴﺖ ﻟﺪﻳﻚ ﺃﻱ ﺻﻼﺣﻴﺔ ﺣﺘﻰ ﺗ‪‬ﻨﺸﺊ ﻣﺴﺘﺨﺪﻡ ﺟﺪﻳﺪ ‪ ،‬ﻭﺍﻟﺴﺒﺐ ﻫﻮ‬
‫ﻋﺪﻡ ﺍﺗﺼﺎﻟﻚ ﺑﺄﻭﺭﺍﻛﻞ ‪ ،‬ﺃﻭ ﺑﻤﻌﻨﻰ ﺃﺻﺢ ﺑﺎﻟﻨﻈﺎﻡ ‪..‬ﻓﻴﺠﺐ‪ ‬ﺍﻻﺗﺼﺎﻝ ﺑﺎﻟﻨﻈﺎﻡ ‪..‬‬

‫‪ -٢‬ﻳﻜﻮﻥ ﺍﻻﺗﺼﺎﻝ ﺑﺎﻟﻨﻈﺎﻡ ‪ system‬ﻣﻦ ﺧﻼﻝ ﺍﻷﻣﺮ ‪..‬‬


‫‪SQL> connect system‬‬
‫ﻭﻛﺬﻟﻚ ﻋﻨﺪﻣﺎ ﺗﺮﻳﺪ ﺃﻥ ﺗﺘﺼﻞ ﺑﺄﻱ ﻣﺴﺘﺨﺪﻡ‪..‬‬
‫ﺍﺳﻢ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪SQL> connect‬‬
‫ﺑﺪﻭﻥ ﻓﺎﺻﻠﺔ ﻣﻨﻘﻮﻃﺔ ‪ ،‬ﻭﺑﻤﺠﺮﺩ ﺍﻟﻀﻐﻂ ﻋﻠﻰ ﻣﻔﺘﺎﺡ ﺍﻻﺩﺧﺎﻝ )‪ ( Enter‬ﻳﻈﻬﺮ ﻟﻨﺎ ﺍﻟﺴﻄﺮ ﺍﻟﺘﺎﻟﻲ ‪،‬‬
‫ﻃﺎﻟﺒﺎﹰ ﻣﻨﺎ ﺍﺩﺧﺎﻝ ﻛﻠﻤﺔ ﺍﻟﺴﺮ ) ‪.. ( password‬‬

‫‪Enter password‬‬ ‫ﻫﻨﺎ ﻧﺪﺧﻞ ﻛﻠﻤﺔ ﺍﻟﺴﺮ ‪:‬‬


‫ﻓﻨﺪﺧﻞ ﻟﻪ ﻛﻠﻤﺔ ﺍﻟﺴﺮ ﺍﻟﺨﺎﺻﺔ ﺑـ ‪ system‬ﻭﻫﻲ ‪ manager‬ﻛﻤﺎﻳﻠﻲ ‪..‬‬
‫******* ‪Enter password :‬‬
‫ﻓﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬‬
‫‪Connected .‬‬

‫ﻭﺍﻟﺘﻲ ﺗﺪﻝ ﻋﻠﻰ ﺃﻧﻨﺎ ﺍﺗﺼﻠﻨﺎ ﺑﺎﻟﻨﻈﺎﻡ ‪ ،‬ﻭﻳﻤﻜﻨﻨﺎ ﺇﺟﺮﺍﺀ ﻣﺎﻧﺮﻳﺪﻩ ﻣﻦ ﻋﻤﻠﻴﺎﺕ ‪..‬‬
‫‪ -٣‬ﻧﻌﻴﺪ ﻛﺘﺎﺑﺔ ﺃﻣﺮ ﺇﻧﺸﺎﺀ ﻣﺴﺘﺨﺪﻡ ﺟﺪﻳﺪ ‪..‬‬
‫; ‪SQL> create user ali identified by aaa‬‬
‫ﻓﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ﻭﺍﻟﺘﻲ ﺗﺨﺒﺮﻧﺎ ﺃﻧﻪ ﺗﻢ ﺇﻧﺸﺎﺀ ﻣﺴﺘﺨﺪﻡ ‪..‬‬
‫‪User created.‬‬

‫ﻭﺍﻵﻥ ﻧﻌﻄﻲ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪ ali‬ﺻﻼﺣﻴﺔ ﺍﻻﺗﺼﺎﻝ ﺑﺎﻟﻨﻈﺎﻡ ‪ ،‬ﻣﻦ ﺧﻼﻝ ﺍﻷﻣﺮ ‪.. grant‬‬
‫;‪SQL> grant connect to ali‬‬
‫ﻭﻣﻌﻨﺎﻫﺎ ﺍﻋﻄﻲ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪ ali‬ﺣﻖ ﺍﻻﺗﺼﺎﻝ ﺑﺎﻟﻨﻈﺎﻡ ‪..‬‬
‫ﻓﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﺮﺳﺎﻟﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬‬
‫‪Grant succeeded.‬‬
‫ﻭﻫﻲ ﺗﺨﺒﺮﻧﺎ ‪ ،‬ﺃﻧﻪ ﺗﻢ ﺍﻋﻄﺎﺀ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪ ali‬ﺣﻖ ﺍﻻﺗﺼﺎﻝ ﺑﺎﻟﻨﻈﺎﻡ ‪..‬‬
‫ﻭﺑﺬﻟﻚ ﻧﻜﻮﻥ ﺍﺳﺘﻄﻌﻨﺎ ﺇﻧﺸﺎﺀ ﻣﺴﺘﺨﺪﻡ ‪ ،‬ﺑﻜﻠﻤﺔ ﺳﺮٍ ﻣﻌﻴﻨـﺔ ‪ ،‬ﻭﺇﻋﻄﺎﺋـﻪ ﺣـﻖ ﺍﻹﺗﺼـﺎﻝ ﺑﺎﻟﻨﻈـﺎﻡ ‪،‬‬
‫ﻭﺑﻘﻲ ﺃﻥ ﺗﺠﺮﺏ ﻫﺬﻩ ﺍﻟﺼﻼﺣﻴﺔ ‪..‬ﻛﻤﺎﻳﻠﻲ ‪..‬‬
‫ﻗﻢ ﺑﺎﻟﺨﺮﻭﺝ ﻧﻬﺎﺋﻴﺎﹰ ﻣﻦ ‪ ، SQL‬ﺛﻢ ﺍﺩﺧﻞ ﻣﺮﺓ ﺃﺧـﺮﻯ ‪ ،‬ﻭﻋﻨـﺪ ﻇﻬـﻮﺭ ﺷﺎﺷـﺔ ﺍﻟـﺪﺧﻮﻝ ﻗـﻢ ﺑﺎﺩﺧـﺎﻝ ﺍﺳـﻢ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺬﻱ ﺃﻧﺸﺄﺗﻪ ﻣﺘﺒﻮﻋﺎ ﺑـ ‪ /‬ﺛﻢ ﻛﻠﻤﺔ ﺍﻟﺴﺮ ‪ ،‬ﺃﻭ ﺗﻜﺘـﺐ ﻛﻠﻤـﺔ ﺍﻟﺴـﺮ ﻓـﻲ ﺍﻟﺨﺎﻧـﺔ ﺍﻟﺜﺎﻧﻴـﺔ‬
‫‪..‬ﻛﻠﻬﺎ ﺻﺤﻴﺤﺔ ‪..‬ﺛﻢ ﺍﺿﻐﻂ ﻋﻠﻰ ﺯﺭ ‪.. OK‬ﻋﻨﺪ ﺫﻟﻚ ﺗﺪﺧﻞ ﺇﻟﻰ ﺍﻟﻨﻈﺎﻡ ‪..‬‬

‫‪‬‬
‫ﻓﻲ ﺣﺎﻟﺔ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﺍﺳﻢ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺧﺎﻃﺌﺎﹰ ‪ ،‬ﺃﻭ ﻛﺎﻧﺖ ﻛﻠﻤﺔ ﺍﻟﺴﺮ ﺧﺎﻃﺌﺔ ﺳﺘﺪﺧﻞ ﺇﻟﻰ ﺑﻴﺌﺔ‬
‫‪ ، SQL * Plus 3.3‬ﻭﻟﻜﻦ ﺳ‪‬ﺘﻄﺎﻟﺐ ﺑﺈﺩﺧﺎﻝ ﺍﺳﻢ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﻛﻠﻤﺔ ﺍﻟﺴﺮ ‪..‬‬

‫‪ ‬‬
‫• ﻋﻨﺪ ﺍﻟﺪﺧﻮﻝ ﺇﻟﻰ )‪ (SQL * Plus 3.3‬ﻧﺪﺧﻞ ﺍﺳﻢ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪ ،‬ﻭﻛﻠﻤﺔ ﺍﻟﺴﺮ ‪ ،‬ﻣﺠﻤﻮﻋﺔ‬
‫ﺍﻟﻌﻤﻞ ﻓﻲ ﺍﻟﺸﺒﻜﺔ ﺇﻥ ﻛﺎﻧﺖ ﻣﻮﺟﻮﺩﺓ ‪..‬‬
‫• ﻳﻮﺟﺪ ﻓﻲ ﺑﻴﺌﺔ )‪(SQL * Plus 3.3‬ﻣﺴﺘﺨﺪﻣﻴﻦ ﺍﻓﺘﺮﺍﻓﻀﻴﻦ ﻫﻤﺎ ‪ system :‬ﺑﻜﻠﻤﺔ ﺍﻟﺴﺮ‬
‫‪ manager :‬ﻭ ‪ scott‬ﺑﻜﻠﻤﺔ ﺍﻟﺴﺮ ‪..tiger :‬‬
‫• ﺻﻴﻐﺔ ﺇﻧﺸﺎﺀ ﻣﺴﺘﺨﺪﻡ ﻓﻲ ﺑﻴﺌﺔ )‪ (SQL * Plus 3.3‬ﻫﻲ ‪:‬‬
‫; ‪SQL> create user name user identified by password‬‬
‫ﺣﻴﺚﹸ ‪ name user‬ﺍﺳﻢ ﻟﻠﻤﺴﺘﺨﺪﻡ ‪ ،‬ﻭ ‪ password‬ﻛﻠﻤﺔ ﺍﻟﺴﺮ ﺍﻟﺨﺎﺻﺔ ﺑﻪ ‪.‬‬
‫• ﻻﻳ‪‬ﺴﻤﺢ ﺑﺈﻧﺸﺎﺀ ﻣﺴﺘﺨﺪﻡ ﻭﻣﻨﺤﻪ ﺻﻼﺣﻴﺎﺕ ﺇﻻ ﺑﻌﺪ ﺍﻻﺗﺼﺎﻝ ﺑﺎﻟﻨﻈﺎﻡ ‪ ،‬ﻭﻳﻜﻮﻥﹸ ﺍﻻﺗﺼﺎﻝ‬
‫ﺑﺎﻟﻨﻈﺎﻡ ﻭ ﺑﺄﻱ ﻣﺴﺘﺨﺪﻡ ﺑﺎﻟﺼﻴﻐﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬‬

‫ﺍﺳﻢ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪SQL> connect‬‬


‫• ﻹﻋﻄﺎﺀ ﺻﻼﺣﻴﺔ ﺍﻻﺗﺼﺎﻝ ﻟﻤﺴﺘﺨﺪﻡ ‪ ،‬ﻧﺴﺘﺨﺪﻡ ﺍﻟﺼﻴﻐﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪.‬‬
‫; ‪SQL> grant connect to name user‬‬
‫ﺣﻴﺚﹸ ‪ name user‬ﺍﺳﻢ ﻟﻠﻤﺴﺘﺨﺪﻡ ‪..‬‬
‫****************************************************************************************************‬
‫ﻭﻓﻲ ﺍﻟﺪﺭﺱِ ﺍﻟﻘﺎﺩﻡ ﺑﺈﺫﻥ ﺍﷲ ﺳﻨﺘﺤﺪﺙ ﻋﻦ ﺃﻭﺍﻣﺮ ﺍﻟﻘﻮﺍﺋﻢ ﻭ ﺍﻟﺘﺤﺮﻳﺮ ﻭﺍﻟﻤﻠﻔﺎﺕ ﻓﻲ ﺑﻴﺌﺔ‬
‫‪ ،SQL * Plus 3.3‬ﻓﺈﻟﻰ ﻟﻘﺎﺀ ﻗﺮﻳﺐ ﺑﺈﺫﻥ ﺍﷲ ﺗﻌﺎﻟﻰ ‪.‬ﻭﺳﺎﻣﺤﻮﻧﺎ ﻋﻠﻰ ﺍﻟﺘﻘﺼﻴﺮ ‪ ،‬ﻭﻓﻖ ﺍﷲ ﺍﻟﺠﻤﻴﻊ‬
‫ﻟﻤﺎ ﻳﺤﺒﻪ ﻭﻳﺮﺿﺎﻩ ‪..‬‬
‫ﺍﻷﺳﻴـــــــــــ ـــــــــــــــــــــــــﻒ‬

‫‪Email:[email protected]‬‬
‫ﺑﺴﻢ ﺍﷲ ﺍﻟﺮﺣﻤﻦ ﺍﻟﺮﺣﻴﻢ‬

‫ﺳﻠﺴﻠــﺔ ‪‬ﺗﻌﻠـــﻢ‬
‫‪‬‬

‫ﺑﺴﻬﻮﻟ‪‬ــ ـ ـﺔ‬
‫‪‬‬

‫‪SQL * Plus 3.3‬‬ ‫‪‬‬


‫‪‬‬ ‫‪‬‬
‫‪ 3.3‬‬
‫ﺳﻨﺸﺮﺡ‪ ‬ﻓﻲ ﻫﺬﺍ ﺍﻟﺪﺭﺱ ﺑﺈﺫﻥ ﺍﷲ ؛ ﺃﻭﺍﻣﺮ ﺍﻟﺘﺤﺮﻳﺮ ﻭﺍﻟﻤﻠﻔﺎﺕ ﻓﻲ ﺑﻴﺌﺔ ‪.. SQL * Plus 3.3‬‬

‫‪ ‬‬
‫ﻳﻤﻜﻨﻚ ﺑﻌﺪ ﻛﺘﺎﺑﺔ ﺃﻭﺍﻣﺮ ‪ ، SQL‬ﺇﺟﺮﺍﺀ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﺤﺮﻳﺮ ﻋﻠﻴﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺃﻭﺍﻣﺮ ‪SQL * Plus‬‬
‫‪ ، 3.3‬ﻭﺳﻨﻘﻮﻡ ﺍﻵﻥ ﺑﺸﺮﺡ ﻫﺬﻩ ﺍﻷﻭﺍﻣﺮ ﻣﻊ ﺇﻋﻄﺎﺀ ﺍﻷﻣﺜﻠﺔ ﺍﻟﻤﻮﺿﺤﺔ ‪:‬‬

‫• ‪ Append ‬‬
‫ﺇﻥ ﺍﻟﺸﻜﻞ ﺍﻟﻌﺎﻡ ﻟﻠﺘﻌﻠﻴﻤﺔ ﻫﻮ ‪..‬‬
‫ﻣﺎﺳﻨﻀﻴﻔﻪ ‪sql>A‬‬

‫‪sql>select ename from‬‬ ‫ﻓﻤﺜﻼﹰ ‪ :‬ﻟﺪﻳﻨﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪:‬‬


‫ﻭﺃﺭﺩﻧﺎ ﻛﺘﺎﺑﺔ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪ emp‬ﺑﻌﺪ ‪ from‬ﻧﻜﺘﺐ ‪:‬‬
‫; ‪Sql>A emp‬‬
‫ﻭﻫﻨﺎ ﺗﺼﺒﺢ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ‪:‬‬
‫; ‪sql>select ename from emp‬‬

‫• ‪ Change‬‬
‫ﻳﺴﻤﺢ ﻫﺬﺍ ﺍﻷﻣﺮ ﺑﺘﻐﻴﻴﺮ ﻛﻠﻤﺔٍ ﻣﺎ ﺿﻤﻦ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺑﻜﻠﻤﺔ ﺃﺧﺮﻯ ‪ ،‬ﻭﻧﺴﺘﻔﻴﺪ ﻣﻦ ﻫﺬﺍ ﺍﻷﻣﺮ ﻋﻨﺪ‬
‫ﻛﺘﺎﺑﺔ ﺍﺳﻢ ﺟﺪﻭﻝ ﺃﻭ ﺣﻘﻞ ﺑﺎﻟﺨﻄـﺄ ‪ ،‬ﻭﺫﻟـﻚ ﻷﻧﻨـﺎ ﻓـﻲ ﺑﻴﺌـﺔ ‪ SQL * Plus 3.3‬ﻻﻧﺴـﺘﻄﻴﻊ‬
‫ﺍﻟﺮﺟﻮﻉ ﺇﻟﻰ ﺍﻟﺴﻄﺮ ﺍﻟﺴﺎﺑﻖ ﻓﻲ ﺣﺎﻟﺔ ﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪..‬‬
‫ﺇﻥ ﺍﻟﺸﻜﻞ ﺍﻟﻌﺎﻡ ﻟﻠﺘﻌﻠﻴﻤﺔ ﻫﻮ ‪..‬‬
‫‪sql> C / old /new‬‬
‫ﻭﻫﺬﺍ ﻫﻮ ﺍﻟﺸﻜﻞ ﺍﻟﻘﻴﺎﺳﻲ ﻟﻬﺎ ‪..‬ﺣﻴﺚﹸ ‪ old‬ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤ‪‬ﺮﺍﺩ ﺍﺳﺘﺒﺪﺍﻟﻬﺎ ‪ ،‬ﻭ ‪ new‬ﺍﻟﻜﻠﻤﺔ ﺍﻟﺠﺪﻳﺪﺓ ‪.‬‬
‫ﻓﺈﺫﺍ ﻛﺎﻧﺖ ﻟﺪﻳﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻳﺔ ‪:‬‬
‫‪sql>select enamee from emp dept‬‬

‫ﻭﺃﺭﺩﻧﺎ ﺗﻐﻴﻴﺮ ﻛﻠﻤﺔ ‪ enamee‬ﺇﻟﻰ ‪ ename‬ﻧﻜﺘﺐ‪ ‬ﺍﻷﻣﺮ ‪:‬‬


‫‪sql> c / enamee / ename‬‬
‫ﻭﻫﻨﺎﻙ ﺻﻴﻐﺔ ﺛﺎﻧﻴﺔ ‪ ،‬ﻋﻨﺪﻣﺎ ﻧﺮﻳﺪ ﺣﺬﻑ ﻧﺺ ﻣﺎ ‪ ،‬ﻭﺫﻟﻚ ﺑﻜﺘﺎﺑﺔ ﺍﻷﻣﺮ ‪:‬‬
‫‪sql>C[HANGE] / text /‬‬

‫ﻣﺜﻼﹰ ﻟﺘﻜﻦ ﻟﺪﻳﻨﺎ ﻣﺜﻼﹰ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪:‬‬


‫; ‪sql>select ename from emp dept‬‬
‫ﻓﺈﺫﺍ ﺃﺭﺩﻧﺎ ﺣﺬﻑ ﻛﻠﻤﺔ ‪ dept‬ﻧﻜﺘﺐ ‪:‬‬
‫‪sql> c / dept /‬‬
‫* ﻻﺣﻆ ﺃﻧﻨﺎﻟﻢ ﻧﻜﺘﺐ ﺷﻲﺀ ﺑﻌﺪ ﺍﻟـ ‪ /‬ﺍﻟﺜﺎﻧﻴﺔ ﻻ ﺳﺘﺒﺪﺍﻟﻬﺎ ﺑﺎﻟﻤﺤﺬﻭﻑ ﻷﻧﻨﺎ ﻧﺮﻳﺪ ﺍﻟﺤﺬﻑ ﻓﻘﻂ ‪،‬‬
‫ﻓﺘﺼﺒﺢ ﺍﻟﻌﺒﺎﺭﺓ ﺑﻌﺪ ﺍﻟﺤﺬﻑ ‪:‬‬
‫; ‪sql>select ename from emp‬‬

‫• ‪Clear buffer SQL‬‬


‫ﻛﻤﺎ ﺫﻛﺮﻧﺎ ﻓﻲ ﺩﺭﺳﻨﺎ ﺍﻟﺴﺎﺑﻖ ﻓﺈﻧﻪ ﻳﺘﻢ ﺗﺨﺰﻳﻦ ﺃﻱ ﺗﻌﻠﻴﻤﺔ ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ‪ SQL‬ﻓﻲ ﺫﺍﻛﺮﺓ ﻣﺆﻗﺘﺔ‬
‫ﺗﺴﻤﻰ ﺩﺍﺭﺉ ‪ ، SQL buffer‬ﻭﻳﻜﻤﻨﻨﺎ ﻣﺴﺢ‪ ‬ﻫﺬﻩ ﺍﻟﺬﺍﺭﻛﺔ ﺑﻜﺘﺎﺑﺔ ﺍﻷﻣﺮ ‪:‬‬

‫;)‪sql>clear buffer (cl buff‬‬


‫ﻭﺍﺧﺘﺼﺎﺭﺍﹰ ﻟﻸﻣﺮ ﻧﻜﺘﺐ ﻣﺎﺑﺪﺍﺧﻞ ﺍﻟﻘﻮﺱ ﻓﻘﻂ ‪ ،‬ﻓﻤﺜﻼﹰ ﻟﺘﻜﻦ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪:‬‬
‫; ‪sql>select * from tab‬‬
‫ﻫﺬﺍ ﺍﻷﻣﺮ ﻳﻘﻮﻡ ﺑﺎﺳﺘﻌﺮﺍﺽ ﺃﺳﻤﺎﺀ ﺟﻤﻴﻊ ﺍﻟﺠﺪﻭﺍﻝ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪..‬ﻭﻧﺎﺗﺞ ﻫﺬﺍ‬
‫ﺍﻷﻣﺮ ‪ ،‬ﺍﻟﺬﻱ ﻫﻮ ﺃﺳﻤﺎﺀ ﺍﻟﺠﺪﻭﺍﻝ ‪ ،‬ﺳﻴﻈﻬﺮ ﻋﻠﻰ ﺍﻟﺸﺎﺓ ﻭﻳ‪‬ﺨﺰﻥ ﻣﺆﻗﺘﺎﹰ ﻓﻲ ‪.. SQL buffer‬ﻓﺈﺫﺍ ﺃﺭﺩﻧﺎ‬
‫ﻣﺴﺢ ﻫﺬﻩ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺨﺰﻧﺔ ﻧﻜﺘﺐ ‪..‬‬
‫; ‪SQL> cl buff‬‬
‫ﻓﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻳﺔ ﻭﺍﻟﺘﻲ ﺗﺨﺒﺮﻧﺎ ﺑﻤﺴﺢ ﻫﺬﻩ ﺍﻟﺬﺍﻛﺮﺓ ‪:‬‬
‫‪buffer cleared‬‬
‫ﻓﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﺮﺳﺎﻟﺔ‬.. shift +Delete ‫ﻭﻳﻤﻜﻦ ﺍﺧﺘﺼﺎﺭ ﻫﺬﺍ ﺍﻷﻣﺮ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻰ ﻣﻔﺘﺎﺣﻲ‬ E
.. ‫ﺍﻟﺘﺎﻟﻴﺔ‬

 

 

Save  •
.. ‫ ﺍﻟﻤﺆﻗﺘﺔ ﻓﻲ ﻣﻠﻒ ﺑﻜﺘﺎﺑﺔ ﺍﻷﻣﺮ‬SQL ‫ﻳﻤﻜﻦ ﺣﻔﻆ ﻣﺤﺘﻮﻯ ﺫﺍﻛﺮﺓ‬
sql>sav filename.sql

 sql‫ ﻭﻳﻠﺰﻡ ﺑﺎﻹﻣﺘﺪﺍﺩ‬، ‫ﺍﺳﻢ ﺍﻟﻤﻠﻒ ﺍﻟﻤﺮﺍﺩ ﺍﻟﺤﻔﻆ ﺑﻪ‬filename.sql ‫ﺣﻴﺚﹸ‬ E


SCOOT ‫ ﻭﻟﻜﻦ ﻟﻠﻤﺴﺘﺨﺪﻡ‬، ‫ ﻟﻮ ﺍﺳﺘﻌﺮﺿﻨﺎ ﺟﻤﻴﻊ ﺍﻟﺠﺪﻭﺍﻝ ﺍﻟﻤﻮﺟﻮﺩ ﺓ ﻓﻲ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ‬: ‫ﻓﻤﺜﻼﹰ‬
.. ‫ﺳﻨﺠﺪ ﺍﻟﻨﺘﺠﺔ ﺍﻟﺘﺎﻟﻴﺔ‬.. tiger ‫ﺑﻜﻠﻤﺔ ﺍﻟﺴﺮ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ‬
SQL> select * from tab ;

TNAME TABTYPE CLUSTERID


--------- ------- ------------------------------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
SECTION TABLE
STUDENT TABLE

6 rows selected ;
: ‫ﻧﻜﺘﺐ ﺍﻷﻣﺮ ﺍﻟﺘﺎﻟﻲ‬.. ‫ ﻭﻣﺎ ﺳﺘﺠﻠﺒﻪ ﻣﻦ ﻧﺘﺎﺋﺞ‬Select ‫ﻭﺃﺭﺩﻧﺎ ﺣﻔﻆ ﻫﺬﻩ ﺗﻌﻠﻴﻤﺔ‬

sql>sav ali.sql ;
‫ﻓﺴﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬‬
‫‪Created file ali.sql‬‬

‫‪‬‬
‫ﻭﺍﻟﺘﻲ ﺗﺨﺒﺮﻧﺎ ﺃﻧﻪ ﺗﻢ ﺣﻔﻆ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺑﻤﻠﻒ ﺍﺳﻤﻪ ‪... ali.sql‬‬
‫‪‬‬
‫ﻭﺳﻨﺘﺄﻛﺪ ﻣﻦ ﻧﺠﺎﺡ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ،‬ﻋﻨﺪﻣﺎ ﻧﺠﻠﺐ ﺍﻟﻤﻠﻒ ﺍﻟﺬﻱ ﺣﻔﻈﻨﺎﻩ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬‬

‫• ‪Get ‬‬
‫ﻳﺴﺘﺪﻋﻲ ﻫﺬﺍ ﺍﻷﻣﺮ ﻣﺤﺘﻮﻯ ﺁﺧﺮ ﻣﻠﻒ ﺗﻢ ﺣﻔﻈﻪ ﺿﻤﻦ ﺫﺍﻛﺮﺓ‪ SQL ‬ﺍﻟﻤﺆﻗﺘﺔ ‪..‬ﻭﺍﻟﺸﻜﻞ ﺍﻟﻌﺎﻡ ﻟﻬﺬﺍ‬
‫ﺍﻷﻣﺮ ‪ ..‬‬
‫‪sql>get filename.sql‬‬
‫ﺣﻴﺚﹸ ‪filename.sql‬ﺍﺳﻢ ﺁﺧﺮ ﻣﻠﻒ ﺗﻢ ﺣﻔﻈﻪ ﺿﻤﻦ ﺫﺍﻛﺮﺓ‪ SQL ‬ﺍﻟﻤﺆﻗﺘﺔ‪ ‬‬
‫ﻭﻟﻨﻘﻢ ﺍﻵﻥ ﺑﺠﻠﺐ ﺍﻟﻤﻠﻒ ﺍﻟﺬﻱ ﺣﻔﻈﻨﺎﻩ ﺳﺎﺑﻘﺎﹰ ﺑﺎﻻﺳﻢ‪.. ali.sql‬‬
‫;‪SQL> get ali.sql‬‬
‫ﻭﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﺑﻴﺎﻥ ﻧﺎﺗﺞ ﺁﺧﺮ ﺍﺳﺘﻌﻼﻡ ‪..‬‬
‫‪1* select * from tab‬‬

‫ﺑﻌﺪ ﻣﺤﺚ ‪.. SQL‬‬ ‫ﻭﺑﻤﺠﺮﺩ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺑﻜﺘﺎﺑﺔ ‪/‬‬


‫‪SQL> /‬‬
‫ﻓﻴﻈﻬﺮ ﻟﻨﺎ ﻧﺘﻴﺠﺔ ﺍﻹﺳﺘﻌﻼﻡ ‪ ،‬ﻛﻤﺎ ﺭﺃﻳﻨﺎﻫﺎ ﻗﺒﻞ ﺧﺰﻥ ﺍﻟﻤﻠﻒ ‪..‬‬
‫‪TNAME‬‬ ‫‪TABTYPE CLUSTERID‬‬
‫‪------------------------------ ------- ---------‬‬
‫‪BONUS‬‬ ‫‪TABLE‬‬
‫‪DEPT‬‬ ‫‪TABLE‬‬
‫‪EMP‬‬ ‫‪TABLE‬‬
‫‪SALGRADE‬‬ ‫‪TABLE‬‬
‫‪SECTION‬‬ ‫‪TABLE‬‬
‫‪STUDENT‬‬ ‫‪TABLE‬‬

‫‪6 rows selected.‬‬

‫• ‪Start ‬‬

‫ﻳﻤﻜﻨﻨﺎ ﺍﻟﻘﻴﺎﻡ ﺑﺘﻨﻔﻴﺬ ﻣﺤﺘﻮﻯ ﻣﻠﻒ ؛ ﺗﻢ ﺣﻔﻈﻪ ﻣﻦ ﻗﺒﻞ ﺑﻜﺘﺎﺑﺔ ﺍﻷﻣﺮ ‪:‬‬
‫‪sql>star filename.sql‬‬
‫ﺃﻭ ﺍﻷﻣﺮ ‪..‬‬
‫‪sql> @ filename.sql‬‬

‫ﻓﻤﺜﻼﹰ ﺇﺫﺍ ﺃﺭﺩﻧﺎ ﺗﻨﻔﻴﺬ ﻣﺤﺘﻮﻯ ﺍﻟﻤﻠﻒ ‪ ali.sql‬ﻧﻜﺘﺐ ﺍﻷﻣﺮ ‪..‬‬


‫;‪SQL> star ali.sql‬‬
‫ﺃﻭ ﺍﻷﻣﺮ ‪..‬‬
‫;‪SQL> @ ali.sql‬‬
‫ﻭﺳﺘﻜﻮﻥ ﻟﺪﻳﻨﺎ ﻧﻔﺲ ﺍﻟﻨﺘﻴﺠﺔ ﻃﺒﻌﺎﹰ ‪..‬‬

‫• ‪Edit ‬‬
‫ﻫﺬﺍ ﺍﻷﻣﺮ ﻫﺎﻡ ﻭﻳﻜﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﻪ ‪ ،‬ﻓﺒﻮﺍﺳﻄﺘﻪ ﻧﺴﺘﻄﻴﻊ ﺗﺤﺮﻳﺮ ﻭﺗﻌﺪﻳﻞ ﻣﺤﺘﻮﻯ ﺗﻌﻠﻴﻤﺎﺕ ﻣﻠﻒ ﻣﺎ‪.‬‬
‫ﻓﺈﺫﺍ ﻛﺎﻥ ﺍﻟﻤﻠﻒ ﺍﻟﺤﺎﻟﻲ ﻧﻜﺘﺐ ‪:‬‬
‫‪SQL> ed‬‬
‫ﺛﻢ ﻧﻀﻐﻂ ﻣﻔﺘﺎﺡ ‪.. Enter‬‬
‫ﻓﺴﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬‬
‫‪Wrote file afiedt.buf‬‬
‫ﻭﺍﻟﺘﻲ ﺗﺪﻝ ﻋﻠﻰ ﺍﻟﻤﻠﻒ ﺍﻟﺬﻱ ﻛﹸﺘﺐ ‪ ،‬ﺑﻔﺘﺢ ﻧﺎﻓﺬﺓ ﺍﻟﻤﻔﻜﺮﺓ )ﺑﺮﻧﺎﻣﺞ ﺍﻟﺘﺤﺮﻳﺮ ﺍﻟﺨﺎﺹ‬
‫ﺑﺎﻟـ‪: (Windows‬‬

‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫ﻭﻳﻈﻬــﺮ ﻣﻜﺘﻮﺑ ـﺎﹰ ﺩﺍﺧﻠﻬــﺎ ؛ ﺍﻟﺘﻌﻠﻴﻤــﺔ ﺍﻟﺘــﻲ ﺗــﻢ ﻛﺘﺎﺑﺘﻬــﺎ ﻓــﻲ ﺍﻟﻤﻠــﻒ ‪..‬ﻭﻋﻨــﺪﻫﺎ ﻧﺴــﺘﻄﻴﻊ ﺍﻟﺘﻌــﺪﻳﻞ‬
‫ﻭﺍﻹﺿﺎﻓﺔ ﻭﺍﻟﺤﺬﻑ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ ،‬ﻷﻧﻨﺎ ﻻ ﻧﺴﺘﻄﻴﻊ ﻣﺴﺢ ﺗﻌﻠﻴﻤﺔ ﻛﺘﺒﻨﺎﻫﺎ ﻓـﻲ ﺑﻴﺌـﺔ ‪ SQL‬ﺑﻌـﺪ ﺍﻥ‬
‫ﺗﺠﺎﻭﺯﻧﺎﻫﺎ ﺑﺴﻄﺮ ﺃﻭ ﺃﻛﺜﺮ ‪ ،‬ﻭﻳﻔﻀﻞ ﺍﻟﺒﻌﺾ ﻛﺘﺎﺑﺔ ﺗﻌﻠﻴﻤﺎﺕ ‪ SQL‬ﻓﻲ ﺍﻟﻤﻔﻜﺮﺓ ﺛﻢ ﻧﺴـﺨﻬﺎ ﻭﻟﺼـﻘﻬﺎ‬
‫ﻓـﻲ ﺑﻴﺌــﺔ ‪ ، SQL‬ﻭﻫـﺬﺍ ﺗﻔﻀــﻴﻞ ﺧـﺎﻃﺊ ﺑــﻞ ﻫــﻮ ﻧـﺎﺟﻢ ﻋــﻦ ﺍﻟﻜﺴـﻞ ﻓــﻲ ﺍﻟﻜﺘﺎﺑـﺔ ﺍﻟﻠﺤﻈﻴــﺔ ﻟﻜــﻞ‬
‫ﺗﻌﻠﻴﻤﺔ ﻭﺗﻨﻔﻴﺬﻫﺎ ﻓﻲ ﻭﻗﺘﻬﺎ ‪..‬‬

‫ﻭﻟﻜﻦ ﻟﻤﺎﺫﺍ ﻫﺬﺍ ﺍﻟﺘﻔﻀﻴﻞ ﺧﺎﻃﺊ ‪ ،‬ﻷﺳﺒﺎﺏٍ ﻣﻨﻬﺎ ‪:‬‬ ‫‪E‬‬


‫• ﺣﺘﻰ ﺗﺘﻌﻠﻢ ﺃﺧﻄﺎﺋﻚ ﺣﻴﻦ ﺍﻟﻜﺘﺎﺑﺔ ‪..‬‬
‫• ﺗﺘﻌﻮﺩ ﻋﻠﻰ ﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪.‬‬
‫• ﻭﺗﺘﻌﺮﻑ ﻋﻠﻰ ﺭﺳﺎﺋﻞ ﺍﻟﺨﻄﺄ ﻭﻛﻴﻔﻴﺔ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ ‪..‬‬
‫ﺃﻣﺎ ﻟﺘﺤﺮﻳﺮ ﻣﻠﻒٍ ﻣﺎ ‪ ،‬ﻭﻣﺤﻔﻮﻅ ﺑﺎﺳﻢ ﻣﻌﻴﻦ ‪ ..‬ﻧﻜﺘﺐ ‪..‬‬

‫;‪SQL> ed ali.sql‬‬
‫ﻭﺑﻨﻔﺲ ﺍﻟﺨﻄﻮﺍﺕ ﺍﻟﺴﺎﺑﻘﺔ ‪..‬‬
‫ﻭﺑﻌــﺪ ﺍﻧﺘﻬﺎﺋﻨــﺎ ﻣــﻦ ﺍﻟﺘﺤﺮﻳــﺮ ﻓــﻲ ﺑﻴﺌــﺔ ﺍﻟﻤﻔﻜــﺮﺓ ‪..‬ﻧﻨﺘﺒــﻪ ﺇﻟــﻰ ﻋــﺪ ﻡ ﺍﻧﻬــﺎﺀ ﺍﻟﺘﻌﻠﻴﻤــﺎﺕ ﺑﺎﻟﻔﺎﺻــﻠﺔ‬

‫ﺑﻌﺪ ﻣﺤﺚ ‪.. SQL‬‬ ‫ﺍﻟﻤﻨﻘﻮﻃﺔ ; ‪ ،‬ﻟﻴﺲ ﻋﻠﻴﻨﺎ ﺳﻮﻯ ﺣﻔﻆ ﺍﻟﻤﻠﻒ ‪ ،‬ﺛﻢ ﺗﻨﻔﻴﺬﻩ ﺑﻜﺘﺎﺑﺔ ‪/‬‬

‫• ‪Describe ‬‬
‫ﺍﻟﻤﻘﺼﻮ ﺩ ﺑﻬﺬﺍ ﺍﻷﻣﺮ ﺇﻇﻬﺎﺭ ﺻﻔﺎﺕ ﺣﻘﻮﻝ ﺍﻟﺠﺪﻭﻝ ‪ ،‬ﻣﻦ ﺣﻴﺚ ﻧﻮﻋﻬﺎ )ﺭﻗﻢ ‪ ،‬ﻧﺺ ‪ ،‬ﺗﺎﺭﻳﺦ ‪..‬ﺍﻟﺦ(‬
‫ﻭﺣﺠﻢ ﻫﺬﺍ ﺍﻟﺤﻘﻞ ‪ ،‬ﻭﺑﻴﺎﻥ ﺇﻥ ﻛﺎﻥ ﻟﻬﺬﺍ ﺍﻟﺤﻘﻞ ﻗﻴﺪ ﺃﻡ ﻻ ‪..‬ﻭﺻﻴﻐﺔ ﻫﺬﺍ ﺍﻷﻣﺮ ‪..‬‬
‫;‪SQL> desc tablename‬‬
‫ﺣﻴﺚﹸ ‪ tablename‬ﻫﻮ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪..‬‬
‫ﻓﻤﺜﻼﹰ ﺇﺫﺍ ﺃﺭﺩﻧﺎ ﻋﺮﺽ ﺧﺼﺎﺋﺺ ﺍﻟﺠﺪﻭﻝ ‪ .. emp‬ﻧﻜﺘﺐ ﺍﻷﻣﺮ ﺍﻟﺘﺎﻟﻲ ‪..‬‬
‫;‪SQL> desc emp‬‬
‫ﻭﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﻛﻤﺎ ﻳﻠﻲ ‪..‬‬
‫‪Name‬‬ ‫‪Null? Type‬‬
‫‪------------------------------- -------- ----‬‬
‫‪EMPNO‬‬ ‫)‪NOT NULL NUMBER(4‬‬
‫‪ENAME‬‬ ‫)‪VARCHAR2(10‬‬
‫‪JOB‬‬ ‫)‪VARCHAR2(9‬‬
‫‪MGR‬‬ ‫)‪NUMBER(4‬‬
‫‪HIREDATE‬‬ ‫‪DATE‬‬
‫‪SAL‬‬ ‫)‪NUMBER(7,2‬‬
‫‪COMM‬‬ ‫)‪NUMBER(7,2‬‬
‫‪DEPTNO‬‬ ‫)‪NUMBER(2‬‬

‫‪‬‬
‫‪ ‬‬
‫• ﻣﻦ ﺃﻭﺍﻣﺮ ﺍﻟﺘﺤﺮﻳﺮ ﻓﻲ ﺑﻴﺌﺔ ﻓﻲ ﺑﻴﺌﺔ ‪-: SQL * Plus 3.3‬‬
‫ﻣﺎﺳﻨﻀﻴﻔﻪ ‪sql>A‬‬ ‫‪ -‬ﺃﻣﺮ ﺍﻹﺿﺎﻓﺔ ‪:‬‬
‫‪sql> C / old /new‬‬ ‫‪ -‬ﺃﻣﺮ ﺍﻟﺘﻌﺪﻳﻞ ‪:‬‬
‫‪ -‬ﺣﻴﺚﹸ ‪ old‬ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤ‪‬ﺮﺍﺩ ﺍﺳﺘﺒﺪﺍﻟﻬﺎ ‪ ،‬ﻭ ‪ new‬ﺍﻟﻜﻠﻤﺔ ﺍﻟﺠﺪﻳﺪﺓ ‪.‬‬
‫; ‪SQL> cl buff‬‬ ‫‪ -‬ﺃﻣﺮ ﻣﺴﺢ ﺩﺍﺭﺉ )ﻣﺨﺰﻥ ﻣﺆﻗﺖ ( ‪: SQL‬‬
‫• ﻣﻦ ﺃﻭﺍﻣﺮ ﺍﻟﺘﺤﺮﻳﺮ ﻓﻲ ﺑﻴﺌﺔ ﻓﻲ ﺑﻴﺌﺔ ‪-: SQL * Plus 3.3‬‬
‫‪sql>sav filename.sql‬‬ ‫‪ -‬ﺃﻣﺮ ﺣﻔﻆ ﺍﻟﻤﻠﻔﺎﺕ ‪:‬‬
‫ﺣﻴﺚﹸ ‪filename.sql‬ﺍﺳﻢ ﺍﻟﻤﻠﻒ ﺍﻟﻤﺮﺍﺩ ﺍﻟﺤﻔﻆ ﺑﻪ ‪ ،‬ﻭﻳﻠﺰﻡ ﺑﺎﻹﻣﺘﺪﺍﺩ‪sql‬‬
‫‪ -‬ﺃﻣﺮ ﺟﻠﺐ ﻣﺤﺘﻮﻯ ﻣﻠﻒ ‪:‬‬
‫‪sql>get filename.sql‬‬
‫ﺣﻴﺚﹸ ‪filename.sql‬ﺍﺳﻢ ﺁﺧﺮ ﻣﻠﻒ ﺗﻢ ﺣﻔﻈﻪ ﺿﻤﻦ ﺫﺍﻛﺮﺓ ‪ SQL‬ﺍﻟﻤﺆﻗﺘﺔ ‪ ..‬‬
‫‪ -‬ﺃﻣﺮ ﺗﻨﻔﻴﺬ ﻣﺤﺘﻮﻯ ﻣﻠﻒ ‪:‬‬
‫‪sql>star filename.sql‬‬
‫ﺃﻭ ﺍﻷﻣﺮ ‪..‬‬
‫‪sql> @ filename.sql‬‬
‫ﺣﻴﺚﹸ ‪filename.sql‬ﺍﺳﻢ ﻣﻠﻒ ﻣﺤﻔﻮﻅ ﺳﺎﺑﻘﺎﹰ ‪..‬‬
‫‪ -‬ﺃﻣﺮ ﺗﺸﻐﻴﻞ ﺑﺮﻧﺎﻣﺞ ﺗﺤﺮﻳﺮ ‪ ‬‬
‫‪SQL> ed‬‬
‫‪ -‬ﺃﻣﺮ ﻋﺮﺽ ﺧﺼﺎﺋﺺ ﺟﺪﻭﻝ ‪..‬‬
‫;‪SQL> desc tablename‬‬
‫ﺣﻴﺚﹸ ‪ tablename‬ﻫﻮ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪..‬‬

‫****************************************************************************************************‬
‫ﻭﻓﻲ ﺍﻟﺪﺭﺱِ ﺍﻟﻘﺎﺩﻡ ﺑﺈﺫﻥ ﺍﷲ ﺳﻨﺒﺪﺃ ﺑﺠﻠﻤﺔ ﺍﻹﺳﺘﻌﻼﻡ ‪.. Select‬‬
‫ﻓﺈﻟﻰ ﻟﻘﺎﺀ ﻗﺮﻳﺐ ﺑﺈﺫﻥ ﺍﷲ ﺗﻌﺎﻟﻰ ‪.‬ﻭﺳﺎﻣﺤﻮﻧﺎ ﻋﻠﻰ ﺍﻟﺘﻘﺼﻴﺮ ‪ ،‬ﻭﻓﻖ ﺍﷲ ﺍﻟﺠﻤﻴﻊ ﻟﻤﺎ ﻳﺤﺒﻪ ﻭﻳﺮﺿﺎﻩ ‪..‬‬
‫ﺍﻷﺳﻴـــــــــــــــــــــــــــــــــــــــــــــــﻒ‬

‫‪Email:[email protected]‬‬
‫ﺑﺴﻢ ﺍﷲ ﺍﻟﺮﺣﻤﻦ ﺍﻟﺮﺣﻴﻢ‬

‫ﺳﻠﺴﻠــﺔ ‪‬ﺗﻌﻠـــﻢ‬
‫‪‬‬

‫ﺑﺴﻬﻮﻟ‪‬ــ ـ ـﺔ‬
‫‪‬‬

‫‪SQL ‬‬ ‫‪‬‬


‫‪ ‬‬
‫ﻛﻤﺎ ﻋﻠﻤﻨﺎ ﺳﺎﺑﻘﺎﹰ ﺃﻥ ﻣﻦ ﻟﻐﺎﺕ ‪ SQL‬ﺍﻟﻔﺮﻋﻴـﺔ ﻟﻐـﺔ ‪ ، D.D.L‬ﻭﻫـﻲ ﻟﻐـﺔ ﺗﻌﺮﻳـﻒ ﺍﻟﺒﻴﺎﻧـﺎﺕ ‪ ،‬ﻭﺗﻌﺘﺒـﺮ‬
‫ﺃﺻﻼﹰ ﺑﻨﺎﺀ ‪ ، SQL‬ﻭﻋﻨﺪﻣﺎ ﺗﻘﻮﻡ ﺑﺘﻌﺮﻳﻒ ﻫﺬﻩ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻳﺘﻢ ﻭﺿﻊ ﺇﺩﺧﺎﻻﺕ ﻟﻬﺎ ﻓﻲ ﻗـﺎﻣﻮﺱ ﺍﻟﺒﻴﺎﻧـﺎﺕ‬
‫ﺍﻟﺨﺎﺹ ﺑـ ‪ ، ORACLE‬ﻭﻛﻤﺎ ﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎﹰ ﺃﻳﻀﺎﹰ ﻓﺈﻥ ﺍﻷﻭﺍﻣﺮ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻬﺬﻩ ﺍﻟﻠﻐﺔ ﻫﻲ ‪:‬‬
‫• ﻳﺴﺘﺨﺪﻡ ﻹﻧﺸﺎﺀ ﺍﻟﺠﺪﺍﻭﻝ ) ‪. ( CREATE TABLE‬‬
‫• ﻳﺴﺘﺨﺪﻡ ﻟﻠﺘﻌﺪﻳﻞ ﻋﻠﻰ ﺟﺪﻭﻝ ﻣﻨﺸﺄ ﺳﺎﺑﻘﺎﹰ ) ‪. ( ALTER TABLE‬‬
‫• ﻳﺴﺘﺨﺪﻡ ﻟﺤﺬﻑ ﺟﺪﻭﻝ ﻏﻴﺮ ﻣﺮﻏﻮﺏ ﻓﻴﻪ ) ‪. ( DROP TABLE‬‬
‫ﻭﺳﻨﺒﺪﺃ ﻓﻲ ﺩﺭﺳﻨﺎ ﻫﺬﺍ ﺑﺸﺮﺡ ﺍﻷﻣﺮ ﺍﻷﻭﻝ ﻭﺍﻷﺳﺎﺳﻲ ‪..‬‬
‫‪: CREATE TABLE‬‬ ‫‪‬‬ ‫•‬
‫ﻫﻨﺎﻙ ﻧﻮﻋﻴﻦ ﻣﻦ ﺍﻷﻭﺍﻣﺮ ﻹﻧﺸﺎﺀ ﺟﺪﻭﻝ ‪:‬‬
‫• ﺍﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺟﺪﻳﺪ )‪. (new table‬‬
‫• ﺍﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺟﺪﻳﺪ ‪ ،‬ﺑﺼﻔﺎﺕ ﺑﺤﻘﻮﻝ ﺃﺧﺮﻯ ﻣﻦ ﺟﺪﻭﻝ ﺁﺧﺮ ﻗﺪﻳﻢ )‪. (copied table‬‬
‫‪ create new table‬‬
‫ﻟﻜﻲ ﻧﻘﻮﻡ ﺑﺈﻧﺸﺎﺀ ﺟﺪﻭﻝ ﻧﺴﺘﺨﺪﻡ ﺍﻷﻣﺮ ‪ CREATE‬ﻛﺎﻟﺘﺎﻟﻲ ‪:‬‬

‫;) ﺣﻘﻮﻝ ﺍﻟﺠﺪﻭﻝ ( ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪CREATE TABLE‬‬


‫ﻭﻳﺸﺘﺮﻁﹸ ﻓﻲ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﻋﺪﺓ ﺷﺮﻭﻁ ﻭﻫﻲ ‪:‬‬
‫‪ -١‬ﻻ ﻳﺘﺠﺎﻭﺯ ﻃﻮﻝ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﻋﻦ ‪ 30‬ﺣﺮﻓﺎﹰ ‪.‬‬
‫‪ -٢‬ﻳﻤﻜﻦ ﺍﻥ ﻳﻜﻮﻥ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﺧﻠﻴﻂ ﻣﻦ ﺍﻷﺭﻗﺎﻡ ﻭﺍﻟﺤﺮﻭﻑ ﻭﺍﻟﺮﻣﻮﺯ ﺍﻟﺨﺎﺻﻪ ﻭﻟﻜﻦ ﻻﺑﺪ ﺃﻥ ﻳﺒﺪﺃ‬
‫ﺑﺤﺮﻑ ﻋﻠﻰ ﺍﻷﻗﻞ ‪.‬‬
‫‪ -٣‬ﺃﻥ ﻻ ﻳﻜﻮﻥ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﻛﻠﻤﺔ ﻣﺤﺠﻮﺯﺓ ﻓﻲ ﺍﻟﻠﻐﺔ ‪.‬‬
‫ﻭﺍﻟﺸﺮﻭﻁ ﺍﻟﺴﺎﺑﻘﺔ ﺗـﻨـﻄﺒـﻖ ﺃﻳﻀﺎﹰ ﻋﻠﻰ ﺃﺳﻤﺎﺀ ﺍﻟﺤﻘﻮﻝ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ‪.‬‬
‫ﻭﻳﺠﺐ ﺃﻥ ﻧﻌﻠﻢ ﺃﻥ ﻟﺤﻘﻮﻝ ﺍﻟﺠﺪﻭﻝ ﺻﻔﺘﻴﻦ ﻫﻤﺎ ‪:‬‬
‫‪ : ‬ﺃﻱ ﺍﻟﺤﺠﻢ ﺍﻟﺬﻱ ﺳﻴﺨﺰﻧﻪ ﻓﻲ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪.‬‬
‫‪ : ‬ﻭﻫﻲ ﺗﻌﻨﻲ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻼﺯﻣﺔ ﻟﻘﻴﻢ ﻫﺬﻩ ﺍﻟﺤﻘﻮﻝ ‪ ،‬ﻭﺳﻨﺘﺤﺪﺙ ﻋﻨﻬﺎ‬
‫ﻻﺣﻘﺎﹰ ﺑﺈﺫﻥ ﺍﷲ ‪.‬‬
‫ﻛﻤﺎ ﺃﻥ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ﻓﻲ ﻟﻐﺔ ‪ SQL‬ﻋﺪﺓ ﺃﻧﻮﺍﻉ ﻧﺬﻛﺮﻫﺎ ﻣﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻘﺼﻮﻯ ﻟﻜﻞ ﺣﻘﻞ ‪ ،‬ﻋﻠﻤﺎ ﺑﺄﻥ‬
‫ﻫﺬﻩ ﺍﻟﻘﻴﻢ ﺧﺎﺻﺔ ﺑـ ‪ ، ORACLE 8‬ﻭﻣﻦ ﺍﻟﺒﺪﻳﻬﻲ ﺃﻥ ﺗﺰﻳﺪ ﻫﺬﻩ ﺍﻟﻘﻴﻢ ﻓﻲ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﺤﺪﻳﺜﺔ ‪..‬‬

‫‪ CHAR ‬‬


‫ﻭﻳﺴﺘﺨﺪﻡ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻟﺘﺨﺰﻳﻦ ﻋﺪﺩ ﺛﺎﺑﺖ ﻣﻦ ﺍﻟﺤﺮﻭﻑ ‪ ،‬ﻭﺍﻟﺤﺪ ﺍﻷﻗﺼﻰ ﻟﻌﺪﺩ ﺍﻷﺣﺮﻑ ﻫﻮ ‪2000‬‬
‫ﺑﺎﻳﺖ ‪ .‬‬
‫‪ ‬‬
‫ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬ ‫)‪CHAR (16‬‬
‫‪‬‬
‫‪ var char ‬ﻳﺴﺘﺨﺪﻡ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻟﺘﺨﺰﻳﻦ ﺑﻴﺎﻧﺎﺕ ﺣﺮﻓﻴﺔ ﻣﺘﻨﻮﻋﺔ ‪ ،‬ﻭﺍﻟﺤﺪ ﺍﻷﻗﺼﻰ ﻟﻌﺪﺩ‬
‫ﺍﻷﺣﺮﻑ ﻫﻮ ‪ 4000‬ﺑﺎﻳﺖ ‪ .‬‬

‫‪ ‬‬
‫ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬ ‫)‪VARCHAR (50‬‬
‫‪‬‬

‫‪var char2 ‬ﻳﺴﺘﺨﺪﻡ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻟﺘﺨﺰﻳﻦ ﺑﻴﺎﻧﺎﺕ ﺣﺮﻓﻴﺔ ﻣﺘﻨﻮﻋﺔ ‪ ،‬ﻭﺍﻟﺤﺪ ﺍﻷﻗﺼﻰ ﻟﻌﺪﺩ‬
‫ﺍﻷﺣﺮﻑ ﻫﻮ ‪ 4000‬ﺑﺎﻳﺖ ‪ .‬‬

‫‪ ‬‬
‫ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬ ‫)‪VARCHAR2 (50‬‬
‫ﻟﻜﻦ ﻣﺎﻫﻮ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ‪ VARCHAR & VARCHAR2‬؟‬
‫ﺃﻥ ‪ var char2‬ﻳﺴﻤﻰ ﺍﻟﻤﺘﻐﻴﺮ ﺍﻟﻤﻄﺎﻃﻲ ﺃﻱ ﻟﻮ ﺣﺠﺰﻧﺎ ‪ ١٠‬ﺧﺎﻧﺎﺕ ﻭﻛﺎﻥ ﺍﻻﺳﻢ ﻳﺘﻜﻮﻥ ﻣـﻦ ‪ ٦‬ﺧﺎﻧـﺎﺕ‬
‫ﻓﺎﻧﻪ ﺳﻮﻑ ﻳﻘﺼﺮ ﺍﻟﻰ ‪ ٦‬ﺧﺎﻧﺎﺕ ﺗﻠﻘﺎﺋﻴﺎ ﺑﻌﻜﺲ ﺍﻟـ ‪ var char‬ﻓﺴـﻮﻑ ﻳﺤﺠـﺰ ﺟﻤﻴـﻊ ﺍﻟﺨﺎﻧـﺎﺕ ﺣﺘـﻰ‬
‫ﻭﻟﻮ ﻟﻢ ﺗﺴﺘﻌﻤﻞ ‪.‬‬

‫‪ NUMBER‬‬
‫ﺗﺘﻜــﻮﻥ ﺍﻟﺒﻴﺎﻧــﺎﺕ ﺍﻟﻤﺪﺧﻠــﺔ ﻓــﻲ ﻫــﺬﺍ ﺍﻟﺤﻘــﻞ ﻣــﻦ ﺍﻷﺭﻗــﺎﻡ )‪ ( ٩ .....٢،١،٠‬ﻭﺗﺤﺪﻳــﺪ ﻃــﻮﻝ ﺍﻟﺤﻘــﻞ‬
‫ﺍﺧﺘﻴﺎﺭﻱ ‪..‬‬
‫‪‬‬
‫‪‬‬
‫‪ ‬‬
‫ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬ ‫)‪NUMBER (50‬‬

‫‪ NUMBER‬‬
‫ﺗﺘﻜﻮﻥ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺪﺧﻠﺔ ﻓﻲ ﻫﺬﺍ ﺍﻟﺤﻘﻞ ﻣﻦ ﺍﻷﺭﻗﺎﻡ )‪( ٩ .....٢،١،٠‬‬
‫) ‪ NUMBER ( I , j‬ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬
‫ﺣﻴﺚ ﻳﻤﺜﻞ ‪ I‬ﻃﻮﻝ ﺍﻟﻌﺪﺩ ﺍﻟﻌﺸﺮﻱ ﻛﺎﻣﻼﹰ ﺷﺎﻣﻼﹰ ﺍﻟﻌﺪﺩ ﺍﻟﺼﺤﻴﺢ ﻭﻣﺎ ﻋﻠﻰ ﻳﻤﻴﻦ ﺍﻟﻔﺎﺻﻠﺔ ﺃﻳﻀـﺎﹰ ‪ ،‬ﺃﻣـﺎ ‪j‬‬
‫ﻓﻴﻤﺜﻞ ﻃﻮﻝ ﺍﻷﻋﺪﺍﺩ ﺍﻟﻌﺸﺮﻳﺔ ﻳﻤﻴﻦ ﺍﻟﻔﺎﺻﻠﺔ ‪.‬‬
‫‪ RAW‬‬
‫ﻳ‪‬ﺴﺘﺨﺪﻡ ﻟﺨﺰﻥ ﺑﻴﺎﻧﺎﺕ ﺛﻨﺎﺋﻴﺔ ‪ ،‬ﻭﺃﻗﺼﻰ ﻃﻮﻝ ﻟﻪ ﻫﻮ ‪ 2000‬ﺑﺎﻳﺖ ‪.‬‬
‫‪: DATE ‬‬
‫ﻭﻳ‪‬ﺴﺘﺨﺪﻡ ﻟﺨﺰﻥ ﺑﻴﺎﻧﺎﺕ ﻣﻦ ﻧﻮﻉ ﺍﻟﺘﺎﺭﻳﺦ )ﻳﻮﻡ ‪ ،‬ﺷﻬﺮ ‪ ،‬ﺳﻨﺔ ( ‪.‬‬
‫‪ LONG‬‬
‫ﻭﻳ‪‬ﺴﺘﺨﺪﻡ ﻟﺨﺰﻥ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻨﺼﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﺼﻞ ﻃﻮﻟﻬﺎ ﺇﻟﻰ ‪ 2‬ﺟﻴﺠﺎ ﺑﺎﻳﺖ ‪.‬‬
‫ﻭﻫﻨﺎﻙ ﺃﻧﻮﺍﻉ ﺃﺧﺮﻯ ﻟﺴﻨﺎ ﺑﺤﺎﺟﺔ ﺇﻟﻴﻬﺎ ﺍﻵﻥ ﻭﻫﻲ ‪:‬‬
‫‪) LONG RAW‬ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺛﻨﺎﺋﻴﺔ ﻳﺼﻞ ﻃﻮﻟﻬﺎ ﺇﻟﻰ ‪ 2‬ﺟﻴﺠﺎ ﺑﺎﻳﺖ ( ‪.‬‬
‫‪) ROWID‬ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﻣﻮﺍﻗﻊ ﺃﺳﻄﺮ ﺍﻟﺠﺪﻭﻝ ﻓﻲ ﺍﻟﻘﺮﺹ ( ‪.‬‬
‫ﻭﺃﻣﺎ ﻫﺬﻩ ﺍﻷﺭﺑﻌﺔ ﺍﻷﺧﻴﺮﺓ ﻓﻬﻲ ﻣﻮﺟﻮﺩﺓ ﻓﻘﻂ ﻓﻲ ﺍﻹﺻﺪﺍﺭ ‪ ٨‬ﺃﻭ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻷﺣﺪﺙ ﻣﻨﻪ ‪:‬‬
‫‪) BLOB‬ﻛﺎﺋﻦ ﺛﻨﺎﺋﻲ ﻛﺒﻴﺮ ( ‪.‬‬
‫‪) CLOB‬ﻛﺎﺋﻦ ﻛﺒﻴﺮ ﻳﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻟﻤﺤﺎﺭﻑ( ‪.‬‬
‫‪) NCLOB‬ﻛﺎﺋﻦ ﻛﺒﻴﺮ ﻳﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻟﻤﺤﺎﺭﻑ ﻭﺣﻴﺪﺓ ﺍﻟﺒﺎﻳﺖ ﺃﻭ ﻣﺘﻌﺪﺩﺓ ﺍﻟﺒﻴﺎﺗﺎﺕ (‪.‬‬
‫‪) BFILE‬ﻣﻠﻒ ﺧﺎﺭﺟﻲ ﻛﺒﻴﺮ ( ‪.‬‬
‫ﻭﺍﻵﻥ ﺳــﻨﺘﻌﺮﻑ ﻋﻠــﻰ ﻃﺮﻳﻘــﺔ ﺇﻧﺸــﺎﺀ ﺟــﺪﻭﻝ ﺟﺪﻳــﺪ ‪ ،‬ﺑﺈﻋﻄــﺎﺀ ﺣﻘﻮﻟــﻪ ﺗﻌــﺎﺭﻳﻒ ﻣــﻦ ﺍﻟﻤﺘﻐﻴــﺮﺍﺕ‬
‫ﺍﻟﺴﺎﺑﻘﺔ ‪..‬‬
‫ﻭﻟﻜﻦ ﻗﺒﻞ ﺃﻥ ﻧﻜﺘﺐ ﺃﻱ ﺗﻌﻠﻴﻤﺔ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﺗﻜﺘﺒﻬﺎ ﺗﺤﺖ ﺍﺳﻢ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺨﺎﺹ ﺑﻚ ‪ ،‬ﻓﺈﺫﺍ‬
‫ﻛﻨﺖ ﺗﺤﺖ ﺃﻱ ﻣﺴﺘﺨﺪﻡ ﺁﺧﺮ ‪ ،‬ﻓﺎﺧﺮﺝ ﻣﻨﻪ ‪ ،‬ﻭﺍﺩﺧﻞ ﺑﺎﺳﻤﻚ ‪..‬‬
‫ﻣﺜﻼﹰ ‪ :‬ﻧﺮﻳﺪﺍﻟﻘﻴﺎﻡ ﺑﺈﻧﺸﺎﺀ ﺟﺪﻭﻝ ﻟﻠﻤﺪﺍﺭﺱ ﺑﺎﺳﻢ ‪ SCHOOL‬ﻭﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻟﺤﻘﻮﻝ ﺍﻟﺘﺎﻟﻴﺔ ‪:‬‬
‫ﺭﻗﻢ ﺍﻟﻤﺪﺭﺳﺔ ﻭﻧﻮﻋﻪ ﺭﻗﻤﻲ ﺑﻄﻮﻝ ‪ 10‬ﻣﻔﺘﺎﺡ ﺃﺳﺎﺳﻲ ‪.‬‬
‫ﺍﺳﻢ ﺍﻟﻤﺪﺭﺳﺔ ﻭﻧﻮﻋﻪ ﺣﺮﻓﻲ ﺑﻄﻮﻝ ‪ 30‬ﻏﻴﺮ ﻓﺎﺭﻍ ‪.‬‬
‫ﻧﻮﻉ ﺍﻟﻤﺪﺭﺳﺔ )ﺍﺑﺘﺪﺍﺋﻲ ‪ ،‬ﻣﺘﻮﺳﻂ ‪ ،‬ﺛﺎﻧﻮﻱ ( ﻭﻧﻮﻋﻪ ﺣﺮﻓﻲ ﺑﻄﻮﻝ ‪ 15‬ﻏﻴﺮ ﻓﺎﺭﻍ ‪.‬‬
‫ﻣﻮﻗﻊ ﺍﻟﻤﺪﺭﺳﺔ ﻭﻧﻮﻋﻪ ﺣﺮﻓﻲ ﺑﻄﻮﻝ ‪. 30‬‬
‫ﺗﺎﺭﻳﺦ ﺗﺄﺳﻴﺲ ﺍﻟﻤﺪﺭﺳﺔ ﻭﻧﻮﻋﻪ ﺗﺎﺭﻳﺦ ‪.‬‬
‫ﻭ ﺳﻨﻜﺘﺐ ﺗﻌﻠﻴﻤﺎﺕ ﺇﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺟﺪﻳﺪ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪ ،‬ﻭﻫﺬﺍ ﻋﻨﺪ ﻛﻞ ﺇﻧﺸﺎﺀ ﺟﺪﻭﻝ ‪..‬‬

‫‪CREATE TABLE SCHOOL‬‬


‫(‬
‫‪ ] ,‬ﻓﺎﺭﻍ ﺃﻭ ﻏﻴﺮ ﻓﺎﺭﻍ ﺃﻭ ﻗـﻴﻮﺩ [ )ﻃﻮﻟﻬﺎ( ﻧﻮﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬
‫‪ ] ,‬ﻓﺎﺭﻍ ﺃﻭ ﻏﻴﺮ ﻓﺎﺭﻍ ﺃﻭ ﻗﻴـﻮﺩ [ )ﻃﻮﻟﻬﺎ( ﻧﻮﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬
‫‪……………………………………………………….. ,‬‬
‫‪……………………………………………………….. ,‬‬
‫‪……………………………………………………….. ,‬‬
‫] ﻓﺎﺭﻍ ﺃﻭ ﻏﻴﺮ ﻓﺎﺭﻍ ﺃﻭ ﻗـﻴﻮﺩ [ )ﻃﻮﻟﻬﺎ( ﻧﻮﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬
‫;)‬
‫ﻭﻣﺎﻫﻮ ﻣﻜﺘﻮﺏٍ ﺑﺎﻷﺣﻤﺮ ﻫﻲ ﺍﻟﻘﻴﻮﺩ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﺤﻘﻞ ‪..‬ﻭﺳﻨﺸﺮﺡ ﻛﻴﻔﻴﺔ ﺇﻧﺸﺎﺀ ﺍﻟﻘﻴﻮﺩ ﻋﻠﻰ‬
‫ﺍﻟﺤﻘﻮﻝ ﻓﻲ ﺩﺭﺳﻨﺎ ﺍﻟﻘﺎﺩﻡ ﺑﺈﺫﻥ ﺍﷲ ‪..‬‬
‫ﺇﺫﺍﹰ ﻧﻜﺘﺐ ﻣﺎ ﻳﻠﻲ ﻹﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺍﻟﻤﺪﺭﺳﺔ ‪..‬‬
‫‪CREATE TABLE SCHOOL‬‬
‫(‬
‫‪S_NO‬‬ ‫‪NUMBER (10) ,‬‬
‫‪S_NAME VARCHAR 2 (30) ,‬‬
‫‪S_TYPE CHAR (15) ,‬‬
‫‪S_LOC VARCHAR 2 (30) ,‬‬
‫‪S_DATE DATE‬‬
‫;)‬
‫ﻭﺇﺫﺍ ﻇﻬﺮﺕ ﻟﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪ ،‬ﻧﻜﻮﻥ ﻗﺪ ﻧﺠﺤﻨﺎ ﻓﻲ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﻝ ‪..‬‬
‫‪Table created .‬‬
‫ﻭﻳﻔﻀﻞ ﺃﻥ ﻳﻜﻮﻥ ﺍﺳﻢ ﺍﻟﺤﻘﻞ ﻋﻠﻰ ﺟﺰﺃﻳﻦ ‪:‬‬
‫ﺟﺰﺃ ﻳﺸﻴﺮ ﺇﻟﻰ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪ ،‬ﻭﻫﻨﺎ ﺃﺧﺬﻧﺎ ﺍﻟﺤﺮﻑ ‪ S‬ﻟﻴﺸﻴﺮ ﺇﻟﻴﻪ ‪.‬‬
‫ﺟﺰﺃ ﻳﺸﻴﺮ ﺇﻟﻰ ﺍﺳﻢ ﺍﻟﺤﻘﻞ ﻧﻔﺴﻪ ﻭﻳﻜﻮﻥ ﻣﻌﺒﺮﺍﹰ ﻋﻨﻪ ‪.‬‬
‫ﻭﻫﺬﺍ ﺍﻟﺘﻔﻀﻴﻞ ﺳﺒﺒﻪ ﺍﻟﺘﺴﻬﻴﻞ ‪ ،‬ﻭﺫﻟﻚ ﻋﻨﺪ ﺍﻹﺳﺘﻌﻼﻡ ﻋﻦ ﺍﻟﺤﻘﻮﻝ ﺃﻭ ﺇﺟﺮﺍﺀ ﺑﻌﺾ ﺍﻟﻌﻤﻠﻴﺎﺕ‬
‫ﻋﻠﻴﻬﺎ ‪..‬‬
‫ﻛﻤﺎ ﺍﻗﺘﺼﺮﻧﺎ ﻋﻨﺪ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺴﺎﺑﻖ ﻋﻠﻰ ﺗﻌﺮﻳﻒ ﺍﻟﺤﻘﻮﻝ ﺑﺎﻷﻃﻮﺍﻝ ﺍﻟﻤﻨﺎﺳﺒﺔ ﺍﻟﺘﻲ ﺳﺘﺄﺧﺬﻫﺎ ‪،‬‬
‫ﻭﻟﻢ ﻧﻜﺘﺐ ﺃﻱ ﻗﻴﺪ ﻋﻠﻰ ﺃﻱ ﺣﻘﻞ ‪..‬ﺣﺘﻰ ﻧﺘﻌﻠﻤﻬﺎ ﻓﻲ ﺩﺭﺳﻨﺎ ﺍﻟﻘﺎﺩﻡ ﺑﺈﺫﻥ ﺍﷲ ‪.‬‬
‫ﻭﺑﻌﺪﺃﻥ ﻧﺠﺤﻨﺎ ﻓﻲ ﺇﻧﺸﺎﺀ ﺟﺪﻭﻝ ‪ ،‬ﻻﺑﺪ ﻣﻦ ﻣﻌﺮﻓﺔ ﻛﻴﻔﻴﺔ ﺍﺳﺘﻌﺮﺍﺽ ﻣﻮﺍﺻﻔﺎﺕ ﺍﻟﺠﺪﻭﻝ ﺑﻌﺪ ﺇﻧﺸﺎﺋﻪ‬
‫ﺃﻭ ﺃﻱ ﺟﺪﺍﻭﻝ ﺃﺧﺮﻯ ‪ ...‬ﻭﺫﻟﻚ ﺑﻜﺘﺎﺑﺔ ﺍﻷﻣﺮ ﺍﻟﺘﺎﻟﻲ ‪:‬‬

‫;‪SQL> DESC SCHOOL‬‬


‫ﻭﺳﺘﻈﻬﺮ ﻟﻨﺎ ﻣﻮﺍﺻﻔﺎﺕ ﺟﺪﻭﻝ ﺍﻟﻤﺪﺭﺳﺔ ﻛﻤﺎﻳﻠﻲ ‪..‬‬
‫‪Name‬‬ ‫‪Null? Type‬‬
‫‪------------------------------- -------- ----‬‬
‫‪S_NO‬‬ ‫)‪NUMBER(10‬‬
‫‪S_NAME‬‬ ‫)‪CHAR2(30‬‬
‫‪S_TYPE‬‬ ‫)‪CHAR(15‬‬
‫‪S_LOC‬‬ ‫)‪CHAR2(30‬‬
‫‪S_DATE‬‬ ‫‪DATE‬‬

‫ﻭﻧﺨﺘﻢ ﺩﺭﺳﻨﺎ ﻫﺬﺍ ﺑﺒﻴﺎﻥ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺜﺎﻧﻴﺔ ﻹﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﺍﻝ ‪..‬‬

‫‪ copied table‬‬


‫ﻧﻘﻮﻡ ﻫﻨﺎ ﺑﺈﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺟﺪﻳﺪ ﻳﺤﻮﻱ ﺑﻌـﺾ ﺍﻟﺤﻘـﻮﻝ ‪ ،‬ﺑـﺪﻭﻥ ﺃﻥ ﻧﻌﺮﻓﻬـﺎ ﻣـﻦ ﻧﺎﺣﻴـﺔ ﺍﻟﻄـﻮﻝ ‪ ،‬ﻭﺫﻟـﻚ‬
‫ﺑﺼﻔﺎﺕ ﺣﻘﻮﻝ ﺃﺧﺮﻯ ﻧﺨﺘﺎﺭﻫﺎ ﻣﻦ ﺟﺪﻭﻝ ﺁﺧﺮ ‪ ،‬ﻭﻟﻜﻲ ﻧﻘﻮﻡ ﺑﺬﻟﻚ ﻧﺴﺘﺨﺪﻡ ﺍﻟﺼﻴﻐﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪:‬‬

‫) ﺣﻘﻮﻝ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺠﺪﻳﺪ ( ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺠﺪﻳﺪ ‪CREATE TABLE‬‬


‫‪AS‬‬
‫) ﻧﺨﺘﺎﺭ ﺣﻘﻮﻝ ﻣﻦ ﺍﻟﺠﺪﻭﻝ ﺍﻟﻘﺪﻳﻢ ( ‪SELECT‬‬
‫; ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﺍﻟﻘﺪﻳﻢ ‪FROM‬‬

‫‪ ‬‬
‫ﺳﻨﻘﻮﻡ ﺑﺈﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺟﺪﻳﺪ ﺍﺳﻤﻪ ‪ ، STUDENT‬ﻭﻧﺨﺘﺎﺭ ﻟﻪ ﺑﻌﺾ ﺍﻟﺤﻘﻮﻝ ﻣﻦ ﻣﻦ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺴﺎﺑﻖ‬
‫ﺍﻟﺬﻱ ﺃﻧﺸﺄﻧﺎﻩ ﻭﻫﻮ ‪ ، SCHOOL‬ﻭﺳﻨﺨﺘﺎﺭ ﺣﻘﻠﻴﻦ ﻣﻨﻪ ‪..‬‬

‫)‪SQL> CREATE TABLE STUDENT (S_NO,S_NAME‬‬


‫‪AS‬‬
‫‪SELECT S_NAME,S_TYPE‬‬
‫; ‪FROM SCHOOL‬‬

‫‪Table created .‬‬

‫ﻧﻼﺣﻆ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ ﺃﻧﻨﺎ ﺃﻧﺸﺄﻧﺎ ﺣﻘﻠﻲ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ ﺍﻟﻤﺴﻤﻰ ‪ ، STUDENT‬ﻭﻳﺤﻮﻱ ﻋﻠﻰ‬
‫ﺣﻘﻠﻴﻦ ﻫﻤﺎ ﺭﻗﻢ ﺍﻟﻄﺎﻟﺐ )‪ (S_NO‬ﻭﺍﺳﻢ ﺍﻟﻄﺎﻟـﺐ )‪ ،(S_NAME‬ﺑـﺪﻭﻥ ﺃﻥ ﻧﻌـﺮﻑ ﺃﻃﻮﺍﻟﻬﻤـﺎ ‪ ،‬ﻭﺫﻟـﻚ‬
‫ﻷﻧﻨــﺎ ﺃﺧــﺬﻧﺎ ﺃﻃﻮﺍﻟﻬﻤــﺎ ﺑﺄﺧــﺬﻧﺎ ﺣﻘﻠــﻴﻦ ﻫﻤــﺎ ﺣﻘــﻞ ﺍﺳــﻢ ﺍﻟﻤﺪﺭﺳــﺔ )‪ (S_NAME‬ﻭﻧــﻮﻉ ﺍﻟﻤﺪﺭﺳــﺔ‬
‫)‪ (S_TYPE‬ﻣﻦ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺴﺎﺑﻖ ‪.SCHOOL‬‬
‫ﻭﻟﻜﻲ ﺗﺘﺄﻛﺪ ﻣﻦ ﻛﻼﻣﻲ ﺍﻟﺴﺎﺑﻖ ‪ ،‬ﺍﻛﺘﺐ ﺃﻣﺮ ﺍﺳﺘﻌﺮﺍﺽ ﺧﺼﺎﺀﺋﺺ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺠﺪﻳﺪ ‪STUDENT‬‬
‫ﻭﺳﺘﺠﺪ ﺃﻧﻪ ﺃﻋﻄﻰ ﺣﻘﻮﻟﻪ ﺧﺼﺎﺋﺺ ﺍﻟﺤﻘﻠﻴﻦ ﺍﻟﻤﺨﺘﺎﺭﻳﻦ ﻣﻦ ﺟﺪﻭﻝ ‪ ، SCHOOL‬ﻛﻤﺎ ﻳﻠﻲ ‪..‬‬
‫‪‬‬

‫‪‬‬
‫; ‪SQL> DESC STUDENT‬‬

‫‪Name‬‬ ‫‪Null? Type‬‬


‫‪------------------------------- -------- ----‬‬
‫‪S_NO‬‬ ‫)‪CHAR(30‬‬
‫‪S_NAME‬‬ ‫)‪CHAR(15‬‬
‫‪ ‬‬
‫* ﻫﻨﺎﻙ ﻧﻮﻋﻴﻦ ﻣﻦ ﺍﻷﻭﺍﻣﺮ ﻹﻧﺸﺎﺀ ﺟﺪﻭﻝ ‪:‬‬
‫• ﺍﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺟﺪﻳﺪ ﻭﺻﻴﻐﺘﻪ ‪:‬‬
‫;) ﺣﻘﻮﻝ ﺍﻟﺠﺪﻭﻝ ( ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪CREATE TABLE‬‬

‫• ﺍﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺟﺪﻳﺪ ﻭﺑﺼﻔﺎﺕ ﺣﻘﻮﻝ ﺃﺧﺮﻯ ﻣﻦ ﺟﺪﻭﻝ ﺁﺧﺮ ﻗﺪﻳﻢ ﻭﺻﻴﻐﺘﻪ ‪:‬‬
‫) ﺣﻘﻮﻝ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺠﺪﻳﺪ ( ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺠﺪﻳﺪ ‪CREATE TABLE‬‬
‫‪AS‬‬
‫) ﻧﺨﺘﺎﺭ ﺣﻘﻮﻝ ﻣﻦ ﺍﻟﺠﺪﻭﻝ ﺍﻟﻘﺪﻳﻢ ( ‪SELECT‬‬
‫; ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﺍﻟﻘﺪﻳﻢ ‪FROM‬‬
‫* ﻭﻳﺸﺘﺮﻁﹸ ﻓﻲ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﻭﺣﻘﻮﻟﻪ ﻋﺪﺓ ﺷﺮﻭﻁ ﻭﻫﻲ ‪:‬‬
‫‪ -١‬ﻻ ﻳﺘﺠﺎﻭﺯ ﻃﻮﻝ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﻋﻦ ‪ 30‬ﺣﺮﻓﺎﹰ ‪.‬‬
‫‪ -٢‬ﻳﻤﻜﻦ ﺍﻥ ﻳﻜﻮﻥ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﺧﻠﻴﻂ ﻣﻦ ﺍﻷﺭﻗﺎﻡ ﻭﺍﻟﺤﺮﻭﻑ ﻭﺍﻟﺮﻣﻮﺯ ﺍﻟﺨﺎﺻﻪ ﻭﻟﻜﻦ ﻻﺑﺪ ﺃﻥ ﻳﺒﺪﺃ‬
‫ﺑﺤﺮﻑ ﻋﻠﻰ ﺍﻷﻗﻞ ‪.‬‬
‫‪ -٣‬ﺃﻥ ﻻ ﻳﻜﻮﻥ ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ﻛﻠﻤﺔ ﻣﺤﺠﻮﺯﺓ ﻓﻲ ﺍﻟﻠﻐﺔ ‪.‬‬

‫ﻭﻟﺤﻘﻮﻝ ﺍﻟﺠﺪﻭﻝ ﺻﻔﺘﻴﻦ ﻫﻤﺎ ‪:‬‬


‫‪ -‬ﻃﻮﻝ ﻫﺬﺍ ﺍﻟﺤﻘﻞ ‪ :‬ﺃﻱ ﺍﻟﺤﺠﻢ ﺍﻟﺬﻱ ﺳﻴﺨﺰﻧﻪ ﻓﻲ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪.‬‬
‫‪ -‬ﺍﻟﻘﻴﻮﺩ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﺤﻘﻞ ‪ :‬ﻭﻫﻲ ﺗﻌﻨﻲ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻼﺯﻣﺔ ﻟﻘﻴﻢ ﻫﺬﻩ ﺍﻟﺤﻘﻮﻝ‬
‫• ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ﻓﻲ ﻟﻐﺔ ‪ SQL‬ﻋﺪﺓ ﺃﻧﻮﺍﻉ ﺃﻫﻤﻬﺎ ﻣﺎ ﻳﻠﻲ ‪:‬‬
‫‪ CHAR‬ﻭ ‪ VARCHAR‬ﻭ ‪ VARCHAR2‬ﻭ ‪ NUMBER‬ﻭ‪ RAW‬ﻭ ‪ DATA‬ﻭ ‪. LONG‬‬
‫* ﺍﻟﻔﺮﻕ ﺑﻴﻦ ‪: VARCHAR & VARCHAR2‬‬
‫ﺃﻥﱠ ‪ VARCHAR2‬ﻳﺴﻤﻰ ﺍﻟﻤﺘﻐﻴـﺮ ﺍﻟﻤﻄـﺎﻃﻲ ﺃﻱ ﻟـﻮ ﺣﺠﺰﻧـﺎ ‪ ١٠‬ﺧﺎﻧـﺎﺕ ﻭﻛـﺎﻥ ﺍﻻﺳـﻢ ﻳﺘﻜـﻮﻥ ﻣـﻦ ‪٦‬‬
‫ﺧﺎﻧــﺎﺕ ﻓﺎﻧــﻪ ﺳــﻮﻑ ﻳﻘﺼــﺮ ﺍﻟــﻰ ‪ ٦‬ﺧﺎﻧــﺎﺕ ﺗﻠﻘﺎﺋﻴــﺎ ﺑﻌﻜــﺲ ﺍﻟـــ ‪ VARCHAR‬ﻓﺴــﻮﻑ ﻳﺤﺠــﺰ ﺟﻤﻴــﻊ‬
‫ﺍﻟﺨﺎﻧﺎﺕ ﺣﺘﻰ ﻭﻟﻮ ﻟﻢ ﺗﺴﺘﻌﻤﻞ ‪.‬‬
‫****************************************************************************************************‬
‫ﻭﻓﻲ ﺍﻟﺪﺭﺱِ ﺍﻟﻘﺎﺩﻡ ﺑﺈﺫﻥ ﺍﷲ ﺳﻨﺸﺮﺡ ﻣﺎﻫﻴﺔ ﺍﻟﻘﻴﻮﺩ ﻭﺃﻧﻮﺍﻋﻬﺎ ﻣﻊ ﻣﺜﺎﻝ ﻟﻜﻞ ﻧﻮﻉ ‪..‬‬
‫ﻓﺈﻟﻰ ﻟﻘﺎﺀ ﻗﺮﻳﺐ ﺑﺈﺫﻥ ﺍﷲ ﺗﻌﺎﻟﻰ ‪.‬ﻭﺳﺎﻣﺤﻮﻧﺎ ﻋﻠﻰ ﺍﻟﺘﻘﺼﻴﺮ ‪ ،‬ﻭﻓﻖ ﺍﷲ ﺍﻟﺠﻤﻴﻊ ﻟﻤﺎ ﻳﺤﺒﻪ ﻭﻳﺮﺿﺎﻩ ‪..‬‬

‫ﺍﻷﺳﻴـــــــــــــــــــــــــــــــــــــــــــــــﻒ‬
‫‪Email:[email protected]‬‬
‫ﺑﺴﻢ ﺍﷲ ﺍﻟﺮﺣﻤﻦ ﺍﻟﺮﺣﻴﻢ‬

‫ﺳﻠﺴﻠــﺔ ﺗﻌﻠـــﻢ‬ ‫‪‬‬


‫‪‬‬

‫ﺑﺴﻬﻮﻟــ ـ ـﺔ‬ ‫‪‬‬


‫‪‬‬
‫‪ ‬‬
‫‪‬‬
‫ﻗﺒﻞ ﺃﻥ ﻧﺒﺪﺃ ﺩﺭﺳﻨﺎ ﻫﺬﺍ ﺃﻧﻨﺒﻪ ﺇﻟﻰ ﺿﺮﻭﺭﺓ ﺗﻄﺒﻴﻘﻜﻢ ﻟﻜﻞ ﺻﻐﻴﺮﺓ ﻭﻛﺒﻴﺮﺓ ﻓﻴﻪ ‪..‬ﻭﻟﻜﻦ ﺍﻥ‬
‫ﺗﺴﺘﻄﻴﻌﻮ ﺑﻨﺎﺀ ﺟﺪﻭﺍﻝ ﺑﺎﺳﻤﻜﻢ ﺍﻟﺨﺎﺹ ‪ ،‬ﺇﻻ ﺑﻌﺪ ﺇﻋﻄﺎﺋﻪ ﺍﻟﺼﻼﺣﻴﺔ ‪..‬‬
‫ﺍﻵﻥ ﻟﻴﺲ ﻟﻜـﻢ ﺇﻻﺻـﻼﺣﻴﺔ ﺍﻹﺗﺼـﺎﻝ ﻓﻘـﻂ ‪ ،‬ﻭﻟﻜـﻲ ﺗﻜـﻮﻥ ﻟـﻴﻜﻢ ﺑـﺎﻗﻲ ﺍﻟﺼـﻼﺣﻴﺎﺕ ‪ ،‬ﻧﻜﺘـﺐ‬
‫ﺍﻷﻣﺮ ﺍﻟﺘﺎﻟﻲ ‪..‬‬
‫; ‪SQL> grant resource to ‬‬
‫ﻓﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺨﺒﺮﻧﺎ ﺃﻧ‪‬ﻪ ﺗﻢ ﻣﻨﺢ ﺍﻟﺼﻼﺣﻴﺔ ‪..‬‬
‫‪Grant succeeded.‬‬
‫ﻭﺍﻵﻥ ﺑﺈﻣﻜﺎﻧﻜﻢ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﺍﻝ ﻭﺍﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ ﺑﻜﻞ ﺣﺮﻳﺔ ﻣﻦ ﺧﻼﻝ ﺍﺳﻤﻚ ﺍﻟﺨﺎﺹ ‪..‬‬

‫ﻗﻤﻨﺎ ﻓﻲ ﺩﺭﺳﻨﺎ ﺍﻟﺴﺎﺑﻖ ﺑﺈﻧﺸﺎﺀ ﺟـﺪﻭﻝ ﻳﺤـﻮﻱ ﻋـﺪﺓ ﺣﻘـﻮﻝ ﺑﻤﻮﺍﺻـﻔﺎﺕِ ﻣﻌﻴﻨـﺔ ‪ ،‬ﻭﻟﻜﻨﻬـﺎ ﻻﺗﺤﻤـﻞ ﺃﻱ‬
‫ﻗﻴﻮﺩِ ﺃﻭ ﺷﺮﻭﻁ ﻟﻮﺿﻊ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﺪﺍﺧﻠﻬﺎ ‪ ،‬ﻭﻭﺿﻊ ﻫﺬﻩ ﺍﻟﻘﻴﻮﺩ ﻋﻠﻰ ﺍﻷﻋﻤﺪﺓ ﻓﻲ ﻏﺎﻳﺔ ﺍﻷﻫﻤﻴﺔ ﻣﻦ ﺃﺟﻞ‬
‫ﻭﺿﻊ ﺷﺮﻭﻁ ﻣﻨﺎﺳﺒﺔ ﻭﻭﺍﺿﺤﺔ ﻋﻠﻰ ﻗﻴﻢ ﻫﺬﻩ ﺍﻷﻋﻤﺪﺓ ‪..‬‬
‫‪ ‬‬
‫• ﻳﺠﺐ ﺇﺩﺧﺎﻝ ﻗﻴﻤﺔ ﻓﻲ ﺍﻟﺤﻘﻞ ‪. Nut Null‬‬
‫• ﺃﻥ ﻻ ﺗﻜﺮﺭ ﻗﻴﻤﺔ ﺍﻟﺤﻘﻞ ‪. Unique‬‬
‫• ﻭﺿﻊ ﻗﻴﻤﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ ﻟﻠﺤﻘﻞ ‪. Default‬‬
‫• ﺇﺟﺮﺍﺀ ﻓﺤﺺ ﻣﻌﻴﻦ ﻋﻠﻰ ﺍﻟﺤﻘﻞ ‪. Check‬‬
‫• ﺇﻧﺸﺎﺀ ﻗﻴﺪ ﻣﻔﺘﺎﺡ ﺭﺋﻴﺴﻲ ‪. Primary Key‬‬
‫• ﺇﻧﺸﺎﺀ ﻗﻴﺪ ﻣﻔﺘﺎﺡ ﺛﺎﻧﻮﻱ ‪. Foreign Key‬‬
‫‪ ‬‬
‫‪In line constraint ‬‬
‫ﻭﺗﻌﻨﻲ ﺇﻧﺸﺎﺀ ﻗﻴﻮﺩ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺗﻌﺮﻳﻒ ﺍﻟﺤﻘﻞ ‪ ،‬ﺃﻱ ﻳ‪‬ﻜﺘﺐ ﺍﻟﻘﻴﺪ ﻓﻲ ﻧﻔﺲ ﺳﻄﺮ ﺗﻌﺮﻳﻒ ﺍﻟﺤﻘﻞ ‪،‬‬
‫ﺃﻭ ﻓﻲ ﺍﻟﺴﻄﺮ ﺍﻟﺘﺎﻟﻲ ﻣﺒﺎﺷﺮﺓ ‪..‬‬
‫‪Out line constraint ‬‬
‫ﻭﺗﻌﻨﻲ ﺇﻧﺸﺎﺀ ﻗﻴﻮﺩ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺗﻌﺮﻳﻒ ﺍﻟﺠﺪﻭﻝ ‪ ،‬ﺃﻱ ﺗ‪‬ﻜﺘﺐ ﺟﻤﻴﻊ ﺍﻟﻘﻴﻮﺩ ﺑﻌﺪ ﺍﻹﻧﺘﻬـﺎﺀ ﻣـﻦ ﺗﻌﺮﻳـﻒ‬
‫ﺍﻟﺤﻘﻮﻝ ‪ ،‬ﻭﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻫﻲ ﺍﻟﻤﻌﺘﻤﺪﺓ ﻣﻦ ﺍﻟﺸﺮﻛﺔ ‪ ،‬ﻭﻫﻲ ﺍﻷﻓﻀﻞ ﺣﺴﺐ ﺭﺃﻱ ﺍﻟﻜﺜﻴﺮﻳﻦ ‪..‬‬
‫ﻭﻧﻨﺒﻪ ﻫﻨﺎ ﺇﻟﻰ ﺃﻥ ﻫﺎﺗﻴﻦ ﺍﻟﻄﺮﻳﻘﺘﻴﻦ ﺗﺴﺮﻳﺎﻥ ﻋﻠﻰ ﺟﻤﻴﻊ ﺍﻟﻘﻴﻮﺩ ﺍﻟﺴﺘﺔ ﺍﻟﺘﻲ ﺫﻛﺮﻧﺎﻫﺎ ‪ ،‬ﻣﺎﻋﺪﺍ ﺍﻟﻘﻴﺪ‬
‫ﺫﻭ ﺍﻟﻘﻴﻤﺔ ﺍﻹﻓﺘﺮﺍﺿﻴﺔ ﻟﻠﺤﻘﻞ ) ‪ ( Default‬ﻓﺘﺴﺮﻱ ﻋﻠﻴﻪ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻭﻟﻰ ﻓﻘﻂ ‪.‬‬

‫‪ ‬‬
‫• ﺃﻥ ﻻﻳﺘﻜﺮﺭ ﺍﺳﻢ ﺍﻟﻘﻴﺪ ‪.‬‬
‫• ﺃﻥ ﻻﻳﺰﻳﺪ ﻋﻦ ‪ 30‬ﺣﺮﻑ ‪.‬‬
‫ﻭﺳﻨﺒﺪﺃ ﺑﺸﺮﺡ ﻫﺬﻩ ﺍﻟﻘﻴﻮﺩ ﺇﻥ ﺷﺎﺀ ﺍﷲ ‪ ،‬ﻣﻊ ﺫﻛﺮ ﻣﺜﺎﻝ ﻟﻜﻞ ﻗﻴﺪ ﺑﻄﺮﻳﻘﺘﻲ ﻛﺘﺎﺑﺘﻪ ‪..‬‬

‫‪( Nut Null) ‬‬


‫ﻭﻫﻮ ﻭﺿﻊ ﻗﻴﺪ ﻋﻠﻰ ﺣﻘﻞٍ ﻣﺎ ‪ ،‬ﺑﺤﻴﺚ ﻻﻳﻜﻮﻥ ﻫﺬﺍ ﺍﻟﺤﻘﻞ ﺫﻭ ﻗﻴﻤـﺔ ﻓﺎﺭﻏـﺔ ‪..‬ﺃﻱ ﻳﺠـﺐ ﺃﻥ ﻳﺤﺘـﻮﻱ‬
‫ﻋﻠﻰ ﻗﻴﻤﺔ ‪ ..‬ﻛﺤﻘﻞ ﺭﻗﻢ ﺍﻟﻄﺎﻟﺐ ﻭﺣﻘﻞ ﺍﺳﻢ ﺍﻟﻄﺎﻟﺐ ﻣﺜﻼﹰ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻳﺤﻮﻳﺎﻥ ﻋﻠﻰ ﻗﻴﻤﺔ ‪..‬‬
‫• ‪In line ‬‬
‫( ‪SQL> create table customer‬‬
‫‪2 cust_no number(4) not null,‬‬
‫)‪3 cust_name varchar2(40‬‬
‫‪not null,‬‬
‫)‪4 cust_address varchar2 (30‬‬
‫;) ‪5‬‬
‫‪‬‬
‫‪ ‬‬
‫• ﺃﻧﺸــﺄﻧﺎ ﻫﻨــﺎ ﺍﻟﺠــﺪﻭﻝ ﺍﻟﺨــﺎﺹ ﺑﺎﻟﺰﺑــﺎﺋﻦ ؛ ﺃﻥ ﺍﻟﺤﻘــﻞ ﺍﻷﻭﻝ ‪ :‬ﺭﻗــﻢ ﺍﻟﺰﺑــﻮﻥ )‪ (cust_no‬ﻭﺍﻟﺤﻘــﻞ‬
‫ﺍﻟﺜﺎﻧﻲ ‪ :‬ﺍﺳﻢ ﺍﻟﺰﺑﻮﻥ )‪ (cust_name‬ﻛﻼﻫﻤﺎ ﻋﺮﻓﻨﺎﻫﻤﺎ ﺑﺄﻥ ﻻﻳﻜﻮﻧﺎ ﺫﻭ ﻗﻴﻤﺔ ﻓﺎﺭﻏﺔ ‪..‬ﻷﻧﻪ‬
‫ﻳﺠﺐ ﻣﻌﺮﻓﺔ ﺭﻗﻢ ﺍﻟﺰﺑﻮﻥ ﻭﺍﺳﻤﻪ ‪..‬ﺃﻣﺎ ﺍﻟﺤﻘﻞ ﺍﻟﺜﺎﻟﺚ ‪ :‬ﻋﻨﻮﺍﻥ ﺍﻟﺰﺑﻮﻥ )‪ ،(cust_address‬ﻓﻠﻴﺲ‬
‫ﻣﻬﻤﺎﹰ ‪ ،‬ﻓﻼ ﺿﻴﺮ ﺃﻥ ﻳﻜﻮﻥ ﻓﺎﺭﻏﺎﹰ ﻋﻨﺪ ﺇﺩﺧﺎﻝ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪.‬‬
‫• ﺃﻧﻨﺎ ﺫﻛﺮﻧﺎ ﺍﺳﻢ ﺍﻟﻘﻴـﺪ ﻭﻫـﻮ ‪ not null‬ﺑﻌـﺪ ﺗﻌﺮﻳـﻒ ﺍﻟﺤﻘـﻞ ﻣﺒﺎﺷـﺮﺓ ‪ ،‬ﺳـﻮﺍﺀً ﻓـﻲ ﻧﻔـﺲ ﺍﻟﺴـﻄﺮ‬
‫ﻛﻤﺎ ﻓﻲ ﺗﻌﺮﻳﻒ ﺣﻘﻞ ﺭﻗﻢ ﺍﻟﺰﺑﻮﻥ ‪ ،‬ﺃﻭ ﻓﻲ ﺳﻄﺮٍ ﺁﺧﺮ ﻛﻤﺎ ﻓﻲ ﺗﻌﺮﻳﻒ ﺣﻘﻞ ﺍﺳﻢ ﺍﻟﺰﺑﻮﻥ ‪.‬‬
‫• ‪Out line ‬‬
‫( ‪SQL> create table customer‬‬
‫‪2 cust_no number(4),‬‬
‫‪3 cust_name varchar2(40) ,‬‬
‫‪4 cust_address varchar2 (30),‬‬
‫‪5 constraint cust_no_nt‬‬
‫‪6 check (cust_no is not null),‬‬
‫‪7 constraint cust_name_nt‬‬
‫)‪8 check ( cust_name is not null‬‬
‫;) ‪9‬‬

‫‪ ‬‬
‫ﺃﻧﻨﺎ ﻋﺮﻓﻨﺎ ﺍﻟﺤﻘﻮﻝ ﺃﻭﻻﹰ ‪ ،‬ﺛﻢ ﻭﺿﻌﻨﺎ ﺍﻟﻘﻴﻮﺩ ‪ ،‬ﻭﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﺃﻓﻀﻞ ﻣﻦ ﺍﻷﻭﻟﻰ ؛ ﻓﻤﺜﻼﹰ ﻋﻨﺪﻣﺎ ﻋﺮﻓﻨﺎ‬
‫ﺍﻟﺤﻘﻞ )ﺭﻗﻢ ﺍﻟﺰﺑﻮﻥ ( ﻛﺘﺒﻨﺎ ﺍﻵﺗﻲ ‪..‬‬

‫‪constraint cust_no_nt‬‬
‫ﺣﻴﺚﹸ ‪ constraint‬ﻛﻠﻤﺔ ﻣﺤﺠﻮﺯﺓ ﻣﻌﻨﺎﻫﺎ ﻗﻴﺪ ‪ ،‬ﺛﻢ ﻧﺬﻛﺮ ﺍﺳﻢ ﺍﻟﻘﻴﺪ ﻭﻫﻮ ﻳﺘﻜﻮﻥ ﻣﻦ ﺟﺰﺃﻳﻦ ‪:‬‬
‫• ﺍﻟﺠﺰﺀُ ﺍﻷﻭﻝ ‪ ..‬ﻫﻮ ﺍﺳﻢ ﺍﻟﺤﻘﻞ ﻧﻔﺴﻪ ‪..‬‬
‫• ﺍﻟﺠﺰﺀُ ﺍﻟﺜﺎﻧﻲ ‪ ..‬ﻫﻮ ﺍﺧﺘﺼﺎﺭ ﻻﺳﻢ ﺍﻟﻘﻴﺪ ‪ ،‬ﻭﻫﻨﺎ ﺍﺧﺘﺼﺮﻧﺎﻩ ﺑـ‪ nt‬ﻭﺑﻬﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻧﻜﺘﺐ ﺍﺳﻤﺎﺀ‬
‫ﺑﻘﻴﺔ ﺍﻟﻘﻴﻮﺩ ﺍﻷﺧﺮﻯ ‪..‬‬
‫• ﺃﻣﺎ )‪ check (cust_no is not null‬ﻓﻤﻌﻨﺎﻩ ﺍﻓﺤﺺ ﺍﻟﺤﻘﻞ ‪ cust_no‬ﻫﻞ ﻟﻴﺲ ﻓﺎﺭﻏﺎﹰ ‪..‬ﻭﻫﺬﺍ‬
‫ﻣﺎ ﻧﺮﻳﺪﻩ ﺃﻥ ﻻ ﻳﻜﻮﻥ ﻓﺎﺭﻏﺎﹰ )ﺃﻱ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﻗﻴﻤﺔ ( ‪.‬‬

‫‪( Unique) ‬‬


‫ﻭﻣﻌﻨﺎﻩ ﺃﻻ ﺗﺘﻜﺮﺭ ﻗﻴﻤﺔ ﻫﺬﺍ ﺍﻟﺤﻘﻞ ﺍﻟﺬﻱ ﺳﻨﻀﻊ ﻫﺬﺍ ﺍﻟﻘﻴﺪ ﻋﻠﻴﻪ ‪ ،‬ﻓﻤﺜﻼﹰ ﻟـﻮ ﻭﺿـﻌﻨﺎ ﻫـﺬﺍ ﺍﻟﻘﻴـﺪ‬
‫ﻋﻠﻰ ﺣﻘﻞ ﺭﻗﻢ ﺍﻟﺰﺑﻮﻥ ‪ ،‬ﻧﺴﺘﻨﺘﺞ ﺃﻧﻪ ﻻ ﻧﺮﻳﺪ ﺃﻥ ﻳﺘﻜﺮﺭ ﺭﻗﻢ ﺍﻟﺰﺑﻮﻥ ‪..‬ﻛﻤﺎ ﻳﻠﻲ ‪:‬‬

‫• ‪In line ‬‬


‫( ‪SQL> create table customer‬‬
‫‪2 cust_no number(4) unique,‬‬
‫‪3 cust_name varchar2(40) not null,‬‬
‫)‪4 cust_address varchar2(30‬‬
‫;) ‪5‬‬
‫• ‪Out line ‬‬
‫( ‪SQL> create table customer‬‬
‫‪2 cust_no number(4),‬‬
‫‪3 cust_name varchar2(40) not null,‬‬
‫‪4 cust_address varchar2(30),‬‬
‫‪5 constraint cust_no_uni‬‬
‫)‪6 unique ( cust_no‬‬
‫;) ‪7‬‬

‫‪( Default) ‬‬


‫ﻭﻧﺴــﺘﻔﻴﺪ ﻣﻨــﻪ ﻓــﻲ ﻭﺿــﻊ ﻗﻴﻤــﺔ ﺍﻓﺘﺮﺍﺿــﻴﺔ ﻟﺤﻘ ـﻞٍ ﻣــﺎ ‪ ،‬ﻣــﺜﻼﹰ ﻟﺤﻘــﻞ ﻋﻤــﺮ ﺍﻟﻄﺎﻟــﺐ ‪ ،‬ﻧﻀــﻊ ﻗﻴﻤــﺔ‬
‫ﺍﻓﺘﺮﺍﺿﻴﺔ ﻟﻌﻤﺮﻩ ‪ ،‬ﻭﺫﻟﻚ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﺇﺩﺧﺎﻝ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺃﻱ ﻗﻴﻤﺔ ‪..‬‬
‫ﻭﻫﺬﺍ ﺍﻟﻘﻴﺪ ﻫﻮ ﺍﻟﻮﺣﻴﺪ ﺍﻟﺬﻱ ﻳ‪‬ﻜﺘﺐ ﺑﻄﺮﻳﻘﺔ ‪ In line‬ﻓﻘﻂ ‪..‬‬

‫‪ ‬‬
‫( ‪create table student‬‬
‫‪std_no number(7) not null,‬‬
‫‪std_name varchar2(40) not null,‬‬
‫)‪std_age number(2‬‬
‫‪default 20 ,‬‬
‫)‪std_nation varchar2(20‬‬
‫'‪default 'saudi‬‬
‫;)‬
‫‪ ‬‬
‫• ﺃﻧﻨﺎ ﻋﺮﻓﻨﺎ ﺣﻘﻞ ﻋﻤﺮ ﺍﻟﻄﺎﻟﺐ )‪ ( std_no‬ﻋﻠﻰ ﺃﻧﻪ ﺭﻗﻢ ﻭﺃﻋﻄﻴﻨﺎﻩ ﻗﻴﻤﺔﹰ ﺍﻓﺘﺮﺍﺿﻴﺔ ﻓﻲ ﺣﺎﻟـﺔ‬
‫ﻋﺪﻡ ﺇﺩﺧﺎﻝ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻷﻱ ﻗﻴﻤﺔ ‪ ،‬ﻭﻫﻲ ﺍﻟﻘﻴﻤﺔ ‪20‬ﺳﻨﺔ ‪‬‬
‫• ﻭ ﻋﺮﻓﻨﺎ ﺣﻘﻞ ﺟﻨﺴﻴﺔ ﺍﻟﻄﺎﻟﺐ )‪( std_nation‬ﻋﻠﻰ ﺃﻧـﻪ ﻧﺼـﻲ ‪ ،‬ﻭﺃﻋﻄﻴﻨـﺎﻩ ﻗﻴﻤـﺔﹰ ﺍﻓﺘﺮﺍﺿـﻴﺔ‬
‫ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﺇﺩﺧﺎﻝ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻷﻱ ﻗﻴﻤﺔ ‪ ،‬ﻭﻫﻲ ﺍﻟﺠﻨﺴﻴﺔ‪Saudi‬‬

‫‪( Check) ‬‬


‫ﻭﻧﺴﺘﻔﻴﺪ ﻣﻨﻪ ﻋﻨﺪﻣﺎ ﻧﺮﻳﺪ ﺃﻥ ﻧﻔﺤـﺺ ﻗﻴﻤـﺔ ﻣﺪﺧﻠـﺔ ﻟﺤﻘـﻞ ﻣﻌـﻴﻦ ﻳﻘﺒـﻞ ﻣﺠﻤﻮﻋـﺔ ﻗـﻴﻢ ﻣﺤـﺪﺩﺓ‬
‫ﺳﻠﻔﺎﹰ‪ ،‬ﺣﻴﺚ ﻳﻘﻮﻡ ﺍﻟﻘﻴﺪ ﺑﻔﺤﺺ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺨﻠﺔ ﻣﻦ ﺑﻴﻦ ﺍﻟﻘﻴﻢ ﺍﻟﻤﻮﺟﻮﺩﺓ ‪.‬‬
‫• ‪In line ‬‬
‫( ‪SQL> create table student‬‬
‫‪2 std_no number(7) not null,‬‬
‫‪3 std_name varchar2(40) not null,‬‬
‫)‪4 std_sex varchar2(1‬‬
‫‪5 check ( std_sex in (' m ',' f ')),‬‬
‫)‪6 std_case varchar2(1‬‬
‫‪7 check ( std_case in (' s ',' m',' w ',' d ')),‬‬
‫)‪8 std_age number(2‬‬
‫) ‪9 check ( std_age between 19 and 30‬‬
‫;) ‪10‬‬
‫‪ ‬‬
‫• ﺃﻧﻨﺎ ﻋﺮﻓﻨﺎ ﺣﻘﻞ ﺟﻨﺲ ﺍﻟﻄﺎﻟﺐ )‪ (std_sex‬ﻋﻠﻰ ﺃﻧﻪ ﻧﺼﻲ ﻭﺃﻋﻄﻴﻨﺎﻩ ﻗﻴﺪ ﺍﻟﻔﺤﺺ ‪ check‬‬
‫ﻓﻬﻨﺎ ﻳﻔﺤﺺ ﻗﻴﻤﺔ ﺍﻟﺤﻘﻞ ‪ ،‬ﻓﻌﻨﺪﻣﺎ ﻳﺪﺧﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺤﺮﻑ ‪ m‬ﻳﻌﻨﻲ ﺫﻟﻚ ﺃﻥ ﺍﻟﻄﺎﻟﺐ ﺫﻛﺮ ‪ ..‬‬
‫ﻭﻋﻨﺪﻣﺎ ﻳﺪﺧﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺤﺮﻑ ‪ f‬ﻳﻌﻨﻲ ﺫﻟﻚ ﺃﻥ ﺍﻟﻄﺎﻟﺐ ﺃﻧﺜﻰ ‪..‬‬
‫• ﻭﻋﺮﻓﻨــﺎ ﺣﻘــﻞ ﺍﻟﺤﺎﻟــﺔ ﺍﻹﺟﺘﻤﺎﻋﻴ ـﺔ ﻟﻠﻄﺎﻟــﺐ )‪ (std_case‬ﻋﻠــﻰ ﺃﻧــﻪ ﻧﺼــﻲ ﻭﺃﻋﻄﻴﻨــﺎﻩ ﻗﻴــﺪ‬
‫ﺍﻟﻔﺤﺺ ‪check‬ﻭﻫﻨﺎ ﻳﻔﺤﺺ ﻗﻴﻤﺔ ﺍﻟﺤﻘﻞ ‪ ،‬ﻓﻌﻨﺪﻣﺎ ﻳﺪﺧﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺤﺮﻑ ﻓﻬﻨﺎ ﻳﻔﺤﺺ‬
‫ﻗﻴﻤﺔ ﺍﻟﺤﻘﻞ ‪..‬‬
‫‪ -‬ﻓﻌﻨﺪﻣﺎ ﻳﺪﺧﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺤﺮﻑ ‪ s‬ﻳﻌﻨﻲ ﺫﻟﻚ ﺃﻥ ﺍﻟﻄﺎﻟﺐ ﻣﺘﺰﻭﺝ ‪.‬‬
‫‪ -‬ﻭﻋﻨﺪﻣﺎ ﻳﺪﺧﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺤﺮﻑ ‪ w‬ﻳﻌﻨﻲ ﺫﻟﻚ ﺃﻥ ﺍﻟﻄﺎﻟﺐ ﺃﺭﻣﻞ ‪.‬‬
‫‪ -‬ﻭﻋﻨﺪﻣﺎ ﻳﺪﺧﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺤﺮﻑ ‪ m‬ﻳﻌﻨﻲ ﺫﻟﻚ ﺃﻥ ﺍﻟﻄﺎﻟﺐ ﻣﻄﻠﻖ ‪.‬‬
‫‪ -‬ﻭﻋﻨﺪﻣﺎ ﻳﺪﺧﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺤﺮﻑ ‪ d‬ﻳﻌﻨﻲ ﺫﻟﻚ ﺃﻥ ﺍﻟﻄﺎﻟﺐ ﺃﻋﺰﺏ ‪.‬‬
‫• ﻭﻋﺮﻓﻨﺎ ﺣﻘﻞ ﻋﻤﺮ ﺍﻟﻄﺎﻟﺐ )‪ (std_ age‬ﻋﻠﻰ ﺃﻧﻪ ﻧﺼﻲ ﻭﺃﻋﻄﻴﻨﺎﻩ ﻗﻴﺪ ﺍﻟﻔﺤـﺺ ‪check‬ﻭﻫﻨـﺎ‬
‫ﻳﻔﺤﺺ ﻗﻴﻤﺔ ﺍﻟﺤﻘﻞ ﻣﺎﺑﻴﻦ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻌﻤﺮﻳﺔ ﻣﻦ ‪ 19‬ﺇﻟﻰ ‪.. 30‬‬

‫• ‪Out line ‬‬


‫‪SQL> create table student‬‬
‫‪2 ( std_no number(7) not null,‬‬
‫‪3 std_name varchar2(40) not null,‬‬
‫‪4 std_sex varchar2(1),‬‬
‫‪5 std_case varchar2(1),‬‬
‫‪6 std_age number(2),‬‬
‫‪7 constraint std_sex_chk‬‬
‫‪8 check (std_sex in (' m ',' f ')),‬‬
‫‪9 constraint std_case_chk‬‬
‫‪10 check( std_case in (' s ',' m',' w ',' d ')),‬‬
‫‪11 constraint stdstd_age_chk‬‬
‫)‪12 check ( std_age between 19 and 30‬‬
‫;) ‪13‬‬
‫ﻭﺃﺧﻴﺮﺍﹰ ‪..‬ﺭﺟـــﺎﺀ ﺣـــــــﺎﺭ ﺇﻟﻴﻜﻢ ‪..‬‬
‫ﺗﻄﺒﻴﻖ ﻛﻞ ﻣﺜﺎﻝ ﺃﻭﺭﺩﻩ ﻫﻨﺎ ﻣﻊ ﻛﻞ ﻗﻴﺪ ﻭﺑﻜﻼ ﺍﻟﻄﺮﻳﻘﺘﻴﻦ ‪،‬ﻭ ﺑﺪﻭﻥ ﻧﺴﺦ ﺍﻟﺠﺪﻭﻝ‬
‫ﻭﻟﺼﻘﻪ ‪ ،‬ﻗﻢ ﺑﻜﺘﺎﺑﺔ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ﺑﻨﻔﺴﻚ ﺣﺘﻰ ﺗﺴﺘﻔﻴﺪ ﻭﺗﺘﻌﻠﻢ ‪..‬‬
‫ﺍﻛﺘﺐ ﺍﻟﺠﺪﻭﻝ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻷﻭﻟﻰ ﺛﻢ ﻗﻢ ﺑﺤﺬ ﻓﻪ ﺑﺎﻷﻣﺮ ﺍﻟﺘﺎﻟﻲ ‪..‬‬
‫;‪SQL> drop table ‬‬
‫ﺛﻢ ﺍﻛﺘﺐ ﺍﻟﺠﺪﻭﻝ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﺜﺎﻧﻴﺔ ﻭﻫﻜﺬﺍ ‪...‬‬
‫‪‬‬ ‫‪‬‬
‫* ﺃﻣﺮ ﺇﻋﻄﺎﺀ ﺻﻼﺣﻴﺔ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﺍﻝ ﻭﻏﻴﺮﻫﺎ ﻣﻦ ﺍﻟﻜﺎﺋﻨﺎﺕ ﻓﻲ ‪: SQL‬‬
‫; ‪SQL> grant resource to ‬‬
‫ﻓﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺨﺒﺮﻧﺎ ﺃﻧ‪‬ﻪ ﺗﻢ ﻣﻨﺢ ﺍﻟﺼﻼﺣﻴﺔ ‪..‬‬
‫‪Grant succeeded.‬‬
‫* ﻫﻨﺎﻙ ﻣﺠﻤﻮﻋﺔ ﻗﻴﻮﺩ ﻳﻤﻜﻦ ﺃﻥ ﻧﺴﺘﺨﺪﻣﻬﺎ ﻋﻠﻰ ﺍﻟﺤﻘﻮﻝ ﻭﻫﻲ ﻛﺎﻟﺘﺎﻟﻲ ‪:‬‬
‫• ﻳﺠﺐ ﺇﺩﺧﺎﻝ ﻗﻴﻤﺔ ﻓﻲ ﺍﻟﺤﻘﻞ ‪. Nut Null‬‬
‫• ﺃﻥ ﻻ ﺗﻜﺮﺭ ﻗﻴﻤﺔ ﺍﻟﺤﻘﻞ ‪. Unique‬‬
‫• ﻭﺿﻊ ﻗﻴﻤﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ ﻟﻠﺤﻘﻞ ‪. Default‬‬
‫• ﺇﺟﺮﺍﺀ ﻓﺤﺺ ﻣﻌﻴﻦ ﻋﻠﻰ ﺍﻟﺤﻘﻞ ‪. Check‬‬
‫• ﺇﻧﺸﺎﺀ ﻗﻴﺪ ﻣﻔﺘﺎﺡ ﺭﺋﻴﺴﻲ ‪. Primary Key‬‬
‫• ﺇﻧﺸﺎﺀ ﻗﻴﺪ ﻣﻔﺘﺎﺡ ﺛﺎﻧﻮﻱ ‪. Foreign Key‬‬
‫* ﻫﻨﺎﻙ ﻃﺮﻳﻘﺘﺎﻥ ﻹﻧﺸﺎﺀ ﺍﻟﻘﻴﻮﺩ ﻋﻠﻰ ﺍﻟﺤﻘﻮﻝ ‪:‬‬
‫‪ -‬ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺗﻌﺮﻳﻒ ﺍﻟﺤﻘﻞ ‪..In line constrain‬‬
‫‪ -‬ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺗﻌﺮﻳﻒ ﺍﻟﺠﺪﻭﻝ ‪..Out line constrain‬‬
‫* ﺍﺳﻢ ﺍﻟﻘﻴﺪ ﻫﻮ ﻳﺘﻜﻮﻥ ﻣﻦ ﺟﺰﺃﻳﻦ ‪:‬‬
‫• ﺍﻟﺠﺰﺀُ ﺍﻷﻭﻝ ‪ ..‬ﻫﻮ ﺍﺳﻢ ﺍﻟﺤﻘﻞ ﻧﻔﺴﻪ ‪..‬‬
‫• ﺍﻟﺠﺰﺀُ ﺍﻟﺜﺎﻧﻲ ‪ ..‬ﻫﻮ ﺍﺧﺘﺼﺎﺭ ﻹﺳﻢ ﺍﻟﻘﻴﺪ ‪..‬‬
‫ﻭﻫـﺎﺗﻴﻦ ﺍﻟﻄـﺮﻳﻘﺘﻴﻦ ﺗﺴـﺮﻳﺎﻥ ﻋﻠــﻰ ﺟﻤﻴـﻊ ﺍﻟﻘﻴـﻮﺩ ﺍﻟﺴـﺘﺔ ﺍﻟﺘــﻲ ﺫﻛﺮﻧﺎﻫـﺎ ‪ ،‬ﻣﺎﻋـﺪﺍ ﺍﻟﻘﻴـﺪ ﺫﻭ ﺍﻟﻘﻴﻤــﺔ‬
‫ﺍﻹﺑﺘﺪﺍﺋﻴﺔ ﻟﻠﺤﻘﻞ ) ‪ ( Default‬ﻓﺘﺴﺮﻱ ﻋﻠﻴﻪ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻭﻟﻰ ﻓﻘﻂ ‪.‬‬
‫• ﺃﻣﺮ ﺣﺬﻑ ﺟﺪﻭﻝ ﻫﻮ ‪:‬‬
‫;‪SQL> drop table ‬‬

‫****************************************************************************************************‬
‫‪ ‬‬
‫‪١‬‬
‫• ﺑﺎﻹﺳﻢ ‪ Mohmad‬ﻭﺑﻜﻠﻤﺔ ﺍﻟﺴﺮ ‪. moh‬‬
‫• ﺍﻣﻨﺤﻪ ﺻﻼﺣﻴﺔ ﺍﻹﺗﺼﺎﻝ ﺑﺄﻭﺭﺍﻛﻞ ‪..‬‬
‫• ﺍﻣﻨﺤﻪ ﺻﻼﺣﻴﺔ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﺍﻝ )ﻣﻦ ﺩﺭﺱ ﺍﻟﻴﻮﻡ ( ‪..‬‬
‫‪ ٢‬‬
‫• ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪ " :‬ﺍﻟﻄﻼﺏ " ‪ ،‬ﻭﺑﺎﻟﺤﻘﻮﻝ ﺍﻟﺘﺎﻟﻴﺔ ‪:‬‬
‫‪) -‬ﺭﻗﻢ ﺍﻟﻄﺎﻟﺐ ﺑﺤﺠﻢ ‪ ٨‬ﺑﺎﻳﺘﺎﺕ (‬
‫‪ -‬ﺍﺳﻢ ﺍﻟﻄﺎﻟﺐ ﺑﺤﺠﻢ ‪ ٥٠‬ﺑﺖ ‪.‬‬
‫‪ -‬ﺗﺎﺭﻳﺦ ﺍﻟﻤﻴﻼﺩ ‪.‬‬
‫‪ -‬ﻣﻌﺪﻝ ﺍﻟﻄﺎﻟﺐ ﻓﻲ ﺍﻟﺜﺎﻧﻮﻳﺔ ‪.‬‬
‫• ﺍﻇﻬﺮ ﻣﻮﺍﺻﻔﺎﺕ ﺍﻟﺠﺪﻭﻝ ‪.‬‬
‫• ﺍﺣﻔﻆ ﻧﺘﻴﺠﺔ ﺍﻟﻤﻮﺍﺻﻔﺎﺕ ﻓﻲ ﻣﻠﻒ ‪.‬‬
‫• ﺍﺳﺘﺪﻋﻲ ﺍﻟﻤﻠﻒ ﺍﻟﻤﺤﻔﻮﻅ ‪.‬‬
‫• ﺍﻣﺴﺢ ﻣﺨﺰﻥ ﺫﺍﻛﺮﺓ ‪ SQL‬ﺍﻟﻤﺆﻗﺘﺔ ‪..‬‬
‫ﺍﻟﺮﺟﺎﺀ ﺍﻹﺟﺎﺑﺔ ﻋﻠﻴﻬﺎ ‪ ،‬ﻭﺑﻌﺚ ﺍﻹﺟﺎﺑﺎﺕ ﻋﻠﻰ ﺑﺮﻳﺪﻱ ﺍﻟﺨﺎﺹ ‪ ،‬ﺣﺘﻰ ﻧﻌﻠﻢ ﻣﺪﻯ‬
‫ﺍﺳﺘﻴﻌﺎﺑﻜﻢ ﻭﻓﻬﻤﻜﻢ ‪..‬‬
‫ﻭﻓﻲ ﺍﻟﺪﺭﺱِ ﺍﻟﻘﺎﺩﻡ ﺑﺈﺫﻥ ﺍﷲ ﺳﻨﻜﻤﻞ ﻣﺎ ﺑﻘﻲ ﻟﻨﺎ ﻣﻦ ﻣﻮﺿـﻮﻉ ﺍﻟﻘﻴـﻮﺩ ﻋﻠـﻰ ﺍﻟﺠـﺪﻭﺍﻝ ‪ ،‬ﻭﻫﻤـﺎ ﻣـﻦ‬
‫ﺃﻫﻢ ﺍﻟﻘﻴﻮﺩ ﻭﺍﻟﻤﺴﺆﻻﻥ ﻋﻦ ﺭﺑﻂ ﺍﻟﺠﺪﻭﺍﻝ ﺑﻌﻀﻬﺎ ﺑﺒﻌﺾ ‪ ،‬ﺃﻻ ﻭﻫﻤﺎ ‪ :‬ﻗﻴﺪ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴـﻲ ﻭﻗﻴـﺪ‬
‫ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺜﺎﻧﻮﻱ )ﺍﻷﺟﻨﺒﻲ ( ‪..‬‬
‫ﻓﺈﻟﻰ ﻟﻘﺎﺀ ﻗﺮﻳﺐ ﺑﺈﺫﻥ ﺍﷲ ﺗﻌﺎﻟﻰ ‪...‬‬
‫ﻭﺳﺎﻣﺤﻮﻧﺎ ﻋﻠﻰ ﺍﻟﺘﺄﺧﺮ ﻓﻲ ﻃﺮﺡ ﺍﻟﺪﺭﻭﺱ ﻟﻈﺮﻭﻑ ﺧﺎﺭﺟﺔ ﻋﻦ ﺇﺭﺍﺩﺗﻲ ‪..‬‬
‫ﻭﻓﻖ ﺍﷲ ﺍﻟﺠﻤﻴﻊ ﻟﻤﺎ ﻳﺤﺒﻪ ﻭﻳﺮﺿﺎﻩ ‪..‬‬
‫ﺍﻷﺳﻴـــــــــــــــــــــــــــــــــــــــــــــــﻒ‬
‫‪Email:[email protected]‬‬
‫ﺑﺴﻢ ﺍﷲ ﺍﻟﺮﺣﻤﻦ ﺍﻟﺮﺣﻴﻢ‬

‫ﺳﻠﺴﻠــﺔ ﺗﻌﻠـــﻢ‬ ‫‪‬‬


‫‪‬‬

‫ﺑﺴﻬﻮﻟــ ـ ـﺔ‬ ‫‪‬‬


‫‪‬‬
‫‪ ‬‬
‫‪‬‬
‫ﻗﻤﻨﺎ ﻓﻲ ﺩﺭﺳﻨﺎ ﺍﻟﺴﺎﺑﻖ ﺑﺸﺮﺡ ﺍﻷﺭﺑﻌﺔ ﻗﻴﻮﺩِ ﺍﻷﻭﻟﻰ ‪ ،‬ﻭﻓﻲ ﺩﺭﺳﻨﺎ ﻫﺬﺍ ﺍﻟﻴﻮﻡ ﺍﻟﻘﺼﻴﺮ ﻓﻲ ﻣﺎﺩﺗﻪ‬
‫ﺍﻟﻌﻠﻤﻴﺔ ‪..‬ﺍﻟﻤﻬﻢ ﻓﻲ ﻣﻀﻤﻮﻧﻪ ؛ ﺳﻨﻜﻤﻞﹸ ﺇﻥ ﺷﺎﺀ ﺍﷲ ﺍﻟﻘﻴﺪﻳﻦ ﺍﻷﺧﻴﺮﻳﻦ ‪ ،‬ﻭﻫﻤﺎ ﺍﻷﻫﻢ ﻣﻦ ﺟﻤﻴﻊ‬
‫ﺍﻟﻘﻴﻮﺩ ﻷﻧﻬﻤﺎ ﺍﻟﻤﺴﺆﻻﻥ ﻋﻦ ﺭﺑﻂ ﺍﻟﺠﺪﻭﺍﻝ ﺑﻌﻀﻬﺎ ﺑﺒﻌﺾ ﻣﻦ ﺣﻴﺚ ﺗﻜﻮﻳﻦ ﺍﻟﻌﻼﻗﺎﺕ ﺑﻴﻨﻬﺎ ‪..‬‬
‫ﻭﻫﻤﺎ ‪ :‬ﻗﻴﺪ‪ ‬ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ ﻭﻗﻴﺪ‪ ‬ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺜﺎﻧﻮﻱ )ﺍﻷﺟﻨﺒﻲ ( ‪..‬‬

‫‪( Primary Key)‬‬


‫ﻭﻇﻴﻔﺔ ﻫﺬﺍ ﺍﻟﻘﻴﺪ ﺇﻋﻄﺎﺀ ﺣﻘﻞ ﻣﻌﻴﻦ ﻣﻦ ﻋﺪﺓ ﺣﻘﻮﻝ ﻓﻲ ﺟﺪﻭﻝٍ ﻣﺎ ؛ ﺻﻔﺔ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ ﻓﻲ ﻫﺬﺍ‬
‫ﺍﻟﺠﺪﻭﻝ ‪..‬‬
‫‪ ‬ﻛﻤﺎ ﻋﺮﻓﻨﺎﻩ ﻓﻲ ﺍﻟﺪﺭﺱ ﺍﻟﺜﺎﻟﺚ ﻓﻲ ﺩﻭﺭﺓ ﻣﻔﺎﻫﻴﻢ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺃﻧﻪ ‪:‬‬
‫ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺬﻱ ﻳ‪‬ﺤﺪﺩ ﺑﺸﻜﻞ ﻭﺣﻴﺪ ﻭﻣﺘﻔﺮﺩ ﺑﺤﻴﺚ ﻳﺘﻤﻴﺰ ﻋﻦ ﻏﻴﺮﻩ ‪ ،‬ﻓﻼ ﺗﺘﻜﺮﺭ ﻗﻴﻤﺘـﻪ ﻓـﻲ ﺃﻛﺜـﺮ‬
‫ﻣﻦ ﺣﻘﻞ ﻭﺍﺣﺪ ‪ ،‬ﻭﻻ ﻳﻘﺒﻞ ﻗﻴﻤﺔ ‪) Null‬ﺃﻱ ﻻ ﻳﻤﻜﻨﻨﺎ ﺃﻥ ﻧﺘﺮﻙ ﺍﻟﺤﻘﻞ ﻓﺎﺭﻏﺎﹰ ﺑﺪﻭﻥ ﻗﻴﻤﺔ ( ‪.‬‬

‫• ‪In line ‬‬


‫‪SQL> create table student‬‬
‫)‪2 ( std_no number(10‬‬
‫‪3 primary key,‬‬
‫)‪4 std_name varchar2(50‬‬
‫;) ‪5‬‬
‫‪ ‬‬
‫ﺃﻧﻨﺎ ﺃﻧﺸـﺄﻧﺎ ﺟـﺪﻭﻝ ﺍﻟﻄـﻼﺏ ﺑﻤﻔﺘـﺎﺡ ﺭﺋﻴﺴـﻲ ﻫـﻮ ﺣﻘـﻞ ﺭﻗـﻢ ﺍﻟﻄﺎﻟـﺐ )‪ ،(std_no‬ﻓﻨﺘﻌﺎﻣـﻞ ﻣـﻊ ﺑﻴﺎﻧـﺎﺕ‬
‫ﺍﻟﻄﻼﺏ ‪ ،‬ﺑﻮﺍﺳﻄﺔ ﻫﺬﺍ ﺍﻟﺤﻘﻞ ﻭﺍﻟﺬﻱ ﻫﻮ ﻣﻔﺘﺎﺡ ﺭﺋﻴﺴﻲ ؛ ﻭﻧﺴﺘﻄﻴﻊ ﻣﻦ ﺧﻼﻟﻪ ﺍﻟﺒﺤﺚ ﻋﻦ ﻃﺎﻟﺐ ﻣﻌﻴﻦ‬
‫ﻭﻛﺬﻟﻚ ﻋﻨﺪ ﺣﺬﻑ ﻃﺎﻟﺐ ﻣﻌﻴﻦ ‪ ،‬ﺑﻤﺠﺮﺩ ﺃﻥ ﻧﺪﺧﻞ ﺭﻗﻢ ﺍﻟﻄﺎﻟﺐ ‪ ،‬ﻭﻳﻜـﻮﻥ ﻫـﺬﺍ ﺍﻟﻤﻔﺘـﺎﺡ ﺭﺋﻴﺴـﻴﺎﹰ‬
‫ﻓﻲ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ ‪ ،‬ﻭﺃﺟﻨﺒﻴﺎﹰ ﻓﻲ ﺍﻟﺠﺪﻭﺍﻝ ﺍﻷﺧﺮﻯ ‪..‬‬

‫‪ Out line ‬‬


‫‪SQL> create table student‬‬
‫‪2 ( std_no number(10) ,‬‬
‫‪3 std_name varchar2(50),‬‬
‫‪4 constraint pk _std_01‬‬
‫)‪5 primary key (std_no‬‬
‫;) ‪6‬‬
‫‪ ‬‬
‫ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ﻧﻈﻄﺮ ﺇﻟﻰ ﺇﻧﺸﺎﺀ ﺃﻛﺜﺮ ﻣﻦ ﺣﻘﻞ ﺭﺋﻴﺴـﻲ ﻓـﻲ ﺟـﺪﻭﻝٍ ﻭﺍﺣـﺪ ﻛﻤـﺎ ﻓـﻲ ﺍﻟــ ‪Access‬‬
‫ﻭﻓﻲ‬
‫‪ ORACLE‬ﻧﺴﺘﻄﻴﻊ ﺫﻟﻚ ﻭﻟﻜﻦ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﺜﺎﻧﻴﺔ ﺍﻟﻐﻴﺮ ﺧﻄﻴﺔ )‪. ( Out line‬‬

‫‪( Foreign Key)‬‬


‫ﻭﻇﻴﻔﺔ ﻫﺬﺍ ﺍﻟﻘﻴﺪ ﺇﻋﻄﺎﺀ ﺣﻘﻞ ﻣﻌﻴﻦ ﻣﻦ ﻋﺪﺓ ﺣﻘﻮﻝ ﻓﻲ ﺟﺪﻭﻝٍ ﻣﺎ ؛ ﺻﻔﺔ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺟﻨﺒﻲ ﻓﻲ ﻫﺬﺍ‬
‫ﺍﻟﺠﺪﻭﻝ ‪.‬‬
‫‪ ‬ﻛﻤﺎ ﻋﺮﻓﻨﺎﻩ ﻓﻲ ﺍﻟﺪﺭﺱ ﺍﻟﺜﺎﻟﺚ ﻓﻲ ﺩﻭﺭﺓ ﻣﻔﺎﻫﻴﻢ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺃﻧﻪ ‪:‬‬
‫ﻋﺒﺎﺭﺓ ﻋﻦ ﺣﻘﻞ )ﺻﻔﺔ ( ﺃﻭ ﺃﻛﺜـﺮ ﻳﺴـﺘﺨﺪﻡ ﻟﻠـﺮﺑﻂ ﺑـﻴﻦ ﺟـﺪﻭﻟﻴﻦ ‪ ،‬ﻭﺳ‪‬ـﻤﻲ ﺍﻟﻤﻔﺘـﺎﺡ ﺍﻷﺟﻨﺒـﻲ ﺑﻬـﺬﺍ‬
‫ﺍﻻﺳﻢ ﻷﻧﻪ ﻟﻴﺲ ﻣﻦ ﺍﻟﺤﻘﻮﻝ ﺍﻟﻤﻮﺟﻮﺩﺓ ﺃﺻﻼﹰ ﻓﻲ ﺍﻟﺠـﺪﻭﻝ ‪ ،‬ﺃﻱ ﺃﻧـﻪ ﻋﺒـﺎﺭﺓ ﻋـﻦ ﺣﻘـﻞ ﺃﻭ ﺃﻛﺜـﺮ ﺗ‪‬ﻀـﺎﻑ‬
‫ﺇﻟﻰ ﺟﺪﻭﻝ ﻟﺮﺑﻄﻪ ﻣﻊ ﺟﺪﻭﻝ ﺁﺧﺮ ‪.‬‬
‫ﻭﻳﺴﺘﺨﺪﻡ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺟﻨﺒﻲ ﻛﻤﺆﺷﺮ ﻣﻘﺎﺑﻞ ﻟﻠﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ ‪ ،‬ﺑﻤﻌﻨﻰ ﺁﺧﺮ ﻓﺈﻥ ﺍﻟﻤﻔﺘـﺎﺡ ﺍﻷﺟﻨﺒـﻲ‬
‫ﻫﻮ ﻋﺒﺎﺭﺓ ﻋﻦ ﺣﻘﻞ )ﺻـﻔﺔ( ﺃﻭ ﺃﻛﺜـﺮ ﺗ‪‬ﻀـﺎﻑ ﻟﺠـﺪﻭﻝ ﻟﺮﺑﻄـﻪ ﻣـﻊ ﺟـﺪﻭﻝ ﺁﺧـﺮ ‪ ،‬ﻣـﻊ ﺍﻻﻟﺘـﺰﺍﻡ ﺑﻮﺟـﻮﺩ‬
‫ﻣﻔﺘﺎﺡ ﺭﺋﻴﺴﻲ ﻣﻘﺎﺑﻞ ﻣﻊ ﻣﻼﺣﻈﺔ ﺃﻥ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺟﻨﺒﻲ ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻣﻦ ﻧﻔﺲ ﻧـﻮﻉ ﺑﻴﺎﻧـﺎﺕ ) ‪Data‬‬
‫‪ (Type‬ﺍﻟﻤﻔﺘــﺎﺡ ﺍﻟﺮﺋﻴﺴــﻲ ‪ ،‬ﻓﻠــﻮ ﻛــﺎﻥ ﺍﻟﻤﻔﺘــﺎﺡ ﺍﻟﺮﺋﻴﺴــﻲ ﻣــﻦ ﺍﻟﻨــﻮﻉ ﺭﻗــﻢ ﻣــﺜﻼﹰ ‪ ،‬ﻳﺠــﺐ ﺃﻥ ﻳﻜــﻮﻥ‬
‫ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺟﻨﺒﻲ ﻣﻦ ﺍﻟﻨﻮﻉ ﺭﻗﻢ ‪ ،‬ﻟﺬﻟﻚ ﻳﻌﺘﺒﺮ ﺍﻷﺟﻨﺒﻲ ﻣﺆﺷﺮ ﻟﻠﺮﺋﻴﺴﻲ ‪.‬‬

‫• ‪In line ‬‬


‫ﺣﺘﻰ ﻧﻨﺸﺊ ﻣﻔﺘﺎﺣـﺎﹰ ﺃﺟﻨﺒﻴـﺎﹰ ﻓـﻲ ﺟـﺪﻭﻝ ﻣـﺎ ‪ ،‬ﻳﺠـﺐ ﺃﻥ ﻳﻜـﻮﻥ ﻫـﺬﺍ ﺍﻟﻤﻔﺘـﺎﺡ ﺭﺋﻴﺴـﻴﺎﹰ ﻓـﻲ ﺟـﺪﻭﻝٍ ﺁﺧـﺮ‬
‫ﺃﻧﺸﺄﻧﺎﻩ‪ ‬ﺳﺎﺑﻘﺎﹰ ‪ ،‬ﻭﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ ﺳﻨﻘﻮﻡ ﺇﻥ ﺷـﺎﺀ ﺍﷲ ﺑﺈﻧﺸـﺎﺀ ﻣﻔﺘـﺎﺡ ﺭﺋﻴﺴـﻲ ﻓـﻲ ﺟـﺪﻭﻝ ﺍﻷﻗﺴـﺎﻡ ﻭﻫـﻮ‬
‫ﺭﻗﻢ ﺍﻟﻘﺴﻢ ‪ ،‬ﺛﻢ ﻧﻘﻮﻡ ﺑﺈﻧﺸﺎﺀ ﺣﻘﻞ ﺃﺟﻨﺒﻲ ﻓﻲ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ ﻳﻌﻮﺩ ﻟﻬﺬﺍ ﺍﻟﺮﺋﻴﺴﻲ ‪ ،‬ﻭﺑﺎﻟﻤﺜﺎﻝ ﻳﺘﻀـﺢ‬
‫ﺍﻟﻤﻘﺎﻝ !‬
‫• ﺇﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺍﻷﻗﺴﺎﻡ ‪ ،‬ﻭﻳﺴﻤﻰ ﻫﺬﺍ ﺍﻟﺠﺪﻭﻝ ﺑﺎﻟﺮﺋﻴﺴﻲ )‪ (Mister‬ﺃﻭ ﺍﻷﺏ ‪..‬‬

‫‪SQL> create table section‬‬


‫)‪2 ( sec_no number(2‬‬
‫‪3 primary key ,‬‬
‫‪4 sec_name varchar2(20) not null‬‬
‫;) ‪5‬‬

‫ﻧﻼﺣﻆ ﺃﻧﻨﺎ ﺃﻧﺸﺄﻧﺎ ﺟـﺪﻭﻝ ﺍﻷﻗﺴـﺎﻡ ؛ ﻭﻓﻴـﻪ ﺭﻗـﻢ ﺍﻟﻘﺴـﻢ )‪ (sec_no‬ﻛﻤﻔﺘـﺎﺡ ﺭﺋﻴﺴـﻲ ‪،‬ﻭﺍﺳـﻢ ﺍﻟﻘﺴـﻢ‬
‫)‪ ( sec_name‬ﺑﻘﻴﺪ ﺃﻻ ﻳﻜﻮﻥ ﻓﺎﺭﻏﺎﹰ ‪..‬‬

‫• ﺇﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ ‪ ،‬ﻭﻳﺴﻤﻰ ﻫﺬﺍ ﺍﻟﺠﺪﻭﻝ ﺑﺎﻟﺘﻔﺼﻴﻞ )‪ (Detail‬ﺃﻭ ﺍﻻﺑﻦ ‪..‬‬

‫( ‪SQL> create table student‬‬


‫)‪2 std_no number(7‬‬
‫‪3 primary key,‬‬
‫‪4 std_name varchar2 (30) not null,‬‬
‫‪5 sec_no number(2) references‬‬
‫)‪6 section (sec_no‬‬
‫;) ‪7‬‬
‫ﺃﻧﺸﺄﻧﺎ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ ؛ ﻭﻓﻴﻪ ﺭﻗﻢ ﺍﻟﻄﺎﻟﺐ ﻛﻤﻔﺘﺎﺡ ﺭﺋﻴﺴﻲ ‪..‬ﻭﺍﺳﻢ ﺍﻟﻄﺎﻟﺐ ﺑﻘﻴﺪ ﺃﻻ ﻳﻜﻮﻥ ﻓﺎﺭﻏﺎﹰ ‪..‬‬
‫ﻟﻜﻦ ﺍﻷﻫﻢ ‪:‬‬
‫• ﺃﻧﻨﺎ ﻋﺮﻓﻨﺎ ﺣﻘﻞ ﻭﺍﺳﻤﻪ ﺭﻗﻢ ﺍﻟﻘﺴﻢ ) ‪ sec_no‬ﺍﻟﺬﻱ ﺑﺎﻟﻠﻮﻥ ﺍﻷﺧﻀﺮ( ﻭﻫـﺬﺍ ﺃﻣـﺮ ﺿـﺮﻭﺭﻱ ﺟـﺪﺍﹰ‬
‫ﺃﻥ ﻧﻌﺮﻑ ﺍﻷﺟﻨﺒﻲ ﺃﻭﻻﹰ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺘﻔﺼﻴﻞ ‪ ،‬ﺛﻢ ﻧﺒﻴﻦ ﺃﻧﻪ ﻳﺆﺷﺮ ﺇﻟﻰ ﻣﻔﺘﺎﺡ ﺭﺋﻴﺴﻲ ﻓﻲ ﺟﺪﻭﻝ‬
‫ﺁﺧﺮ ﺑﺤﺠﻢ ﻫﻮ ﻧﻔﺲ ﺣﺠﻢ ﺭﻗﻢ ﺍﻟﻘﺴﻢ ﻓﻲ ﺟﺪﻭﻝ ﺍﻷﻗﺴﺎﻡ ‪، ..‬ﻷﻧﻨﺎ ﻧﻌﻠﻢ ﺃﻥ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺟﻨﺒﻲ‬
‫ﻳﺠــﺐ ﺃﻥ ﻳﻜــﻮﻥ ﺗﻌﺮﻳﻔــﻪ ﻣــﻦ ﻧﻔــﺲ ﻧــﻮﻉ ﺑﻴﺎﻧــﺎﺕ ﻭﺣﺠــﻢ ﺍﻟﻤﻔﺘــﺎﺡ ﺍﻟﺮﺋﻴﺴــﻲ ﺍﻟــﺬﻱ ﻳﺆﺷــﺮ ﺇﻟﻴــﻪ‬
‫‪..‬ﻭﻟﻜﻦ ﻟﻴﺲ ﺷﺮﻃﺎﹰ ﺃﻥ ﻳﻜﻮﻥ ﺑﻨﻔﺲ ﺍﻹﺳﻢ ‪..‬‬
‫• ﻛﺘﺒﻨﺎ ﻛﻠﻤﺔ ‪ references‬ﻭﺍﻟﺘﻲ ﺗﻌﻨﻲ ﺃﻧﻪ ﻳﺆﺷﺮ ﺇﻟﻰ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ ﻓﻲ ﺟﺪﻭﻝ ﺍﻷﻗﺴﺎﻡ‬
‫‪ Section‬ﻭﻫﻮ ﺍﻟﻤﻔﺘﺎﺡ )‪ sec_no‬ﺑﺎﻟﻠﻮﻥ ﺍﻟﺮﻣﺎﺩﻱ ( ﻭﻻ ﻧﻨﺴﻰ ﺃﻥ ﻣﺎﺳﺒﻖ ﻛﻠﻪ ﻫﻮ ﺑﻄﺮﻳﻘﺔ ‪. In line‬‬

‫• ‪Out line ‬‬


‫ﻧﻘﻮﻡ ﺑﺈﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺜﺎﻧﻲ ﻭﻫﻮ ﺍﻟﺘﻔﺼﻴﻞ ﺑﻬـﺬﻩ ﺍﻟﻄﺮﻳﻘـﺔ ‪ ،‬ﻷﻥ ﺍﻟﺠـﺪﻭﻝ ﺍﻷﻭﻝ ﻻﻳﻬﻤﻨـﺎ ﺇﻧﺸـﺎﺋﻪ ﺑـﺄﻱ‬
‫ﻃﺮﻳﻘﺔ ‪..‬‬
‫‪‬‬
‫‪‬‬
‫ﻻ ﻳﻤﻜﻨﻨﺎ ﺣﺬﻑ ﺟﺪﻭﻝ ﺍﻷﻗﺴﺎﻡ ‪ ،‬ﺇﻻ ﺑﻌﺪ ﺃﻥ ﻧﺤﺬﻑ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ ﻟﻮﺟﻮﺩ ﻋﻼﻗﺔ ﺑﻴﻨﻬﻤﺎ ‪ ،‬ﻟﻨﺠﺮﺏ‬
‫ﻭﻧﻜﺘﺐ ‪..‬‬
‫;‪SQL> drop table section‬‬
‫ﺳﺘﻈﻬﺮ ﻟﻨﺎ ﺭﺳﺎﻟﺔ ﺧﻄﺄ ‪ ،‬ﻣﻔﺎﺩﻫﺎ ﺃﻧﻪ ﻻ ﻳﻤﻜﻨﻨـﺎ ﺣـﺬﻑ ﺍﻟﺠـﺪﻭﻝ ‪،‬ﻻﺭﺗﺒﺎﻃـﻪ ﺑﺤﻘـﻞ ﺭﺋﻴﺴـﻲ ﺑﺠـﺪﻭﻝ‬
‫ﺍﻟﻄﻼﺏ ‪..‬‬
‫ﻓﻨﻘﻮﻡ ﺃﻭﻻﹰ ﺑﺤﺬﻑ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ ‪ ،‬ﻹﻧﺸﺎﺋﻪ ﻣﺮﺓﹰ ﺃﺧﺮﻯ ﺑﻄﺮﻳﻘﺔ ‪.. Out line‬‬
‫;‪SQL> drop table student‬‬

‫‪Table dropped.‬‬
‫ﻭﻻ ﻧﺤﺬﻑ ﺟﺪﻭﻝ ﺍﻷﻗﺴﺎﻡ ﺑﻞ ﻧﺒﻘﻴﻪ ﻛﻤﺎ ﻫﻮ ‪..‬‬
‫ﻭﺣﺘﻰ ﻧﻌﺮﻑ ﺍﻟﺠﺪﻭﺍﻝ ﺍﻟﺘﻲ ﻟﺪﻳﻨﺎ ﺍﻵﻥ ﻧﻜﺘﺐ ‪:‬‬
‫;‪SQL> select *from tab‬‬
‫ﻓﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﻨﺘﻴﺠﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬‬
‫‪TNAME‬‬ ‫‪TABTYPE CLUSTERID‬‬
‫‪------------------------------ ------- ---------‬‬
‫‪SECTION‬‬ ‫‪TABLE‬‬

‫ﺍﻵﻥ ﻧﻨﺸﺊ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ ﻛﻤـﺎ ﺃﻧﺸـﺄﻧﺎﻩ ﺑﻄﺮﻳﻘـﺔ ‪ In line‬ﺃﻣـﺎ ﺍﻟﻤﻔﺘـﺎﺡ ﺍﻷﺟﻨﺒـﻲ ﻓﺴﻨﻨﺸـﺌﻪ ﺇﻥ ﺷـﺎﺀ‬
‫ﺍﷲ ﺑﻄﺮﻳﻘﺔ ‪.. Out line‬‬
‫( ‪SQL> create table student‬‬
‫‪2 std_no number(7)primary key,‬‬
‫‪3 std_name varchar2 (30) not null,‬‬
‫‪4 sec_no number(2),‬‬
‫‪5 std_age number(2),‬‬
‫‪6 constraint fk_std_01‬‬
‫)‪7 foreign key (sec_no‬‬
‫)‪8 references section (sec_no‬‬
‫;) ‪9‬‬
‫ﻧﻼﺣــﻆ ﺃﻧــﻪ ﺑﺎﻹﺿــﺎﻓﺔ ﺇﻟــﻰ ﻭﺟــﻮﺩ ﺗﻌﺮﻳــﻒ ﻟﻠﻤﻔﺘــﺎﺡ ﺍﻟﺮﺋﻴﺴــﻲ ﻓــﻲ ﻫــﺬﺍ ﺍﻟﺠــﺪﻭﻝ ﻭﻫــﻮ ﺭﻗــﻢ ﺍﻟﻄﺎﻟــﺐ‬
‫)‪ ، ( std_no‬ﺍﺣﺘﻮﻯ ﻫﺬﺍ ﺍﻟﺠﺪﻭﻝ ﺃﻳﻀﺎﹰ ﻣﻔﺘﺎﺣﺎﹰ ﺛﺎﻧﻮﻳﺎﹰ ﻭﻫﻮ ﺭﻗﻢ ﺍﻟﻘﺴﻢ )‪ ، (sec_no‬ﻓﻴﺴﻤﺢ ﺗﻌﺮﻳﻒ‬
‫ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺜﺎﻧﻮﻱ ﺑﺘﺤﺪﻳﺪ ﺍﻟﺤﻘﻞ ﺍﻟﻤﺮﺟﻊ ﻓـﻲ ﺍﻟﺠـﺪﻭﻝ ﺍﻟﻤـﺮﺗﺒﻂ ﺑـﻪ ‪ ،‬ﻭﺍﻟـﺬﻱ ﻳﻤﻜـﻦ ﺃﻥ ﻳﺄﺧـﺬ ﺍﺳـﻤﺎﹰ‬
‫ﺁﺧﺮ ‪..‬‬
‫ﻭﻟﻜﻲ ﻳﻜﻮﻥ ﺗﻌﺮﻳﻒ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺜﺎﻧﻮﻱ ﺳﻠﻴﻤﺎﹰ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻛﻼ ﺍﻟﺤﻘﻠﻴﻦ ﻣﻦ ﻧﻔﺲ ﻧﻮﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﻭﻧﻔﺲ ﺍﻟﺤﺠﻢ ﻛﻤﺎ ﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎﹰ‪)..‬ﺟﺮﺏ ﺗﻌﺮﻳﻒ ﺍﻟﺤﻘـﻞ ﺍﻟﺜـﺎﻧﻮﻱ ﺑﻨـﻮﻉ ﺁﺧـﺮ ﺃﻭ ﺑﺤﺠـﻢ ﻳﺨﺘﻠـﻒ ﻋـﻦ‬
‫ﺍﻟﺤﻘﻞ ﺍﻟﻤﺆﺷﺮ ﺇﻟﻴﻪ( ‪.‬‬
‫ﻭﻋﻨﺪ ﺗﻌﺮﻳﻒ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺜﺎﻧﻮﻱ ﻓﺈﻧﻨﺎ ﻧﺨﺒﺮ ﺃﻭﺭﺍﻛـﻞ ﺑﺄﻧﻨـﺎ ﻧﺮﻳـﺪ ﺇﻧﺸـﺎﺀ ﺗﻜﺎﻣـﻞ ﻣﺮﺟﻌـﻲ ﺑـﻴﻦ ﺍﻟﺤﻘـﻞ‬
‫ﺭﻗﻢ ﺍﻟﻘﺴﻢ )‪ (sec_no‬ﻓﻲ ﺍﻟﺠﺪﻭﻝ ‪ student‬ﻭﺍﻟﺠﺪﻭﻝ ‪. section‬‬
‫ﻭﻫﺬﺍ ﺍﻷﻣﺮ ﻳﻤﻨﻊ ﺍﻟﺤﻘﻞ ﻓﻲ ﺟﺪﻭﻝ ﺍﻹﺑﻦ ‪ ، student :‬ﻣﻦ ﺍﺣﺘـﻮﺍﺀ ﻗﻴﻤـﺔ ﻏﻴـﺮ ﻣﻮﺟـﻮﺩﺓ ﻓـﻲ ﺍﻟﻌﻤـﻮﺩ‬
‫ﺍﻟﻤﺮﺗﺒﻂ ﺑﻪ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻷﺏ ‪.. section :‬‬
‫‪ ‬‬
‫ﻋﻨــﺪﻣﺎ ﻳﻜــﻮﻥ ﻟــﺪﻳﻨﺎ ﺟــﺪﻭﻟﻴﻦ ﺃﺣــﺪﻫﻤﺎ ﺭﺋﻴﺴــﻲ )‪ (Mister‬ﺃﻱ ﺃﺏ ‪ ،‬ﻭﺍﻟــﺬﻱ ﺗﻌﺘﻤــﺪ ﻋﻠﻴــﻪ ﺍﻟﺠــﺪﻭﺍﻝ‬
‫ﺍﻷﺧﺮﻯ ﻓﻲ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪..‬ﻭﺍﻟﺜﺎﻧﻲ ﺗﻔﺼﻴﻠﻲ )‪ (Detail‬ﺃﻱ ﺍﺑﻦ ‪..‬‬
‫ﻭﻛﺎﻥ ﻫﻨﺎﻙ ﻋﻼﻗﺔ ﺑـﻴﻦ ﺍﻟﺠـﺪﻭﻟﻴﻦ ﺑﻮﺍﺳـﻄﺔ ﻣﻔﺘـﺎﺡ ﺃﺟﻨﺒـﻲ ﻓﺈﻧـﻪ ﻻ ﻧﺴـﺘﻄﻴﻊ ﺃﻥ ﻧﺤـﺬﻑ ﺍﻟﺒﻴﺎﻧـﺎﺕ‬
‫ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻷﺏ ﺍﻟـ )‪.. (Mister‬‬
‫ﻭﺗﻮﺟﺪ ﻟﻬﺬﻩ ﺍﻟﻤﺸﻜﻠﺔ ﻃﺮﻳﻘﺘﺎﻥ ﻟﺤﻠﻬﺎ ‪:‬‬
‫• ﺍﻟﻄﺮﻳﻘــﺔ ﺍﻷﻭﻟــﻰ ﺍﻷﺳــﻬﻞ ﻭﺍﻷﺿــﻌﻒ ‪ :‬ﺣــﺬﻑ ﺍﻟﺒﻴﺎﻧــﺎﺕ ﻓــﻲ ﺍﻟﺠــﺪﻭﻝ ﺍﻷﺑــﻦ ﺍﻟـــ )‪ ( Detail‬ﺛــﻢ‬
‫ﺣﺬﻑ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻷﺏ ﺍﻟـ )‪.. (Mister‬‬
‫; ‪SQL> delete from student‬‬

‫; ‪SQL> delete from section‬‬

‫• ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺜﺎﻧﻴﺔ ﺍﻷﻗﻮﻯ ﻭﺍﻷﻣﺜﻞ ‪:‬ﻭﻫـﻲ ﺃﻧـﻪ ﻋﻨـﺪ ﺗﺼـﻤﻴﻢ ﺍﻟﺠـﺪﻭﻝ ﺍﻹﺑـﻦ ﺍﻟــ )‪ ( Detail‬ﻓﺈﻧﻨـﺎ‬
‫ﻧﻀﻴﻒ ﺑﻌﺪ ﺗﻌﺮﻳﻒ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺟﻨﺒﻲ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬‬
‫‪On delete cascade‬‬
‫ﺇﺫﺍ ﻧﻜﺘﺐ ﺍﻟﺠﺪﻭﻝ ﺍﻹﺑﻦ ﺍﻟـ )‪ ( Detail‬ﻭﻫﻮ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ ﻟﺪﻳﻨﺎ ﻛﻤﺎ ﻳﻠﻲ ‪..‬‬

‫( ‪SQL> create table student‬‬


‫‪2 std_no number(7)primary key,‬‬
‫‪3 std_name varchar2 (30) not null,‬‬
‫‪4 sec_no number(2),‬‬
‫‪5 std_age number(2),‬‬
‫‪6 constraint fk_std_01‬‬
‫)‪7 foreign key (sec_no‬‬
‫)‪8 references section (sec_no‬‬
‫‪on delete cascade‬‬
‫;) ‪9‬‬
‫ﻭﻋﻨﺪ ﻛﺘﺎﺑﺘﻨﺎ ﻟﻬﺬﻩ ﺍﻟﻌﺒﺎﺭﺓ ﺑﻌﺪ ﺗﻌﺮﻳﻒ ﺍﻟﺤﻘﻞ ﺍﻟﺜـﺎﻧﻮﻱ ‪ ،‬ﻓـﺈﻥ ﺃﻭﺭﺍﻛـﻞ ﻟـﻦ ﻳﺴـﻤﺢ ﻓﻘـﻂ ﺑﺤـﺬﻑ‬
‫ﺍﻟﺴــﺠﻞ ﺍﻟﻤﺴــﺎﺭ ﺇﻟﻴــﻪ ﻣــﻦ ﺍﻟﺠــﺪﻭﻝ ﺍﻷﺏ ﻭﻫــﻮ ﺍﻷﻗﺴــﺎﻡ )‪ ، (section‬ﻭﺇﻧﻤــﺎ ﺳــﻴﺘﺘﺎﻟﻰ ﺍﻟﺤــﺬﻑ ﻓــﻲ‬
‫ﺍﻟﺠﺪﻭﻝ ﺍﻹﺑﻦ ﺃﻳﻀﺎﹰ ﻭﻫﻮ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ )‪. (student‬‬
‫‪ ‬‬
‫ﺗﻄﺒﻴﻖ ﻛﻞ ﻣﺜﺎﻝ ﺃﻭﺭﺩﻩ ﻫﻨﺎ ﻣﻊ ﻛﻞ ﻗﻴﺪ ﻭﺑﻜﻼ ﺍﻟﻄﺮﻳﻘﺘﻴﻦ ‪،‬ﻭ ﺑﺪﻭﻥ ﻧﺴﺦ ﺍﻟﺠﺪﻭﻝ‬
‫ﻭﻟﺼﻘﻪ ‪ ،‬ﻗﻢ ﺑﻜﺘﺎﺑﺔ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ﺑﻨﻔﺴﻚ ﺣﺘﻰ ﺗﺴﺘﻔﻴﺪ ﻭﺗﺘﻌﻠﻢ ‪..‬‬
‫‪ ‬‬
‫ﻣﻠﺨﺺ ﻫﺬﺍ ﺍﻟﺪﺭﺱ ﻫﻮ ﺯﺑﺪﺓ ﺍﻟﺪﺭﺱ ‪ ،‬ﻭﺑﺎﻟﺘﻔﺼﻴﻞ‬
‫ﺍﻟﻤﻤﻞ ﻓﺎﺣﺮﺹ ﻋﻠﻰ ﻓﻬﻤﻪ ﺟﻴﺪﺍﹰ ‪.‬‬
‫* ﺍﻟﻘﻴــــــﺪ‪( Primary Key) ‬ﺃﻱ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ‪‬‬
‫‪ -‬ﻭﻇﻴﻔﺘﻪ ﺇﻋﻄﺎﺀ ﺣﻘﻞ ﻣﻌﻴﻦ ﻣﻦ ﻋﺪﺓ ﺣﻘﻮﻝ ﻓﻲ ﺟﺪﻭﻝٍ ﻣﺎﺻﻔﺔ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ ﻓﻲ ﻫﺬﺍ ﺍﻟﺠـﺪﻭﻝ ‪،‬‬
‫ﻭﻳﻜﻮﻥ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ ﻓﻲ ﺟﺪﻭﻝ ﻣﺎ ‪ ،‬ﻭﺃﺟﻨﺒﻴﺎﹰ ﻓﻲ ﺍﻟﺠﺪﻭﺍﻝ ﺍﻷﺧﺮﻯ ‪..‬‬
‫‪ -‬ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ﻧﻈﻄـﺮ ﺇﻟـﻰ ﺇﻧﺸـﺎﺀ ﺃﻛﺜـﺮ ﻣـﻦ ﺣﻘـﻞ ﺭﺋﻴﺴـﻲ ﻓـﻲ ﺟـﺪﻭﻝٍ ﻭﺍﺣـﺪ ‪ ،‬ﻭﻧﺴـﺘﻄﻴﻊ ﻋﻤـﻞ‬
‫ﺫﻟﻚ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﻐﻴﺮ ﺧﻄﻴﺔ )‪ ( Out line‬ﻓﻘﻂ ‪.‬‬

‫* ﺍﻟﻘﻴــــــﺪ‪(Foreign Key) ‬‬


‫‪ -‬ﻭﻇﻴﻔﺘﻪ ﺇﻋﻄﺎﺀ ﺣﻘﻞ ﻣﻌﻴﻦ ﻣﻦ ﻋﺪﺓ ﺣﻘﻮﻝ ﻓﻲ ﺟﺪﻭﻝٍ ﻣﺎ ؛ ﺻﻔﺔ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺟﻨﺒﻲ ﻓﻲ ﻫﺬﺍ ﺍﻟﺠﺪﻭﻝ‬
‫‪ ،‬ﻭ ﻫﻮ ﻋﺒﺎﺭﺓ ﻋﻦ ﺣﻘﻞ )ﺻﻔﺔ( ﺃﻭ ﺃﻛﺜﺮ ﺗ‪‬ﻀﺎﻑ ﻟﺠﺪﻭﻝ ﻟﺮﺑﻄﻪ ﻣﻊ ﺟﺪﻭﻝ ﺁﺧـﺮ ‪ ،‬ﻣـﻊ ﺍﻻﻟﺘـﺰﺍﻡ ﺑﻮﺟـﻮﺩ‬
‫ﻣﻔﺘﺎﺡ ﺭﺋﻴﺴﻲ ﻣﻘﺎﺑﻞ ‪.‬‬
‫‪ -‬ﻳﺠﺐ ﺃﻥ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺟﻨﺒﻲ ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻣﻦ ﻧﻔﺲ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ )‪ (Data Type‬ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ ‪..‬‬
‫‪ -‬ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﺎﻣﺔ ﻟﺘﻌﺮﻳﻒ ﺣﻘﻞ ﺃﺟﻨﺒﻲ ﻓﻲ ﺟﺪﻭﻝ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﻐﻴﺮ ﺧﻄﻴﺔ ﻫﻲ ‪:‬‬
‫ﺍﺳﻢ ﺍﻟﻘﻴﺪ ‪constraint‬‬
‫ﺍﺳﻢ ﺍﻟﺤﻘﻞ ﻛﻤﺎ ﻋﺮﻓﻨﺎﻩ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺤﺎﻟﻲ ﻭﻫﻮ ﺟﺪﻭﻝ ﺍﻷﺑﻦ ‪foreign key‬‬
‫)ﺍﻟﺤﻘﻞ ﺍﻟﻤﺮﺟﻊ ﺇﻟﻴﻪ ﻭﻫﻮ ﺍﻟﺮﺋﻴﺴﻲ ﻓﻲ ﺍﻷﺏ( ﺍﻟﺠﺪﻭﻝ ﺍﻷﺏ ‪references‬‬
‫‪on delete cascade‬‬
‫ﻭﻫﺬﺍ ﺷﺮﺡ ﺍﻟﺼﻴﻐﺔ ﺑﺎﻟﺘﻔﺼﻴﻞ ﺍﻟﻤﻤﻞ ‪...‬‬
‫• ‪ constraint‬ﻛﻠﻤﺔ ﺗﻌﻨﻲ ﺃﻥ ﻣﺎ ﺑﻌـﺪﻫﺎ ﺳـﻴﻜﻮﻥ ﺍﺳـﻤﺎﹰ ﻟﻘﻴـﺪٍِ ﻣﻌـﻴﻦ ﻋﻠـﻰ ﺣﻘـﻞ ﻣﻌـﻴﻦ ‪ ،‬ﻭﻫـﻲ‬
‫ﻣﺤﺠﻮﺯﺓ ﻛﻤﺎ ﻋﺮﻓﻨﺎﻫﺎ ﺳﺎﻳﻘﺎﹰ ﻭﺗﻜﺘﺐ ﻓﻲ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﻐﻴﺮﺧﻄﻴﺔ ﻓﻘﻂ ‪..‬‬
‫• ‪ foreign key‬ﻛﻠﻤﺔ ﺗﻌﻨﻲ ﺃﻥ ﻣﺎ ﺑﻌﺪﻫﺎ ﺳﻴﻜﻮﻥ ﺍﺳﻤﺎﹰ ﻟﻘﻴﺪٍﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺜﺎﻧﻮﻱ )ﺍﻷﺟﻨﺒﻲ ( ‪.‬‬
‫• ﺍﺳﻢ ﺍﻟﻘﻴﺪ ﻭﻫﻨﺎ ﻧﻜﺘـﺐ ﺍﺳـﻢ ﺍﻟﻘﻴـﺪ ‪ ،‬ﻭﻛﻠﻤـﺎ ﻛـﺎﻥ ﺍﺳـﻢ ﺍﻟﻘﻴـﺪ ﻣﻌﺒـﺮﺍﹰ ﻭﺳـﻬﻼﹰ ﻛـﺎﻥ ﺃﻓﻀـﻞ ‪،‬‬
‫ﻓﻤﺜﻼﹰ ﺃﻋﻼﻩ ﻓﻲ ﻣﺜﺎﻝ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺜﺎﻧﻴﺔ ‪ ،‬ﻛﺎﻥ ﺍﺳﻢ ﺍﻟﻘﻴﺪ ﻫﻮ ‪fk_std_01‬ﻓﺎﻟﺠﺰﺀ ﺍﻷﻭﻝ‪fk ‬‬
‫ﻳﺪﻝ ﻋﻠﻰ ﺃﻥ ﺍﻟﻘﻴﺪ ﻫﻮ ﻗﻴﺪ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺜﺎﻧﻮﻱ ‪ ،‬ﺃﻣﺎ‪ std ‬ﻓﻬﻲ ﺗﻌﻨـﻲ ﺍﺳـﻢ ﺍﻟﺠـﺪﻭﻝ ﻭﻣﻜـﺎﻥ ﺍﻟﻘﻴـﺪ‬
‫ﺍﻟﺬﻱ ﻭﺿﻌﻨﺎﻩ ﻭﻫﻨﺎ ﺟﺪﻭﻝ ﺍﻟﻄﻼﺏ ﻣﻜﺎﻥ ﻫﺬﺍ ﺍﻟﻤﻔﺘﺎﺡ ‪ ،‬ﻭ ﺃﺧﻴﺮﺍﹰ ﻓـــــ ‪01‬ﻓﺘﻌﻨﻲ ﺭﻗﻢ ﺍﻟﻘﻴﺪ ‪ ،‬ﺃﻱ‬
‫ﺃﻧﻪ ﻫﻨﺎ ﺍﻟﻘﻴﺪ ﺍﻷﻭﻝ ﻣﻦ ﻧﻮﻉ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺜـﺎﻧﻮﻱ ﻓـﻲ ﺟـﺪﻭﻝ ﺍﻟﻄـﻼﺏ ‪..‬ﻓـﺈﺫﺍ ﻛـﺎﻥ ﻟـﺪﻳﻨﺎ ﺃﻛﺜـﺮ ﻣـﻦ‬
‫ﻣﻔﺘﺎﺡ ﺛﺎﻧﻮﻱ ﻓﺴﻴﻜﻮﻥ ﺍﻟﺘﺮﺗﻴﺐ ﻳﺒﺪﺃ ﻣﻦ ﺍﻟـﺮﻗﻢ ‪ 02‬ﺃﻱ ﺑﻌـﺪ ﺍﻷﻭﻝ ﻣﺒﺎﺷـﺮﺓ ‪..‬ﻭﻟﻜـﻦ ﻟﻤـﺎﺫ ﺍ ﻫـﺬﺍ‬
‫ﺍﻟﺤﺮﺹ ﺍﻟﺸﺪﻳﺪ ﻋﻠﻰ ﺍﺳﻢ ﺍﻟﻘﻴﺪ ‪ ،‬ﻭﻟﻤﺎﺫﺍ ﻧﻜﺘﺒﻪ ﺑﻬﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ؟!‬
‫ﺍﻟﺠﻮﺍﺏ ﻣﻨﻄﻘﻲ ‪ ...‬ﺃﻧﻪ ﻋﻨﺪﻣﺎ ﺗﻨﺸﻰﺀ ﻣﺴﺘﻘﺒﻼﹰ ﺑﺈﺫﻥ ﺍﷲ ﻋﺸﺮﺍﺕ ﻭﻗﺪ ﺗﺼﻞ ﺇﻟـﻰ ﻣﺌـﺎﺕ ﺍﻟﺠـﺪﻭﺍﻝ ‪،‬‬
‫ﻭﺗﺮﻳﺪ ﺃﻥ ﺗﻐﻴﺮ ﻓـﻲ ﻗﻴـﺪ ﺣﻘـﻞ ﻣﻌـﻴﻦ ﺃﻭ ﺃﻥ ﺗﻠﻐـﻲ ﻗﻴـﺪ ﺣﻘـﻞ ﻣﻌـﻴﻦ ‪..‬ﻓﺈﻧـﻚ ﺳـﺘﻤﻜﺚ ﻭﻗﺘـﺎﹰ ﻟـﻴﺲ‬
‫ﺑﺎﻟﻴﺴﻴﺮ ﻣﻦ ﺃﺟﻞ ﺫﻟﻚ ‪..‬ﺃﻣﺎ ﻋﻨﺪ ﺗﺴﻤﻴﺘﻪ ﺑﻬﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻓﺴﺘﺼﻞ ﺇﻟﻴﻪ ﺑﺴﺮﻋﺔ ﺗﺎﻣﺔ ﺇﻥ ﺷـﺎﺀ ﺍﷲ‬
‫ﻭﺗﻌﺪﻟﻪ ﻓﻲ ﺃﺳﺮﻉ ﻭﻗﺖ ‪..‬‬
‫• ﺍﺳﻢ ﺍﻟﺤﻘﻞ ﻛﻤﺎ ﻋﺮﻓﻨﺎﻩ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺤﺎﻟﻲ ﻭﻫـﻮ ﺟـﺪﻭﻝ ﺍﻷﺑـﻦ ‪ ،‬ﺣﻴـﺚ ﻧﻘـﻮﻡ ﺑﻜﺘﺎﺑـﺔ ﺍﺳـﻢ‬
‫ﻫﺬﺍ ﺍﻟﻤﻔﺘﺎﺡ ﻛﻤﺎ ﻋﺮﻓﻨﺎﻩ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻟﺤﺎﻟﻲ ﺍﻟـﺬﻱ ﻧﻌـﺮﻑ ﻓﻴـﻪ ﻫـﺬﺍ ﺍﻟﻤﻔﺘـﺎﺡ ﺍﻷﺟﻨﺒـﻲ ﻭﻫـﻮ‬
‫ﺟﺪﻭﻝ ﺍﻻﺑـﻦ ‪..‬ﻭﻳﺠـﺐ ﺃﻥ ﻳﻜـﻮﻥ ﺗﻌﺮﻳـﻒ ﻫـﺬﺍ ﺍﻟﺤﻘـﻞ ﻣـﻦ ﻧﻔـﺲ ﻧـﻮﻉ ﺑﻴﺎﻧـﺎﺕ ﻭﺣﺠـﻢ ﺍﻟﻤﻔﺘـﺎﺡ‬
‫ﺍﻟﺮﺋﻴﺴﻲ ﺍﻟﺬﻱ ﻳﺆﺷﺮ ﺇﻟﻴﻪ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻷﺏ ‪.‬‬
‫ﺃﻣﺎ ‪ References‬ﺗﻌﻨﻲ ﺃﻥ ﻫﺬﺍ ﺍﻟﺤﻘﻞ ﻳﺆﺷﺮ ﺇﻟﻰ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻷﺏ ‪..‬‬
‫ﻭﻫﻮ ﻳﺨﺒﺮ ﺃﻭﺭﺍﻛﻞ )ﺇﻥ ﺟﺎﺯ ﺍﻟﺘﻌﺒﻴﺮ ( ﺇﻧﺸـﺎﺀ ﺗﻜﺎﻣـﻞ ﻣﺮﺟﻌـﻲ ﺑـﻴﻦ ﺍﻟﺤﻘـﻞ ﺍﻟﻤﻔﺘـﺎﺡ ﺍﻷﺟﻨﺒـﻲ ﻓـﻲ‬
‫ﺍﻟﺠﺪﻭﻝ ﺍﻻﺑﻦ ‪..‬ﻭﺍﻟﺤﻘﻞ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻷﺏ )ﺭﺍﺟﻊ ﺍﻟﻤﺜﺎﻝ ﺍﻷﺧﻴﺮ ( ‪..‬‬
‫• ﺍﻟﺠﺪﻭﻝ ﺍﻷﺏ ﺃﻱ ﺃﻥ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺟﻨﺒﻲ ﻳﺆﺷﺮ ﻟﻠﻤﻔﺘﺎﺡ ﺍﻟﺮﺋﻴﺴﻲ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻷﺏ ﺍﻟﻤﺴﻤﻰ )‪..(..‬‬
‫• ﺍﻟﺤﻘﻞ ﺍﻟﻤﺮﺟﻊ ﺇﻟﻴﻪ ﻭﻫﻮ ﺍﻟﺮﺋﻴﺴﻲ ﻓﻲ ﺍﻷﺏ ‪ ،‬ﺃﻱ ﺍﻟﻤﻔﺘﺎﺡ )ﺍﻟﺤﻘﻞ( ﺍﻟﺮﺋﻴﺴـﻲ ﻓـﻲ ﺍﻟﺠـﺪﻭﻝ ﺍﻷﺏ‬
‫ﺍﻟﺬﻱ ﻳﺆﺷﺮ ﺇﻟﻴﻪ ﺍﻷﺟﻨﺒﻲ ﺍﻟﺬﻱ ﺃﻧﺸﻨﺎﻩ ‪..‬‬
‫• ﻭﺃﺧﻴﺮﺍﹰ ﻋﺒﺎﺭﺓ ‪ on delete cascade‬ﻓﻔﺎﺋﺪﺗﻬﺎ ﺃﻧﻪ ﻋﻨﺪﻣﺎ ﻧﺮﻳﺪ ﺣﺬﻑ ﺍﻟﺒﻴﺎﻧـﺎﺕ ﻣـﻦ ﺍﻟﺠـﺪﻭﻝ‬
‫ﺍﻻﺏ ‪ ،‬ﻟﻦ ﻧﺴﺘﻄﻴﻊ ﺍﻟﺤﺬﻑ ﻟﻮﺟﻮﺩ ﺍﻟﻌﻼﻗﺔ ﺑﻴﻦ ﺍﻟﺠـﺪﻭﻟﻴﻦ ﺍﻷﺏ ﻭﺍﻻﺑـﻦ ‪ ،‬ﻓﻌﻨـﺪ ﻛﺘﺎﺑﺘﻨـﺎ ﻟﻬـﺎ‬
‫ﺑﻌــﺪ ﺗﻌﺮﻳــﻒ ﺍﻟﺤﻘــﻞ ﺍﻟﺜــﺎﻧﻮﻱ ‪ ،‬ﻧﺴــﺘﻄﻴﻊ ﺣــﻒ ﺍﻟﺒﻴﺎﻧــﺎﺕ ‪ ،‬ﻭﻟــﻦ ﻳﺴــﻤﺢ ﺃﻭﺭﺍﻛــﻞ ﻓﻘــﻂ ﺑﺤــﺬﻑ‬
‫ﺍﻟﺴﺠﻞ ﺍﻟﻤﺴﺎﺭ ﺇﻟﻴﻪ ﻣﻦ ﺍﻟﺠﺪﻭﻝ ﺍﻷﺏ ‪ ،‬ﻭﺇﻧﻤﺎ ﺳﻴﺘﺘﺎﻟﻰ ﺍﻟﺤﺬﻑ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻹﺑﻦ ﺃﻳﻀﺎﹰ ‪.‬‬
‫****************************************************************************************************‬
‫ﻭﺳﺎﻣﺤﻮﻧﺎ ﻋﻠﻰ ﺍﻟﺘﻘﺼﻴﺮ ‪ ،‬ﻭﻓﻖ ﺍﷲ ﺍﻟﺠﻤﻴﻊ ﻟﻤﺎ ﻳﺤﺒﻪ ﻭﻳﺮﺿﺎﻩ ‪..‬‬
‫ﻭﺍﺳﺘﻮﺩﻋﻜﻢ ﺍﷲ ﺍﻟﺬﻱ ﻻﺗﺮﺩ ﻭﺩﺍﺋﻌﻪ ‪..‬‬
‫ﻭﺇﻟﻰ ﻟﻘﺎﺀ ﻗﺮﻳﺐ ﺑﺈﺫﻥ ﺍﷲ ﺗﻌﺎﻟﻰ ‪..‬‬
‫ﺍﻷﺳﻴـــــــــــــــــــــــــــــــــــــــــــــــﻒ‬
‫‪Email:[email protected]‬‬
‫ﺑﺴﻢ ﺍﷲ ﺍﻟﺮﺣﻤﻦ ﺍﻟﺮﺣﻴﻢ‬

‫ﺳﻠﺴﻠــﺔ ﺗﻌﻠـــﻢ‬ ‫‪‬‬


‫‪‬‬

‫ﺑﺴﻬﻮﻟــ ـ ـﺔ‬ ‫‪‬‬


‫‪‬‬
‫‪‬‬ ‫‪‬‬
‫ﺑﻌﺪ ﺃﻥ ﺃﺧﺬﻧﺎ ﺃﻣﺮ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﺍﻭﻝ ) ‪ ( CREATE TABLE‬ﻭﻋﺮﻓﻨﺎ ﻛﻴﻔﻴﺔ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﺍﻭﻝ ﺑﺤﻘﻮﻟﻬـﺎ‬
‫ﻭﺑﻘﻴﻮﺩﻫﺎ ﺍﻟﻤﺨﺘﻠﻔﺔ ‪ ،‬ﺛﻢ ﺗﻌﻠﻤﻨﺎ ﻛﻴﻔﻴﺔ ﺣﺬﻓﻬﺎ ) ‪ ، ( DROP TABLE‬ﺗﺒﻘﻰ ﻟﻨﺎ ﺃﺧﻴـﺮﺍﹰ ﻛﻴﻔﻴـﺔ‬
‫ﺍﻹﺿﺎﻓﺔ ﺇﻟﻴﻬﺎ ﻭﺍﻟﺘﻌﺪﻳﻞ ﻓﻴﻬﺎ ) ‪ ، ( ALTER TABLE‬ﻭﻫﺬﺍ ﺍﻟﺘﻌﺪﻳﻞ ﻫﻮ ﻓﻲ ﺻﻤﻴﻢ ﺑﻨﻴﺔ ﺍﻟﺠﺪﻭﻝ ‪،‬‬
‫ﻭﻟﻴﺲ ﻓﻲ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺠﺪﻭﻝ ‪ ،‬ﻷﻥ ﺍﻟﺘﻌﺪﻳﻞ ﻓﻲ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻳﺘﻢ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﻠﻐﺔ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺜﺎﻧﻴﺔ ﻣﻦ ‪SQL‬‬
‫ﻭﻫﻲ ‪. DML‬‬
‫‪: ALTER TABLE‬‬ ‫‪‬‬ ‫•‬
‫‪ ‬‬
‫‪ -‬ﺇﺿﺎﻓﺔ ﺣﻘﻞ ﺟﺪﻳﺪ ﺇﻟﻰ ﺟﺪﻭﻝ ﻣﻨﺸﺄ ﺳﺎﺑﻘﺎﹰ ‪.‬‬
‫‪ -‬ﺍﻟﺘﻌﺪﻳﻞ ﻓﻲ ﺻﻔﺔ ﺣﻘﻞٍ ﻣﺎ ‪.‬‬
‫‪ -‬ﺍﻹﺿﺎﻓﺔ ﻭ ﺍﻟﺘﻌﺪﻳﻞ ﻓﻲ ﻗﻴﻮﺩ ﻣﻨﺸﺄﺓ ﻋﻠﻰ ﻋﺪﺓ ﺣﻘﻮﻝ ﻣﺴﺒﻘﺎﹰ ‪.‬‬
‫‪ -‬ﺗﺄﻫﻴﻞ ﺍﻟﻘﻴﻮﺩ ﻭﺇﻋﺎﺩﺓ ﺗﺄﻫﻴﻠﻴﻬﺎ‪.‬‬
‫‪ -‬ﺣﺬﻑ ﺍﻟﻘﻴﻮﺩ ﻣﻦ ﺍﻟﺠﺪﻭﺍﻝ ‪..‬‬
‫‪‬‬
‫• ‪‬‬
‫ﻋﻨﺪﻣﺎ ﻧﻨﺸﺊ ﺍﻟﺠﺪﻭﺍﻝ ﻭﻧﻘﻮﻡ ﺑﺈﺩﺧﺎﻝ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺇﻟﻴﻬﺎ ‪ ،‬ﻧﺤﺘﺎﺝ ﻓﻲ ﺑﻌﺾ ﺍﻷﺣﻴـﺎﻥ ﻹﺿـﺎﻓﺔ ﺣﻘـﻞ ﺃﻭ‬
‫ﻋﺪﺓ ﺣﻘﻮﻝ ﻟﻬﺬﺍ ﺍﻟﺠﺪﻭﺍﻝ ‪ ،‬ﻭﻷﺟﻞ ﺫﻟﻚ ﻧﺴﺘﺨﺪﻡ ﺍﻟﺼﻴﻐﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪:‬‬

‫‪ ADD‬ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪ALTER TABLE‬‬


‫ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬ ‫ﻧﻮﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ‬ ‫] ﻓﺎﺭﻍ ﺃﻭ ﻏﻴﺮ ﻓﺎﺭﻍ ﺃﻭ ﻗـﻴﻮﺩ [ )ﻃﻮﻟﻬﺎ(‬
‫;)‬
‫ﻭﻫﺬﻩ ﺍﻟﺼﻴﻐﺔ ﺗﺴﺘﺨﺪﻡ ﻹﺿﺎﻓﺔ ﺣﻘﻞ ﺃﻭ ﺣﻘﻮﻝ ﺟﺪﻳﺪﺓ ﺑﻨﺎﺀً ﻋﻠﻰ ﺍﻟﻜﻠﻤﺔ ‪. ADD‬‬
‫ﻭﺣﺘﻰ ﻧﻔﻬﻢ ﻫـﺬﻩ ﺍﻟﺼـﻴﻐﺔ ﺟﻴـﺪﺍﹰ ‪ ،‬ﺳـﻨﻘﻮﻡ ﺑﺈﺿـﺎﻓﺔ ﺣﻘـﻞ ﺟـﻨﺲ ﺍﻟﻄـﻼﺏ ﺍﻟـﺬﻳﻦ ﻳﺪﺭﺳـﻮﻥ ﻓـﻲ ﻫـﺬﻩ‬
‫ﺍﻟﻤﺪﺭﺳــﺔ ‪ ) S_SEX‬ﺫﻛــﺮ ﺃﻡ ﺃﻧﺜــﻰ ( ﻷﻭﻝ ﺟــﺪﻭﻝ ﺃﻧﺸــﺄﻧﺎﻩ ﺳــﻮﻳﺎﹰ ﻭﻫــﻮ ‪.. SCHOOL‬ﻭﺳ ـﻨﻘﻮﻡ ﺃﻭﻻﹰ‬
‫ﺑﺎﺳﺘﻌﺮﺍﺽ ﺧﺼﺎﺋﺺ ﺍﻟﺠﺪﻭﻝ ‪ SCHOOL‬ﻣﻦ ﺧﻼﻝ ﺍﻷﻣﺮ ﺍﻟﺘﺎﻟﻲ ‪..‬‬

‫;‪SQL> desc school‬‬

‫ﺇﺫﺍ ﻟﻢ ﻳﻜﻦ ﺍﻟﺠﺪﻭﻝ ﻣﻮﺟﻮﺩﺍﹰ ﻟﺪﻳﻚ ﺳﺘﻈﻬﺮ ﻟﻚ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬‬

‫‪Object does not exist.‬‬

‫ﻭﻗﻢ ﺑﻜﺘﺎﺑﺔ ﻫﺬﻩ ﺍﻷﻭﺍﻣﺮ ﻹﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﻝ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﺳﺎﺑﻘﺎﹰ ‪..‬‬
‫‪CREATE TABLE SCHOOL‬‬
‫(‬
‫‪S_NO‬‬ ‫‪NUMBER (10) ,‬‬
‫‪S_NAME VARCHAR2 (30) ,‬‬
‫‪S_TYPE CHAR (15) ,‬‬
‫‪S_LOC‬‬ ‫‪VARCHAR2 (30) ,‬‬
‫‪S_DATE DATE‬‬
‫;)‬

‫ﻭﺑﻌﺪ ﺃﻥ ﻗﻤﺖ ﺑﺈﻧﺸﺎﺀ ﻫﺬﺍ ﺍﻟﺠﺪﻭﻝ ﺍﺳﺘﻌﺮﺽ ﺧﺼﺎﺋﺼﻪ ‪..‬‬


‫;‪SQL> DESC SCHOOL‬‬

‫ﻭﺳﺘﻈﻬﺮ ﻟﻨﺎ ﻣﻮﺍﺻﻔﺎﺕ ﺟﺪﻭﻝ ﺍﻟﻤﺪﺭﺳﺔ ﻛﻤﺎﻳﻠﻲ ‪..‬‬

‫‪Name‬‬ ‫‪Null? Type‬‬


‫‪------------------------------- -------- ----‬‬
‫‪S_NO‬‬ ‫)‪NUMBER(10‬‬
‫‪S_NAME‬‬ ‫)‪CHAR2(30‬‬
‫‪S_TYPE‬‬ ‫)‪CHAR(15‬‬
‫‪S_LOC‬‬ ‫)‪CHAR2(30‬‬
‫‪S_DATE‬‬ ‫‪DATE‬‬
‫ﻭﺍﻵﻥ ﻧﺮﻳﺪ ﺇﺿﺎﻓﺔ ﺣﻘﻞ ﺟﻨﺲ ﺍﻟﻄﻼﺏ ﺍﻟﺬﻳﻦ ﻳﺪﺭﺳﻮﻥ ﻓﻲ ﻫﺬﻩ ﺍﻟﻤﺪﺭﺳﺔ ‪ ) S_SEX‬ﺫﻛﺮ ﺃﻡ ﺃﻧﺜﻰ (‬
‫ﻟﻬﺬﺍ ﺍﻟﺠﺪﻭﻝ ﻓﻨﻜﺘﺐ ﺍﻷﻣﺮ ﺍﻟﺘﺎﻟﻲ ‪..‬‬
‫‪alter table school add‬‬
‫)‪( s_sex varchar2(10‬‬
‫;)‬

‫ﻓﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪..‬ﻭﺍﻟﺪﺍﻟﺔ ﻋﻠﻰ ﺃﻥ ﺍﻟﺤﻘﻞ ﺍﻟﺠﺪﻳﺪ ﺗﻤﺖ ﺇﺿﺎﻓﺘﻪ ﻟﻠﺠﺪﻭﻝ ‪..‬‬

‫‪Table altered.‬‬

‫ﻭﺣﺘﻰ ﻧﺘﺄﻛﺪ ﻣﻦ ﻫﺬﻩ ﺍﻟﺨﻄﻮﺓ ﻧﺴﺘﻌﺮﺽ ﺧﺼﺎﺋﺺ ﺍﻟﺠﺪﻭﻝ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﺳﺎﺑﻘﺎﹰ ‪..‬‬

‫;‪SQL> DESC SCHOOL‬‬


‫ﻭﺳﺘﻈﻬﺮ ﻟﻨﺎ ﻣﻮﺍﺻﻔﺎﺕ ﺟﺪﻭﻝ ﺍﻟﻤﺪﺭﺳﺔ ﻛﻤﺎﻳﻠﻲ ‪..‬‬

‫‪Name‬‬ ‫‪Null? Type‬‬


‫‪------------------------------- -------- ----‬‬
‫‪S_NO‬‬ ‫)‪NUMBER(10‬‬
‫‪S_NAME‬‬ ‫)‪VARCHAR2(30‬‬
‫‪S_TYPE‬‬ ‫)‪CHAR(15‬‬
‫‪S_LOC‬‬ ‫)‪VARCHAR2(30‬‬
‫‪S_DATE‬‬ ‫‪DATE‬‬
‫‪S_SEX‬‬ ‫)‪VARCHAR2(10‬‬

‫ﻭﻻﺣﻆ ﺍﻟﺤﻘﻞ ﺍﻟﺠﺪﻳﺪ ﻭﻫﻮ ‪ S_SEX‬ﻗﺪ ﺗﻤﺖ ﺇﺿﺎﻓﺘﻪ ﻟﻠﺠﺪﻭ ﻝ ‪..‬‬

‫• ‪‬‬
‫ﻧﺤﺘﺎﺝ ﺃﺣﻴﺎﻧﺎﹰ ﻟﺘﻌﺪﻳﻞ ﻣﻮﺍﺻﻔﺎﺕ ﺣﻘﻞ ﻣـﺎ ‪ ،‬ﻣﺜـﻞ ﺯﻳـﺎﺩﺓ ﺳـﻌﺘﻪ ﺍﻟﺘﺤﺰﻳﻨﻴـﺔ ﺃﻭ ﺗﻐﻴﻴـﺮ ﺻـﻔﺘﻪ ‪ ،‬ﻭﻫـﺬﺍ‬
‫ﻣﻤﻜﻦ ﻟﻜﻦ ﺑﺸﺮﻭﻁ ﻧﻔﻬﻤﻬﺎ ﻣﻦ ﺧﻼﻝ ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﻌﺎﻣﺔ ‪:‬‬
‫****************** )ﺍﻟﺰﻳﺎﺩﺍﺕ ﻣﻘﺒﻮﻟﺔ ﺩﻭﻣﺎﹰ ﺃﻣﺎ ﺍﻹﻧﻘﺎﺹ ﻓﻴﺆﺩﻱ ﺇﻟﻰ ﻣﺸﺎﻛﻞ (******************‬
‫‪ ‬‬
‫• ﺯﻳﺎﺩﺓ ﺣﺠﻢ ﺣﻘﻞ ﻣﻦ ﺍﻟﻨﻮﻉ ‪ VARCHAR2‬ﺃﻭ ﺍﻟﻨﻮﻉ ‪. CHAR‬‬
‫• ﺯﻳﺎﺩﺓ ﺣﺠﻢ ﺣﻘﻞ ﻣﻦ ﺍﻟﻨﻮﻉ ‪. NUMBER‬‬
‫• ﺯﻳﺎﺩﺓ ﻋﺪﺩ ﺍﻟﺤﻘﻮﻝ ﻓﻲ ﺟﺪﻭﻝ ‪.‬‬
‫‪ ‬‬
‫• ﺇﻧﻘﺎﺹ ﺣﺠﻢ ﺣﻘﻞ ‪. NUMBER‬‬
‫• ﺇﻧﻘﺎﺹ ﺣﺠﻢ ﻋﻤﻮ ﺩ ‪ VARCHAR2‬ﺃﻭ ‪. CHAR‬‬
‫ﻟﻜﻦ ﺷﺮﻁ ﺍﻹﻧﻘﺎﺹ ﺍﻟﻬﺎﻡ ﻫﻮ ‪ :‬ﺃﻧﻪ ﻋﻨﺪ ﺇﻧﻘﺎﺹ ﺣﺠﻢ ﻋﻤﻮﺩ ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻫـﺬﺍ ﺍﻟﺤﻘـﻞ ﻓﺎﺭﻏـﺎﹰ‬
‫ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪.‬‬
‫ﻭﺻﻴﻐﺔ ﺗﻌﺪﻳﻞ ﻣﻮﺍﺻﻔﺎﺕ ﺣﻘﻞٍ ﻣﺎ ﻓﻲ ﺟﺪﻭﻝ ﻫﻲ ﻛﺎﻟﺘﺎﻟﻲ ‪..‬‬

‫‪ MODIFY‬ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪ALTER TABLE‬‬


‫(‬
‫ﺍﻟﺨﺎﺻﻴﺔ ﺃﻭ ﺍﻟﺨﻮﺍﺹ ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬
‫;)‬

‫ﻭﺍﻵﻥ ﻧﺮﻳـــﺪ ﻣـــﺜﻼﹰ ﺗﻌـــﺪﻳﻞ ﺧﺎﺻـــﻴﺔ ﺍﻟﺤﻘـــﻞ ﺍﻟﺠﺪﻳـــﺪ ‪ S_SEX‬ﺍﻟـــﺬﻱ ﺃﻧﺸـــﺄﻧﺎﻩ ﻣـــﺆﺧﺮﺍﹰ ﻣـــﻦ ﺍﻟﻨـــﻮﻉ‬
‫‪ VARCHAR2‬ﺇﻟﻰ ﺍﻟﻨﻮﻉ ‪ .. CHAR‬ﻓﻨﻘﻮﻡ ﺑﻜﺘﺎﺑﺔ ﺍﻷﻣﺮ ﺍﻟﺘﺎﻟﻲ ‪:‬‬

‫‪Alter table school modify‬‬


‫)‪( s_sex char(10‬‬
‫;)‬
‫ﻓﺘﻈﻬﺮ ﻟﻨﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻔﻴﺪ ﺃﻧﻪ ﺗﻢ ﺍﻟﺘﻌﺪﻳﻞ ‪..‬‬
‫‪Table altered.‬‬
‫ﻭﻣـ ـﻦ ﺍﻟﻤﻤﻜـــﻦ ﺃﻥ ﻧﺴـــﺘﻌﺮﺽ ﺧﺼـــﺎﺋﺺ ﺍﻟﺠـــﺪﻭﻝ ﻟـــﻨﻼﺣﻆ ﺗﻐﻴـــﺮ ﺻـــﻔﺔ ﺍﻟﺤﻘـــﻞ ‪ SEX‬ﻣـــﻦ ﺍﻟﻨـــﻮﻉ‬
‫‪ VARCHAR2‬ﺇﻟﻰ ﺍﻟﻨﻮﻉ ‪.. CHAR‬‬
‫ﻣﻠﺤﻮﻇﺔ ﻫﺎﻣﺔ ﺟﺪﺍﹰ ‪ :‬ﺃﻧـﻪ ﺇﺫﺍ ﻛـﺎﻥ ﺍﻟﺠـﺪﻭﻝ ﺑـﻪ ﺑﻴﺎﻧـﺎﺕ ﻭﺗـﻢ ﺗﻐﻴﻴـﺮ ﻧـﻮﻉ ﺑﻴﺎﻧـﺎﺕ ﺍﻟﺤﻘـﻞ ﻣـﻦ ﺍﻟﻨـﻮﻉ‬
‫ﺍﻟﺤﺮﻓﻲ ﺇﻟﻰ ﺍﻟﻨﻮﻉ ﺍﻟﺮﻗﻤﻲ ﺃﻭ ﺍﻟﻌﻜﺲ ‪ ،‬ﻓﺈﻥ ﺍﻟﻠﻐﺔ ﺗﻌﻄﻲ ) ﺭﺳـﺎﻟﺔ ﺧﻄـﺄ ( ﺗﻌﻨـﻲ ﺃﻥ ﺍﻟﺤﻘـﻞ ﻳﺠـﺐ ﺃﻥ‬
‫ﻳﻜﻮﻥ ﺧﺎﻟﻴﺎﹰ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺃﻭ ﻓـﻲ ﺣﺎﻟـﺔ ﺃﻥ ﺍﻟﺒﻴﺎﻧـﺎﺕ ﺍﻟﻤﺨﺰﻧـﺔ ﻓـﻲ ﺍﻟﺠـﺪﻭﻝ ﻻ ﺗﺘﻨﺎﺳـﺐ ﻣـﻊ ﻣﻮﺍﺻـﻔﺎﺕ‬
‫ﺍﻟﺤﻘﻞ ﺑﻌﺪ ﺍﻟﺘﻌﺪﻳﻞ‬

‫‪‬‬
‫‪: ALTER TABLE‬‬ ‫‪‬‬ ‫•‬
‫‪ ‬‬
‫‪ -‬ﺇﺿﺎﻓﺔ ﺣﻘﻞ ﺟﺪﻳﺪ ﺇﻟﻰ ﺟﺪﻭﻝ ﻣﻨﺸﺄ ﺳﺎﺑﻘﺎﹰ ‪.‬‬
‫‪ -‬ﺍﻟﺘﻌﺪﻳﻞ ﻓﻲ ﺻﻔﺔ ﺣﻘﻞٍ ﻣﺎ ‪.‬‬
‫‪ -‬ﺍﻹﺿﺎﻓﺔ ﻭ ﺍﻟﺘﻌﺪﻳﻞ ﻓﻲ ﻗﻴﻮﺩ ﻣﻨﺸﺄﺓ ﻋﻠﻰ ﻋﺪﺓ ﺣﻘﻮﻝ ﻣﺴﺒﻘﺎﹰ ‪.‬‬
‫‪ -‬ﺗﺄﻫﻴﻞ ﺍﻟﻘﻴﻮﺩ ﻭﺇﻋﺎﺩﺓ ﺗﺄﻫﻴﻠﻴﻬﺎ‪.‬‬
‫‪ -‬ﺣﺬﻑ ﺍﻟﻘﻴﻮﺩ ﻣﻦ ﺍﻟﺠﺪﻭﺍﻝ ‪..‬‬
‫• ‪ ‬‬

‫‪ ADD‬ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪ALTER TABLE‬‬


‫ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬ ‫ﻧﻮﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ‬ ‫] ﻓﺎﺭﻍ ﺃﻭ ﻏﻴﺮ ﻓﺎﺭﻍ ﺃﻭ ﻗـﻴﻮﺩ [ )ﻃﻮﻟﻬﺎ(‬
‫;)‬

‫ﻭﻫﺬﻩ ﺍﻟﺼﻴﻐﺔ ﺗﺴﺘﺨﺪﻡ ﻹﺿﺎﻓﺔ ﺣﻘﻞ ﺃﻭ ﺣﻘﻮﻝ ﺟﺪﻳﺪﺓ ﺑﻨﺎﺀً ﻋﻠﻰ ﺍﻟﻜﻠﻤﺔ ‪. ADD‬‬

‫• ‪‬‬
‫‪ MODIFY‬ﺍﺳﻢ ﺍﻟﺠﺪﻭﻝ ‪ALTER TABLE‬‬
‫(‬
‫ﺍﻟﺨﺎﺻﻴﺔ ﺃﻭ ﺍﻟﺨﻮﺍﺹ ﺍﺳﻢ ﺍﻟﺤﻘﻞ‬
‫;)‬
‫ﻭﻗﺎﻋﺪﺓ ﺍﻟﺘﻌﺪﻳﻞ ﻓﻲ ﻣﻮﺍﺻﻔﺎﺕ ﺣﻖ ﻫﻲ ‪:‬‬
‫‪)...‬ﺍﻟﺰﻳﺎﺩﺍﺕ ﻣﻘﺒﻮﻟﺔ ﺩﻭﻣﺎﹰ ﺃﻣﺎ ﺍﻹﻧﻘﺎﺹ ﻓﻴﺆﺩﻱ ﺇﻟﻰ ﻣﺸﺎﻛﻞ (‪...‬‬
‫****************************************************************************************************‬
‫ﻭﻓﻲ ﺍﻟﺪﺭﺱ ﺍﻟﻘﺎﺩﻡ ﺑﺈﺫﻥ ﺍﷲ ﺳﻨﺴﺘﻜﻤﻞ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺜﻼﺙ ﺍﻷﺧﺮﻯ ﻟﻸﻣﺮ ‪ .. ALTER‬ﻓﺈﻟﻰ ﻟﻘﺎﺀ‬
‫ﻗﺮﻳﺐ ﺑﺈﺫﻥ ﺍﷲ ﺗﻌﺎﻟﻰ ‪.‬ﻭﺳﺎﻣﺤﻮﻧﺎ ﻋﻠﻰ ﺍﻟﺘﻘﺼﻴﺮ ‪ ،‬ﻭﻓﻖ ﺍﷲ ﺍﻟﺠﻤﻴﻊ ﻟﻤﺎ ﻳﺤﺒﻪ ﻭﻳﺮﺿﺎﻩ ‪..‬‬
‫‪ ‬‬
‫ﺍﻷﺳﻴـــــــــــــــــــــــــــــــــــــــــــــــﻒ‬
‫‪Email:[email protected]‬‬

You might also like