زبان برنامه نویسی SQL. SQL "for dummies": مبتدیان چه چیزی باید بدانند؟ آموزش پرس و جوهای ساده در sql

مبانی نظری DBMS SQL Server 2012 به روشی ساده و قابل دسترس در نظر گرفته شده است.نصب، پیکربندی و پشتیبانی از MS SQL Server 2012 نشان داده شده است.زبان دستکاری داده Transact-SQL شرح داده شده است. ایجاد یک پایگاه داده، اصلاح جداول و محتویات آنها، پرس و جوها، نمایه ها، نماها، محرک ها، رویه های ذخیره شده و توابع تعریف شده توسط کاربر در نظر گرفته شده است.
اجرای امنیت با استفاده از احراز هویت، رمزگذاری و مجوز نشان داده شده است. توجه به اتوماسیون وظایف مدیریت DBMS معطوف شده است. ایجاد نسخه های پشتیبان از داده ها و اجرای بازیابی سیستم در نظر گرفته شده است. خدمات تجزیه و تحلیل مایکروسافت، خدمات گزارش دهی مایکروسافت و سایر ابزارهای هوش تجاری را شرح می دهد. فناوری کار با اسناد XML، مدیریت داده های مکانی، جستجوی متن کامل و موارد دیگر در نظر گرفته شده است. برای برنامه نویسان مبتدی

در دنیای مدرن، اطلاعات بالاترین ارزش را دارند، اما مدیریت این اطلاعات به همان اندازه مهم است. این کتاب در مورد زبان پرس و جوی SQL و مدیریت پایگاه داده است. مطالب با شرح پرس و جوهای اساسی شروع شده و با دستکاری های پیچیده با استفاده از اتصالات، پرس و جوهای فرعی و تراکنش ها پایان می یابد. اگر در تلاش برای درک سازماندهی و مدیریت پایگاه های اطلاعاتی هستید، این کتاب راهنمای عملی بسیار خوبی خواهد بود و همه چیز را در اختیار شما قرار می دهد. ابزار لازم. یکی از ویژگی های این نسخه، روش منحصر به فرد ارائه مطالب است که سری O\'Reilly's Head First را از تعدادی کتاب برنامه نویسی خسته کننده متمایز می کند.

این کتاب به شما یاد می دهد که چگونه با دستورات و دستورات SQL کار کنید، پایگاه داده های رابطه ای ایجاد و پیکربندی کنید، اشیاء پایگاه داده را بارگذاری و اصلاح کنید، پرس و جوهای قدرتمند را اجرا کنید، عملکرد را بهبود بخشید و امنیت ایجاد کنید. شما یاد خواهید گرفت که چگونه از دستورات DDL استفاده کنید و API ها را اعمال کنید، اسکریپت های XML و جاوا را ادغام کنید، از اشیاء SQL استفاده کنید، سرورهای وب ایجاد کنید، با دسترسی از راه دور کار کنید و تراکنش های توزیع شده را انجام دهید.
در این کتاب اطلاعاتی مانند توضیحات کار با پایگاه‌های اطلاعاتی درون حافظه، پایگاه‌های داده‌های جریانی و تعبیه‌شده، پایگاه‌های داده برای دستگاه‌های تلفن همراه و دستی و موارد دیگر را خواهید یافت.

SQL for Mortals یک مقدمه کامل برای زبان پرس و جوی ساختاریافته است که مخصوصاً برای مبتدیان نوشته شده است.

اگر در مدیریت پایگاه داده تازه کار هستید، این کتاب به شما یاد می دهد که چگونه با استفاده از پرس و جوهای ساده و عملیات پیچیده، به راحتی و روان با SQL کار کنید. برای تسلط بر SQL:

- درک مفهوم مفاهیم مدیریت پایگاه داده با مقدمه ای مختصر و ساده برای پایگاه های داده رابطه ای.
— برای استفاده از دستورات اولیه SQL برای یافتن و کار با اطلاعات قرار داده شده در جداول داده، این دستورالعمل ها را دنبال کنید. نحوه انتخاب و خلاصه کردن داده ها و همچنین مدیریت ماهرانه آنها را بیاموزید.
- کارآمد با جداول داده های ترکیبی با استفاده از تکنیک های پیشرفته پرس و جو در بیش از یک جدول به طور همزمان، ساخت پرس و جوها و سوالات فرعی پیچیده.
- جداول داده جدید برای برنامه های کاربردی کسب و کار خرده فروشی ایجاد کنید. اصول مهم طراحی پایگاه داده و تکنیک های موثر برای اطمینان از یکپارچگی و حفاظت از داده ها را بیاموزید.
- آموزش استفاده از SQL با زبان های برنامه نویسی با استفاده از یک فصل اختصاصی برای برنامه نویسان.

SQL از بسیاری از ما قدیمی‌تر است، بنابراین نمی‌توانم ادعا کنم که چیزهای خارق‌العاده‌ای را از طریق این کتاب منتقل می‌کنم. چیزی که این عنوان را منحصر به فرد می کند اندازه باریک آن است. اگر به دنبال یک راهنمای عملی فشرده واقعی در SQL هستید، این کتاب برای شما مناسب است. برای مبتدیان، من سعی کرده ام اقیانوس را به یک سطل محدود کنم تا در کوتاه ترین زمان ممکن آنها را به دانش SQL مجهز کنم. زبان SQL بیش از حد حجیم است و قرار گرفتن در معرض هر جنبه ای از این زبان عظیم کاری بسیار خسته کننده است. با کنار گذاشتن کمترین ویژگی های استفاده شده، این کتاب برای تمرکز بر حوزه های عملیاتی تر زبان منتشر شده است. این به شما کمک می کند تا به سرعت SQL را خودتان یاد بگیرید. این یک رویکرد آموزشی را دنبال می کند در حالی که صدها تمرین عملی ارائه شده است که با تصاویر افزوده شده است تا SQL را در مدت زمان کوتاهی به شما آموزش دهد. بدون هیچ گونه اغراق، کتاب SQL را در زمان رکوردی در معرض دید قرار می دهد. این کتاب به صراحت یک پلتفرم رایگان از DBMS شماره 1 جهان را برای افشای SQL: Oracle Database Express Edition پوشش می‌دهد. من Oracle XE را انتخاب کردم زیرا برای توسعه، استقرار و توزیع رایگان است. سریع برای دانلود؛ و ساده برای مدیریت

شروع Oracle PL/SQL به شما کمک می کند تا از زبان داخلی استفاده کنید که هر توسعه دهنده و مدیر پایگاه داده اوراکل باید بداند. پایگاه داده Oracle مملو از ویژگی های داخلی برنامه است که استفاده از آنها رایگان است و PL/SQL بلیط شما برای یادگیری و استفاده از این ویژگی ها از طریق کد خود است. با آن، تو می توانیمنطق کسب و کار را در پایگاه داده متمرکز کنید، می توانید منطق برنامه را تخلیه کنید، و می توانید وظایف مدیریت پایگاه داده و برنامه کاربردی را خودکار کنید.

نویسنده Don Bales در Beginning Oracle PL/SQL یک آموزش سریع و پر از مثال ارائه می دهد. از تجربه گسترده Don برای کشف رایج‌ترین جنبه‌های PL/SQL، بدون اتلاف وقت برای ویژگی‌های مبهم و منسوخ، بیاموزید.

کتاب «SQL. کتاب مقدس کاربر از این نظر منحصر به فرد است که هر فصل اجرای استاندارد زبان پرس و جو SQL را در سه DBMS پیشرو مقایسه می کند. نتیجه یک مرجع جامع و کاربردی برای کاربران پایگاه داده، از مبتدی تا حرفه ای است. این کتاب در مورد SQL به راحتی تئوری را با عمل ترکیب می‌کند، شامل توصیفی از فن‌آوری‌های جدید است و به شما این امکان را می‌دهد تا تفاوت‌های ظریف استاندارد زبان پرس و جو SQL و پیاده‌سازی آن را درک کنید. می توان از آن به عنوان یک مرجع استفاده کرد - نوعی کتابچه راهنمای دسکتاپ.
- اصول اولیه زبان پرس و جو SQL و پایگاه داده های رابطه ای را بیاموزید
- یاد بگیرید که با جداول، نماها، دنباله ها و سایر اشیاء پایگاه داده کار کنید
- نحوه اعمال تراکنش ها و قفل ها را در یک محیط چند کاربره بیاموزید
- با ویژگی های ارائه شده توسط استاندارد SQL و سه فروشنده پیشرو پایگاه داده آشنا شوید
- نحوه دسترسی به ابرداده و پیاده سازی امنیت پایگاه داده را بیاموزید
- موضوعات اضافی را کاوش کنید: ادغام SQL به XML، هوش تجاری OLAP و موارد دیگر

اگر مهارت های اولیه HTML را دارید، با کمک کتاب رابین نیکسون، توسعه دهنده باتجربه و نویسنده کتاب های پرفروش مسترینگ وب، به راحتی یاد خواهید گرفت که چگونه سایت های پویا ایجاد کنید که با سطح بالایی از تعامل کاربر مشخص می شود.
ترکیب PHP و MySQL را کشف کنید، بیاموزید که چگونه ساخت وب‌سایت‌های مدرن را آسان‌تر می‌کنند، و یاد بگیرید که چگونه قابلیت‌های جاوا اسکریپت را به این فناوری‌ها اضافه کنید و به شما امکان ایجاد برنامه‌های کاربردی با فناوری بالا را می‌دهد.
این راهنما به هر فناوری به طور جداگانه نگاه می کند، نحوه ترکیب PHP، MySQL و جاوا اسکریپت را در یک کل واحد نشان می دهد، و ایده ای از مدرن ترین مفاهیم برنامه نویسی وب را ارائه می دهد. با مطالعات موردی و آزمون‌های دقیق در هر فصل، می‌توانید آنچه را که آموخته‌اید در عمل پیاده کنید.

این راهنما به شما کمک خواهد کرد:
- تسلط بر مبانی PHP و برنامه نویسی شی گرا.
- MySQL را به طور کامل مطالعه کنید، از ساختار پایگاه های داده شروع کنید و با کامپایل پرس و جوهای پیچیده پایان دهید.
- ایجاد صفحات وب که از PHP و MySQL برای ترکیب فرم ها و سایر اجزای HTML استفاده می کنند.
- یادگیری جاوا اسکریپت، از توابع و مدیریت رویداد شروع می شود و با دسترسی به مدل شیء سند (DOM) خاتمه می یابد.
- از کتابخانه ها و بسته های نرم افزاری، از جمله سیستم Smarty، مخزن نرم افزار PEAR و Yahoo! استفاده کنید. رابط کاربری؛
- تماس های Ajax برقرار کنید و وب سایت خود را به یک محیط اطلاعاتی بسیار پویا تبدیل کنید.
- آپلود فایل ها و تصاویر در وب سایت و کار با آنها، بررسی داده های وارد شده توسط کاربر.
- از امنیت برنامه های خود اطمینان حاصل کنید.

جستجوها به اندازه کافی سریع اجرا نمی شوند؟ آیا در مورد ویژگی های پایگاه داده درون حافظه در سال 2014 تعجب می کنید؟ از تماس های تلفنی کاربران ناامید خسته شده اید؟ کتاب Grant Fritchey's SQL Server Query Performance Tuning پاسخی به مشکلات عملکرد پرس و جوی SQL Server شما است. این کتاب برای پوشش جدیدترین ویژگی‌ها و تکنیک‌های بهینه‌سازی عملکرد، به‌ویژه از جمله ویژگی‌های جدید پایگاه داده درون حافظه که قبلاً با نام رمز پروژه هکاتون شناخته می‌شد، بازبینی شده است. این کتاب ابزارهایی را ارائه می دهد که شما برای نزدیک شدن به سوالات خود با در نظر گرفتن عملکرد نیاز دارید.

SQL Server Query Performance Tuning شما را در درک دلایل عملکرد ضعیف، نحوه شناسایی آنها و نحوه رفع آنها راهنمایی می کند. شما یاد خواهید گرفت که در ایجاد خطوط پایه عملکرد با استفاده از ابزارهایی مانند نمایشگر عملکرد و رویدادهای گسترده فعال باشید. شما یاد خواهید گرفت که گلوگاه ها را بشناسید و قبل از زنگ زدن تلفن آنها را خنثی کنید. راه‌حل‌های سریع را نیز یاد خواهید گرفت، اما تأکید بر طراحی برای عملکرد و درست کردن آن، و رفع مشکل قبل از وقوع آن است. کاربران خود را خوشحال کنید. صدای زنگ تلفن را خاموش کنید. اصول و درس‌های حاصل از تنظیم عملکرد پرس و جوی SQL Server را امروز در عمل پیاده کنید.

ویژگی های درون حافظه پروژه هکاتون را پوشش می دهد
به ایجاد خطوط پایه عملکرد و نظارت بر آنها کمک می کند
راهنمای عیب یابی و از بین بردن تنگناهایی که کاربران را ناامید می کند
چیزی که یاد خواهید گرفت
- پایه های عملکرد را ایجاد کنید و بر اساس آنها نظارت کنید
- شناسایی و رفع تنگناهایی که منجر به کندی عملکرد می شود
- راه‌حل‌های سریع را در صورت نیاز به کار بگیرید و راه‌حل‌های بلندمدت را دنبال کنید
- بهترین روش ها را در T-SQL اجرا کنید تا ریسک عملکرد را به حداقل برسانید
- از طریق طراحی دقیق پرس و جو و نمایه، عملکرد مورد نیاز خود را طراحی کنید
- از جدیدترین ویژگی های بهینه سازی عملکرد در SQL Server 2014 استفاده کنید
- ویژگی های جدید پایگاه داده در حافظه را که قبلاً با نام رمز پروژه هکاتون شناخته می شد، درک کنید

کتاب 10 دقیقه ای SQL ارائه می دهد ساده و راه حل های عملیبرای کسانی که نتایج سریع می خواهند پس از کار بر روی تمام 22 درس، که هر کدام بیش از 10 دقیقه طول نمی کشد، همه چیزهایی را که برای استفاده عملی از SQL لازم است یاد خواهید گرفت. مثال‌های موجود در کتاب برای IBM DB2، Microsoft Access، Microsoft SQL Server، MySQL، Oracle، PostgreSQL، SQLite، MariaDB و Apache OpenOffice Base مناسب هستند. مثال‌های گویا به شما کمک می‌کنند تا نحوه ساختاربندی عبارات SQL را درک کنید. نکات باعث راه‌حل‌های کوتاه می‌شوند. هشدارها به شما کمک می کند از اشتباهات رایج جلوگیری کنید. یادداشت ها توضیحات بیشتری را ارائه می دهند.

این آموزش چیزی شبیه "مهر حافظه من" در زبان SQL (DDL، DML) است. این اطلاعاتی است که در طول مسیر انباشته شده است. فعالیت حرفه ایو مدام در سرم ذخیره می شود. این حداقل برای من کافی است که اغلب هنگام کار با پایگاه داده استفاده می شود. اگر نیاز به استفاده از ساختارهای SQL کاملتر باشد، معمولاً برای کمک به کتابخانه MSDN واقع در اینترنت مراجعه می کنم. به نظر من نگه داشتن همه چیز در ذهن شما بسیار سخت است و نیاز خاصی به این کار وجود ندارد. اما دانستن ساختارهای اولیه بسیار مفید است، زیرا. آنها تقریباً به یک شکل در بسیاری از پایگاه داده های رابطه ای مانند Oracle، MySQL، Firebird قابل استفاده هستند. تفاوت ها عمدتاً در انواع داده ها است که ممکن است در جزئیات متفاوت باشد. ساختارهای اولیه زبان SQL زیادی وجود ندارد و با تمرین مداوم آنها به سرعت به خاطر سپرده می شوند. به عنوان مثال، برای ایجاد اشیاء (جدول، محدودیت ها، فهرست ها و غیره) کافی است یک ویرایشگر متن محیط (IDE) برای کار با پایگاه داده در دسترس داشته باشید و نیازی به یادگیری یک جعبه ابزار بصری نیست. کار با نوع خاصی از پایگاه داده (MS SQL، Oracle، MySQL، Firebird، …). این نیز راحت است زیرا کل متن در جلوی چشمان شما قرار دارد و برای ایجاد، به عنوان مثال، یک نمایه یا یک محدودیت، نیازی به اجرای چندین برگه ندارید. هنگام کار مداوم با پایگاه داده، ایجاد، اصلاح و به خصوص ایجاد مجدد یک شی با استفاده از اسکریپت ها چندین برابر سریعتر از زمانی است که در حالت بصری انجام شود. همچنین در حالت اسکریپت (به ترتیب با دقت کافی)، تنظیم و کنترل قوانین نامگذاری اشیا آسانتر است (نظر ذهنی من). علاوه بر این، اسکریپت ها برای استفاده راحت هستند زمانی که تغییرات ایجاد شده در یک پایگاه داده (مثلاً یک پایگاه آزمایشی) باید به همان شکل به پایگاه داده دیگری (مولد) منتقل شود.

زبان SQL به چندین بخش تقسیم می شود که در اینجا به 2 بخش مهم آن می پردازم:
  • DML - زبان دستکاری داده ها (زبان دستکاری داده ها)، که شامل ساختارهای زیر است:
    • SELECT - انتخاب داده ها
    • INSERT - درج داده های جدید
    • به روز رسانی - به روز رسانی داده ها
    • DELETE - حذف داده ها
    • MERGE - ادغام داده ها
زیرا من یک کارآموز هستم، به همین دلیل نظریه کمی در این کتاب درسی وجود خواهد داشت و تمام ساختارها با مثال های عملی توضیح داده می شود. علاوه بر این، من معتقدم که یک زبان برنامه نویسی، و به خصوص SQL، تنها با لمس کردن آن به تنهایی و درک آنچه در هنگام اجرای این یا آن ساختار اتفاق می افتد، می تواند در عمل تسلط یابد.

این آموزش بر اساس اصل گام به گام ایجاد شده است. خواندن آن به صورت متوالی و ترجیحاً بلافاصله پس از مثال ضروری است. اما اگر در طول مسیر نیاز به یادگیری یک دستور با جزئیات بیشتری دارید، از یک جستجوی خاص در اینترنت، به عنوان مثال، در کتابخانه MSDN استفاده کنید.

هنگام نوشتن این آموزش، از پایگاه داده MS SQL Server نسخه 2014 استفاده کردم و از MS SQL Server Management Studio (SSMS) برای اجرای اسکریپت ها استفاده کردم.

مختصری درباره MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) یک ابزار برای Microsoft SQL Server برای پیکربندی، مدیریت و مدیریت اجزای پایگاه داده است. این ابزار شامل یک ویرایشگر اسکریپت (که ما عمدتا از آن استفاده خواهیم کرد) و یک برنامه گرافیکی است که با اشیاء و تنظیمات سرور کار می کند. ابزار اصلی SQL Server Management Studio Object Explorer است که به کاربر امکان مشاهده، بازیابی و مدیریت اشیاء سرور را می دهد. این متن تا حدی از ویکی پدیا به عاریت گرفته شده است.

برای ایجاد یک ویرایشگر اسکریپت جدید، از دکمه New Query استفاده کنید:

برای تغییر پایگاه داده فعلی، می توانید از لیست کشویی استفاده کنید:

برای اجرای یک فرمان خاص (یا گروهی از دستورات)، آن را انتخاب کرده و دکمه "Execute" را فشار دهید یا کلید "F5" را فشار دهید. اگر در حال حاضر فقط یک دستور در ویرایشگر وجود دارد، یا اگر نیاز به اجرای همه دستورات دارید، نیازی به انتخاب چیزی ندارید.

پس از اجرای اسکریپت ها، به خصوص آنهایی که اشیاء ایجاد می کنند (جدول، ستون، نمایه)، برای مشاهده تغییرات، از Refresh از منوی زمینه استفاده کنید و گروه مناسب (مثلاً Tables)، خود جدول یا گروه Columns را در آن برجسته کنید. .

در واقع، این تنها چیزی است که برای تکمیل مثال های ارائه شده در اینجا باید بدانیم. مابقی ابزار SSMS به راحتی قابل یادگیری است.

کمی تئوری

پایگاه داده رابطه ای (RDB یا بیشتر در زمینه یک پایگاه داده) مجموعه ای از جداول به هم پیوسته است. به طور کلی، پایگاه داده فایلی است که داده ها در یک فرم ساختار یافته ذخیره می شوند.

DBMS - سیستمی برای مدیریت این پایگاه‌های داده، یعنی. این مجموعه ای از ابزارها برای کار با نوع خاصی از پایگاه داده (MS SQL، Oracle، MySQL، Firebird، ...) است.

توجه داشته باشید
زیرا در زندگی، در گفتار محاوره ای، ما بیشتر می گوییم: "Oracle DB" یا حتی فقط "Oracle" که در واقع به معنای "Oracle DBMS" است، سپس در متن این آموزش گاهی اوقات از اصطلاح DB استفاده می شود. با توجه به زمینه، فکر می کنم مشخص خواهد شد که دقیقاً چه چیزی در خطر است.

جدول مجموعه ای از ستون ها است. ستون ها را می توان فیلد یا ستون نیز نامید، همه این کلمات به عنوان مترادف استفاده می شوند و یک چیز را بیان می کنند.

جدول شی اصلی RDB است، تمام داده های RDB خط به خط در ستون های جدول ذخیره می شود. خطوط، رکوردها نیز مترادف هستند.

برای هر جدول و همچنین ستون‌های آن، نام‌هایی آورده شده است که بعداً به آنها اشاره می‌شود.
نام شی (نام جدول، نام ستون، نام فهرست و غیره) در MS SQL می تواند حداکثر 128 کاراکتر داشته باشد.

برای مرجع- در پایگاه داده ORACLE، نام اشیاء می تواند حداکثر 30 کاراکتر داشته باشد. بنابراین، برای یک پایگاه داده خاص، باید قوانین خود را برای نامگذاری اشیا ایجاد کنید تا محدودیت تعداد کاراکترها را رعایت کنید.

SQL زبانی است که به شما امکان می دهد از طریق DBMS از پایگاه داده پرس و جو کنید. در یک DBMS خاص، زبان SQL ممکن است یک پیاده سازی خاص (گویش خود) داشته باشد.

DDL و DML زیر مجموعه ای از زبان SQL هستند:

  • زبان DDL برای ایجاد و اصلاح ساختار پایگاه داده استفاده می شود. برای ایجاد/تغییر/حذف جداول و روابط.
  • زبان DML به شما اجازه می دهد تا داده های جدول را دستکاری کنید. با خطوط او این به شما امکان می دهد داده ها را از جداول انتخاب کنید، داده های جدید را به جداول اضافه کنید و داده های موجود را به روز رسانی و حذف کنید.

در زبان SQL می توانید از 2 نوع کامنت (تک خطی و چند خطی) استفاده کنید:

نظر تک خطی
و

/* نظر چند خطی */

در واقع، همه چیز برای تئوری این کافی خواهد بود.

DDL - زبان تعریف داده (زبان توصیف داده ها)

به عنوان مثال، جدولی را با داده های مربوط به کارمندان، به شکلی که برای شخصی که برنامه نویس نیست، در نظر بگیرید:

در این مورد، ستون های جدول دارای نام های زیر است: شماره پرسنل، نام کامل، تاریخ تولد، پست الکترونیکی، سمت، بخش.

هر یک از این ستون ها را می توان با نوع داده ای که در آن قرار دارد مشخص کرد:

  • شماره پرسنل - عدد صحیح
  • نام کامل - رشته
  • تاریخ تولد - تاریخ
  • ایمیل - رشته
  • موقعیت - رشته
  • بخش - رشته
نوع ستون مشخصه ای است که نشان می دهد این ستون چه نوع داده هایی را می تواند ذخیره کند.

برای شروع، کافی است فقط انواع داده های اساسی زیر را که در MS SQL استفاده می شود، به خاطر بسپارید:

معنی علامت گذاری در MS SQL شرح
رشته با طول متغیر varchar (N)
و
nvarchar (N)
با عدد N می توانیم حداکثر طول رشته ممکن را برای ستون مربوطه مشخص کنیم. به عنوان مثال، اگر بخواهیم بگوییم که مقدار ستون "Name" می تواند حداکثر 30 کاراکتر داشته باشد، باید نوع آن را nvarchar (30) قرار دهیم.
تفاوت بین varchar و nvarchar در این است که varchar به شما امکان می دهد رشته ها را با فرمت ASCII ذخیره کنید، جایی که یک کاراکتر 1 بایت را اشغال می کند، در حالی که nvarchar رشته ها را در قالب Unicode ذخیره می کند، جایی که هر کاراکتر 2 بایت را اشغال می کند.
نوع varchar فقط در صورتی باید استفاده شود که 100% مطمئن باشید که فیلد نیازی به ذخیره کاراکترهای یونیکد ندارد. به عنوان مثال، varchar را می توان برای ذخیره آدرس های ایمیل استفاده کرد زیرا آنها معمولاً فقط شامل کاراکترهای ASCII هستند.
رشته طول ثابت کاراکتر (N)
و
nchar (N)
تفاوت این نوع با رشته با طول متغیر در این است که اگر طول رشته کمتر از N کاراکتر باشد، همیشه در سمت راست تا طول N فاصله قرار می‌گیرد و به این شکل در پایگاه داده ذخیره می‌شود. در پایگاه داده دقیقاً N کاراکتر را اشغال می کند (که در آن یک کاراکتر 1 بایت برای char و 2 بایت برای nchar اشغال می کند). در عمل من، این نوع بسیار به ندرت استفاده می شود و اگر از آن استفاده شود، عمدتاً در قالب char (1) استفاده می شود، یعنی. وقتی فیلد با یک کاراکتر مشخص می شود.
عدد صحیح بین المللی این نوع به ما اجازه می دهد که فقط از اعداد صحیح، مثبت و منفی، در ستون استفاده کنیم. برای مرجع (اکنون برای ما چندان مرتبط نیست) - محدوده اعدادی که نوع int از -2 147 483 648 تا 2 147 483 647 اجازه می دهد. این معمولاً نوع اصلی است که برای تنظیم شناسه ها استفاده می شود.
عدد واقعی یا واقعی شناور اگر صحبت کنیم زبان ساده، سپس اینها اعدادی هستند که یک نقطه اعشار (کاما) می تواند وجود داشته باشد.
تاریخ تاریخ اگر ستون فقط باید تاریخ را ذخیره کند که از سه جزء تشکیل شده است: شماره، ماه و سال. به عنوان مثال، 02/15/2014 (15 فوریه 2014). این نوع را می توان برای ستون "تاریخ پذیرش"، "تاریخ تولد" و غیره استفاده کرد، یعنی. در مواردی که برای ما مهم است که فقط تاریخ را تعیین کنیم، یا زمانی که جزء زمان برای ما مهم نیست و می توان آن را کنار گذاشت، یا اگر مشخص نیست.
زمان زمان این نوع می تواند مورد استفاده قرار گیرد اگر ستون نیاز به ذخیره فقط داده های زمانی دارد، یعنی. ساعت، دقیقه، ثانیه و میلی ثانیه. به عنوان مثال، 17:38:31.3231603
به عنوان مثال، "زمان حرکت پرواز" روزانه.
تاریخ و زمان وقت قرار این نوع به شما امکان می دهد هر دو تاریخ و زمان را به طور همزمان ذخیره کنید. به عنوان مثال، 2014/02/15 5:38:31.323 بعد از ظهر
به عنوان مثال، این می تواند تاریخ و زمان یک رویداد باشد.
پرچم بیت این نوع برای ذخیره مقادیر Yes/No مفید است، جایی که Yes به عنوان 1 و No به عنوان 0 ذخیره می شود.

همچنین مقدار فیلد در صورت ممنوع نبودن ممکن است مشخص نشود، برای این منظور از کلمه کلیدی NULL استفاده می شود.

برای اجرای مثال ها، بیایید یک پایگاه داده آزمایشی به نام Test ایجاد کنیم.

با اجرای دستور زیر می توان یک پایگاه داده ساده (بدون تعیین پارامترهای اضافی) ایجاد کرد:

تست ایجاد پایگاه داده
می توانید پایگاه داده را با دستور حذف کنید (باید بسیار مراقب این دستور باشید):

تست DROP DATABASE
برای جابجایی به پایگاه داده ما، می توانید دستور زیر را اجرا کنید:

تست آمریکا
همچنین، پایگاه داده تست را از لیست کشویی در ناحیه منوی SSMS انتخاب کنید. در محل کار، من اغلب از این روش برای جابجایی بین پایگاه های داده استفاده می کنم.

اکنون در پایگاه داده خود می توانیم با استفاده از توضیحات همانطور که هستند، با استفاده از فاصله ها و کاراکترهای سیریلیک جدولی ایجاد کنیم:

ایجاد جدول [کارمندان]([شماره پرسنل] int، [نام] nvarchar(30)، [تاریخ تولد] تاریخ، nvarchar(30)، [مقام] nvarchar(30)، [بخش] nvarchar(30))
در این صورت، ما باید نام ها را در پرانتز [...] قرار دهیم.

اما در دیتابیس برای راحتی بیشتر، بهتر است نام تمام اشیا به لاتین مشخص شود و در نام ها از فاصله استفاده نشود. در MS SQL معمولاً در این حالت، هر کلمه با یک حرف بزرگ شروع می شود، به عنوان مثال، برای قسمت "Personnel number" می توانیم نام PersonnelNumber را تعیین کنیم. همچنین می توانید از اعداد در نام استفاده کنید، به عنوان مثال PhoneNumber1.

در یک یادداشت
در برخی از DBMS، قالب زیر از نام "PHONE_NUMBER" ممکن است ارجح تر باشد، برای مثال، این قالب اغلب در پایگاه داده ORACLE استفاده می شود. طبیعتاً هنگام تنظیم نام فیلد، مطلوب است که با کلمات کلیدی استفاده شده در DBMS مطابقت نداشته باشد.

به همین دلیل، می توانید سینتکس براکت را فراموش کرده و جدول [کارمندان] را حذف کنید:

جدول رها کردن [کارمندان]
به عنوان مثال، جدولی با کارمندان را می توان «کارمندان» نامید و فیلدهای آن را می توان نام های زیر نامید:

  • شناسه - شماره پرسنل (شناسه کارمند)
  • نام - نام کامل
  • تولد - تاریخ تولد
  • پست الکترونیک
  • موقعیت
  • بخش - بخش
اغلب از کلمه ID برای نامگذاری فیلد شناسه استفاده می شود.

حالا بیایید جدول خود را بسازیم:

ایجاد جدول کارکنان (ID int، نام nvarchar(30)، تاریخ تولد، ایمیل nvarchar(30)، موقعیت nvarchar(30)، بخش nvarchar(30))
می توانید از گزینه NOT NULL برای تعیین ستون های مورد نیاز استفاده کنید.

برای یک جدول از قبل موجود، فیلدها را می توان با استفاده از دستورات زیر دوباره تعریف کرد:

فیلد ID به روز رسانی ALTER TABLE Employees ALTER COLUMN ID int NOT NULL -- به روز رسانی فیلد نام ALTER TABLE Employees ALTER COLUMN نام nvarchar(30) NOT NULL

در یک یادداشت
مفهوم کلی زبان SQL برای اکثر DBMS ها یکسان است (حداقل، من می توانم این را از روی DBMS هایی که فرصت کار با آن ها را داشتم قضاوت کنم). تفاوت بین DDL در DBMS های مختلف عمدتاً در انواع داده ها است (نه تنها نام آنها، بلکه جزئیات پیاده سازی آنها نیز ممکن است در اینجا متفاوت باشد)، ویژگی های بسیار خاص اجرای زبان SQL نیز ممکن است کمی متفاوت باشد (یعنی ماهیت دستورات یکسان است، اما ممکن است تفاوت های جزئی در گویش وجود داشته باشد، افسوس، اما هیچ استانداردی وجود ندارد). با دانستن اصول اولیه SQL، می توانید به راحتی از یک DBMS به DBMS دیگر سوئیچ کنید. در این مورد، شما فقط باید جزئیات اجرای دستورات در DBMS جدید را درک کنید. در بیشتر موارد، فقط برای ترسیم یک قیاس کافی است.

ایجاد جدول CREATE TABLE Employees(ID int، -- در نوع ORACLE int معادل (wrapper) برای عدد(38) است، نام nvarchar2(30)، -- nvarchar2 در ORACLE معادل nvarchar در MS SQL تاریخ تولد، ایمیل nvarchar2 30) , Position nvarchar2(30), Department nvarchar2(30)); - به روز رسانی فیلدهای ID و Name (در اینجا MODIFY(...) به جای ALTER COLUMN ALTER TABLE Employees MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL استفاده می شود). -- اضافه کردن یک PK (در این مورد، ساختار شبیه به MS SQL است، در زیر نشان داده خواهد شد) ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);
برای ORACLE از نظر اجرای نوع varchar2 تفاوت هایی وجود دارد، رمزگذاری آن به تنظیمات پایگاه داده بستگی دارد و متن را می توان به عنوان مثال در رمزگذاری UTF-8 ذخیره کرد. علاوه بر این، طول فیلد در ORACLE را می توان هم به بایت و هم به صورت کاراکتر تنظیم کرد، برای این کار از گزینه های اضافی BYTE و CHAR استفاده می شود که بعد از طول فیلد مشخص می شود، به عنوان مثال:

NAME varchar2 (30 BYTE) -- ظرفیت فیلد 30 بایت خواهد بود NAME varchar2 (30 CHAR) -- ظرفیت فیلد 30 کاراکتر خواهد بود
اینکه کدام گزینه به صورت پیش‌فرض BYTE یا CHAR استفاده می‌شود، در مورد مشخصات ساده از نوع varchar2(30) در ORACLE، بستگی به تنظیمات پایگاه داده دارد، همچنین گاهی اوقات می‌توان آن را در تنظیمات IDE تنظیم کرد. به طور کلی، گاهی اوقات می توانید به راحتی گیج شوید، بنابراین در مورد ORACLE، اگر از نوع varchar2 استفاده می شود (و گاهی اوقات در اینجا توجیه می شود، به عنوان مثال، هنگام استفاده از رمزگذاری UTF-8)، ترجیح می دهم به صراحت CHAR را بنویسم (چون معمولاً خواندن طول یک رشته با کاراکتر راحت‌تر است.

اما در این صورت اگر قبلاً داده هایی در جدول وجود داشته باشد، برای اجرای موفقیت آمیز دستورات لازم است که فیلدهای ID و Name در تمام ردیف های جدول پر شود. بیایید این را با یک مثال نشان دهیم، داده ها را در جدول در فیلدهای ID، Position و Department وارد کنید، این را می توان با اسکریپت زیر انجام داد:

درج کارکنان (شناسه، موقعیت، بخش) VALUES (1000، N"مدیر"، N"Administration")، (1001، N"برنامه نویس، N"IT")، (1002، N"حسابدار، N"حسابداری" ), (1003,N"برنامه نویس ارشد",N"IT")
در این صورت دستور INSERT نیز خطا خواهد کرد، زیرا هنگام درج، مقدار فیلد نام مورد نیاز را مشخص نکردیم.
در صورتی که قبلاً این داده ها را در جدول اصلی داشتیم، دستور "ALTER TABLE Employees ALTER COLUMN ID int NOT NULL" موفقیت آمیز بود و دستور "ALTER TABLE Employees ALTER COLUMN Name int NOT NULL" خطایی صادر می کرد. پیامی مبنی بر وجود مقادیر NULL (مشخص نشده) در قسمت Name.

بیایید مقادیری را برای فیلد Name اضافه کنیم و دوباره داده ها را پر کنیم:


همچنین، گزینه NOT NULL می تواند به طور مستقیم هنگام ایجاد یک جدول جدید استفاده شود، یعنی. در زمینه دستور CREATE TABLE.

ابتدا جدول را با دستور حذف کنید:

DROP TABLE کارمندان
حالا بیایید یک جدول با ستون های ID و Name اجباری ایجاد کنیم:

ایجاد جدول کارکنان (ID int NOT NULL، نام nvarchar(30) NOT NULL، تاریخ تولد، ایمیل nvarchar(30)، موقعیت nvarchar(30)، بخش nvarchar(30))
همچنین می توانید NULL را بعد از نام ستون بنویسید، به این معنی که مقادیر NULL (مشخص نشده) در آن مجاز است، اما این ضروری نیست، زیرا این ویژگی به طور پیش فرض دلالت دارد.

اگر برعکس، می‌خواهید یک ستون موجود را اختیاری کنید، از دستور دستور زیر استفاده کنید:

ALTER TABLE کارکنان ALTER COLUMN نام nvarchar(30) NULL
یا به سادگی:

ALTER TABLE Employees ALTER COLUMN نام nvarchar(30)
با این دستور می توانیم نوع فیلد را به نوع سازگار دیگری نیز تغییر دهیم یا طول آن را تغییر دهیم. به عنوان مثال، اجازه دهید فیلد Name را به 50 کاراکتر گسترش دهیم:

ALTER TABLE Employees ALTER COLUMN نام nvarchar(50)

کلید اصلی

هنگام ایجاد یک جدول، مطلوب است که دارای یک ستون منحصر به فرد یا مجموعه ای از ستون ها باشد که برای هر یک از ردیف های آن منحصر به فرد است - یک رکورد را می توان به طور منحصر به فرد با این مقدار منحصر به فرد شناسایی کرد. این مقدار کلید اصلی جدول نامیده می شود. برای جدول کارکنان ما، این مقدار منحصر به فرد می تواند ستون ID باشد (که حاوی "شماره پرسنل کارمند" است - حتی اگر در مورد ما این مقدار برای هر کارمند منحصر به فرد باشد و قابل تکرار نباشد).

می توانید با استفاده از دستور زیر یک کلید اصلی برای جدول موجود ایجاد کنید:

ALTER TABLE کارمندان ADD CONSTRAINT PK_Employees PRIMARY KEY(ID)
جایی که "PK_Employees" نام محدودیت مسئول کلید اصلی است. معمولاً کلید اصلی با پیشوند "PK_" و به دنبال آن نام جدول نامگذاری می شود.

اگر کلید اصلی از چندین فیلد تشکیل شده باشد، این فیلدها باید در پرانتزهایی که با کاما از هم جدا شده اند فهرست شوند:

TABLE تغییر نام جدول_افزودن محدودیت_نام کلید اولیه (فیلد1، فیلد2،…)
شایان ذکر است که در MS SQL تمام فیلدهایی که در کلید اصلی قرار می گیرند باید دارای ویژگی NOT NULL باشند.

همچنین، کلید اصلی را می توان به طور مستقیم در هنگام ایجاد جدول تعریف کرد، یعنی. در زمینه دستور CREATE TABLE. بیایید جدول را حذف کنیم:

DROP TABLE کارمندان
و سپس با استفاده از سینتکس زیر آن را ایجاد کنید:

ایجاد جدول کارمندان (ID int NOT NULL، نام nvarchar(30) NOT NULL، تاریخ تولد، ایمیل nvarchar(30)، موقعیت nvarchar(30)، بخش nvarchar(30)، محدودیت PK_Employees PRIMARY KEY(PK پس از) -- توصیف همه فیلدها به عنوان یک محدودیت)
پس از ایجاد، داده های جدول را پر کنید:

درج کارکنان (شناسه، موقعیت، بخش، نام) VALUES (1000، N"مدیر، N"Administration، N"Ivanov II.)، (1001، N"برنامه نویس"، N"IT، N" Petrov P.P." ), (1002،N"حسابدار"،N"حسابداری،N"Sidorov S.S.")، (1003،N"N"برنامه نویس ارشد"،N"IT،N"Andreev A. BUT.")
اگر کلید اصلی در جدول فقط از مقادیر یک ستون تشکیل شده باشد، می توان از نحو زیر استفاده کرد:

CREATE TABLE Employees(ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY، -- نام nvarchar(30) NOT NULL، تاریخ تولد، ایمیل nvarchar(30)، موقعیت nvarchar(30)، بخش nvarchar(30) را مشخص کنید.
در واقع، نام محدودیت را می توان حذف کرد، در این صورت یک نام سیستم به آن داده می شود (مانند "PK__Employee__3214EC278DA42077"):

ایجاد جدول کارکنان (ID int NOT NULL، نام nvarchar(30) NOT NULL، تاریخ تولد، ایمیل nvarchar(30)، موقعیت nvarchar(30)، بخش nvarchar(30)، کلید اصلی (ID))
یا:

ایجاد جدول کارکنان (ID int NOT NULL PRIMARY KEY، نام nvarchar(30) NOT NULL، تاریخ تولد، ایمیل nvarchar(30)، موقعیت nvarchar(30)، بخش nvarchar(30))
اما من توصیه می کنم همیشه نام محدودیت را برای جداول دائمی به صراحت تنظیم کنید، زیرا با یک نام مشخص و قابل درک، متعاقباً دستکاری آن آسان تر خواهد بود، به عنوان مثال، می توانید آن را حذف کنید:

ALTER TABLE کارمندان محدودیت را کنار می گذارند PK_Employees
اما چنین نحو کوتاهی، بدون تعیین نام محدودیت ها، هنگام ایجاد جداول پایگاه داده موقت (نام جدول موقت با # یا ## شروع می شود) راحت است که پس از استفاده حذف می شود.

بیایید خلاصه کنیم

تا اینجا دستورات زیر را پوشش داده ایم:
  • ایجاد جدول table_name (شمارش فیلدها و انواع آنها، محدودیت ها) - برای ایجاد یک جدول جدید در پایگاه داده فعلی استفاده می شود.
  • میز رها کردن table_name - برای حذف جدول از پایگاه داده فعلی استفاده می شود.
  • جدول تغییراتجدول_نام ستون جایگزینستون_نام … – برای به‌روزرسانی نوع ستون یا تغییر تنظیمات آن (مثلاً برای تنظیم مشخصه NULL یا NOT NULL) استفاده می‌شود.
  • جدول تغییراتجدول_نام محدودیت را اضافه کنید constraint_name کلید اولیه(فیلد1، فیلد2،…) – افزودن کلید اصلی به جدول موجود.
  • جدول تغییراتجدول_نام محدودیت افت constraint_name - محدودیت را از جدول حذف کنید.

کمی در مورد میزهای موقت

برش از MSDN.دو نوع جدول موقت در MS SQL Server وجود دارد: محلی (#) و جهانی (##). جداول موقت محلی فقط برای سازندگان آنها قابل مشاهده هستند تا زمانی که جلسه اتصال با نمونه SQL Server پس از اولین ایجاد آنها خاتمه یابد. جداول موقت محلی پس از قطع ارتباط کاربر از نمونه ای از SQL Server به طور خودکار حذف می شوند. جداول موقت جهانی پس از ایجاد این جداول در طول هر جلسه اتصال برای همه کاربران قابل مشاهده است و زمانی که همه کاربرانی که به این جداول ارجاع می دهند از نمونه SQL Server جدا می شوند حذف می شوند.

جداول موقت در پایگاه داده سیستم tempdb ایجاد می شوند، یعنی. با ایجاد آنها، پایگاه داده اصلی را مسدود نمی کنیم، در غیر این صورت جداول موقت کاملاً مشابه جداول معمولی هستند، همچنین می توان آنها را با استفاده از دستور DROP TABLE حذف کرد. جداول موقت محلی (#) بیشتر مورد استفاده قرار می گیرند.

برای ایجاد یک جدول موقت، می توانید از دستور CREATE TABLE استفاده کنید:

CREATE TABLE #Temp(ID int, Name nvarchar(30))
از آنجایی که یک جدول موقت در MS SQL شبیه یک جدول معمولی است، می توانید با دستور DROP TABLE نیز آن را حذف کنید:

میز رها کردن #دمای

همچنین می توانید یک جدول موقت (و همچنین یک جدول معمولی) ایجاد کنید و بلافاصله با استفاده از دستور SELECT ... INTO آن را با داده های بازگردانده شده توسط پرس و جو پر کنید:

شناسه، نام به #Temp از کارکنان را انتخاب کنید

در یک یادداشت
در DBMS های مختلف، اجرای جداول موقت ممکن است متفاوت باشد. به عنوان مثال در ORACLE و Firebird DBMS ساختار جداول موقت باید از قبل با دستور CREATE GLOBAL TEMPORARY TABLE مشخص شود و مشخصات ذخیره سازی داده ها در آن را مشخص کند، سپس کاربر آن را در بین جداول اصلی ببیند و با آن کار کند. مانند یک میز معمولی

عادی سازی پایگاه داده - تقسیم به جداول فرعی (دایرکتوری ها) و تعیین روابط

جدول کارمندان فعلی ما این عیب را دارد که کاربر می تواند هر متنی را در قسمت های موقعیت و بخش وارد کند، که در درجه اول مملو از خطا است، زیرا برای یک کارمند می تواند به سادگی "IT" را به عنوان بخش و برای کارمند دوم، برای به عنوان مثال، "بخش فناوری اطلاعات" را وارد کنید، "IT" سوم را داشته باشید. در نتیجه مشخص نخواهد شد که منظور کاربر چه بوده است. آیا این کارمندان کارمندان یک بخش هستند یا کاربر خودش را توصیف کرده است و اینها 3 بخش مختلف هستند؟ و حتی بیشتر از آن، در این مورد، ما نمی‌توانیم داده‌ها را برای برخی گزارش‌ها به درستی گروه‌بندی کنیم، جایی که ممکن است لازم باشد تعداد کارمندان در زمینه هر بخش نشان داده شود.

دومین اشکال، میزان ذخیره سازی این اطلاعات و تکراری بودن آن است، یعنی. برای هر کارمند، نام کامل بخش مشخص شده است، که نیاز به مکانی در پایگاه داده برای ذخیره هر کاراکتر از نام بخش دارد.

اشکال سوم مشکل به روز رسانی این فیلدها در صورت تغییر نام یک موقعیت است، به عنوان مثال، اگر شما نیاز به تغییر نام موقعیت "برنامه نویس" به "برنامه نویس جوان" دارید. در این صورت باید در هر خط از جدول تغییراتی ایجاد کنیم که در آن Position برابر با "Programmer" است.

برای جلوگیری از این کاستی ها، به اصطلاح عادی سازی پایگاه داده استفاده می شود - تقسیم آن به جداول فرعی، جداول مرجع. لازم نیست به جنگل تئوری صعود کنیم و بررسی کنیم که اشکال عادی چیست، فقط کافی است ماهیت عادی سازی را درک کنیم.

بیایید 2 جدول مرجع "Positions" و "Departments" ایجاد کنیم که اولین جدول "Positions" و دیگری "Department" نامیده می شود.

CREATE TABLE Positions(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Name nvarchar(30) NOT NULL) CREATE TABLE Departments(ID int IDENTITY(1,1) NOT NULL CONSTRAINT Name ) تهی نیست)
توجه داشته باشید که در اینجا از گزینه new IDENTITY استفاده کردیم، به این معنی که داده های ستون ID به طور خودکار شماره گذاری می شوند و از 1 شروع می شوند و با مرحله 1، یعنی. هنگامی که رکوردهای جدید اضافه می شوند، به ترتیب مقادیر 1، 2، 3 و غیره به آنها اختصاص داده می شود. چنین فیلدهایی معمولاً افزایش خودکار نامیده می شوند. فقط یک فیلد با ویژگی IDENTITY را می توان در جدول تعریف کرد و معمولاً، اما نه لزوما، چنین فیلدی کلید اصلی آن جدول است.

در یک یادداشت
در DBMS های مختلف، پیاده سازی فیلدها با شمارنده می تواند متفاوت انجام شود. برای مثال در MySQL چنین فیلدی با استفاده از گزینه AUTO_INCREMENT تعریف می شود. در ORACLE و Firebird، این قابلیت قبلاً با استفاده از SEQUENCE ها قابل تقلید بود. اما تا آنجا که من می دانم، ORACLE اکنون گزینه GENERATED AS IDENTITY را اضافه کرده است.

بیایید این جداول را به طور خودکار بر اساس داده های فعلی ثبت شده در فیلدهای موقعیت و بخش جدول کارکنان پر کنیم:

فیلد نام جدول موقعیت‌ها را با مقادیر منحصربه‌فرد از فیلد موقعیت جدول کارکنان پر کنید. INSERT Positions(Name) SELECT Position DISTINCT FROM Employees WHERE Position IS NULL - سوابق بدون موقعیت مشخص را کنار بگذارید.
ما همین کار را برای جدول بخش ها انجام خواهیم داد:

درج بخش ها (نام) بخش متمایز را از کارمندان انتخاب کنید در جایی که بخش تهی نیست
اگر اکنون جداول Positions و Departments را باز کنیم، مجموعه ای از مقادیر شماره گذاری شده توسط فیلد ID را خواهیم دید:

انتخاب * از موقعیت ها

انتخاب * از بخش ها

این جداول اکنون نقش دایرکتوری هایی را برای تنظیم موقعیت ها و دپارتمان ها ایفا خواهند کرد. اکنون به شناسه های شغلی و دپارتمان ها اشاره می کنیم. اول از همه، بیایید فیلدهای جدیدی در جدول Employees ایجاد کنیم تا اطلاعات ID را ذخیره کنیم:

افزودن فیلد برای شناسه موقعیت ALTER TABLE Employees ADD PositionID int -- افزودن فیلد برای شناسه بخش ALTER TABLE Employees ADD DepartmentID int
نوع فیلدهای مرجع باید مانند دایرکتوری ها باشد، در این مورد int است.

همچنین می توانید چندین فیلد را به طور همزمان با یک دستور به جدول اضافه کنید و فیلدهای جدا شده با کاما را فهرست کنید:

ALTER TABLE Employees ADD PositionID int، DepartmentID int
حالا بیایید برای این فیلدها لینک (محدودیت های مرجع - FOREIGN KEY) بنویسیم تا کاربر فرصتی برای نوشتن در این فیلدها نداشته باشد، مقادیری که جزو مقادیر شناسه در فهرست ها نیستند.

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID)
و برای فیلد دوم هم همین کار را می کنیم:

ALTER TABLE کارمندان اضافه کردن محدودیت FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) مراجع بخش ها(ID)
اکنون کاربر قادر خواهد بود فقط مقادیر ID را از کتاب مرجع مربوطه در این فیلدها وارد کند. بر این اساس، برای استفاده از یک بخش یا موقعیت جدید، ابتدا باید یک ورودی جدید به فهرست مربوطه اضافه کند. زیرا موقعیت ها و دپارتمان ها اکنون در دایرکتوری ها در یک نسخه ذخیره می شوند، سپس برای تغییر نام، کافی است آن را فقط در فهرست تغییر دهید.

نام محدودیت ارجاعی معمولاً مرکب است، از پیشوند "FK_" و به دنبال آن نام جدول تشکیل شده است و پس از خط زیر، نام فیلدی می آید که به شناسه جدول جستجو اشاره دارد.

شناسه (ID) معمولاً یک مقدار داخلی است که فقط برای روابط استفاده می شود و مقداری که در آنجا ذخیره می شود در بیشتر موارد کاملاً بی تفاوت است، بنابراین نیازی به تلاش برای خلاص شدن از حفره های دنباله اعدادی نیست که در آن ایجاد می شود. دوره کار با جدول، به عنوان مثال، پس از حذف رکوردها از دفترچه راهنما.

جدول جدول تغییر دهید افزودن محدودیت محدودیت_نام کلید خارجی (فیلد1، فیلد2،...) جدول جستجوی مراجع (فیلد1، فیلد2،...)
در این حالت، در جدول "table_reference"، کلید اولیه با ترکیبی از چندین فیلد (field1, field2, ...) نمایش داده می شود.

در واقع، اکنون اجازه دهید فیلدهای PositionID و DepartmentID را با مقادیر ID از دایرکتوری ها به روز کنیم. بیایید از دستور UPDATE DML برای این منظور استفاده کنیم:

UPDATE e SET PositionID=(SELECT ID FROM Positions WHERE Name=e.Position), DepartmentID=(SELECT ID FROM Departments WHERE Name=e.Department) FROM Employees e
بیایید ببینیم با اجرای پرس و جو چه اتفاقی می افتد:

انتخاب * از کارکنان

تمام شد، فیلدهای PositionID و DepartmentID با موقعیت‌ها و بخش‌های مربوطه با شناسه‌های مورد نیاز در قسمت‌های Position و Department در جدول Employees پر شده‌اند، اکنون می‌توانید این فیلدها را حذف کنید:

جدول تغییر کارکنان پست ستون، بخش
جدول اکنون به شکل زیر است:

انتخاب * از کارکنان

شناسه نام روز تولد پست الکترونیک شناسه موقعیت شناسه بخش
1000 ایوانف I.I. خالی خالی 2 1
1001 پتروف P.P. خالی خالی 3 3
1002 سیدوروف S.S. خالی خالی 1 2
1003 آندریف A.A. خالی خالی 4 3

آن ها ما در نهایت از ذخیره اطلاعات اضافی خلاص شدیم. اکنون، با شماره موقعیت و بخش، می توانیم به طور منحصر به فرد نام آنها را با استفاده از مقادیر موجود در جداول جستجو تعیین کنیم:

SELECT e.ID,e.Name,p.Name PositionName,d.Name DepartmentName FROM Employees e LEFT JOIN بخش ها d ON d.ID=e.DepartmentID LEFT JOIN Positions p ON p.ID=e.PositionID

در Object Inspector، ما می توانیم تمام اشیاء ایجاد شده برای یک جدول داده شده را ببینیم. از اینجا همچنین می توانید دستکاری های مختلفی را با این اشیاء انجام دهید - به عنوان مثال، نام اشیاء را تغییر دهید یا حذف کنید.

همچنین شایان ذکر است که یک جدول می تواند به خود اشاره کند، یعنی. می توانید یک لینک بازگشتی ایجاد کنید. به عنوان مثال، بیایید یک فیلد ManagerID دیگر را به جدول خود با کارمندان اضافه کنیم، که نشان می دهد کارمندی که این کارمند به او گزارش می دهد. بیایید یک فیلد ایجاد کنیم:

ALTER TABLE Employees ADD ManagerID int
مقدار NULL در این قسمت مجاز است، اگر مثلاً هیچ مافوق نسبت به کارمند وجود نداشته باشد، فیلد خالی خواهد بود.

حالا بیایید یک کلید خارجی در جدول کارمندان ایجاد کنیم:

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES Employees(ID)
بیایید اکنون یک نمودار ایجاد کنیم و ببینیم که چگونه روابط بین جداول ما در آن به نظر می رسد:

در نتیجه باید تصویر زیر را ببینیم (جدول Employees مربوط به جداول Positions و Depertments است و به خودش نیز اشاره دارد):

در نهایت، شایان ذکر است که کلیدهای مرجع می‌توانند شامل گزینه‌های اضافی ON DELETE CASCADE و ON UPDATE CASCADE باشند که به شما می‌گویند هنگام حذف یا به‌روزرسانی یک رکورد ارجاع‌شده در جدول جستجو، چگونه رفتار کنید. اگر این گزینه‌ها مشخص نشده باشند، نمی‌توانیم شناسه را در جدول فهرست ورودی ورودی که دارای پیوندهایی از جدول دیگری است، تغییر دهیم، همچنین نمی‌توانیم چنین ورودی را از فهرست حذف کنیم تا زمانی که تمام ردیف‌هایی را که به این ورودی اشاره می‌کنند حذف کنیم. این خطوط ارجاع را به مقدار دیگری به روز کنید.

به عنوان مثال، بیایید جدول را با گزینه ON DELETE CASCADE برای FK_Employees_DepartmentID دوباره ایجاد کنیم:

DROP TABLE Employees CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), تاریخ تولد, Email nvarchar(30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees KRIMARY KEY (IDK_Employees KEY PRIMARY F, CONSTRAYDEEmploymentepart) ) REFERENCES بخش ها (ID) ON DELETE CASCADE, CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) FOREIGN KEY (ManagerID) EmployeNIDEIDRE,EployeIDName )VALUES (1000،N"Ivanov I.I."،"19550219"،"2،1،"NULL)، (1001، "N"Petrov P.P."،"19831203،"3،3،1003)، (1002، N"Sidorov S.S." "19760607"، 1،2،1000)، (1003، N"Andreev A.A."،"19820417،4،3،1000)
بیایید بخش با شناسه 3 را از جدول بخش ها حذف کنیم:

بخش‌هایی که ID=3 هستند را حذف کنید
بیایید به داده های جدول کارمندان نگاه کنیم:

انتخاب * از کارکنان

شناسه نام روز تولد پست الکترونیک شناسه موقعیت شناسه بخش شناسه مدیر
1000 ایوانف I.I. 1955-02-19 خالی 2 1 خالی
1002 سیدوروف S.S. 1976-06-07 خالی 1 2 1000

همانطور که می بینید، داده های بخش 3 نیز از جدول Employees حذف شده است.

گزینه ON UPDATE CASCADE به همین صورت عمل می کند، اما هنگام به روز رسانی مقدار ID در دایرکتوری عمل می کند. به عنوان مثال، اگر شناسه موقعیت را در فهرست موقعیت ها تغییر دهیم، در این صورت شناسه Department در جدول Employees به مقدار شناسه جدیدی که در فهرست قرار داده ایم به روز می شود. اما در این مورد، نشان دادن این امر به سادگی امکان پذیر نخواهد بود، زیرا. ستون ID در جدول Departments دارای گزینه IDENTITY است که ما را از اجرای پرس و جو زیر باز می دارد (تغییر شناسه بخش 3 به 30):

به روز رسانی بخش ها SET ID=30 WHERE ID=3
نکته اصلی درک ماهیت این 2 گزینه ON DELETE CASCADE و ON UPDATE CASCADE است. من از این گزینه‌ها در موارد بسیار نادر استفاده می‌کنم، و توصیه می‌کنم قبل از مشخص کردن آن‌ها در یک محدودیت ارجاعی، به دقت فکر کنید. اگر به طور تصادفی یک رکورد را از جدول مرجع حذف کنید، این می تواند به مشکلات بزرگی منجر شود و یک واکنش زنجیره ای ایجاد کند.

بیایید بخش 3 را بازیابی کنیم:

اجازه افزودن/تغییر مقادیر IDENTITY را بدهید SET IDENTITY_INSERT Departments ON INSERT Departments(ID,Name) VALUES(3,N"IT") -- رد کردن / تغییر مقادیر IDENTITY SET IDENTITY_INSERT Departments OFF
با استفاده از دستور TRUNCATE TABLE، جدول Employees را به طور کامل پاک کنید:

TRUNCATE TABLE کارکنان
و دوباره، داده ها را با استفاده از دستور قبلی INSERT در آن بارگذاری کنید:

کارمندان (ID,Name,Tirthday,PositionID,DepartmentID,ManagerID)VALUES (1000,N"Ivanov II","19550219",2,1,NULL), (1001,N"Petrov P.P." "19831203",3 ,3,1003), (1002,N"Sidorov S.S.",19760607,1,2,1000), (1003,N"Andreev A.A.","19820417" ,4,3,1000)

بیایید خلاصه کنیم

در حال حاضر، چند دستور DDL دیگر به دانش ما اضافه شده است:
  • افزودن ویژگی IDENTITY به فیلد - به شما امکان می دهد این فیلد را به طور خودکار (فیلد شمارنده) برای جدول پر کنید.
  • جدول تغییراتجدول_نام اضافه کردن list_of_fields_with_characteristics – به شما امکان می دهد فیلدهای جدیدی را به جدول اضافه کنید.
  • جدول تغییراتجدول_نام رها کردن ستون list_of_fields - به شما امکان می دهد فیلدها را از جدول حذف کنید.
  • جدول تغییراتجدول_نام محدودیت را اضافه کنید constraint_name کلید خارجی(زمینه های) منابع lookup_table (فیلدها) - به شما امکان می دهد رابطه ای بین جدول و جدول جستجو تعریف کنید.

سایر محدودیت ها - منحصر به فرد، پیش فرض، بررسی

با محدودیت UNIQUE، می توانید بگویید که مقدار هر ردیف در یک فیلد معین یا مجموعه ای از فیلدها باید منحصر به فرد باشد. در مورد جدول Employees می توانیم چنین محدودیتی را در قسمت Email اعمال کنیم. فقط ایمیل را با مقادیری که قبلاً تعریف نشده اند از قبل پر کنید:

UPDATE Employees SET Email=" [ایمیل محافظت شده]"WHERE ID=1000 UPDATE Employees SET Email=" [ایمیل محافظت شده]" WHERE ID=1001 UPDATE Employees SET Email=" [ایمیل محافظت شده]"WHERE ID=1002 UPDATE Employees SET Email=" [ایمیل محافظت شده] WHERE ID=1003
و اکنون می توانید یک محدودیت منحصر به فرد در این زمینه اعمال کنید:

ALTER TABLE کارکنان اضافه کردن محدودیت UQ_Employees_Email UNIQUE(ایمیل)
اکنون کاربر نمی تواند یک ایمیل را برای چندین کارمند وارد کند.

محدودیت منحصربه‌فرد معمولاً به‌صورت زیر نام‌گذاری می‌شود - ابتدا پیشوند «UQ_»، سپس نام جدول، و پس از خط زیر نام فیلدی است که این محدودیت روی آن اعمال می‌شود.

بر این اساس، اگر ترکیبی از فیلدها باید در زمینه ردیف‌های جدول منحصر به فرد باشد، آن‌ها را با کاما از هم جدا می‌کنیم:

ALTER TABLE جدول_نام ADD CONSTRAINT constraint_name UNIQUE (فیلد1، فیلد2،…)
با افزودن یک محدودیت DEFAULT به یک فیلد، می‌توانیم یک مقدار پیش‌فرض تنظیم کنیم که در صورت درج نشدن فیلد در لیست فیلد فرمان INSERT هنگام درج رکورد جدید، جایگزین می‌شود. این محدودیت می تواند به طور مستقیم هنگام ایجاد جدول تنظیم شود.

بیایید یک فیلد جدید "تاریخ استخدام" به جدول کارمندان اضافه کنیم و نام آن را HireDate بگذاریم و بگوییم که مقدار پیش فرض این فیلد تاریخ فعلی خواهد بود:

ALTER TABLE کارکنان اضافه کردن تاریخ استخدام NOT NULL DEFAULT SYSDATETIME()
یا اگر ستون HireDate از قبل وجود داشته باشد، می توان از نحو زیر استفاده کرد:

ALTER TABLE کارکنان، SYSDATETIME() پیش فرض را برای HireDate اضافه کنند
در اینجا من نام محدودیت را مشخص نکردم، زیرا در مورد DEFAULT، من بر این عقیده بودم که این خیلی مهم نیست. اما اگر این کار را به روشی خوب انجام دهید، به نظر من، نیازی به تنبلی ندارید و باید یک نام معمولی تعیین کنید. این کار به صورت زیر انجام می شود:

ALTER TABLE کارمندان ADD CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME() FOR HireDate
از آنجایی که این ستون قبلا وجود نداشت، وقتی به هر رکورد اضافه می شود، مقدار تاریخ فعلی در قسمت HireDate درج می شود.

هنگام اضافه کردن یک ورودی جدید، تاریخ فعلی نیز به طور خودکار درج می شود، البته اگر به صراحت آن را تنظیم نکنیم، i.e. در لیست ستون ها مشخص نشده است. بیایید این را با یک مثال بدون مشخص کردن فیلد HireDate در لیست مقادیر افزوده نشان دهیم:

INSERT Employees(ID,Name,Email)VALUES(1004,N"Sergeev S.S."," [ایمیل محافظت شده]")
ببینیم چی شد:

انتخاب * از کارکنان

شناسه نام روز تولد پست الکترونیک شناسه موقعیت شناسه بخش شناسه مدیر HireDate
1000 ایوانف I.I. 1955-02-19 [ایمیل محافظت شده] 2 1 خالی 2015-04-08
1001 پتروف P.P. 1983-12-03 [ایمیل محافظت شده] 3 4 1003 2015-04-08
1002 سیدوروف S.S. 1976-06-07 [ایمیل محافظت شده] 1 2 1000 2015-04-08
1003 آندریف A.A. 1982-04-17 [ایمیل محافظت شده] 4 3 1000 2015-04-08
1004 سرگیف S.S. خالی [ایمیل محافظت شده] خالی خالی خالی 2015-04-08

محدودیت چک CHECK زمانی استفاده می شود که لازم باشد مقادیر درج شده در فیلد بررسی شود. به عنوان مثال، اجازه دهید این محدودیت را در قسمت شماره پرسنل، که شناسه کارمند ما (ID) است، اعمال کنیم. با استفاده از این محدودیت، فرض کنید که تعداد پرسنل باید از 1000 تا 1999 ارزش داشته باشند:

ALTER TABLE کارمندان اضافه کردن محدودیت CK_Employees_ID چک (ID بین 1000 و 1999)
محدودیت معمولاً یکسان نامگذاری می شود، ابتدا با پیشوند "CK_"، سپس نام جدول و نام فیلدی که محدودیت روی آن اعمال می شود.

بیایید سعی کنیم یک ورودی نامعتبر وارد کنیم تا بررسی کنیم که محدودیت کار می کند (باید خطای مربوطه را دریافت کنیم):

VALUES کارکنان (شناسه، ایمیل) را وارد کنید (2000" [ایمیل محافظت شده]")
حالا بیایید مقدار درج شده را به 1500 تغییر دهیم و مطمئن شویم رکورد درج شده است:

VALUES کارکنان (شناسه، ایمیل) را درج کنید (1500" [ایمیل محافظت شده]")
همچنین می‌توانید محدودیت‌های UNIQUE و CHECK را بدون تعیین نام ایجاد کنید:

ALTER TABLE Employees ADD UNIQUE(Email) ALTER TABLE Employees ADD CHECK (ID بین 1000 و 1999)
اما این عمل خوبی نیست و بهتر است نام محدودیت را به صراحت مشخص کنید، زیرا برای اینکه بعداً بفهمید چه چیزی دشوارتر است، باید شی را باز کنید و ببینید مسئول چه چیزی است.

با یک نام خوب، می توان اطلاعات زیادی در مورد یک محدودیت به طور مستقیم از نام آن آموخت.

و بر این اساس، تمام این محدودیت ها را می توان بلافاصله هنگام ایجاد جدول ایجاد کرد، اگر قبلاً وجود نداشته باشد. بیایید جدول را حذف کنیم:

DROP TABLE کارمندان
و آن را با تمام محدودیت های ایجاد شده با یک دستور CREATE TABLE دوباره ایجاد کنید:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), تاریخ تولد, Email nvarchar(30), PositionID int, DepartmentID int, HireDate NOT NULL DEFAULT SYSDATETIME(), -- برای DEFAULT من یک PPK_Employe می کنم CONSTRAINT استثنای کلیدی (ID)، CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID)، CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) ReFERENCES Positions(ID)، CONSTRAINT UQEEmployees_Employe (ID)، CONSTRAINT UQEmailE_Employe (ID)، CONSTRAINT UQEmailE_Employe

درج کارمندان (شناسه، نام، تولد، ایمیل، شناسه موقعیت، شناسه دپارتمان) VALUES (1000، N"Ivanov I.I.","19550219"،" [ایمیل محافظت شده]",2,1), (1001,N"Petrov P.P.","19831203"," [ایمیل محافظت شده]",3,3), (1002,N"Sidorov S.S.","19760607"," [ایمیل محافظت شده]",1,2), (1003,N"Andreev A.A.","19820417"," [ایمیل محافظت شده]",4,3)

کمی در مورد شاخص های ایجاد شده در هنگام ایجاد محدودیت های کلید اولیه و منحصر به فرد

همانطور که در تصویر بالا می بینید، هنگام ایجاد محدودیت های کلید اصلی و UNIQUE، فهرست هایی با نام های یکسان (PK_Employees و UQ_Employees_Email) به طور خودکار ایجاد می شوند. به طور پیش فرض، ایندکس برای کلید اصلی به صورت CLUSTERED و برای همه شاخص های دیگر به صورت NONCLUSTERED ایجاد می شود. شایان ذکر است که مفهوم شاخص خوشه ای در همه DBMS وجود ندارد. یک جدول فقط می تواند یک شاخص خوشه ای داشته باشد. CLUSTERED - به این معنی است که رکوردهای جدول بر اساس این شاخص مرتب می شوند، همچنین می توان گفت که این شاخص به تمام داده های جدول دسترسی مستقیم دارد. به این ترتیب می گویند شاخص اصلی جدول. به بیان حتی خشن تر، این یک شاخص است که روی میز پیچ شده است. ایندکس خوشه ای ابزار بسیار قدرتمندی است که می تواند به بهینه سازی پرس و جو کمک کند، فقط این را در نظر داشته باشید. اگر بخواهیم بگوییم که شاخص کلاستر نه در کلید اصلی، بلکه برای یک شاخص دیگر استفاده می شود، در هنگام ایجاد کلید اصلی باید گزینه NONCLUSTERED را مشخص کنیم:

تغییر جدول جدول_نام افزودن محدودیت محدودیت_نام کلید اولیه غیرکلاستری (فیلد1، فیلد2،...)
برای مثال، بیایید فهرست محدودیت PK_Employees را غیر خوشه‌بندی کنیم، و فهرست محدودیت UQ_Employees_Email را خوشه‌بندی کنیم. اول از همه، اجازه دهید این محدودیت ها را حذف کنیم:

ALTER TABLE Employees DROP CONSTRAINT PK_Employees ALTER TABLE Employees DROP CONSTRAINT UQ_Employees_Email
و حالا بیایید آنها را با گزینه های CLUSTERED و NONCLUSTERED ایجاد کنیم:

ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY NONCLUSTERED (ID) ALTER TABLE Employees ADD CONSTRAINT UQ_Employees_Email UNIQUE CLUSTERED (ایمیل)
اکنون، وقتی از جدول Employees انتخاب می کنیم، می بینیم که رکوردها بر اساس فهرست خوشه ای UQ_Employees_Email مرتب شده اند:

انتخاب * از کارکنان

شناسه نام روز تولد پست الکترونیک شناسه موقعیت شناسه بخش HireDate
1003 آندریف A.A. 1982-04-17 [ایمیل محافظت شده] 4 3 2015-04-08
1000 ایوانف I.I. 1955-02-19 [ایمیل محافظت شده] 2 1 2015-04-08
1001 پتروف P.P. 1983-12-03 [ایمیل محافظت شده] 3 3 2015-04-08
1002 سیدوروف S.S. 1976-06-07 [ایمیل محافظت شده] 1 2 2015-04-08

قبل از این، زمانی که شاخص خوشه‌بندی شده، نمایه PK_Employees بود، رکوردها به طور پیش‌فرض بر اساس فیلد ID مرتب می‌شدند.

اما در این مورد، این فقط یک مثال است که ماهیت شاخص خوشه ای را نشان می دهد، زیرا. به احتمال زیاد، پرس و جوهایی در جدول Employees توسط فیلد ID انجام می شود و در برخی موارد ممکن است خود به عنوان مرجع عمل کند.

برای دایرکتوری ها، معمولاً توصیه می شود که ایندکس خوشه ای بر روی کلید اصلی ساخته شود، زیرا در درخواست‌ها، ما اغلب برای به دست آوردن نام (موقعیت، بخش) به شناسه دایرکتوری مراجعه می‌کنیم. در اینجا آنچه را که در بالا در مورد آن نوشتم به یاد می آوریم، که ایندکس خوشه ای دسترسی مستقیم به ردیف های جدول دارد و نتیجه آن این است که می توانیم مقدار هر ستونی را بدون سربار اضافی دریافت کنیم.

شاخص خوشه‌ای برای اعمال در زمینه‌هایی که اغلب انتخاب می‌شوند مفید است.

گاهی اوقات جداول یک کلید را توسط یک فیلد جایگزین ایجاد می کنند، در این صورت حفظ گزینه CLUSTERED index برای یک نمایه مناسب تر و تعیین گزینه NONCLUSTERED هنگام ایجاد یک کلید اصلی جایگزین مفید است.

بیایید خلاصه کنیم

در این مرحله با انواع محدودیت ها در ساده ترین شکل آنها آشنا شدیم که با دستوری مانند "ALTER TABLE table_name ADD CONSTRAINT constraint_name ..." ایجاد می شوند:
  • کلید اولیه- کلید اصلی؛
  • کلید خارجی- راه اندازی پیوندها و نظارت بر یکپارچگی ارجاعی داده ها؛
  • منحصر بفرد- به شما امکان می دهد منحصر به فرد ایجاد کنید.
  • بررسی- به شما امکان می دهد صحت داده های وارد شده را انجام دهید.
  • پیش فرض- به شما امکان می دهد مقدار پیش فرض را تنظیم کنید.
  • همچنین شایان ذکر است که تمام محدودیت ها را می توان با استفاده از دستور حذف کرد. جدول تغییراتجدول_نام محدودیت افت constraint_name".
ما همچنین تا حدی به موضوع شاخص ها پرداختیم و مفهوم خوشه را تجزیه و تحلیل کردیم ( خوشه ای) و غیر خوشه ای ( غیرکلاستری) فهرست مطالب.

ایجاد نمایه های مستقل

خودکفایی در اینجا به شاخص هایی اشاره دارد که برای یک کلید اولیه یا محدودیت UNIQUE ایجاد نشده اند.

نمایه های یک فیلد یا فیلدها را می توان با دستور زیر ایجاد کرد:

CREATE INDEX IDX_Employees_Name ON Employees(Name)
همچنین می‌توانید گزینه‌های CLUSTERED، NONCLUSTERED، UNIQUE را در اینجا مشخص کنید، و همچنین می‌توانید جهت مرتب‌سازی را برای هر فیلد جداگانه ASC (پیش‌فرض) یا DESC مشخص کنید:

ایجاد INDEX غیرکلاستری منحصر به فرد UQ_Employees_EmailDesc بر روی کارکنان (ایمیل DESC)
هنگام ایجاد یک شاخص غیر خوشه ای، گزینه NONCLUSTERED را می توان حذف کرد، به عنوان به طور پیش‌فرض دلالت دارد، در اینجا به سادگی برای نشان دادن موقعیت گزینه CLUSTERED یا NONCLUSTERED در دستور نشان داده شده است.

با دستور زیر می توانید ایندکس را حذف کنید:

DROP INDEX IDX_Employees_Name ON Employees
نمایه های ساده، درست مانند محدودیت ها، می توانند در چارچوب دستور CREATE TABLE ایجاد شوند.

به عنوان مثال، بیایید دوباره جدول را حذف کنیم:

DROP TABLE کارمندان
و با یک دستور CREATE TABLE آن را با تمام محدودیت ها و نمایه های ایجاد شده دوباره بسازید:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), تاریخ تولد, Email nvarchar(30), PositionID int, DepartmentID int, HireDate NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETEMTRATIDETRINS(مدیر) ) ، محدودیت fk_employes_departmentid کلید خارجی (دپارتمان) بخش های ارجاع (شناسه) ، محدودیت FK_EMPOINEES_POSTIONID کلید خارجی (id) ، محدودیت fk_employes_managerid کلید خارجی (مدیر ارجاع) کارمندان (ID) ، محدودیت UQ_EMPLOISEES_EMAILEES_EMAIL (ID بین 1000 1999)، INDEX IDX_Employees_Name(Name))
در نهایت، در جدول کارمندان ما وارد کنید:

درج کارکنان (شناسه، نام، تولد، ایمیل، شناسه موقعیت، شناسه دپارتمان، شناسه مدیر) VALUES (1000، N"Ivanov II"، "19550219"،" [ایمیل محافظت شده]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [ایمیل محافظت شده]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [ایمیل محافظت شده]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [ایمیل محافظت شده]",4,3,1000)
علاوه بر این، شایان ذکر است که مقادیر را می توان با مشخص کردن آنها در INCLUDE در یک شاخص غیر خوشه ای گنجاند. آن ها در این حالت ، شاخص INCLUDE تا حدودی شبیه یک شاخص خوشه ای خواهد بود ، فقط اکنون این شاخص به جدول وصل نشده است ، اما مقادیر لازم به شاخص وصل شده است. بر این اساس، چنین نمایه هایی می توانند عملکرد پرس و جوهای منتخب (SELECT) را تا حد زیادی بهبود بخشند، اگر همه فیلدهای لیست شده در فهرست وجود داشته باشند، این امکان وجود دارد که اصلاً نیازی به دسترسی به جدول نباشد. اما این به طور طبیعی اندازه شاخص را افزایش می دهد، زیرا مقادیر فیلدهای فهرست شده در ایندکس کپی می شوند.

برش از MSDN.دستور عمومی دستور برای ایجاد نمایه ها

ایجاد [UNIQUE] [خوشه ای | NONCLUSTERED ] INDEX index_name روشن است (ستون [ ASC | DESC ] [ ,...n ]) [ شامل (نام_ستون [ ,...n ]) ]

بیایید خلاصه کنیم

ایندکس ها می توانند سرعت بازیابی داده ها را افزایش دهند (SELECT)، اما ایندکس ها سرعت به روز رسانی داده های جدول را کاهش می دهند، زیرا پس از هر تغییر، سیستم نیاز به بازسازی تمام نمایه ها برای یک جدول خاص دارد.

در هر مورد، یافتن راه‌حل بهینه، میانگین طلایی، مطلوب است تا هم عملکرد نمونه‌گیری و هم اصلاح داده‌ها در سطح مناسب باشند. استراتژی ایجاد شاخص‌ها و تعداد آنها می‌تواند به عوامل زیادی بستگی داشته باشد، مانند اینکه داده‌های جدول چقدر تغییر می‌کنند.

نتیجه گیری در مورد DDL

همانطور که می بینید، زبان DDL آنقدرها که در نگاه اول به نظر می رسد پیچیده نیست. در اینجا من توانستم تقریباً تمام طرح های اصلی او را با استفاده از تنها سه جدول نشان دهم.

نکته اصلی درک اصل است و بقیه امر تمرین است.

در تسلط بر این زبان فوق العاده به نام SQL موفق باشید.

زبان پرس و جو ساختاریافته (زبان پرس و جو ساختاریافته) یا SQL- یک زبان برنامه نویسی اعلامی برای استفاده در پایگاه داده های شبه رابطه ای است. بسیاری از ویژگی‌های اولیه SQL توسط محاسبات تاپلی تصاحب شد، اما الحاقات اخیر به SQL شامل جبر رابطه‌ای بیشتر و بیشتر می‌شود.
SQL در ابتدا توسط IBM ایجاد شد، اما بسیاری از فروشندگان گویش های خود را توسعه داده اند. این استاندارد در سال 1986 توسط موسسه استاندارد ملی آمریکا (ANSI) و در سال 1987 توسط ISO به تصویب رسید. در استاندارد زبان برنامه نویسی SQL، ANSI بیان کرد که تلفظ رسمی SQL "es cue el" است. با این حال، بسیاری از متخصصان پایگاه داده از تلفظ "عامیانه" "Sequel" استفاده کردند که نشان دهنده نام اصلی زبان، Sequel است، که بعداً به دلیل تضاد علامت تجاری و نامگذاری در IBM تغییر کرد. برنامه نویسی برای مبتدیان.
زبان برنامه نویسی SQLدر سال 1992 بازنگری شد و این نسخه با نام SQL-92 شناخته می شود. سپس سال 1999 دوباره مورد بازنگری قرار گرفت تا به SQL تبدیل شود: 1999 (AKA SQL3). برنامه نویسی برای آدمک ها SQL 1999 از اشیایی پشتیبانی می کند که قبلاً در نسخه های دیگر پشتیبانی نمی شدند، اما تنها در اواخر سال 2001، تنها چند سیستم مدیریت پایگاه داده از پیاده سازی SQL پشتیبانی می کردند: 1999.
SQL، اگرچه به عنوان ANSI و ISO تعریف شده است، اما دارای تغییرات و پسوندهای بسیاری است که بیشتر آنها دارای ویژگی های خاص خود هستند، مانند پیاده سازی "PL/SQL" شرکت Oracle یا پیاده سازی Sybase و Microsoft به نام "Transact-SQL" که می تواند کاربر را گیج کند.اصول برنامه نویسی. همچنین غیرمعمول نیست که پیاده‌سازی‌های تجاری پشتیبانی از ویژگی‌های کلیدی استاندارد، مانند انواع داده‌ها مانند تاریخ و زمان را به نفع برخی از ویژگی‌های خود حذف کنند. در نتیجه، برخلاف ANSI C یا ANSI Fortran، که معمولاً می‌توانند از پلتفرم به پلتفرم بدون تغییرات ساختاری عمده منتقل شوند، پرس‌و‌جوهای زبان برنامه‌نویسی SQL به ندرت می‌توانند بین سیستم‌های پایگاه داده مختلف بدون تغییرات عمده منتقل شوند. اکثر افراد در زمینه پایگاه داده معتقدند که این عدم قابلیت همکاری عمدی است تا هر توسعه دهنده سیستم مدیریت پایگاه داده خود را ارائه دهد و مشتری را به یک پایگاه داده خاص گره بزند.
همانطور که از نام آن پیداست، زبان برنامه نویسی SQL برای یک هدف خاص و محدود طراحی شده است - پرس و جو از داده های موجود در یک پایگاه داده رابطه ای. به این ترتیب، این مجموعه ای از دستورالعمل های زبان برنامه نویسی برای ساختن نمونه های داده است، نه یک زبان رویه ای مانند C یا BASIC، که برای حل طیف وسیع تری از مسائل طراحی شده اند. پسوندهای زبانی مانند "PL/SQL" برای رفع این محدودیت با افزودن عناصر رویه ای به SQL و در عین حال حفظ مزایای SQL طراحی شده اند. روش دیگر اجازه دادن به پرس و جوهای SQL برای تعبیه دستورات زبان برنامه نویسی رویه ای و تعامل با پایگاه داده است. به عنوان مثال، اوراکل و دیگران از زبان جاوا در پایگاه داده پشتیبانی می‌کنند، در حالی که PostgreSQL اجازه می‌دهد توابع در Perl، Tcl یا C نوشته شوند.
یک شوخی SQL: "SQL نه ساختار یافته است و نه زبان." نکته شوخی این است که SQL یک زبان تورینگ نیست. .

* از T را انتخاب کنید
C1 C2
1 آ
2 ب
C1 C2
1 آ
2 ب
C1 را از T انتخاب کنید
C1
1
2
C1 C2
1 آ
2 ب
* از T را انتخاب کنید که C1=1 است
C1 C2
1 آ

با توجه به جدول T، یک کوئری Select * از T تمام عناصر تمام ردیف‌های جدول را نمایش می‌دهد.
از همان جدول، یک پرس و جو Select C1 از T عناصر ستون C1 تمام ردیف های جدول را نمایش می دهد.
از همان جدول، پرس و جو Select * از T که در آن C1=1 تمام عناصر تمام ردیف هایی را که مقدار ستون C1 "1" است، نمایش می دهد.

کلمات کلیدی SQL

کلمات SQL به چند گروه تقسیم می شوند.

اولی است زبان دستکاری داده یا DML(زبان مدیریت داده). DML زیرمجموعه ای از زبانی است که برای جستجو در پایگاه داده، افزودن، به روز رسانی و حذف داده ها استفاده می شود.

  • SELECT یکی از پرکاربردترین دستورات DML است و به کاربر اجازه می دهد تا یک پرس و جو را به عنوان توضیحی از نتیجه مورد نظر به عنوان یک مجموعه مشخص کند. پرس و جو مشخص نمی کند که نتایج چگونه باید مرتب شوند - ترجمه پرس و جو به شکلی که می تواند در پایگاه داده انجام شود وظیفه سیستم پایگاه داده، به طور خاص تر بهینه ساز پرس و جو است.
  • INSERT برای افزودن ردیف ها (مجموعه رسمی) به جدول موجود استفاده می شود.
  • UPDATE برای تغییر مقادیر داده ها در یک ردیف جدول موجود استفاده می شود.
  • DELETE ردیف های موجود را برای حذف از جدول مشخص می کند.

می توان گفت که سه کلمه کلیدی دیگر در گروه DML قرار می گیرند:

  • BEGIN WORK (یا START TRANSACTION، بسته به گویش SQL) را می توان برای علامت گذاری شروع تراکنش پایگاه داده استفاده کرد که یا به طور کامل اجرا می شود یا اصلا اجرا نمی شود.
  • COMMIT بیان می کند که تمام تغییرات داده ها پس از انجام عملیات ذخیره می شوند.
  • ROLLBACK مشخص می‌کند که تمام داده‌ها از زمان آخرین commit یا rollback باید از بین بروند، تا جایی که به پایگاه داده به عنوان "بازگشت" متعهد شده است.

COMMIT و ROLLBACK در زمینه هایی مانند کنترل تراکنش ها و قفل ها استفاده می شوند. هر دو دستورالعمل تمام تراکنش‌های جاری (مجموعه‌های عملیات پایگاه داده) را تکمیل می‌کنند و تمام قفل‌های تغییر داده‌ها را در جداول آزاد می‌کنند. وجود یا عدم وجود یک BEGIN WORK یا عبارت مشابه به پیاده سازی خاص SQL بستگی دارد.

دسته دوم کلمات کلیدی به گروه اشاره دارد زبان تعریف داده یا DDL (زبان تعریف داده). DDLبه کاربر اجازه می دهد تا جداول جدید و عناصر مرتبط را تعریف کند. اکثر پایگاه های داده تجاری SQL دارای پسوندهای DDL خود هستند که امکان کنترل عناصر غیر استاندارد اما معمولا حیاتی یک سیستم خاص را فراهم می کند.
نکات اصلی DDL دستورات ایجاد و حذف هستند.

  • CREATE اشیاء (مانند جداول) را برای ایجاد در پایگاه داده مشخص می کند.
  • DROP مشخص می کند که کدام اشیاء موجود در پایگاه داده معمولاً برای همیشه حذف می شوند.
  • برخی از سیستم های پایگاه داده نیز از دستور ALTER پشتیبانی می کنند که به کاربر اجازه می دهد یک شی موجود را به روش های مختلف تغییر دهد، مانند اضافه کردن ستون ها به جدول موجود.

سومین گروه از کلمات کلیدی SQL هستند زبان کنترل داده یا DCL (زبان کنترل داده). DCLمسئولیت حقوق دسترسی به داده ها را بر عهده دارد و به کاربر اجازه می دهد تا کنترل کند چه کسی برای مشاهده یا دستکاری داده ها در پایگاه داده دسترسی دارد. در اینجا دو کلمه کلیدی اصلی وجود دارد.

به حوزه توسعه پایگاه داده با زبان استاندارد پرس و جو SQL خوش آمدید. سیستم های مدیریت پایگاه داده (DBMS) دارای ابزارهای زیادی هستند که بر روی انواع مختلفی از پلتفرم های سخت افزاری اجرا می شوند.

  • مبانی پایگاه داده رابطه ای

    در این فصل... | سازماندهی اطلاعات | پایگاه داده چیست | DBMS چیست | مقایسه مدل های پایگاه داده | پایگاه داده رابطه ای چیست؟

  • مبانی SQL

    در این فصل... | SQL چیست | تصورات غلط SQL | نگاهی به استانداردهای مختلف SQL | مقدمه ای بر دستورات استاندارد SQL و کلمات رزرو شده | نمایش اعداد، نمادها، تاریخ ها، زمان ها و سایر انواع داده ها | مقادیر و محدودیت های تهی

  • اجزای SQL

    در این فصل... | ایجاد پایگاه داده | پردازش داده | حفاظت از پایگاه داده | SQL زبانی است که به طور خاص برای ایجاد و نگهداری داده ها در پایگاه داده های رابطه ای طراحی شده است. اگرچه شرکت‌هایی که سیستم‌هایی را برای مدیریت چنین پایگاه‌های داده‌ای ارائه می‌کنند، پیاده‌سازی SQL خود را ارائه می‌کنند، توسعه زبان خود توسط استاندارد ISO/ANSI تعیین و کنترل می‌شود.

  • ساخت و نگهداری یک پایگاه داده ساده

    در این فصل... | ایجاد، اصلاح و حذف جدول از پایگاه داده با استفاده از ابزار RAD. | ایجاد، اصلاح و حذف جدول از پایگاه داده با استفاده از SQL. | انتقال پایگاه داده به DBMS دیگر.

  • ایجاد یک پایگاه داده رابطه ای چند جدولی

    در این فصل... | آنچه باید در پایگاه داده باشد | تعریف روابط بین عناصر پایگاه داده | پیوند جداول با استفاده از کلید | طراحی یکپارچگی داده | عادی سازی پایگاه داده | در این فصل نمونه ای از ایجاد یک پایگاه داده چند جدولی ارائه می شود.

  • دستکاری داده ها از پایگاه داده

    در این فصل... | کار با داده | دریافت اطلاعات مورد نیاز از جدول | نمایش اطلاعات انتخاب شده از یک یا چند جدول | به روز رسانی اطلاعات در جداول و نماها | افزودن یک ردیف جدید به جدول

  • تعریف ارزش ها

    در این فصل... | استفاده از متغیرها برای کاهش کدگذاری اضافی | دریافت اطلاعات متداول درخواستی در فیلد جدول پایگاه داده | ترکیب مقادیر ساده برای ایجاد عبارات ترکیبی | این کتاب به طور مداوم بر اهمیت ساختار پایگاه داده برای حفظ یکپارچگی پایگاه داده تاکید می کند.

  • عبارات پیچیده با معنی

    در این فصل... | استفاده از عبارات شرطی مورد | تبدیل یک عنصر داده از یک نوع داده به نوع دیگر | صرفه جویی در زمان ورود داده ها با عبارات با مقدار رکورد | در فصل 2، SQL به عنوان یک زبان فرعی داده نامیده شد.

  • "تیراندازی" به داده های مناسب

    در این فصل... | تعیین جداول مورد نیاز | جداسازی خطوط لازم از همه دیگر | ایجاد بندهای موثر Where | نحوه کار با مقادیر null | ایجاد عبارات ترکیبی با اتصالات منطقی | گروه بندی نتایج پرس و جو بر اساس ستون

  • عملگرهای رابطه ای

    در این فصل... | ادغام جداول با ساختار مشابه | ادغام جداول با ساختار متفاوت | دریافت داده های مناسب از چندین جدول | SQL یک زبان پرس و جو است که در پایگاه داده های رابطه ای استفاده می شود.

  • استفاده از پرس و جوهای تو در تو

    در این فصل... | بازیابی اطلاعات از چندین جدول با یک دستور SQL | یافتن اقلام داده با مقایسه یک مقدار از یک جدول با مجموعه ای از مقادیر از جدول دیگر | یافتن اقلام داده با مقایسه یک مقدار از یک جدول با یک مقدار واحد انتخاب شده با استفاده از یک دستور انتخاب از جدول دیگر

  • پرس و جوهای بازگشتی

  • امنیت پایگاه داده

    در این فصل... | کنترل دسترسی به جدول پایگاه داده | تصمیم گیری برای اعطای دسترسی | اعطای مجوزهای دسترسی | لغو مجوزهای دسترسی | جلوگیری از تلاش برای دسترسی غیرمجاز

  • حفاظت اطلاعات

    در این فصل... | چگونه از خراب شدن پایگاه داده جلوگیری کنیم | مشکلات ناشی از عملیات همزمان | حل این مشکلات با مکانیسم های SQL | تنظیم سطح امنیتی مورد نیاز با دستور settransaction

  • استفاده از SQL در برنامه های کاربردی

    در این فصل... | SQL در برنامه | اشتراک گذاری SQL با زبان های رویه ای | چگونه از ناسازگاری جلوگیری کنیم | کد SQL تعبیه شده در کد رویه ای | فراخوانی ماژول های SQL از روی کد رویه ای | تماس SQL از ابزار RAD | در فصل های قبل، ما بیشتر به دستورات SQL به صورت مجزا نگاه کردیم، یعنی. یک وظیفه پردازش داده فرموله شد و یک پرس و جوی SQL برای آن ایجاد شد.

  • ODBC و JDBC

    در این فصل... | تعریف ODBC | توضیحات قطعات ODBC | استفاده از ODBC در محیط کلاینت/سرور | استفاده از ODBC در اینترنت | استفاده از ODBC در شبکه های محلی | با استفاده از JDBC | هر سال کامپیوترهای یک سازمان یا چندین سازمان مختلف به طور فزاینده ای به یکدیگر متصل می شوند. بنابراین، نیاز به ایجاد دسترسی مشترک به پایگاه های داده از طریق شبکه وجود دارد.

  • SQL:2003 و XML

    در این فصل... | استفاده از SQL با XML | XML، پایگاه داده و اینترنت | یکی از مهم ترین ویژگی های جدید زبان SQL:2003، پشتیبانی از فایل های زبان نشانه گذاری توسعه پذیر (XML) است که به طور فزاینده ای به استاندارد جهانی برای تبادل داده بین پلتفرم های ناهمگن تبدیل می شوند.

  • نشانگرها

    در این فصل... | محدوده مکان نما در بیانیه اعلام | باز شدن مکان نما | نمونه گیری از داده های ردیف | بسته شدن مکان نما | تفاوت SQL با بسیاری از محبوب ترین زبان های برنامه نویسی در این است که عملیات را به طور همزمان روی داده های تمام ردیف های جدول انجام می دهد، در حالی که زبان های رویه ای داده ها را ردیف به ردیف پردازش می کنند.

  • اکثر برنامه های کاربردی وب مدرن با پایگاه داده ها تعامل دارند و معمولاً از زبانی به نام استفاده می کنند SQL. خوشبختانه برای ما، یادگیری این زبان بسیار آسان است. در این مقاله به ساده نگاه می کنیم SQL درخواست کنید و یاد بگیرید که چگونه از آنها برای تعامل استفاده کنیدپایگاه داده MySQL.

    چه چیزی نیاز دارید؟

    SQL (زبان جستجوی ساختاریافته) زبانی که به طور ویژه برای تعامل با سیستم های مدیریت پایگاه داده طراحی شده است MySQL، Oracle، Sqlite و دیگران ... برای اجرا SQL درخواست در این مقاله، من به شما توصیه برای نصب MySQL به کامپیوتر محلی همچنین استفاده از آن را توصیه می کنم phpMyAdmin به عنوان یک رابط بصری

    همه اینها در دنور مورد علاقه همه موجود است. من فکر می کنم همه باید بدانند که چیست و از کجا آن را تهیه کنند :). می تواندر غیر این صورت از WAMP یا MAMP استفاده کنید.

    دنور داخلی دارد MySQL کنسول. از آن استفاده خواهیم کرد.

    ایجاد پایگاه داده:ایجاد پایگاه داده

    این اولین درخواست ماست. ما اولین پایگاه داده خود را برای کار بیشتر ایجاد خواهیم کرد.

    برای شروع، باز کنید MySQL کنسول و ورود برای WAMP رمز عبور پیش فرض خالی است. این چیزی نیست :). برای MAMP - "ریشه". دنور باید روشن شود.

    پس از ورود وارد خط زیر شده و کلیک کنیدوارد:

    ایجاد پایگاه داده my_first_db;

    توجه داشته باشید که مانند سایر زبان ها یک نقطه ویرگول (;) در انتهای پرس و جو اضافه می شود.

    همچنین دستورات در SQL حساس به حروف کوچک و بزرگ آنها را با حروف بزرگ می نویسیم.

    گزینه ها فقط: مجموعه کاراکترو گردآوری

    اگر می خواهید نصب کنیدمجموعه کاراکتر (مجموعه کاراکتر) و تطبیق (مقایسه) می تواند دستور زیر را بنویسید:

    ایجاد پایگاه داده my_first_db مجموعه کاراکتر پیش فرض utf8 جمع آوری utf8_general_ci;

    لیستی از مجموعه کاراکترهایی را که در آنها پشتیبانی می شود پیدا کنید MySQL.

    نمایش پایگاه های داده:تمام پایگاه های داده را فهرست می کند

    این دستور برای نمایش تمام پایگاه های داده موجود استفاده می شود.

    رها کردن پایگاه داده:حذف پایگاه داده

    با این پرس و جو می توانید یک db موجود را رها کنید.

    مراقب این دستور باشید زیرا بدون هشدار اجرا می شود. اگر اطلاعاتی در پایگاه داده شما وجود داشته باشد، همه آنها حذف خواهند شد.

    استفاده کنید:انتخاب پایگاه داده

    از نظر فنی، این یک پرس و جو نیست، بلکه یک عملگر است و در پایان به نقطه ویرگول نیاز ندارد.

    به MySQL می گوید یک پایگاه داده را برای کار به طور پیش فرض برای جلسه فعلی انتخاب کنید. اکنون آماده ساخت جداول و انجام کارهای دیگر با دیتابیس هستیم.

    جدول در پایگاه داده چیست؟

    شما می توانید یک جدول را در پایگاه داده به عنوان نمایش دهیدفایل اکسل

    درست مانند تصویر، جدول ها دارای نام ستون ها، ردیف ها و اطلاعات هستند. با استفاده از SQL پرس و جو می توانیم چنین جداول را ایجاد کنیم. همچنین ممکن است اطلاعات را اضافه، بخوانیم، به روز کنیم و حذف کنیم.

    ایجاد جدول: یک جدول ایجاد کنید

    سی با این پرس و جو می توانیم جداول را در پایگاه داده ایجاد کنیم. متاسفانه مستندات MySQL برای تازه کارها در این موضوع خیلی واضح نیست. ساختار این نوع درخواست می تواند بسیار پیچیده باشد، اما ما با یک درخواست آسان شروع می کنیم.

    پرس و جو زیر یک جدول با 2 ستون ایجاد می کند.

    CREATE TABLE کاربران (نام کاربری VARCHAR(20)، create_date DATE);

    توجه داشته باشید که می‌توانیم درخواست‌های خود را در چندین خط و با زبانه‌هایی برای تورفتگی بنویسیم.

    خط اول ساده است. ما به سادگی یک جدول به نام "کاربران" ایجاد می کنیم. بعد، در داخل پرانتز، که با کاما از هم جدا شده اند، لیستی از تمام ستون ها وجود دارد. بعد از نام هر ستون، انواع اطلاعاتی مانند VARCHAR یا DATE داریم.

    VARCHAR(20) به این معنی است که ستون از نوع رشته است و حداکثر می تواند 20 کاراکتر باشد. DATE همچنین یک نوع اطلاعاتی است که برای ذخیره تاریخ ها در این قالب استفاده می شود: "YYYY - MM-DD".

    کلید اولیه ( کلید اصلیح)

    قبل از اجرای کوئری بعدی، باید ستونی برای "user_id" نیز اضافه کنیم که کلید اصلی ما خواهد بود. شما می توانید PRIMARY KEY را به عنوان اطلاعاتی در نظر بگیرید که برای شناسایی هر ردیف در جدول استفاده می شود.

    کاربران CREATE TABLE (user_id INT AUTO_INCREMENT PRIMARY KEY، نام کاربری VARCHAR(20)، create_date DATE);

    INT یک نوع عدد صحیح 32 بیتی (مانند اعداد) می سازد.افزایش خودکار به طور خودکار یک مقدار جدید تولید می کندشناسه هر بار که ردیف های جدیدی از اطلاعات را اضافه می کنیم. این مورد نیاز نیست، اما کل فرآیند را آسان تر می کند.

    لازم نیست این ستون یک مقدار صحیح باشد، اما بیشتر مورد استفاده قرار می گیرد. داشتن کلید اصلی نیز اختیاری است، اما برای معماری و عملکرد پایگاه داده توصیه می شود.

    بیایید یک پرس و جو اجرا کنیم:

    نمایش جداول:نمایش همه جداول

    این پرس و جو به شما امکان می دهد لیستی از جداول موجود در پایگاه داده را دریافت کنید.

    توضیح:نمایش ساختار جدول

    می توانید از این پرس و جو برای نشان دادن ساختار یک جدول موجود استفاده کنید.

    ستون ها با تمام ویژگی ها نمایش داده می شوند.

    جدول رها کردن:حذف جدول

    درست مانند رها کردن پایگاه های داده، این پرس و جو جدول و محتویات آن را بدون هشدار حذف می کند.

    جدول تغییرات: جدول تغییر

    این پرس و جو همچنین می تواند شامل یک ساختار پیچیده به دلیل تغییرات بیشتر در جدول باشد. بیایید به نمونه هایی نگاه کنیم.

    (اگر در مرحله آخر جدول را حذف کردید، دوباره برای آزمایش ایجاد کنید)

    اضافه کردن یک ستون

    ALTER TABLE کاربران ADD ایمیل VARCHAR(100) AFTER پس از نام کاربری.

    به دلیل خوانایی خوب SQL، فکر می کنم توضیح دقیق آن فایده ای ندارد. ما در حال اضافه کردن یک ستون جدید "ایمیل" بعد از "نام کاربری" هستیم.

    حذف یک ستون

    خیلی هم راحت بود. لطفاً از این پرس و جو با احتیاط استفاده کنید زیرا ممکن است داده ها بدون هشدار حذف شوند.

    ستونی را که به تازگی حذف کرده اید برای آزمایش بیشتر بازیابی کنید.

    تغییر در یک ستون

    گاهی اوقات ممکن است بخواهید تغییراتی در ویژگی های یک ستون ایجاد کنید و برای این کار نیازی به حذف کامل آن ندارید.

    این کوئری نام ستون کاربر را به "user_name" تغییر داد و نوع آن را از VARCHAR(20) به VARCHAR(30) تغییر داد. چنین تغییری نباید داده های جدول را تغییر دهد.

    درج کنید: افزودن اطلاعات به جدول

    بیایید با استفاده از عبارت زیر اطلاعاتی را به جدول اضافه کنیم.

    همانطور که می بینید، VALUES() حاوی لیستی از مقادیر جدا شده با کاما است. تمام مقادیر در یک ستون محصور شده اند. و مقادیر باید به ترتیب ستون هایی باشد که در زمان ایجاد جدول تعریف شده اند.

    توجه داشته باشید که مقدار اول برای فیلد PRIMARY KEY به نام "user_id" NULL است. از آنجایی که ستون دارای ویژگی AUTO_INCREMENT است، این کار را انجام می دهیم تا شناسه به طور خودکار تولید شود. وقتی اطلاعات برای اولین بار اضافه می شود شناسه 1 می شود. ردیف بعدی 2 خواهد بود و به همین ترتیب...

    گزینه جایگزین

    گزینه پرس و جو دیگری برای افزودن ردیف وجود دارد.

    این بار به جای VALUES از کلمه کلیدی SET استفاده می کنیم و پرانتز ندارد. چندین تفاوت ظریف وجود دارد:

    ستون را می توان رد کرد. به عنوان مثال، ما مقداری را به "user_id" اختصاص ندادیم، که به طور پیش فرض مقدار AUTO_INCREMENT خود را دریافت می کند. اگر یک ستون VARCHAR را حذف کنید، یک رشته خالی اضافه خواهد شد.

    هر ستون باید با نام ارجاع شود. به همین دلیل، بر خلاف نسخه قبلی، می توان آنها را به هر ترتیبی ذکر کرد.

    جایگزین 2

    در اینجا یک گزینه دیگر وجود دارد.

    باز هم، از آنجایی که ارجاعاتی به نام ستون وجود دارد، می توانید مقادیر را به هر ترتیبی مشخص کنید.

    LAST_INSERT_ID()

    می‌توانید از این پرس‌وجو برای دریافت شناسه AUTO_INCREMENT برای ردیف آخر جلسه فعلی استفاده کنید.

    اکنون()

    اکنون زمان آن است که به شما نشان دهیم چگونه می توانید از یک تابع MySQL در کوئری ها استفاده کنید.

    تابع NOW() تاریخ جاری را برمی گرداند. بنابراین می‌توانید از آن برای تنظیم خودکار تاریخ یک ستون در زمان درج یک ردیف جدید استفاده کنید.

    توجه داشته باشید که ما 1 اخطار دریافت کردیم، اما آن را نادیده بگیرید. دلیل این امر این است که NOW() برای نمایش اطلاعات موقت نیز خدمت می کند.

    انتخاب کنید: خواندن داده ها از یک جدول

    اگر اطلاعاتی را به جدول اضافه کنیم، منطقی است که یاد بگیریم چگونه آن را از آنجا بخوانیم. اینجاست که کوئری SELECT به ما کمک می کند.

    در زیر ساده ترین عبارت SELECT ممکن برای خواندن جدول آمده است.

    در این حالت ستاره (*) به این معنی است که ما تمام فیلدها را از جدول درخواست کرده ایم. اگر فقط ستون های خاصی را می خواهید، پرس و جو به این شکل خواهد بود.

    وضعیتجایی که

    اغلب ما به همه ستون ها علاقه نداریم، بلکه فقط به برخی از آنها علاقه مندیم. به عنوان مثال، فرض کنید ما فقط به آدرس ایمیل کاربر "nettuts" نیاز داریم.

    WHERE به شما امکان می دهد شرایط را در یک پرس و جو تنظیم کنید و انتخاب های دقیقی انجام دهید.

    توجه داشته باشید که برابری از یک علامت مساوی (=) به جای دو در برنامه نویسی استفاده می کند.

    شما همچنین می توانید از مقایسه استفاده کنید.

    AND یا OR را می توان برای ترکیب شرایط استفاده کرد:

    توجه داشته باشید که مقادیر عددی نباید در گیومه باشد.

    که در()

    این برای نمونه برداری از مقادیر چندگانه مفید است.

    پسندیدن

    به شما امکان می‌دهد درخواست‌های "Waldcard" ارائه دهید

    علامت % به عنوان علامت عام استفاده می شود. یعنی در جای خود هر چیزی می تواند باشد.

    وضعیتسفارش داده شده توسط

    اگر می خواهید نتیجه را با معیارهایی به صورت مرتب به دست آورید

    ترتیب پیش‌فرض ASC (از کوچک‌ترین به بزرگ‌ترین) است. برای عکس از DESC استفاده می شود.

    LIMIT ... OFFSET ...

    می توانید تعداد نتایجی را که دریافت می کنید محدود کنید.

    LIMIT 2 فقط 2 نتیجه اول را می گیرد. LIMIT 1 OFFSET 2 1 نتیجه بعد از 2 اول می گیرد. LIMIT 2، 1 به همین معنی است (فقط توجه کنید که اول افست و سپس محدود می شود).

    به روز رسانی: تغییراتی در اطلاعات جدول ایجاد کنید

    این پرس و جو برای تغییر اطلاعات در جدول استفاده می شود.

    در بیشتر موارد، همراه با عبارت WHERE استفاده می شود، زیرا به احتمال زیاد می خواهید تغییراتی در ستون های خاصی ایجاد کنید. اگر بند WHERE وجود نداشته باشد، تغییرات بر همه ردیف ها تأثیر می گذارد.

    همچنین می توانید از LIMIT برای محدود کردن تعداد ردیف هایی که باید اصلاح شوند استفاده کنید.

    حذف: حذف اطلاعات از جدول

    درست مانند UPDATE، این پرس و جو با WHERE استفاده می شود:

    برای حذف محتویات یک جدول، به سادگی می توانید این کار را انجام دهید:

    حذف از کاربران؛

    اما استفاده از آن بهتر استکوتاه کردن

    این کوئری علاوه بر حذف، مقادیر را نیز بازنشانی می کندافزایش خودکار و با اضافه کردن مجدد ردیف ها، شمارش معکوس از صفر شروع می شود.حذف این کار را انجام نمی دهد و شمارش معکوس ادامه می یابد.

    غیرفعال کردن مقادیر رشته و کلمات خاص

    مقادیر رشته

    برخی از کاراکترها باید غیرفعال شوند (در رفتن ) یا ممکن است مشکلاتی وجود داشته باشد.

    برای این کار از بک اسلش استفاده می شود.(\).

    کلمات خاص

    زیرا در MySQL کلمات خاص زیادی وجود داردانتخاب کنید یا به روز کنید )، برای جلوگیری از خطا در هنگام استفاده از آنها، باید از نقل قول استفاده شود. اما نه نقل قول های معمولی، بلکه این ها(`).

    یعنی باید ستونی به نام " اضافه کنیدحذف "، باید این کار را به صورت زیر انجام دهید:

    نتیجه

    ممنون که تا آخر خواندید. امیدوارم این مقاله برای شما مفید بوده باشد. هنوز تمام نشده! ادامه دارد:).