নতুনদের জন্য এসকিউএল সার্ভারের প্রশ্ন। নতুনদের জন্য সচিত্র SQL টিউটোরিয়াল

এই টিউটোরিয়ালটি এসকিউএল ভাষায় (DDL, DML) যেমন "আমার স্মৃতির স্ট্যাম্প" এর মতো কিছু। এটি এমন তথ্য যা আমার পেশাদার ক্রিয়াকলাপের সময় জমা হয়েছে এবং ক্রমাগত আমার মাথায় সঞ্চিত রয়েছে। এটি আমার জন্য যথেষ্ট ন্যূনতম, যা ডাটাবেসের সাথে কাজ করার সময় প্রায়শই ব্যবহৃত হয়। যদি আরও সম্পূর্ণ SQL কনস্ট্রাক্ট ব্যবহার করার প্রয়োজন হয়, তাহলে আমি সাধারণত সাহায্যের জন্য ইন্টারনেটে অবস্থিত MSDN লাইব্রেরিতে যাই। আমার মতে, সবকিছু আপনার মাথায় রাখা খুব কঠিন এবং এর জন্য কোনও বিশেষ প্রয়োজন নেই। কিন্তু মৌলিক কাঠামো জানা খুবই দরকারী, কারণ... ওরাকল, মাইএসকিউএল, ফায়ারবার্ডের মতো অনেক রিলেশনাল ডাটাবেসে এগুলি প্রায় একই আকারে প্রযোজ্য। পার্থক্যগুলি প্রধানত ডেটা প্রকারের মধ্যে, যা বিস্তারিতভাবে আলাদা হতে পারে। অনেক মৌলিক SQL গঠন নেই, এবং ধ্রুবক অনুশীলনের সাথে তারা দ্রুত মুখস্থ হয়ে যায়। উদাহরণস্বরূপ, অবজেক্ট তৈরি করতে (টেবিল, সীমাবদ্ধতা, সূচী ইত্যাদি), ডাটাবেসের সাথে কাজ করার জন্য হাতে একটি পাঠ্য সম্পাদক পরিবেশ (IDE) থাকা যথেষ্ট, এবং এর সাথে কাজ করার জন্য উপযোগী ভিজ্যুয়াল সরঞ্জামগুলি অধ্যয়নের প্রয়োজন নেই। একটি নির্দিষ্ট ধরনের ডাটাবেস (MS SQL , Oracle, MySQL, Firebird, ...)। এটিও সুবিধাজনক কারণ সমস্ত পাঠ্য আপনার চোখের সামনে রয়েছে এবং আপনাকে একটি সূচক বা সীমাবদ্ধতা তৈরি করার জন্য অসংখ্য ট্যাবের মাধ্যমে চালানোর দরকার নেই। একটি ডাটাবেসের সাথে ক্রমাগত কাজ করার সময়, স্ক্রিপ্ট ব্যবহার করে একটি বস্তু তৈরি করা, পরিবর্তন করা এবং বিশেষ করে পুনরায় তৈরি করা ভিজ্যুয়াল মোডে করার চেয়ে অনেকগুণ দ্রুত। এছাড়াও স্ক্রিপ্ট মোডে (এবং, সেই অনুযায়ী, যথাযথ যত্ন সহ), বস্তুর নামকরণের নিয়মগুলি সেট করা এবং নিয়ন্ত্রণ করা সহজ (আমার বিষয়গত মতামত)। উপরন্তু, স্ক্রিপ্টগুলি ব্যবহার করা সুবিধাজনক যখন একটি ডাটাবেসে করা পরিবর্তনগুলি (উদাহরণস্বরূপ, পরীক্ষা) একই ফর্মে অন্য ডাটাবেসে (উৎপাদনশীল) স্থানান্তর করা প্রয়োজন।

এসকিউএল ভাষা বিভিন্ন অংশে বিভক্ত, এখানে আমি 2টি গুরুত্বপূর্ণ অংশ দেখব:
  • DML - ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ, যা নিম্নলিখিত গঠনগুলি ধারণ করে:
    • নির্বাচন করুন - ডেটা নির্বাচন
    • INSERT - নতুন ডেটা সন্নিবেশ করা হচ্ছে
    • আপডেট - ডেটা আপডেট
    • DELETE - ডেটা মুছে ফেলা হচ্ছে
    • মার্জ - ডেটা মার্জিং
কারণ আমি একজন অনুশীলনকারী; এই পাঠ্যপুস্তকের মতো সামান্য তত্ত্ব থাকবে, এবং সমস্ত নির্মাণগুলি ব্যবহারিক উদাহরণ ব্যবহার করে ব্যাখ্যা করা হবে। উপরন্তু, আমি বিশ্বাস করি যে একটি প্রোগ্রামিং ভাষা, এবং বিশেষ করে এসকিউএল, শুধুমাত্র অনুশীলনের মাধ্যমে আয়ত্ত করা যেতে পারে, এটি নিজে অনুভব করে এবং আপনি যখন এই বা সেই নির্মাণটি সম্পাদন করেন তখন কী ঘটে তা বোঝার মাধ্যমে।

এই পাঠ্যপুস্তকটি ধাপে ধাপে নীতি অনুসারে তৈরি করা হয়েছিল, অর্থাৎ আপনাকে এটি ক্রমিকভাবে পড়তে হবে এবং অবিলম্বে উদাহরণগুলি অনুসরণ করতে হবে। কিন্তু যদি পথ ধরে আপনাকে একটি নির্দিষ্ট কমান্ড সম্পর্কে আরও বিস্তারিতভাবে জানতে হয়, তাহলে ইন্টারনেটে একটি নির্দিষ্ট অনুসন্ধান ব্যবহার করুন, উদাহরণস্বরূপ, MSDN লাইব্রেরিতে।

এই টিউটোরিয়ালটি লেখার সময়, আমি MS SQL সার্ভার সংস্করণ 2014 ডাটাবেস ব্যবহার করেছি এবং স্ক্রিপ্টগুলি চালানোর জন্য আমি MS SQL সার্ভার ম্যানেজমেন্ট স্টুডিও (SSMS) ব্যবহার করেছি।

MS SQL সার্ভার ম্যানেজমেন্ট স্টুডিও (SSMS) সম্পর্কে সংক্ষেপে

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও (এসএসএমএস) ডাটাবেস উপাদানগুলি কনফিগার, পরিচালনা এবং পরিচালনার জন্য মাইক্রোসফ্ট এসকিউএল সার্ভারের একটি ইউটিলিটি। এই ইউটিলিটিটিতে একটি স্ক্রিপ্ট সম্পাদক (যা আমরা প্রধানত ব্যবহার করব) এবং একটি গ্রাফিকাল প্রোগ্রাম রয়েছে যা সার্ভার অবজেক্ট এবং সেটিংসের সাথে কাজ করে। SQL সার্ভার ম্যানেজমেন্ট স্টুডিওর প্রধান টুল হল অবজেক্ট এক্সপ্লোরার, যা ব্যবহারকারীকে সার্ভার অবজেক্ট দেখতে, পুনরুদ্ধার এবং পরিচালনা করতে দেয়। এই লেখাটি আংশিকভাবে উইকিপিডিয়া থেকে ধার করা হয়েছে।

একটি নতুন স্ক্রিপ্ট সম্পাদক তৈরি করতে, "নতুন ক্যোয়ারী" বোতামটি ব্যবহার করুন:

বর্তমান ডাটাবেস পরিবর্তন করতে আপনি ড্রপ-ডাউন তালিকা ব্যবহার করতে পারেন:

একটি নির্দিষ্ট কমান্ড (বা কমান্ডের গ্রুপ) কার্যকর করতে, এটি নির্বাচন করুন এবং "Execute" বোতাম বা "F5" কী টিপুন। যদি সম্পাদকে বর্তমানে শুধুমাত্র একটি কমান্ড থাকে, অথবা আপনাকে সমস্ত কমান্ড কার্যকর করতে হবে, তাহলে আপনাকে কিছু নির্বাচন করতে হবে না।

স্ক্রিপ্টগুলি চালানোর পরে, বিশেষ করে যারা অবজেক্ট (টেবিল, কলাম, সূচী) তৈরি করে, পরিবর্তনগুলি দেখতে, উপযুক্ত গোষ্ঠী (উদাহরণস্বরূপ, টেবিল), টেবিল নিজেই বা কলাম গ্রুপ হাইলাইট করে প্রসঙ্গ মেনু থেকে রিফ্রেশ ব্যবহার করুন।

আসলে, এখানে প্রদত্ত উদাহরণগুলি সম্পূর্ণ করার জন্য আমাদের যা জানতে হবে। বাকি SSMS ইউটিলিটি আপনার নিজের থেকে শিখতে সহজ।

একটু তত্ত্ব

একটি রিলেশনাল ডাটাবেস (আরডিবি, বা এর পরে প্রেক্ষাপটে কেবল ডিবি) হল আন্তঃসংযুক্ত টেবিলের একটি সংগ্রহ। মোটামুটিভাবে বলতে গেলে, একটি ডাটাবেস হল একটি ফাইল যেখানে ডেটা একটি কাঠামোগত আকারে সংরক্ষণ করা হয়।

DBMS - ডাটাবেস ম্যানেজমেন্ট সিস্টেম, যেমন এটি একটি নির্দিষ্ট ধরণের ডাটাবেসের সাথে কাজ করার জন্য সরঞ্জামগুলির একটি সেট (MS SQL, Oracle, MySQL, Firebird, ...)।

বিঃদ্রঃ
কারণ জীবনে, কথোপকথন বক্তৃতায়, আমরা বেশিরভাগই বলি: "ওরাকল ডিবি", বা এমনকি "ওরাকল", আসলে "ওরাকল ডিবিএমএস" এর অর্থ, তারপরে এই পাঠ্যপুস্তকের প্রসঙ্গে ডিবি শব্দটি কখনও কখনও ব্যবহার করা হবে। প্রসঙ্গ থেকে, আমি মনে করি এটা পরিষ্কার হবে যে আমরা ঠিক কি বিষয়ে কথা বলছি।

একটি টেবিল কলামের একটি সংগ্রহ। কলামগুলিকে ক্ষেত্র বা কলামও বলা যেতে পারে; এই সমস্ত শব্দ একই জিনিস প্রকাশ করে প্রতিশব্দ হিসাবে ব্যবহৃত হবে।

টেবিলটি RDB-এর প্রধান বস্তু; সমস্ত RDB ডেটা টেবিলের কলামে সারি সারি সংরক্ষণ করা হয়। লাইন এবং রেকর্ডও সমার্থক শব্দ।

প্রতিটি টেবিলের জন্য, সেইসাথে এর কলামগুলির জন্য, নামগুলি নির্দিষ্ট করা হয় যার দ্বারা তারা পরবর্তীতে অ্যাক্সেস করা হয়।
MS SQL-এ বস্তুর নাম (টেবিলের নাম, কলামের নাম, সূচকের নাম, ইত্যাদি) সর্বোচ্চ দৈর্ঘ্য 128টি অক্ষর থাকতে পারে।

রেফারেন্সের জন্য- ORACLE ডাটাবেসে, অবজেক্টের নাম সর্বোচ্চ 30 অক্ষরের দৈর্ঘ্য থাকতে পারে। অতএব, একটি নির্দিষ্ট ডাটাবেসের জন্য, অক্ষরের সংখ্যার সীমা পূরণ করার জন্য আপনাকে বস্তুর নামকরণের জন্য আপনার নিজস্ব নিয়ম তৈরি করতে হবে।

SQL হল এমন একটি ভাষা যা আপনাকে DBMS ব্যবহার করে একটি ডাটাবেস অনুসন্ধান করতে দেয়। একটি নির্দিষ্ট ডিবিএমএসে, এসকিউএল ভাষার একটি নির্দিষ্ট বাস্তবায়ন থাকতে পারে (এর নিজস্ব উপভাষা)।

DDL এবং DML হল SQL ভাষার একটি উপসেট:

  • DDL ভাষা ডাটাবেস গঠন তৈরি এবং পরিবর্তন করতে ব্যবহৃত হয়, যেমন টেবিল এবং সম্পর্ক তৈরি/পরিবর্তন/মুছে ফেলতে।
  • ডিএমএল ভাষা আপনাকে টেবিল ডেটা ম্যানিপুলেট করতে দেয়, যেমন তার লাইন সঙ্গে. এটি আপনাকে টেবিল থেকে ডেটা নির্বাচন করতে, টেবিলে নতুন ডেটা যোগ করার পাশাপাশি বিদ্যমান ডেটা আপডেট এবং মুছে ফেলতে দেয়।

এসকিউএল-এ, আপনি 2 ধরনের মন্তব্য ব্যবহার করতে পারেন (একক-লাইন এবং মাল্টি-লাইন):

এক লাইন কমেন্ট
এবং

/* মাল্টিলাইন মন্তব্য */

আসলে, এটি তত্ত্বের জন্য যথেষ্ট হবে।

DDL - ডেটা সংজ্ঞা ভাষা

উদাহরণস্বরূপ, একজন প্রোগ্রামার নন এমন একজন ব্যক্তির পরিচিত ফর্মে কর্মীদের সম্পর্কে ডেটা সহ একটি টেবিল বিবেচনা করুন:

এই ক্ষেত্রে, টেবিলের কলামগুলির নিম্নলিখিত নাম রয়েছে: কর্মী সংখ্যা, পুরো নাম, জন্ম তারিখ, ই-মেইল, অবস্থান, বিভাগ।

এই কলামগুলির প্রতিটিতে এতে থাকা ডেটার প্রকার দ্বারা চিহ্নিত করা যেতে পারে:

  • কর্মী সংখ্যা - পূর্ণসংখ্যা
  • পুরো নাম - স্ট্রিং
  • জন্ম তারিখ-তারিখ
  • ইমেল - স্ট্রিং
  • অবস্থান - স্ট্রিং
  • বিভাগ - লাইন
কলামের ধরন এমন একটি বৈশিষ্ট্য যা নির্দেশ করে যে প্রদত্ত কলাম কী ধরনের ডেটা সংরক্ষণ করতে পারে।

শুরু করার জন্য, এমএস এসকিউএল-এ ব্যবহৃত শুধুমাত্র নিম্নলিখিত মৌলিক ডেটা প্রকারগুলি মনে রাখা যথেষ্ট হবে:

অর্থ MS SQL এ স্বরলিপি বর্ণনা
পরিবর্তনশীল দৈর্ঘ্যের স্ট্রিং varchar(N)
এবং
nvarchar(N)
N সংখ্যাটি ব্যবহার করে, আমরা সংশ্লিষ্ট কলামের জন্য সর্বাধিক সম্ভাব্য স্ট্রিং দৈর্ঘ্য নির্দিষ্ট করতে পারি। উদাহরণস্বরূপ, যদি আমরা বলতে চাই যে "নাম" কলামের মান সর্বাধিক 30টি অক্ষর ধারণ করতে পারে, তাহলে আমাদের এটির ধরনটি nvarchar(30) এ সেট করতে হবে।
varchar এবং nvarchar এর মধ্যে পার্থক্য হল যে varchar আপনাকে ASCII ফরম্যাটে স্ট্রিংগুলি সংরক্ষণ করতে দেয়, যেখানে একটি অক্ষর 1 বাইট দখল করে এবং nvarchar ইউনিকোড ফর্ম্যাটে স্ট্রিং সংরক্ষণ করে, যেখানে প্রতিটি অক্ষর 2 বাইট দখল করে।
varchar টাইপ শুধুমাত্র ব্যবহার করা উচিত যদি আপনি 100% নিশ্চিত হন যে ক্ষেত্রের ইউনিকোড অক্ষর সংরক্ষণ করার প্রয়োজন হবে না। উদাহরণস্বরূপ, varchar ইমেল ঠিকানা সংরক্ষণ করতে ব্যবহার করা যেতে পারে কারণ... তারা সাধারণত শুধুমাত্র ASCII অক্ষর ধারণ করে।
নির্দিষ্ট দৈর্ঘ্যের স্ট্রিং চর(N)
এবং
nchar(N)
এই ধরনটি একটি পরিবর্তনশীল-দৈর্ঘ্যের স্ট্রিং থেকে আলাদা যে যদি স্ট্রিংয়ের দৈর্ঘ্য N অক্ষরের চেয়ে কম হয়, তবে এটি সর্বদা শূন্যস্থান সহ N এর দৈর্ঘ্যের ডানদিকে প্যাড করা হয় এবং এই ফর্মে ডাটাবেসে সংরক্ষণ করা হয়, যেমন ডাটাবেসে এটি ঠিক N অক্ষর নেয় (যেখানে একটি অক্ষর চারের জন্য 1 বাইট এবং এনচারের জন্য 2 বাইট নেয়)। আমার অনুশীলনে, এই প্রকারটি খুব কমই ব্যবহৃত হয়, এবং যদি এটি ব্যবহার করা হয় তবে এটি প্রধানত char(1) বিন্যাসে ব্যবহৃত হয়, যেমন যখন একটি ক্ষেত্র একটি একক অক্ষর দ্বারা সংজ্ঞায়িত করা হয়।
পূর্ণসংখ্যা int এই ধরনের আমাদের কলামে শুধুমাত্র পূর্ণসংখ্যা ব্যবহার করতে দেয়, উভয় ইতিবাচক এবং নেতিবাচক। রেফারেন্সের জন্য (এখন এটি আমাদের জন্য এতটা প্রাসঙ্গিক নয়), int টাইপ যে সংখ্যাগুলিকে অনুমতি দেয় তা হল -2,147,483,648 থেকে 2,147,483,647 পর্যন্ত৷ সাধারণত এটিই প্রধান ধরন যা শনাক্তকারীকে নির্দিষ্ট করতে ব্যবহৃত হয়৷
বাস্তব বা বাস্তব সংখ্যা ভাসা সহজ শর্তে, এগুলি এমন সংখ্যা যা একটি দশমিক বিন্দু (কমা) থাকতে পারে।
তারিখ তারিখ যদি কলামে শুধুমাত্র তারিখ সংরক্ষণ করতে হয়, যা তিনটি উপাদান নিয়ে গঠিত: দিন, মাস এবং বছর। উদাহরণস্বরূপ, 02/15/2014 (ফেব্রুয়ারি 15, 2014)। এই প্রকারটি "ভর্তি তারিখ", "জন্ম তারিখ" ইত্যাদি কলামের জন্য ব্যবহার করা যেতে পারে, অর্থাৎ যে ক্ষেত্রে শুধুমাত্র তারিখ রেকর্ড করা আমাদের জন্য গুরুত্বপূর্ণ, অথবা যখন সময় উপাদানটি আমাদের কাছে গুরুত্বপূর্ণ নয় এবং বাতিল করা যেতে পারে বা জানা না থাকলে।
সময় সময় এই ধরনের ব্যবহার করা যেতে পারে যদি কলামে শুধুমাত্র সময়ের ডেটা সংরক্ষণ করতে হয়, যেমন ঘন্টা, মিনিট, সেকেন্ড এবং মিলিসেকেন্ড। উদাহরণস্বরূপ, 17:38:31.3231603
উদাহরণস্বরূপ, দৈনিক "ফ্লাইট ছাড়ার সময়"।
তারিখ এবং সময় তারিখ সময় এই ধরনের আপনি একই সাথে তারিখ এবং সময় উভয় সংরক্ষণ করতে পারবেন. উদাহরণস্বরূপ, 02/15/2014 17:38:31.323
উদাহরণস্বরূপ, এটি একটি ইভেন্টের তারিখ এবং সময় হতে পারে৷
পতাকা বিট এই প্রকারটি "হ্যাঁ"/"না" ফর্মের মান সংরক্ষণ করতে ব্যবহার করা সুবিধাজনক, যেখানে "হ্যাঁ" 1 হিসাবে সংরক্ষণ করা হবে এবং "না" 0 হিসাবে সংরক্ষণ করা হবে।

এছাড়াও, ক্ষেত্রের মান, যদি এটি নিষিদ্ধ না হয় তবে নির্দিষ্ট করা যাবে না; NULL কীওয়ার্ডটি এই উদ্দেশ্যে ব্যবহার করা হয়।

উদাহরণগুলি চালানোর জন্য, আসুন টেস্ট নামে একটি পরীক্ষা ডাটাবেস তৈরি করি।

একটি সাধারণ ডাটাবেস (অতিরিক্ত পরামিতি নির্দিষ্ট না করে) নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে তৈরি করা যেতে পারে:

ডেটাবেস পরীক্ষা তৈরি করুন
আপনি কমান্ড দিয়ে ডাটাবেস মুছে ফেলতে পারেন (আপনাকে এই কমান্ডের সাথে খুব সতর্ক হওয়া উচিত):

ড্রপ ডাটাবেস পরীক্ষা
আমাদের ডাটাবেসে স্যুইচ করার জন্য, আপনি কমান্ডটি চালাতে পারেন:

পরীক্ষা ব্যবহার করুন
বিকল্পভাবে, SSMS মেনু এলাকায় ড্রপ-ডাউন তালিকা থেকে টেস্ট ডাটাবেস নির্বাচন করুন। কাজ করার সময়, আমি প্রায়ই ডাটাবেসের মধ্যে স্যুইচ করার এই পদ্ধতিটি ব্যবহার করি।

এখন আমাদের ডাটাবেসে আমরা স্পেস এবং সিরিলিক অক্ষর ব্যবহার করে বর্ণনাগুলি ব্যবহার করে একটি টেবিল তৈরি করতে পারি:

টেবিল তৈরি করুন [কর্মচারি]([ব্যক্তি সংখ্যা] int, [নাম] nvarchar(30), [জন্ম তারিখ] তারিখ, nvarchar(30), [অবস্থান] nvarchar(30), [বিভাগ] nvarchar(30))
এই ক্ষেত্রে, আমাদের নামগুলি বর্গাকার বন্ধনীতে আবদ্ধ করতে হবে […]

কিন্তু ডাটাবেসে, বৃহত্তর সুবিধার জন্য, সমস্ত বস্তুর নাম ল্যাটিন ভাষায় উল্লেখ করা এবং নামের মধ্যে স্পেস ব্যবহার না করা ভাল। এমএস এসকিউএল-এ, সাধারণত এই ক্ষেত্রে প্রতিটি শব্দ একটি বড় অক্ষর দিয়ে শুরু হয়, উদাহরণস্বরূপ, "পার্সোনেল নম্বর" ফিল্ডের জন্য, আমরা নামটি PersonnelNumber সেট করতে পারি। আপনি নামের মধ্যে নম্বরগুলিও ব্যবহার করতে পারেন, উদাহরণস্বরূপ, PhoneNumber1৷

একটি নোটে
কিছু DBMS-এ, নিম্নলিখিত নামকরণের ফর্ম্যাট "PHONE_NUMBER" আরও পছন্দের হতে পারে; উদাহরণস্বরূপ, এই ফর্ম্যাটটি প্রায়ই ORACLE ডাটাবেসে ব্যবহৃত হয়। স্বাভাবিকভাবেই, একটি ক্ষেত্রের নাম উল্লেখ করার সময়, এটি DBMS-এ ব্যবহৃত কীওয়ার্ডগুলির সাথে মিলে না যাওয়া বাঞ্ছনীয়।

এই কারণে, আপনি বর্গাকার বন্ধনী সিনট্যাক্স সম্পর্কে ভুলে যেতে পারেন এবং [কর্মচারীদের] টেবিলটি মুছে ফেলতে পারেন:

ড্রপ টেবিল [কর্মচারীদের]
উদাহরণস্বরূপ, কর্মচারীদের সাথে একটি টেবিলের নাম দেওয়া যেতে পারে "কর্মচারী" এবং এর ক্ষেত্রগুলিকে নিম্নলিখিত নাম দেওয়া যেতে পারে:

  • আইডি - কর্মী নম্বর (কর্মচারী আইডি)
  • নাম - পুরো নাম
  • জন্মদিন – জন্ম তারিখ
  • ইমেইল - ইমেইল
  • পদ - পদ
  • বিভাগ - বিভাগ
প্রায়শই আইডি শব্দটি একটি শনাক্তকারী ক্ষেত্রের নাম দিতে ব্যবহৃত হয়।

এখন আমাদের টেবিল তৈরি করা যাক:

টেবিল কর্মচারী তৈরি করুন (আইডি int, নাম nvarchar(30), জন্মদিনের তারিখ, ইমেল nvarchar(30), অবস্থান nvarchar(30), বিভাগ nvarchar(30))
প্রয়োজনীয় কলাম নির্দিষ্ট করতে, আপনি NOT NULL বিকল্পটি ব্যবহার করতে পারেন।

একটি বিদ্যমান টেবিলের জন্য, ক্ষেত্রগুলি নিম্নলিখিত কমান্ডগুলি ব্যবহার করে পুনরায় সংজ্ঞায়িত করা যেতে পারে:

আইডি ক্ষেত্র আপডেট করুন টেবিলের কর্মচারীরা কলাম আইডি শূন্য না করে পরিবর্তন করুন -- আপডেট নামের ক্ষেত্র পরিবর্তন করুন টেবিল কর্মচারীরা কলামের নাম পরিবর্তন করুন nvarchar(30) NOT NULL

একটি নোটে
এসকিউএল ভাষার সাধারণ ধারণাটি বেশিরভাগ ডিবিএমএসের জন্য একই থাকে (অন্তত, আমি যে ডিবিএমএসগুলির সাথে কাজ করেছি তা থেকে আমি এটি বিচার করতে পারি)। বিভিন্ন DBMS-এ DDL-এর মধ্যে পার্থক্যগুলি প্রধানত ডেটা প্রকারের মধ্যে থাকে (এখানে শুধুমাত্র তাদের নামই আলাদা হতে পারে না, তবে তাদের বাস্তবায়নের বিশদ বিবরণও থাকতে পারে), এবং SQL ভাষা বাস্তবায়নের খুব সুনির্দিষ্ট বৈশিষ্ট্যগুলিও সামান্য ভিন্ন হতে পারে (যেমন, কমান্ডের সারমর্ম একই, তবে উপভাষায় সামান্য পার্থক্য থাকতে পারে, হায়, তবে একটি মান নেই)। SQL এর মূল বিষয়গুলি আয়ত্ত করার পরে, আপনি সহজেই একটি DBMS থেকে অন্য DBMS-এ স্যুইচ করতে পারেন, কারণ... এই ক্ষেত্রে, আপনাকে শুধুমাত্র নতুন ডিবিএমএসে কমান্ড বাস্তবায়নের বিশদটি বুঝতে হবে, যেমন বেশিরভাগ ক্ষেত্রে, কেবল একটি উপমা আঁকাই যথেষ্ট।

একটি টেবিল তৈরি করা টেবিলের কর্মচারী তৈরি করুন (আইডি int, -- ORACLE তে int টাইপ হল সমতুল্য (র্যাপার) নম্বরের (38) নাম nvarchar2(30), -- ORACLE-তে nvarchar2 MS SQL জন্মদিনের তারিখ, ইমেল-এ nvarchar-এর সমতুল্য nvarchar2(30) , অবস্থান nvarchar2(30), বিভাগ nvarchar2(30)); -- ID এবং Name ফিল্ড আপডেট করা (এখানে ALTER COLUMN এর পরিবর্তে MODIFY(...) ব্যবহার করা হয়েছে) ALTER TABLE Employees MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL); -- PK যোগ করা (এই ক্ষেত্রে নির্মাণটি এমএস এসকিউএল-এর মতোই দেখায়, এটি নীচে দেখানো হবে) সারণী কর্মচারী পরিবর্তন করুন PK_Employees PRIMARY KEY(ID);
ORACLE-এর জন্য varchar2 প্রকারের বাস্তবায়নের ক্ষেত্রে পার্থক্য রয়েছে; এর এনকোডিং ডাটাবেস সেটিংসের উপর নির্ভর করে এবং পাঠ্য সংরক্ষণ করা যেতে পারে, উদাহরণস্বরূপ, UTF-8 এনকোডিংয়ে। এছাড়াও, ORACLE-এ ক্ষেত্রের দৈর্ঘ্য বাইট এবং অক্ষর উভয় ক্ষেত্রেই নির্দিষ্ট করা যেতে পারে; এর জন্য, অতিরিক্ত বিকল্প BYTE এবং CHAR ব্যবহার করা হয়, যা ক্ষেত্রের দৈর্ঘ্যের পরে নির্দিষ্ট করা হয়, উদাহরণস্বরূপ:

NAME varchar2(30 BYTE) -- ক্ষেত্রের ক্ষমতা হবে 30 বাইট NAME varchar2(30 CHAR) -- ক্ষেত্রের ক্ষমতা হবে 30 অক্ষর
কোন বিকল্পটি ডিফল্টরূপে BYTE বা CHAR ব্যবহার করা হবে, ORACLE-এ varchar2(30) টাইপ নির্দিষ্ট করার ক্ষেত্রে, ডাটাবেস সেটিংসের উপর নির্ভর করে এবং এটি কখনও কখনও IDE সেটিংসে সেট করা যেতে পারে। সাধারণভাবে, কখনও কখনও আপনি সহজেই বিভ্রান্ত হতে পারেন, তাই ORACLE এর ক্ষেত্রে, যদি varchar2 টাইপ ব্যবহার করা হয় (এবং এটি কখনও কখনও এখানে ন্যায়সঙ্গত হয়, উদাহরণস্বরূপ, UTF-8 এনকোডিং ব্যবহার করার সময়), আমি স্পষ্টভাবে CHAR লিখতে পছন্দ করি (যেহেতু সাধারণত অক্ষরের মধ্যে স্ট্রিংয়ের দৈর্ঘ্য গণনা করা আরও সুবিধাজনক)।

কিন্তু এই ক্ষেত্রে, যদি টেবিলে ইতিমধ্যে কিছু ডেটা থাকে, তাহলে কমান্ডের সফলভাবে সম্পাদনের জন্য টেবিলের সমস্ত সারিতে ID এবং Name ক্ষেত্রগুলি পূরণ করা প্রয়োজন। আসুন একটি উদাহরণ দিয়ে এটি প্রদর্শন করা যাক: আইডি, অবস্থান এবং বিভাগ ক্ষেত্রের টেবিলে ডেটা সন্নিবেশ করান; এটি নিম্নলিখিত স্ক্রিপ্ট দিয়ে করা যেতে পারে:

কর্মচারী ঢোকান(আইডি,পজিশন,বিভাগ) মান (1000,N"পরিচালক",N"প্রশাসন"), (1001,N"প্রোগ্রামার",N"IT"), (1002,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 (অনির্দিষ্ট) মান রয়েছে।

আসুন নাম ক্ষেত্রের মান যোগ করি এবং আবার ডেটা পূরণ করি:


NOT NULL বিকল্পটি একটি নতুন টেবিল তৈরি করার সময় সরাসরি ব্যবহার করা যেতে পারে, যেমন CREATE TABLE কমান্ডের প্রসঙ্গে।

প্রথমে, কমান্ডটি ব্যবহার করে টেবিলটি মুছুন:

ড্রপ টেবিল কর্মচারী
এখন প্রয়োজনীয় আইডি এবং নাম কলাম সহ একটি টেবিল তৈরি করা যাক:

সারণী কর্মচারী তৈরি করুন (আইডি শূন্য নয়, নাম nvarchar(30) NOT NULL, জন্ম তারিখ, ইমেল nvarchar(30), অবস্থান nvarchar(30), বিভাগ nvarchar(30))
আপনি কলামের নামের পরে NULLও লিখতে পারেন, যার অর্থ হবে NULL মান (নির্দিষ্ট নয়) এতে অনুমোদিত হবে, তবে এটি প্রয়োজনীয় নয়, যেহেতু এই বৈশিষ্ট্যটি ডিফল্টরূপে নিহিত।

যদি, বিপরীতে, আপনি একটি বিদ্যমান কলাম ঐচ্ছিক করতে চান, তাহলে নিম্নলিখিত কমান্ড সিনট্যাক্স ব্যবহার করুন:

সারণী কর্মচারীরা কলামের নাম পরিবর্তন করে nvarchar(30) NULL
বা সহজভাবে:

সারণী কর্মচারীরা কলামের নাম পরিবর্তন করে nvarchar(30)
এই কমান্ডের সাহায্যে আমরা ফিল্ডের ধরনটিকে অন্য একটি সামঞ্জস্যপূর্ণ টাইপে পরিবর্তন করতে পারি বা এর দৈর্ঘ্য পরিবর্তন করতে পারি। উদাহরণস্বরূপ, নাম ক্ষেত্রটি 50 অক্ষরে প্রসারিত করা যাক:

সারণী কর্মচারীরা কলামের নাম পরিবর্তন করে nvarchar(50)

প্রাথমিক কী

একটি টেবিল তৈরি করার সময়, এটি একটি অনন্য কলাম বা কলামের একটি সেট থাকা বাঞ্ছনীয় যা এর প্রতিটি সারির জন্য অনন্য - একটি রেকর্ড অনন্যভাবে এই অনন্য মান দ্বারা চিহ্নিত করা যেতে পারে। এই মানটিকে টেবিলের প্রাথমিক কী বলা হয়। আমাদের কর্মচারী টেবিলের জন্য, এই ধরনের একটি অনন্য মান আইডি কলাম হতে পারে (যাতে "কর্মচারী কর্মী সংখ্যা" থাকে - যদিও আমাদের ক্ষেত্রে এই মানটি প্রতিটি কর্মচারীর জন্য অনন্য এবং পুনরাবৃত্তি করা যায় না)।

আপনি কমান্ড ব্যবহার করে বিদ্যমান টেবিলের একটি প্রাথমিক কী তৈরি করতে পারেন:

সারণী পরিবর্তন করুন কর্মচারীরা সীমাবদ্ধতা যোগ করুন PK_Employees PRIMARY KEY(ID)
যেখানে "PK_Employees" হল প্রাথমিক কীর জন্য দায়ী সীমাবদ্ধতার নাম। সাধারণত, প্রাথমিক কীটির নামকরণ করা হয় উপসর্গ ব্যবহার করে “PK_” তারপর টেবিলের নাম।

যদি প্রাথমিক কীটিতে বেশ কয়েকটি ক্ষেত্র থাকে, তাহলে এই ক্ষেত্রগুলিকে অবশ্যই কমা দ্বারা পৃথক করে বন্ধনীতে তালিকাভুক্ত করতে হবে:

সারণী পরিবর্তন করুন
এটি লক্ষণীয় যে MS SQL-এ, প্রাথমিক কী-তে অন্তর্ভুক্ত সমস্ত ক্ষেত্রে অবশ্যই NOT NULL বৈশিষ্ট্য থাকতে হবে।

একটি টেবিল তৈরি করার সময় প্রাথমিক কীটিও সরাসরি নির্ধারণ করা যেতে পারে, যেমন CREATE TABLE কমান্ডের প্রসঙ্গে। আসুন টেবিলটি মুছে ফেলি:

ড্রপ টেবিল কর্মচারী
এবং তারপর আমরা নিম্নলিখিত সিনট্যাক্স ব্যবহার করে এটি তৈরি করব:

সারণী কর্মচারী তৈরি করুন(আইডি শূন্য নয়, নাম nvarchar(30) NOT NULL, জন্মদিনের তারিখ, ইমেল nvarchar(30), অবস্থান nvarchar(30), বিভাগ nvarchar(30), সীমাবদ্ধতা PK_Employees PRIMARY KEY(ID) - পরে বর্ণনা করুন সীমাবদ্ধতা হিসাবে সমস্ত ক্ষেত্র)
তৈরি করার পরে, ডেটা দিয়ে টেবিলটি পূরণ করুন:

কর্মচারী ঢোকান(আইডি,পদ,বিভাগ,নাম) মূল্য (1000,N"পরিচালক",N"প্রশাসন",N"ইভানভ I.I."), (1001,N"প্রোগ্রামার",N"IT",N"পেট্রোভ পিপি।" ), (1002,N"অ্যাকাউন্ট্যান্ট",N"হিসাবপত্র",N"সিডোরভ S.S."), (1003,N"সিনিয়র প্রোগ্রামার",N"IT",N"Andreev A. A")
যদি একটি টেবিলের প্রাথমিক কী শুধুমাত্র একটি কলামের মান নিয়ে গঠিত, তাহলে আপনি নিম্নলিখিত সিনট্যাক্স ব্যবহার করতে পারেন:

সারণী কর্মচারী তৈরি করুন (আইডি শূন্য সীমাবদ্ধ নয় PK_Employees প্রাথমিক কী, -- ক্ষেত্রের একটি বৈশিষ্ট্য হিসাবে উল্লেখ করুন নাম nvarchar(30) NULL নয়, জন্মদিনের তারিখ, ইমেল nvarchar(30), অবস্থান nvarchar(30), বিভাগ nvarchar(30) )
আসলে, আপনাকে সীমাবদ্ধতার নাম নির্দিষ্ট করতে হবে না, এই ক্ষেত্রে এটি একটি সিস্টেমের নাম বরাদ্দ করা হবে (যেমন "PK__Employee__3214EC278DA42077"):

সারণী কর্মচারী তৈরি করুন (আইডি শূন্য নয়, নাম nvarchar(30) NOT NULL, জন্মদিনের তারিখ, ইমেল nvarchar(30), অবস্থান nvarchar(30), বিভাগ nvarchar(30), প্রাথমিক কী(ID))
বা:

টেবিল কর্মচারী তৈরি করুন (আইডি শূন্য প্রাথমিক কী নয়, নাম nvarchar(30) NULL নয়, জন্মদিনের তারিখ, ইমেল nvarchar(30), অবস্থান nvarchar(30), বিভাগ nvarchar(30))
কিন্তু আমি সুপারিশ করব যে স্থায়ী টেবিলের জন্য আপনি সর্বদা স্পষ্টভাবে সীমাবদ্ধতার নাম সেট করুন, কারণ একটি সুস্পষ্টভাবে নির্দিষ্ট এবং বোধগম্য নামের সাথে, এটি পরে এটিকে পরিচালনা করা সহজ হবে; উদাহরণস্বরূপ, আপনি এটি মুছতে পারেন:

ALTER TABLE কর্মচারীরা ড্রপ কন্সট্রাইন্ট PK_Employees
কিন্তু এই ধরনের সংক্ষিপ্ত সিনট্যাক্স, সীমাবদ্ধতার নাম উল্লেখ না করে, অস্থায়ী ডাটাবেস টেবিল তৈরি করার সময় ব্যবহার করা সুবিধাজনক (অস্থায়ী টেবিলের নাম # বা ## দিয়ে শুরু হয়), যা ব্যবহারের পরে মুছে ফেলা হবে।

আসুন সংক্ষিপ্ত করা যাক

এ পর্যন্ত আমরা নিম্নলিখিত কমান্ডগুলি দেখেছি:
  • ছক তৈরি কর table_name (ক্ষেত্রের তালিকা এবং তাদের প্রকার, সীমাবদ্ধতা) – বর্তমান ডাটাবেসে একটি নতুন টেবিল তৈরি করতে ব্যবহৃত হয়;
  • ড্রপ টেবিল table_name - বর্তমান ডাটাবেস থেকে একটি টেবিল মুছে ফেলার জন্য ব্যবহৃত হয়;
  • টেবিল পরিবর্তন করুনটেবিল_নাম কলাম পরিবর্তন করুন column_name... – কলামের ধরন আপডেট করতে বা সেটিংস পরিবর্তন করতে ব্যবহৃত হয় (উদাহরণস্বরূপ, NULL বা NOT NULL বৈশিষ্ট্য সেট করতে);
  • টেবিল পরিবর্তন করুনটেবিল_নাম সীমাবদ্ধতা যোগ করুনবাধা_নাম প্রাথমিক কী(field1, field2,...) - একটি বিদ্যমান টেবিলে একটি প্রাথমিক কী যোগ করা;
  • টেবিল পরিবর্তন করুনটেবিল_নাম ড্রপ সীমাবদ্ধতা constraint_name - টেবিল থেকে একটি সীমাবদ্ধতা সরিয়ে দেয়।

অস্থায়ী টেবিল সম্পর্কে একটু

MSDN থেকে নির্যাস। MS SQL সার্ভারে দুটি ধরনের অস্থায়ী টেবিল রয়েছে: স্থানীয় (#) এবং বিশ্বব্যাপী (##)। স্থানীয় অস্থায়ী টেবিলগুলি শুধুমাত্র তাদের নির্মাতাদের কাছে দৃশ্যমান হয় যতক্ষণ না SQL সার্ভার ইনস্ট্যান্সের সাথে সংযোগ সেশন শেষ হয় যখন তারা প্রথম তৈরি হয়। স্থানীয় অস্থায়ী টেবিলগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলা হয় যখন ব্যবহারকারী SQL সার্ভারের উদাহরণ থেকে সংযোগ বিচ্ছিন্ন করে দেয়। গ্লোবাল অস্থায়ী টেবিলগুলি সমস্ত ব্যবহারকারীদের কাছে দৃশ্যমান হয় যে কোনও সংযোগ সেশনের সময় এই টেবিলগুলি তৈরি হওয়ার পরে এবং মুছে ফেলা হয় যখন এই টেবিলগুলি উল্লেখকারী সমস্ত ব্যবহারকারী SQL সার্ভারের উদাহরণ থেকে সংযোগ বিচ্ছিন্ন করে।

tempdb সিস্টেম ডাটাবেসে অস্থায়ী টেবিল তৈরি করা হয়, যেমন এগুলি তৈরি করে আমরা মূল ডাটাবেস আটকে রাখি না; অন্যথায়, অস্থায়ী টেবিলগুলি নিয়মিত টেবিলের সাথে সম্পূর্ণ অভিন্ন; ড্রপ টেবিল কমান্ড ব্যবহার করে সেগুলি মুছে ফেলা যেতে পারে। স্থানীয় (#) অস্থায়ী টেবিল বেশি ব্যবহৃত হয়।

একটি অস্থায়ী টেবিল তৈরি করতে, আপনি CREATE TABLE কমান্ড ব্যবহার করতে পারেন:

টেবিল তৈরি করুন #Temp(ID int, নাম nvarchar(30))
যেহেতু MS SQL-এ একটি অস্থায়ী টেবিল একটি নিয়মিত টেবিলের মতো, তাই এটি DROP TABLE কমান্ড ব্যবহার করেও মুছে ফেলা যেতে পারে:

ড্রপ টেবিল #Temp

এছাড়াও আপনি একটি অস্থায়ী টেবিল তৈরি করতে পারেন (একটি নিয়মিত টেবিলের মতো) এবং অবিলম্বে SELECT ... INTO সিনট্যাক্স ব্যবহার করে ক্যোয়ারী দ্বারা প্রত্যাবর্তিত ডেটা দিয়ে এটি পূরণ করতে পারেন:

আইডি নির্বাচন করুন, কর্মচারীদের থেকে #অস্থায়ী নাম লিখুন

একটি নোটে
বিভিন্ন DBMS-এ অস্থায়ী টেবিলের বাস্তবায়ন ভিন্ন হতে পারে। উদাহরণ স্বরূপ, ORACLE এবং Firebird DBMS-এ, অস্থায়ী টেবিলের গঠন অবশ্যই ক্রিয়েট গ্লোবাল টেম্পোরারি টেবিল কমান্ডের মাধ্যমে আগে থেকেই নির্ধারণ করতে হবে, এতে ডেটা সংরক্ষণের সুনির্দিষ্ট দিক নির্দেশ করে, তারপর ব্যবহারকারী এটিকে প্রধান টেবিলের মধ্যে দেখে এবং এটির সাথে কাজ করে। নিয়মিত টেবিলের মতো।

ডাটাবেস স্বাভাবিকীকরণ - সাবটেবলে বিভক্ত (ডিরেক্টরি) এবং সংযোগ সনাক্তকরণ

আমাদের বর্তমান কর্মচারী টেবিলের অসুবিধা রয়েছে যে অবস্থান এবং বিভাগের ক্ষেত্রে ব্যবহারকারী যেকোন পাঠ্য লিখতে পারেন, যা প্রাথমিকভাবে ত্রুটিপূর্ণ, যেহেতু একজন কর্মচারীর জন্য তিনি কেবল বিভাগ হিসাবে "IT" নির্দেশ করতে পারেন এবং দ্বিতীয় কর্মচারীর জন্য, উদাহরণ, "IT বিভাগ" লিখুন, তৃতীয়টিতে "IT" আছে। ফলস্বরূপ, ব্যবহারকারীর অর্থ কী তা অস্পষ্ট হবে, যেমন এই কর্মচারীরা কি একই বিভাগের কর্মচারী, নাকি ব্যবহারকারী নিজেকে বর্ণনা করেছেন এবং এই 3টি আলাদা বিভাগ? অধিকন্তু, এই ক্ষেত্রে, আমরা কিছু প্রতিবেদনের জন্য সঠিকভাবে ডেটা গোষ্ঠীবদ্ধ করতে সক্ষম হব না, যেখানে প্রতিটি বিভাগের দ্বারা কর্মচারীর সংখ্যা দেখানোর প্রয়োজন হতে পারে।

দ্বিতীয় অসুবিধা হল এই তথ্যের সঞ্চয়ের পরিমাণ এবং এর নকল, যেমন প্রতিটি কর্মীর জন্য, বিভাগের পুরো নাম নির্দেশিত হয়, যার জন্য বিভাগের নাম থেকে প্রতিটি অক্ষর সংরক্ষণ করার জন্য ডাটাবেসে স্থান প্রয়োজন।

তৃতীয় অপূর্ণতা হল এই ক্ষেত্রগুলি আপডেট করতে অসুবিধা যদি একটি অবস্থানের নাম পরিবর্তন হয়, উদাহরণস্বরূপ, যদি আপনি "প্রোগ্রামার" অবস্থানের নাম পরিবর্তন করে "জুনিয়র প্রোগ্রামার" করতে চান। এই ক্ষেত্রে, আমাদের টেবিলের প্রতিটি সারিতে পরিবর্তন করতে হবে যার অবস্থান "প্রোগ্রামার" এর সমান।

এই ত্রুটিগুলি এড়াতে, তথাকথিত ডাটাবেস স্বাভাবিককরণ ব্যবহার করা হয় - এটিকে সাবটেবল এবং রেফারেন্স টেবিলে বিভক্ত করা। তত্ত্বের জঙ্গলে গিয়ে স্বাভাবিক রূপগুলি কী তা অধ্যয়ন করার দরকার নেই; এটি স্বাভাবিককরণের সারাংশ বোঝার জন্য যথেষ্ট।

আসুন 2টি ডিরেক্টরি টেবিল "পজিশন" এবং "ডিপার্টমেন্টস" তৈরি করি, আসুন প্রথম পজিশন এবং দ্বিতীয়টিকে যথাক্রমে বিভাগ বলি:

সারণী পজিশন তৈরি করুন(আইডি আইডেন্টিটি(1,1) শূন্য সীমাবদ্ধতা নয় PK_পজিশন প্রাথমিক কী, নাম nvarchar(30) NOT NULL) টেবিল বিভাগ তৈরি করুন (ID int IDENTITY(1,1) শূন্য সীমাবদ্ধতা নেই, PK_varme Name ) নাল না)
দ্রষ্টব্য যে এখানে আমরা নতুন IDENTITY বিকল্পটি ব্যবহার করেছি, যা বলে যে আইডি কলামের ডেটা স্বয়ংক্রিয়ভাবে সংখ্যাযুক্ত হবে, 1 থেকে শুরু করে, 1 এর বৃদ্ধিতে, অর্থাৎ নতুন রেকর্ড যোগ করার সময়, তাদের ক্রমানুসারে মান 1, 2, 3, ইত্যাদি বরাদ্দ করা হবে। এই ধরনের ক্ষেত্র সাধারণত স্বয়ংক্রিয় বৃদ্ধি বলা হয়. একটি টেবিলে শুধুমাত্র একটি ক্ষেত্র থাকতে পারে আইডেন্টিটি বৈশিষ্ট্যের সাথে, এবং সাধারণত, কিন্তু অগত্যা নয়, সেই ক্ষেত্রটি সেই টেবিলের জন্য প্রাথমিক কী।

একটি নোটে
বিভিন্ন ডিবিএমএস-এ, কাউন্টার সহ ক্ষেত্রগুলির বাস্তবায়ন ভিন্নভাবে করা যেতে পারে। মাইএসকিউএল-এ, উদাহরণস্বরূপ, এই ধরনের একটি ক্ষেত্র AUTO_INCREMENT বিকল্প ব্যবহার করে সংজ্ঞায়িত করা হয়। ORACLE এবং Firebird-এ, এই কার্যকারিতা পূর্বে SEQUENCE ব্যবহার করে অনুকরণ করা যেত। কিন্তু আমি যতদূর জানি, ORACLE এখন GENERATED AS IDENTITY বিকল্পটি যুক্ত করেছে।

চলুন কর্মচারী টেবিলের অবস্থান এবং বিভাগের ক্ষেত্রে রেকর্ড করা বর্তমান ডেটার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে এই টেবিলগুলি পূরণ করি:

আমরা পদ সারণীর নাম ক্ষেত্রটি কর্মচারী টেবিলের অবস্থান ক্ষেত্র থেকে অনন্য মান দিয়ে পূরণ করি অবস্থান ঢোকান
ডিপার্টমেন্ট টেবিলের জন্য একই কাজ করা যাক:

বিভাগ ঢোকান (নাম) কর্মচারীদের থেকে আলাদা বিভাগ নির্বাচন করুন যেখানে বিভাগ শূন্য নয়
যদি আমরা এখন অবস্থান এবং বিভাগ টেবিল খুলি, আমরা আইডি ক্ষেত্রের জন্য একটি সংখ্যাযুক্ত মান দেখতে পাব:

পদ থেকে * নির্বাচন করুন

বিভাগগুলি থেকে * নির্বাচন করুন

এই টেবিলগুলি এখন অবস্থান এবং বিভাগ নির্দিষ্ট করার জন্য রেফারেন্স বইয়ের ভূমিকা পালন করবে। আমরা এখন চাকরি এবং বিভাগের আইডি উল্লেখ করব। প্রথমত, শনাক্তকারী ডেটা সংরক্ষণের জন্য কর্মচারী টেবিলে নতুন ক্ষেত্র তৈরি করা যাক:

পজিশন আইডির জন্য একটি ক্ষেত্র যোগ করুন টেবিলের কর্মচারীদের অবস্থান আইডি যোগ করুন -- ডিপার্টমেন্ট আইডির জন্য একটি ক্ষেত্র যোগ করুন টেবিলের কর্মচারীদের ডিপার্টমেন্ট আইডি যোগ করুন
রেফারেন্স ক্ষেত্রগুলির ধরন অবশ্যই ডিরেক্টরিগুলির মতোই হতে হবে, এই ক্ষেত্রে এটি int।

কমা দ্বারা বিভক্ত ক্ষেত্রগুলিকে তালিকাভুক্ত করে আপনি একটি কমান্ডের সাহায্যে একবারে টেবিলে একাধিক ক্ষেত্র যোগ করতে পারেন:

ALTER TABLE কর্মচারী যোগ করুন PositionID int, DepartmentID int
এখন এই ক্ষেত্রগুলির জন্য লিঙ্কগুলি (রেফারেন্স সীমাবদ্ধতা - FOREIGN KEY) লিখি যাতে ব্যবহারকারীর এই ক্ষেত্রগুলির মানগুলিতে লেখার সুযোগ না থাকে যা ডিরেক্টরিগুলিতে পাওয়া আইডি মানগুলির মধ্যে নয়৷

ছক পরিবর্তন করুন কর্মচারীরা যোগ করুন কন্সট্রাইনট
এবং আমরা দ্বিতীয় ক্ষেত্রের জন্য একই কাজ করব:

ALTER TABLE কর্মচারীরা যোগ করুন কন্সট্রাইন্ট FK_Employees_DepartmentID ফরেন কী(DepartmentID) রেফারেন্স বিভাগ(ID)
এখন ব্যবহারকারী এই ক্ষেত্রগুলিতে সংশ্লিষ্ট ডিরেক্টরি থেকে শুধুমাত্র আইডি মান প্রবেশ করতে সক্ষম হবে। তদনুসারে, একটি নতুন বিভাগ বা অবস্থান ব্যবহার করার জন্য, তাকে প্রথমে সংশ্লিষ্ট ডিরেক্টরিতে একটি নতুন এন্ট্রি যোগ করতে হবে। কারণ অবস্থান এবং বিভাগগুলি এখন একটি একক অনুলিপিতে ডিরেক্টরিগুলিতে সংরক্ষণ করা হয়, তাই নাম পরিবর্তন করার জন্য, এটি শুধুমাত্র ডিরেক্টরিতে পরিবর্তন করা যথেষ্ট।

একটি রেফারেন্স সীমাবদ্ধতার নাম সাধারণত একটি যৌগিক নাম, যেখানে উপসর্গ "FK_" সমন্বিত হয়, তার পরে টেবিলের নাম, এবং একটি আন্ডারস্কোর অনুসরণ করে, রেফারেন্স টেবিল শনাক্তকারীকে নির্দেশ করে এমন ক্ষেত্রের নাম অনুসরণ করে।

একটি শনাক্তকারী (আইডি) সাধারণত একটি অভ্যন্তরীণ মান যা শুধুমাত্র সম্পর্কের জন্য ব্যবহার করা হয় এবং সেখানে কোন মান সংরক্ষণ করা হয় তা বেশিরভাগ ক্ষেত্রে সম্পূর্ণ উদাসীন, তাই কাজ করার সময় উদ্ভূত সংখ্যার ক্রম থেকে ছিদ্র থেকে মুক্তি পাওয়ার চেষ্টা করার দরকার নেই। টেবিলের সাথে, উদাহরণস্বরূপ, ডিরেক্টরি থেকে রেকর্ড মুছে ফেলার পরে।

ছক পরিবর্তন করুন সীমাবদ্ধতা যোগ করুন
এই ক্ষেত্রে, "রেফারেন্স_টেবিল" সারণিতে, প্রাথমিক কীটি বিভিন্ন ক্ষেত্রের সংমিশ্রণ দ্বারা প্রতিনিধিত্ব করা হয় (ক্ষেত্র1, ক্ষেত্র2,...)।

আসলে, এখন ডিরেক্টরি থেকে আইডি মান সহ PositionID এবং DepartmentID ক্ষেত্র আপডেট করা যাক। আসুন এই উদ্দেশ্যে ডিএমএল আপডেট কমান্ডটি ব্যবহার করি:

আপডেট করুন এবং অবস্থান আইডি সেট করুন=(পজিশন থেকে আইডি নির্বাচন করুন যেখানে নাম=ই. অবস্থান), ডিপার্টমেন্টআইডি=(বিভাগ থেকে আইডি নির্বাচন করুন যেখানে নাম=ই. বিভাগ) কর্মচারীদের থেকে
আসুন দেখি অনুরোধটি চালানোর মাধ্যমে কি হয়:

কর্মচারীদের থেকে * নির্বাচন করুন

এটিই, পজিশনআইডি এবং ডিপার্টমেন্টআইডি ক্ষেত্রগুলি অবস্থান এবং বিভাগের সাথে সম্পর্কিত শনাক্তকারী দিয়ে পূর্ণ; কর্মচারী টেবিলে অবস্থান এবং বিভাগের ক্ষেত্রগুলির আর প্রয়োজন নেই, আপনি এই ক্ষেত্রগুলি মুছতে পারেন:

সারণী কর্মচারীদের ড্রপ কলাম অবস্থান, বিভাগ পরিবর্তন করুন
এখন আমাদের টেবিল এই মত দেখায়:

কর্মচারীদের থেকে * নির্বাচন করুন

আইডি নাম জন্মদিন ইমেইল অবস্থান আইডি ডিপার্টমেন্ট আইডি
1000 ইভানভ আই.আই. খালি খালি 2 1
1001 পেট্রোভ পি.পি. খালি খালি 3 3
1002 সিডোরভ এস.এস. খালি খালি 1 2
1003 আন্দ্রেভ এ.এ. খালি খালি 4 3

সেগুলো. আমরা অবশেষে অপ্রয়োজনীয় তথ্য সঞ্চয় পরিত্রাণ পেয়েছিলাম. এখন, চাকরি এবং বিভাগের সংখ্যার উপর ভিত্তি করে, আমরা রেফারেন্স টেবিলের মানগুলি ব্যবহার করে দ্ব্যর্থহীনভাবে তাদের নাম নির্ধারণ করতে পারি:

e.ID,e.Name,p.Name PositionName,d.Name Department Name from From Employees এবং Left Join Dipartment d on d.ID=e.DepartmentID বাম যোগদানের পজিশন p অন p.ID=e.PositionID

অবজেক্ট ইন্সপেক্টরে আমরা একটি প্রদত্ত টেবিলের জন্য তৈরি সমস্ত অবজেক্ট দেখতে পারি। এখান থেকে আপনি এই বস্তুগুলির সাথে বিভিন্ন ম্যানিপুলেশন করতে পারেন - উদাহরণস্বরূপ, বস্তুর নাম পরিবর্তন করুন বা মুছুন।

এটাও লক্ষণীয় যে টেবিলটি নিজেই উল্লেখ করতে পারে, যেমন আপনি একটি পুনরাবৃত্ত লিঙ্ক তৈরি করতে পারেন। উদাহরণ স্বরূপ, কর্মীদের সাথে আমাদের টেবিলে আরেকটি ফিল্ড ম্যানেজারআইডি যোগ করা যাক, যা সেই কর্মচারীকে নির্দেশ করবে যার কাছে এই কর্মচারী রিপোর্ট করবে। আসুন একটি ক্ষেত্র তৈরি করি:

সারণী কর্মচারীদের যোগ করুন ManagerID int
এই ক্ষেত্রটি একটি NULL মান অনুমোদন করে; ক্ষেত্রটি খালি থাকবে যদি, উদাহরণস্বরূপ, কর্মচারীর উপরে কোন উচ্চপদস্থ ব্যক্তি না থাকে।

এখন কর্মচারী টেবিলের জন্য একটি বিদেশী কী তৈরি করা যাক:

ALTER TABLE কর্মচারীরা যোগ করুন কন্সট্রাইন্ট FK_Employees_ManagerID ফরেন কী (ম্যানেজারআইডি) রেফারেন্স কর্মচারী (আইডি)
এখন একটি ডায়াগ্রাম তৈরি করা যাক এবং দেখুন আমাদের টেবিলের মধ্যে সম্পর্কগুলি এটিতে কীভাবে দেখায়:

ফলস্বরূপ, আমাদের নিম্নলিখিত চিত্রটি দেখতে হবে (কর্মচারী টেবিলটি অবস্থান এবং বিভাগ টেবিলের সাথে সংযুক্ত, এবং এটি নিজেই বোঝায়):

পরিশেষে, এটা বলা উচিত যে রেফারেন্স কীগুলিতে অতিরিক্ত বিকল্পগুলি ON DELETE CASCADE এবং ON UPDATE CASCADE অন্তর্ভুক্ত থাকতে পারে, যা নির্দেশ করে যে রেফারেন্স টেবিলে উল্লেখ করা রেকর্ড মুছে ফেলা বা আপডেট করার সময় কীভাবে আচরণ করতে হবে। যদি এই বিকল্পগুলি নির্দিষ্ট করা না থাকে, তাহলে আমরা অন্য টেবিল থেকে উল্লেখ করা রেকর্ডের জন্য ডিরেক্টরি টেবিলে আইডি পরিবর্তন করতে পারি না এবং এই রেকর্ডের উল্লেখ করা সমস্ত সারি মুছে না দেওয়া পর্যন্ত আমরা ডিরেক্টরি থেকে এই ধরনের রেকর্ড মুছতে সক্ষম হব না। অথবা, আসুন এই লাইনের রেফারেন্সগুলিকে একটি ভিন্ন মানতে আপডেট করি।

উদাহরণস্বরূপ, আসুন FK_Employees_DepartmentID-এর জন্য ON DELETE CASCADE বিকল্পটি নির্দিষ্ট করে টেবিলটি পুনরায় তৈরি করি:

ড্রপ টেবিল কর্মচারীরা টেবিল কর্মচারী তৈরি করুন(আইডি শূন্য নয়, নাম nvarchar(30), জন্মদিনের তারিখ, ইমেল nvarchar(30), PositionID int, DepartmentID int, ManagerID int, সীমাবদ্ধতা PK_Employees PRIMARY CONS_party (FLAN_party) (বিভাগ আইডি ) রেফারেন্স ডিপার্টমেন্টস (আইডি) অন ডিলিট ক্যাসকেড, সীমাবদ্ধতা FK_Employees_PositionID ফরেন কী (পজিশনআইডি) রেফারেন্স পজিশন (আইডি), সীমাবদ্ধতা FK_Employees_ManagerID ফরেনআইডিএনসিআইডি (কর্মচারী) কর্মচারী (কর্মচারি) আইডি, নাম, জন্মদিন, অবস্থান আইডি, ডিপার্টমেন্ট আইডি, ম্যানেজার পরিচয় ","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417",4,3,1000)
ডিপার্টমেন্ট টেবিল থেকে আইডি 3 সহ বিভাগটি মুছে ফেলা যাক:

ডিপার্টমেন্ট মুছে ফেলুন যেখানে ID=3
আসুন কর্মচারী টেবিলের ডেটা দেখি:

কর্মচারীদের থেকে * নির্বাচন করুন

আইডি নাম জন্মদিন ইমেইল অবস্থান আইডি ডিপার্টমেন্ট আইডি ম্যানেজার আইডি
1000 ইভানভ আই.আই. 1955-02-19 খালি 2 1 খালি
1002 সিডোরভ এস.এস. 1976-06-07 খালি 1 2 1000

আপনি দেখতে পাচ্ছেন, কর্মচারী টেবিল থেকে বিভাগ 3 এর ডেটাও মুছে ফেলা হয়েছে।

ON UPDATE CASCADE বিকল্পটি একই রকম আচরণ করে, কিন্তু ডিরেক্টরিতে আইডি মান আপডেট করার সময় এটি কার্যকর। উদাহরণস্বরূপ, যদি আমরা পজিশন ডিরেক্টরিতে একটি অবস্থানের আইডি পরিবর্তন করি, তাহলে এই ক্ষেত্রে এমপ্লয়িজ টেবিলের ডিপার্টমেন্টআইডি আমাদের ডিরেক্টরিতে সেট করা নতুন আইডি মানতে আপডেট করা হবে। কিন্তু এই ক্ষেত্রে এটি প্রদর্শন করা সম্ভব হবে না, কারণ ডিপার্টমেন্ট টেবিলের আইডি কলামে আইডেন্টিটি বিকল্প রয়েছে, যা আমাদেরকে নিম্নলিখিত ক্যোয়ারীটি চালানোর অনুমতি দেবে না (ডিপার্টমেন্ট আইডি 3 থেকে 30 পরিবর্তন করুন):

বিভাগ আপডেট করুন SET ID=30 WHERE ID=3
মূল বিষয় হল এই 2টি অপশনের সারমর্ম বোঝা ON DELETE CASCADE এবং ON UPDATE CASCADE. আমি এই বিকল্পগুলি খুব কমই ব্যবহার করি এবং সুপারিশ করি যে আপনি একটি রেফারেন্স সীমাবদ্ধতায় সেগুলি নির্দিষ্ট করার আগে সাবধানে চিন্তা করুন, কারণ যদি আপনি ঘটনাক্রমে একটি ডিরেক্টরি টেবিল থেকে একটি এন্ট্রি মুছে ফেলেন, তাহলে এটি বড় সমস্যা হতে পারে এবং একটি চেইন প্রতিক্রিয়া তৈরি করতে পারে।

আসুন বিভাগ 3 পুনরুদ্ধার করি:

আমরা INSERT বিভাগ (ID,Name) VALUES(3,N"IT") তে IDENTITY_INSERT বিভাগগুলিকে SET IDENTITY_INSERT মান যোগ/পরিবর্তন করার অনুমতি দিই -- আমরা IDENTITY মান যোগ/পরিবর্তন নিষিদ্ধ করি SET IDENTITY_INSERT বিভাগ বন্ধ
আসুন TRUNCATE TABLE কমান্ড ব্যবহার করে কর্মচারী টেবিলটি সম্পূর্ণরূপে পরিষ্কার করি:

TRUNCATE টেবিল কর্মচারী
এবং আবার আমরা পূর্ববর্তী INSERT কমান্ড ব্যবহার করে ডেটা পুনরায় লোড করব:

কর্মচারী ঢোকান (আইডি,নাম,জন্মদিন,পজিশনআইডি,ডিপার্টমেন্টআইডি,ম্যানেজারআইডি)মূল্য (1000,N"ইভানভ I.I.","19550219",2,1,NULL), (1001,N"পেট্রোভ পিপি" ,"19831203", ,3,1003), (1002,N"Sidorov S.S.","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417" ,4,3,1000)

আসুন সংক্ষিপ্ত করা যাক

এই মুহুর্তে, আমাদের জ্ঞানে আরও কয়েকটি ডিডিএল কমান্ড যুক্ত করা হয়েছে:
  • একটি ক্ষেত্রে আইডেন্টিটি বৈশিষ্ট্য যুক্ত করা – আপনাকে এই ক্ষেত্রটিকে টেবিলের জন্য একটি স্বয়ংক্রিয়ভাবে জনবহুল ক্ষেত্র (কাউন্টার ক্ষেত্র) করতে দেয়;
  • টেবিল পরিবর্তন করুনটেবিল_নাম যোগ করুন list_of_fields_with_characteristics - আপনাকে টেবিলে নতুন ক্ষেত্র যোগ করতে দেয়;
  • টেবিল পরিবর্তন করুনটেবিল_নাম ড্রপ কলাম list_fields - আপনাকে টেবিল থেকে ক্ষেত্র অপসারণ করতে দেয়;
  • টেবিল পরিবর্তন করুনটেবিল_নাম সীমাবদ্ধতা যোগ করুনবাধা_নাম বিদেশী চাবি(ক্ষেত্র) তথ্যসূত্রটেবিল_রেফারেন্স (ক্ষেত্র) - আপনাকে টেবিল এবং রেফারেন্স টেবিলের মধ্যে সম্পর্ক নির্ধারণ করতে দেয়।

অন্যান্য সীমাবদ্ধতা - অনন্য, ডিফল্ট, চেক

একটি অনন্য সীমাবদ্ধতা ব্যবহার করে, আপনি বলতে পারেন যে প্রদত্ত ক্ষেত্র বা ক্ষেত্রগুলির সেটের প্রতিটি সারির মান অবশ্যই অনন্য হতে হবে। এমপ্লয়িজ টেবিলের ক্ষেত্রে, আমরা ইমেল ক্ষেত্রে এই ধরনের সীমাবদ্ধতা আরোপ করতে পারি। মান দিয়ে ইমেল পূর্বে পূরণ করুন যদি সেগুলি ইতিমধ্যে সংজ্ঞায়িত না থাকে:

আপডেট কর্মচারী সেট ইমেল=" [ইমেল সুরক্ষিত]" কোথায় আইডি = 1000 আপডেট কর্মচারী সেট ইমেল=" [ইমেল সুরক্ষিত]" কোথায় আইডি = 1001 আপডেট কর্মচারী সেট ইমেল=" [ইমেল সুরক্ষিত]" WHERE ID=1002 আপডেট কর্মচারীরা সেট ইমেল=" [ইমেল সুরক্ষিত]"WHERE ID=1003
এখন আপনি এই ক্ষেত্রে একটি স্বতন্ত্রতা সীমাবদ্ধতা আরোপ করতে পারেন:

ALTER TABLE কর্মচারীরা যোগ করুন কন্সট্রাইন্ট UQ_Employees_Email UNIQUE(ইমেল)
এখন ব্যবহারকারী একাধিক কর্মচারীর জন্য একই ই-মেইলে প্রবেশ করতে পারবেন না।

একটি অনন্য সীমাবদ্ধতা সাধারণত নিম্নরূপ নামকরণ করা হয় - প্রথমে উপসর্গ "UQ_" আসে, তারপর টেবিলের নাম এবং আন্ডারস্কোরের পরে এই সীমাবদ্ধতা প্রয়োগ করা হয় এমন ক্ষেত্রের নাম আসে।

তদনুসারে, যদি ক্ষেত্রগুলির সংমিশ্রণটি অবশ্যই সারণির সারির প্রসঙ্গে অনন্য হতে হবে, তাহলে আমরা সেগুলিকে কমা দ্বারা আলাদা করে তালিকাভুক্ত করি:

সারণী পরিবর্তন করুন টেবিল_নাম যোগ করুন সীমাবদ্ধতা বাধা
একটি ক্ষেত্রে একটি ডিফল্ট সীমাবদ্ধতা যোগ করে, আমরা একটি ডিফল্ট মান নির্দিষ্ট করতে পারি যা প্রতিস্থাপিত হবে যদি, একটি নতুন রেকর্ড সন্নিবেশ করার সময়, এই ক্ষেত্রটি INSERT কমান্ডের ক্ষেত্রগুলির তালিকায় তালিকাভুক্ত না হয়৷ টেবিল তৈরি করার সময় এই সীমাবদ্ধতা সরাসরি সেট করা যেতে পারে।

আসুন কর্মচারী টেবিলে একটি নতুন হায়ার তারিখ ক্ষেত্র যোগ করি এবং এটিকে হায়ারডেট বলি এবং বলি যে এই ক্ষেত্রের জন্য ডিফল্ট মান বর্তমান তারিখ হবে:

অল্টার টেবিল কর্মচারীরা নিয়োগের তারিখ যোগ করুন ডিফল্ট সিসডেটটাইম () শূন্য নয়
অথবা যদি HireDate কলাম ইতিমধ্যেই বিদ্যমান থাকে, তাহলে নিম্নলিখিত সিনট্যাক্স ব্যবহার করা যেতে পারে:

সারণী কর্মচারীরা ভাড়ার তারিখের জন্য ডিফল্ট সিসডেটটাইম() যোগ করুন
এখানে আমি সীমাবদ্ধতার নাম উল্লেখ করিনি, কারণ... ডিফল্টের ক্ষেত্রে, আমার মতামত আছে যে এটি এতটা সমালোচনামূলক নয়। তবে আপনি যদি এটি একটি ভাল উপায়ে করেন তবে আমি মনে করি আপনার অলস হওয়ার দরকার নেই এবং আপনার একটি সাধারণ নাম সেট করা উচিত। এটি নিম্নরূপ করা হয়:

ALTER TABLE কর্মীরা হায়ার তারিখের জন্য DF_Employees_HireDate DEFAULT SYSDATETIME() যোগ করুন
যেহেতু এই কলামটি আগে বিদ্যমান ছিল না, যখন এটি প্রতিটি রেকর্ডে যোগ করা হয়, বর্তমান তারিখের মানটি HireDate ক্ষেত্রে ঢোকানো হবে।

একটি নতুন এন্ট্রি যোগ করার সময়, বর্তমান তারিখটি স্বয়ংক্রিয়ভাবে ঢোকানো হবে, অবশ্যই, যদি না আমরা এটি স্পষ্টভাবে সেট করি, যেমন আমরা কলামের তালিকায় এটি নির্দেশ করব না। যোগ করা মানগুলির তালিকায় হায়ারডেট ক্ষেত্রটি নির্দিষ্ট না করে একটি উদাহরণ সহ এটি দেখাই:

কর্মচারী ঢোকান(ID,Name,Email)VALUES(1004,N"Sergeev S.S."," [ইমেল সুরক্ষিত]")
চলুন দেখা যাক কি হয়েছে:

কর্মচারীদের থেকে * নির্বাচন করুন

আইডি নাম জন্মদিন ইমেইল অবস্থান আইডি ডিপার্টমেন্ট আইডি ম্যানেজার আইডি তারিখ ভাড়া
1000 ইভানভ আই.আই. 1955-02-19 [ইমেল সুরক্ষিত] 2 1 খালি 2015-04-08
1001 পেট্রোভ পি.পি. 1983-12-03 [ইমেল সুরক্ষিত] 3 4 1003 2015-04-08
1002 সিডোরভ এস.এস. 1976-06-07 [ইমেল সুরক্ষিত] 1 2 1000 2015-04-08
1003 আন্দ্রেভ এ.এ. 1982-04-17 [ইমেল সুরক্ষিত] 4 3 1000 2015-04-08
1004 সার্জিভ এস.এস. খালি [ইমেল সুরক্ষিত] খালি খালি খালি 2015-04-08

চেক চেক সীমাবদ্ধতা ব্যবহার করা হয় যখন ক্ষেত্রের মধ্যে সন্নিবেশিত মানগুলি পরীক্ষা করার প্রয়োজন হয়। উদাহরণস্বরূপ, আসুন কর্মী সংখ্যা ক্ষেত্রে এই সীমাবদ্ধতা আরোপ করা যাক, যা আমাদের জন্য একজন কর্মচারী সনাক্তকারী (আইডি)। এই সীমাবদ্ধতা ব্যবহার করে, আমরা বলি যে কর্মীদের সংখ্যা 1000 থেকে 1999 পর্যন্ত একটি মান থাকতে হবে:

ALTER TABLE কর্মীরা যোগ করুন কন্সট্রাইন্ট CK_Employees_ID চেক (ID BETWEEN 1000 এবং 1999)
সীমাবদ্ধতাটি সাধারণত একইভাবে নামকরণ করা হয়, প্রথমে "CK_" উপসর্গ দিয়ে, তারপর টেবিলের নাম এবং যে ক্ষেত্রে এই সীমাবদ্ধতা আরোপ করা হয়েছে তার নাম।

সীমাবদ্ধতা কাজ করে কিনা তা পরীক্ষা করার জন্য একটি অবৈধ রেকর্ড সন্নিবেশ করার চেষ্টা করুন (আমাদের সংশ্লিষ্ট ত্রুটি পাওয়া উচিত):

কর্মচারী ঢোকান (আইডি, ইমেল) VALUES(2000," [ইমেল সুরক্ষিত]")
এখন সন্নিবেশিত মানটিকে 1500 এ পরিবর্তন করা যাক এবং নিশ্চিত করুন যে রেকর্ডটি সন্নিবেশ করা হয়েছে:

কর্মচারী ঢোকান(আইডি,ইমেল)মূল্য(1500," [ইমেল সুরক্ষিত]")
আপনি একটি নাম উল্লেখ না করেই অনন্য এবং চেক সীমাবদ্ধতা তৈরি করতে পারেন:

ALTER TABLE কর্মচারীরা যোগ করুন অনন্য(ইমেল) ALTER TABLE কর্মীরা যোগ করুন চেক (আইডি 1000 এবং 1999 এর মধ্যে)
কিন্তু এটি একটি খুব ভাল অভ্যাস নয় এবং সীমাবদ্ধতার নামটি স্পষ্টভাবে উল্লেখ করা ভাল, কারণ পরে এটি বের করতে, যা আরও কঠিন হবে, আপনাকে বস্তুটি খুলতে হবে এবং এটির জন্য দায়ী কী তা দেখতে হবে।

একটি ভাল নাম দিয়ে, সীমাবদ্ধতা সম্পর্কে অনেক তথ্য সরাসরি এর নাম থেকে শেখা যায়।

এবং, সেই অনুযায়ী, একটি টেবিল তৈরি করার সময় এই সমস্ত সীমাবদ্ধতা অবিলম্বে তৈরি করা যেতে পারে, যদি এটি এখনও বিদ্যমান না থাকে। আসুন টেবিলটি মুছে ফেলি:

ড্রপ টেবিল কর্মচারী
এবং আমরা একটি CREATE TABLE কমান্ড দিয়ে সমস্ত তৈরি সীমাবদ্ধতার সাথে এটি পুনরায় তৈরি করব:

সারণী কর্মচারী তৈরি করুন (আইডি শূন্য নয়, নাম nvarchar(30), জন্মদিনের তারিখ, ইমেল nvarchar(30), অবস্থান আইডি, ডিপার্টমেন্টআইডি int, হায়ার তারিখের তারিখটি শূন্য নয় ডিফল্ট সিসডেটাইম(), -- ডিফল্টের জন্য আমি একটি ব্যতিক্রম করব P_CONSTRAINT প্রাথমিক কী (ID), সীমাবদ্ধতা FK_Employees_DepartmentID বিদেশী কী(DepartmentID) রেফারেন্স বিভাগ(ID), সীমাবদ্ধতা FK_Employees_PositionID FOREIGN KEY(পজিশনআইডি) রেফারেন্স কোম্পানী_পজিশন (ইউমেল) NSTRAINT CK_Employees_ID চেক (ID BETWEEN 1000 এবং 1999))

কর্মচারী ঢোকান (আইডি, নাম, জন্মদিন, ইমেল, অবস্থান আইডি, ডিপার্টমেন্টআইডি) VALUES (1000,N"ইভানভ I.I.","19550219"," [ইমেল সুরক্ষিত]",2,1), (1001,N"পেট্রোভ P.P.","19831203"," [ইমেল সুরক্ষিত]",3,3), (1002,N"Sidorov S.S.","19760607"," [ইমেল সুরক্ষিত]",1,2), (1003,N"Andreev A.A.","19820417"," [ইমেল সুরক্ষিত]",4,3)

প্রাইমারি কী এবং ইউনিক সীমাবদ্ধতা তৈরি করার সময় তৈরি করা সূচকগুলি সম্পর্কে একটু

আপনি উপরের স্ক্রিনশটে দেখতে পাচ্ছেন, প্রাথমিক কী এবং অনন্য সীমাবদ্ধতা তৈরি করার সময়, একই নামের সূচীগুলি (PK_Employees এবং UQ_Employees_Email) স্বয়ংক্রিয়ভাবে তৈরি হয়েছিল। ডিফল্টরূপে, প্রাথমিক কী-এর জন্য সূচীটি CLUSTERED হিসাবে তৈরি করা হয় এবং অন্যান্য সমস্ত সূচীগুলির জন্য NONCLUSTERED হিসাবে তৈরি করা হয়। এটা বলার মতো যে একটি ক্লাস্টার সূচকের ধারণাটি সমস্ত DBMS-এ উপলব্ধ নয়। একটি টেবিলে শুধুমাত্র একটি CLUSTERED সূচক থাকতে পারে। CLUSTERED - এর মানে হল যে টেবিলের রেকর্ডগুলি এই সূচক দ্বারা সাজানো হবে, আমরা এটাও বলতে পারি যে এই সূচকটি টেবিলের সমস্ত ডেটাতে সরাসরি অ্যাক্সেস রয়েছে৷ এই টেবিলের প্রধান সূচক, তাই কথা বলতে. এটিকে আরও মোটামুটিভাবে বলতে গেলে, এটি একটি টেবিলের সাথে সংযুক্ত একটি সূচক। একটি ক্লাস্টারড ইনডেক্স একটি অত্যন্ত শক্তিশালী টুল যা কোয়েরি অপ্টিমাইজেশানে সাহায্য করতে পারে, কিন্তু আসুন এখনকার জন্য এটি মনে রাখা যাক। যদি আমরা ক্লাস্টারড ইনডেক্সকে প্রাইমারি কী-তে ব্যবহার না করে অন্য ইনডেক্সে ব্যবহার করতে বলতে চাই, তাহলে প্রাইমারি কী তৈরি করার সময় আমাদের অবশ্যই NONCLUSTERED বিকল্পটি নির্দিষ্ট করতে হবে:

টেবিল পরিবর্তন করুন
উদাহরণস্বরূপ, আসুন সীমাবদ্ধতা সূচক PK_Employees নন-ক্লাস্টার করা যাক, এবং সীমাবদ্ধতা সূচক UQ_Employees_Email ক্লাস্টার করা যাক। প্রথমত, আসুন এই বিধিনিষেধগুলি সরিয়ে ফেলি:

ALTER TABLE কর্মচারীরা ড্রপ কন্সট্রাইন্ট PK_Employees ALTER TABLE কর্মচারীরা ড্রপ কন্সট্রাইন্ট UQ_Employees_Email
এখন আসুন সেগুলিকে CLUSTERED এবং NONCLUSTERED অপশন দিয়ে তৈরি করি:

ALTER TABLE কর্মীরা যোগ করুন সীমাবদ্ধতা
এখন, কর্মচারী টেবিল থেকে নির্বাচন করার মাধ্যমে, আমরা দেখব যে রেকর্ডগুলি UQ_Employees_Email ক্লাস্টার সূচক দ্বারা সাজানো হয়েছে:

কর্মচারীদের থেকে * নির্বাচন করুন

আইডি নাম জন্মদিন ইমেইল অবস্থান আইডি ডিপার্টমেন্ট আইডি তারিখ ভাড়া
1003 আন্দ্রেভ এ.এ. 1982-04-17 [ইমেল সুরক্ষিত] 4 3 2015-04-08
1000 ইভানভ আই.আই. 1955-02-19 [ইমেল সুরক্ষিত] 2 1 2015-04-08
1001 পেট্রোভ পি.পি. 1983-12-03 [ইমেল সুরক্ষিত] 3 3 2015-04-08
1002 সিডোরভ এস.এস. 1976-06-07 [ইমেল সুরক্ষিত] 1 2 2015-04-08

পূর্বে, যখন ক্লাস্টার করা সূচী ছিল PK_Employees সূচক, তখন রেকর্ডগুলি আইডি ফিল্ড দ্বারা ডিফল্টভাবে সাজানো হত।

কিন্তু এই ক্ষেত্রে, এটি শুধুমাত্র একটি উদাহরণ যা একটি ক্লাস্টারযুক্ত সূচকের সারাংশ দেখায়, কারণ সম্ভবত, আইডি ক্ষেত্র ব্যবহার করে কর্মচারীদের টেবিলে প্রশ্ন করা হবে এবং কিছু ক্ষেত্রে, সম্ভবত, এটি নিজেই একটি ডিরেক্টরি হিসাবে কাজ করবে।

ডিরেক্টরির জন্য, সাধারণত ক্লাস্টারড ইনডেক্স প্রাথমিক কী-তে তৈরি করার পরামর্শ দেওয়া হয়, কারণ অনুরোধে আমরা প্রায়শই প্রাপ্ত করার জন্য ডিরেক্টরি শনাক্তকারীকে উল্লেখ করি, উদাহরণস্বরূপ, নাম (অবস্থান, বিভাগ)। আমাদের এখানে মনে রাখা যাক আমি উপরে যা লিখেছি, একটি ক্লাস্টারযুক্ত সূচকের টেবিলের সারিতে সরাসরি অ্যাক্সেস রয়েছে এবং এটি অনুসরণ করে যে আমরা অতিরিক্ত ওভারহেড ছাড়াই যেকোনো কলামের মান পেতে পারি।

যে ক্ষেত্রগুলি প্রায়শই নমুনা করা হয় সেখানে একটি ক্লাস্টার সূচক প্রয়োগ করা সুবিধাজনক।

কখনও কখনও সারোগেট ক্ষেত্রের উপর ভিত্তি করে একটি কী দিয়ে টেবিল তৈরি করা হয়; এই ক্ষেত্রে, এটি একটি আরও উপযুক্ত সূচকের জন্য CLUSTERED সূচক বিকল্পটি সংরক্ষণ করা এবং একটি সারোগেট প্রাথমিক কী তৈরি করার সময় NONCLUSTERED বিকল্পটি নির্দিষ্ট করা কার্যকর হতে পারে।

আসুন সংক্ষিপ্ত করা যাক

এই পর্যায়ে, আমরা সব ধরনের বিধিনিষেধের সাথে পরিচিত হয়েছি, তাদের সহজতম আকারে, যেগুলো "ALTER TABLE table_name ADD Constraint constraint_name..." এর মত একটি কমান্ড দ্বারা তৈরি করা হয়েছে:
  • প্রাথমিক কী- প্রাথমিক কী;
  • বিদেশী চাবি- সংযোগ স্থাপন এবং তথ্যের রেফারেন্সিয়াল অখণ্ডতা পর্যবেক্ষণ;
  • অনন্য- আপনাকে স্বতন্ত্রতা তৈরি করতে দেয়;
  • চেক করুন- আপনাকে প্রবেশ করা ডেটার সঠিকতা নিশ্চিত করতে দেয়;
  • ডিফল্ট- আপনাকে একটি ডিফল্ট মান সেট করতে দেয়;
  • এটিও লক্ষণীয় যে কমান্ডটি ব্যবহার করে সমস্ত বিধিনিষেধ সরানো যেতে পারে " টেবিল পরিবর্তন করুনটেবিল_নাম ড্রপ সীমাবদ্ধতাসীমাবদ্ধতার_নাম"।
এছাড়াও আমরা আংশিকভাবে সূচির বিষয়ে স্পর্শ করেছি এবং ক্লাস্টারের ধারণাটি পরীক্ষা করেছি ( ক্লাস্টারড) এবং নন-ক্লাস্টারড ( অক্লাষ্টার্ড) সূচক।

স্বতন্ত্র সূচক তৈরি করা

এখানে স্বাধীন বলতে আমরা সূচীকে বুঝিয়েছি যেগুলি প্রাথমিক কী বা অনন্য সীমাবদ্ধতার অধীনে তৈরি করা হয়নি।

একটি ক্ষেত্র বা ক্ষেত্রের সূচী নিম্নলিখিত কমান্ড দিয়ে তৈরি করা যেতে পারে:

কর্মচারীদের উপর INDEX IDX_Employees_Name (নাম) তৈরি করুন
এছাড়াও এখানে আপনি CLUSTERED, NONCLUSTERED, UNIQUE বিকল্পগুলি নির্দিষ্ট করতে পারেন এবং আপনি প্রতিটি পৃথক ক্ষেত্রের ASC (ডিফল্ট) বা DESC বাছাই করার দিকনির্দেশও নির্দিষ্ট করতে পারেন:

কর্মচারীদের জন্য অনন্য ননক্লাস্টার্ড ইনডেক্স UQ_Employees_EmailDesc তৈরি করুন (ইমেল DESC)
একটি নন-ক্লাস্টারড সূচক তৈরি করার সময়, NONCLUSTERED বিকল্পটি বাদ দেওয়া যেতে পারে, কারণ এটি ডিফল্টরূপে বোঝানো হয় এবং কমান্ডে CLUSTERED বা NONCLUSTERED বিকল্পের অবস্থান নির্দেশ করার জন্য এখানে দেখানো হয়েছে।

আপনি নিম্নলিখিত কমান্ড দিয়ে সূচী মুছে ফেলতে পারেন:

ড্রপ ইনডেক্স IDX_Employees_Name on Employees
CREATE TABLE কমান্ডের প্রেক্ষাপটে সরল সূচী, পাশাপাশি সীমাবদ্ধতা তৈরি করা যেতে পারে।

উদাহরণস্বরূপ, আসুন আবার টেবিলটি মুছে ফেলি:

ড্রপ টেবিল কর্মচারী
এবং আমরা একটি CREATE TABLE কমান্ড দিয়ে সমস্ত তৈরি সীমাবদ্ধতা এবং সূচী দিয়ে এটি পুনরায় তৈরি করব:

সারণী কর্মচারী তৈরি করুন(আইডি শূন্য নয়, নাম nvarchar(30), জন্মদিনের তারিখ, ইমেল nvarchar(30), অবস্থানের আইডি, ডিপার্টমেন্টআইডি int, হায়ার তারিখের তারিখ শূন্য নয় কনস্ট্রাইনটি (আইডি ), কনস্ট্রেইন্ট FK_Employees_DepartmentID ফরেন KEY(DepartmentID) রেফারেন্স ডিপার্টমেন্টস(ID), Constraint FK_Employees_PositionID ফরেন KEY(PositionID) রেফারেন্স পজিশন (ID), CONSTRAINT_ployees_DepartmentID রেফারেন্স কর্মচারী(আইডি), কনস্ট্রেইন্ট UQ_Employ ees_Email UNIQUE(ইমেল), কনস্ট্রেইনটি CK_Employees_ID চেক(ID BETWEEN 1000 AND 1999), INDEX IDX_Employees_Name(নাম))
অবশেষে, টেবিলে আমাদের কর্মীদের সন্নিবেশ করা যাক:

কর্মচারী ঢোকান (আইডি, নাম, জন্মদিন, ইমেল, পজিশনআইডি, ডিপার্টমেন্টআইডি, ম্যানেজারআইডি) VALUES (1000,N"ইভানভ I.I.","19550219"," [ইমেল সুরক্ষিত]",2,1,NULL), (1001,N"পেট্রোভ P.P.","19831203"," [ইমেল সুরক্ষিত]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [ইমেল সুরক্ষিত]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [ইমেল সুরক্ষিত]",4,3,1000)
উপরন্তু, এটা লক্ষণীয় যে আপনি একটি নন-ক্লাস্টারড ইনডেক্সে মানগুলি অন্তর্ভুক্ত করতে তাদের অন্তর্ভুক্ত করতে পারেন। সেগুলো. এই ক্ষেত্রে, অন্তর্ভুক্ত সূচকটি একটি ক্লাস্টারযুক্ত সূচকের কিছুটা স্মরণ করিয়ে দেবে, শুধুমাত্র এখন সূচকটি টেবিলের সাথে সংযুক্ত নয়, তবে প্রয়োজনীয় মানগুলি সূচকের সাথে সংযুক্ত রয়েছে। তদনুসারে, এই ধরনের সূচীগুলি নির্বাচনের প্রশ্নগুলির কার্যকারিতাকে ব্যাপকভাবে উন্নত করতে পারে (SELECT); যদি সমস্ত তালিকাভুক্ত ক্ষেত্রগুলি সূচীতে থাকে, তাহলে টেবিলে অ্যাক্সেসের প্রয়োজন নাও হতে পারে৷ কিন্তু এটি স্বাভাবিকভাবেই সূচকের আকার বাড়ায়, কারণ তালিকাভুক্ত ক্ষেত্রগুলির মানগুলি সূচীতে নকল করা হয়েছে।

MSDN থেকে নির্যাস।সূচক তৈরির জন্য সাধারণ কমান্ড সিনট্যাক্স

তৈরি করুন [অনন্য] [ক্লাস্টার্ড | NONCLUSTERED ] INDEX index_name অন (কলাম [ ASC | DESC ] [ ,...n ]) [ অন্তর্ভুক্ত করুন (কলাম_নাম [ ,...n ]) ]

আসুন সংক্ষিপ্ত করা যাক

সূচকগুলি ডেটা পুনরুদ্ধারের গতি বাড়াতে পারে (SELECT), কিন্তু সূচীগুলি টেবিল ডেটা পরিবর্তনের গতি কমিয়ে দেয়, কারণ প্রতিটি পরিবর্তনের পরে, সিস্টেমটিকে একটি নির্দিষ্ট টেবিলের জন্য সমস্ত সূচী পুনর্নির্মাণ করতে হবে।

প্রতিটি ক্ষেত্রে, সর্বোত্তম সমাধান, সোনালী গড় খুঁজে বের করার পরামর্শ দেওয়া হয়, যাতে নমুনা এবং ডেটা পরিবর্তনের কার্যক্ষমতা উভয়ই সঠিক স্তরে থাকে। সূচী তৈরির কৌশল এবং সূচকের সংখ্যা অনেকগুলি কারণের উপর নির্ভর করতে পারে, যেমন টেবিলের ডেটা কত ঘন ঘন পরিবর্তিত হয়।

ডিডিএল-এর উপর উপসংহার

আপনি দেখতে পাচ্ছেন, DDL ততটা জটিল নয় যতটা প্রথম নজরে মনে হতে পারে। এখানে আমি মাত্র তিনটি টেবিল ব্যবহার করে এর প্রায় সমস্ত প্রধান কাঠামো দেখাতে সক্ষম হয়েছি।

মূল জিনিসটি সারাংশ বোঝা, এবং বাকিটি অনুশীলনের বিষয়।

এসকিউএল নামক এই চমৎকার ভাষা আয়ত্ত করার জন্য সৌভাগ্য কামনা করছি।

সহজ ভাষায়, ডাটাবেসে তথ্য প্রবেশ ও প্রক্রিয়া করার জন্য এসকিউএল কোয়েরি প্রয়োজন।

ডাটাবেস অনেকগুলো টেবিল নিয়ে গঠিত। প্রতিটি লাইন একটি রেকর্ড. এখানে, উদাহরণস্বরূপ, ব্যবহারকারীদের জন্য একটি সহজ টেবিল:

sql প্রশ্নগুলির সাথে কাজ শুরু করতে, আপনাকে প্রথমে প্রয়োজন।

আসুন নতুনদের জন্য সবচেয়ে সহজ প্রশ্নগুলো দেখি।

একটি ডাটাবেস তৈরি করা - ডেটাবেস তৈরি করা

ডেটাবেস `মাইবেস` তৈরি করুন

আমরা উদ্ধৃতিগুলিতে আমাদের ডাটাবেসের নাম নির্দেশ করি (উদ্ধৃতি ঐচ্ছিক, তবে সেগুলির সাথে কাজ করা সহজ)।

এনকোডিং সেট করা হচ্ছে - নাম সেট করুন

নাম সেট করুন "utf-8"

এনকোডিং সেট করা প্রায়ই "পাগল বাগ" এড়াতে সাহায্য করে।

একটি টেবিল তৈরি করা - CREATE TABLE

উপরে উপস্থাপিত টেবিল তৈরি করা যাক.

সারণী তৈরি করুন `মাইবেস`। `ব্যবহারকারী`(`আইডি` আইএনটি(১১) আনসাইনড নট নাল অটো_ইনক্রিমেন্ট প্রাথমিক কী, `লগইন` VARCHAR(20), `পাসওয়ার্ড` VARCHAR(20), `regdate` তারিখ)

এটা সব যে জটিল না. এখানে আমরা লিখি যে আমরা "mybase" ডাটাবেসে "users" নামে একটি টেবিল তৈরি করছি।

`কলামের নাম` ডেটা টাইপ (পরিমাণ সর্বোচ্চ মান) অ্যাট্রিবিউট

গুণাবলী ঐচ্ছিক.

উদাহরণ স্বরূপ, এখানে আমরা “DATE” এর ডাটা টাইপ সহ “regdate” নামে একটি কলাম তৈরি করেছি।

`regdate` DATE

এখানে, বন্ধনীতে, সর্বাধিক অনুমোদিত মান নির্দেশ করা হয়েছে। ডেটা টাইপ - অক্ষর

`লগইন` VARCHAR(20),

"আইডি" কলাম তৈরি করার সময়, আমরা বৈশিষ্ট্যগুলি লিখেছিলাম, আসুন সেগুলি দেখি:

  • আনসাইনড - শুধুমাত্র ইতিবাচক সংখ্যা;
  • NOT NULL - ঘরটি খালি হতে পারে না (প্রয়োজনীয়);
  • AUTO_INCREMENT - একটি লাইন তৈরি করার সময় 0 এবং +1 থেকে শুরু করে স্বয়ংক্রিয়ভাবে ক্ষেত্রটি পূরণ করে;
  • প্রাথমিক কী - ঘরের একটি প্রদত্ত কলামে ক্ষেত্রের মানগুলি পুনরাবৃত্তি করা যায় না, কলামটিকে একটি প্রাথমিক কী করে তোলে;

"id" এর একটি পূর্ণসংখ্যা ডেটা টাইপ আছে।

ডাটাবেসে তথ্য যোগ করা - INSERT

`ব্যবহারকারী` (লগইন`, `পাসওয়ার্ড`, `রেগডেট`) মানের মধ্যে সন্নিবেশ করুন ("ভাস্য", "12345", "2015-04-22 17:38:50")

প্রথম বন্ধনীতে আমরা কলামগুলির নাম লিখি, দ্বিতীয়টিতে তাদের অর্থ। এটি গুরুত্বপূর্ণ যে মানগুলির ক্রমটি কলামের নামের ক্রমটির সাথে মেলে।

"আইডি" ক্ষেত্রটি পূরণ করার প্রয়োজন নেই; এটি স্বয়ংক্রিয়ভাবে তৈরি হয়।

হালনাগাদ তথ্য - আপডেট

এখন দেখা যাক কিভাবে টেবিলের যেকোনো সারিতে ডেটা আপডেট করা যায়। উদাহরণস্বরূপ, আসুন একটি নির্দিষ্ট ব্যবহারকারীর জন্য পাসওয়ার্ড পরিবর্তন করা যাক।

আপডেট `ব্যবহারকারী` সেট `পাসওয়ার্ড` = "54321" কোথায় `আইডি` = "1"

"পাসওয়ার্ড" ক্ষেত্রের মান 1 এর সমান "আইডি" সহ লাইনে একটি নতুন করে পরিবর্তন করুন।

আপনি যদি "WHERE" সরিয়ে দেন তবে সমস্ত লাইন পরিবর্তন হবে, একটি নির্দিষ্ট লাইন নয়।

তথ্য মুছে ফেলা হচ্ছে - DELETE

এখন এর সমস্ত ক্ষেত্র সহ এই লাইনটি মুছে ফেলা যাক।

`ব্যবহারকারী` যেখানে `আইডি` = "1" থেকে মুছুন

যোগ করার মতোই কাজ করে।

একটি ডাটাবেস থেকে তথ্য পুনরুদ্ধার করা হচ্ছে SELECT

ডাটাবেসের তথ্য নিয়ে কাজ করার জন্য, আপনাকে এটি নির্বাচন করতে হবে।

`ব্যবহারকারী` যেখানে `id` = "1" থেকে * নির্বাচন করুন

এখানে আমরা "ব্যবহারকারী" টেবিলের সমস্ত সারি নির্বাচন করেছি (* - সমস্ত ক্ষেত্র)।

এবং আপনি শুধুমাত্র নির্দিষ্ট ক্ষেত্র নির্বাচন করতে পারেন.

`ব্যবহারকারী` যেখানে `আইডি` = "1" থেকে `লগইন`, `পাসওয়ার্ড` নির্বাচন করুন

বেশিরভাগ আধুনিক ওয়েব অ্যাপ্লিকেশন ডাটাবেসের সাথে যোগাযোগ করে, সাধারণত একটি ভাষা ব্যবহার করেএসকিউএল সৌভাগ্যবশত আমাদের জন্য, এই ভাষা শেখা খুব সহজ। এই নিবন্ধে আমরা সহজ তাকান হবেএসকিউএল প্রশ্ন করুন এবং তাদের সাথে ইন্টারঅ্যাক্ট করতে কীভাবে ব্যবহার করবেন তা শিখুনমাইএসকিউএল ডাটাবেস।

কি লাগবে?

এসকিউএল (স্ট্রাকচার্ড কোয়েরি ল্যাঙ্গুয়েজ) ডাটাবেস ম্যানেজমেন্ট সিস্টেমের সাথে ইন্টারফেসের জন্য বিশেষভাবে ডিজাইন করা একটি ভাষা যেমন MySQL, Oracle, Sqlite এবং অন্যান্য... সম্পূর্ণ করতেএসকিউএল এই নিবন্ধে অনুরোধ, আমি আপনাকে ইনস্টল করার পরামর্শমাইএসকিউএল আপনার স্থানীয় কম্পিউটারে। আমিও ব্যবহার করার পরামর্শ দিই phpMyAdmin একটি ভিজ্যুয়াল ইন্টারফেস হিসাবে।

এই সব পাওয়া যায় সবার প্রিয় ডেনভারে। আমি মনে করি প্রত্যেকের জানা উচিত এটি কী এবং এটি কোথায় পাওয়া যায় :)। করতে পারাএছাড়াও WAMP বা MAMP ব্যবহার করুন।

ডেনভার একটি অন্তর্নির্মিত আছেমাইএসকিউএল কনসোল এই আমরা ব্যবহার করব কি.

ডেটাবেস তৈরি করুন:ডাটাবেস তৈরি

এখানে আমাদের প্রথম অনুরোধ. পরবর্তী কাজের জন্য আমরা আমাদের প্রথম ডাটাবেস তৈরি করব।

শুরু করতে, খুলুনমাইএসকিউএল কনসোল এবং লগ ইন করুন। জন্য WAMP ডিফল্ট পাসওয়ার্ড খালি। অর্থাৎ কিছুই না :) জন্য MAMP - "মূল"। ডেনভারের জন্য, আমাদের স্পষ্ট করা দরকার।

লগইন করার পর নিচের লাইনে প্রবেশ করুন এবং ক্লিক করুনলিখুন:

ডেটাবেস তৈরি করুন my_first_db;

মনে রাখবেন যে অন্যান্য ভাষার মতই কোয়েরির শেষে একটি সেমিকোলন (;) যোগ করা হয়েছে।

এছাড়াও এসকিউএল-এ কমান্ড কেস সংবেদনশীল। আমরা তাদের বড় অক্ষরে লিখি।

অপশন আনুষ্ঠানিকভাবে: অক্ষর সেটএবং কোলেশন

ইন্সটল করতে চাইলেক্যারেক্টার সেট (ক্যারেক্টার সেট) এবং কোলেশন (তুলনা) হতে পারে নিম্নলিখিত কমান্ড লিখুন:

ডেটাবেস তৈরি করুন my_first_db ডিফল্ট চরিত্র সেট utf8 utf8_general_ci;

সমর্থিত অক্ষর সেটগুলির একটি তালিকা খুঁজে পায়৷মাইএসকিউএল।

ডাটাবেস দেখান:সমস্ত ডাটাবেসের একটি তালিকা প্রদর্শন করে

এই কমান্ডটি সমস্ত উপলব্ধ ডাটাবেস তালিকাভুক্ত করতে ব্যবহৃত হয়।

ড্রপ ডেটাবেস:একটি ডাটাবেস মুছে ফেলা হচ্ছে

আপনি এই ক্যোয়ারী ব্যবহার করে একটি বিদ্যমান ডিবি মুছে ফেলতে পারেন।

এই কমান্ডের সাথে সতর্ক থাকুন কারণ এটি সতর্কতা ছাড়াই চলে। আপনার ডাটাবেসে ডেটা থাকলে, এটি সব মুছে ফেলা হবে।

ব্যবহার:ডাটাবেস নির্বাচন

প্রযুক্তিগতভাবে এটি একটি প্রশ্ন নয়, কিন্তু একটি বিবৃতি এবং শেষে একটি সেমিকোলন প্রয়োজন হয় না।

এটা MySQL বলে বর্তমান সেশনের জন্য ডিফল্ট ডাটাবেস নির্বাচন করুন। এখন আমরা টেবিল তৈরি করতে এবং ডাটাবেসের সাথে অন্যান্য কাজ করতে প্রস্তুত।

একটি ডাটাবেসের একটি টেবিল কি?

আপনি ডাটাবেসের মধ্যে টেবিলটি হিসাবে উপস্থাপন করতে পারেনএক্সেল ফাইল।

ঠিক ছবির মতো, টেবিলের কলামের নাম, সারি এবং তথ্য রয়েছে। ব্যবহার করেএসকিউএল প্রশ্ন আমরা এই ধরনের টেবিল তৈরি করতে পারেন. আমরা তথ্য যোগ, পড়তে, আপডেট এবং মুছে দিতে পারি।

ছক তৈরি কর: একটি টেবিল তৈরি করা হচ্ছে

এই ক্যোয়ারী ব্যবহার করে আমরা ডাটাবেসে টেবিল তৈরি করতে পারি। দুর্ভাগ্যবশত, ডকুমেন্টেশনমাইএসকিউএল এই বিষয়ে নতুনদের জন্য খুব স্পষ্ট নয়। এই ধরনের প্রশ্নের গঠন খুব জটিল হতে পারে, কিন্তু আমরা সহজ কিছু দিয়ে শুরু করব।

নিম্নলিখিত ক্যোয়ারী 2টি কলাম সহ একটি টেবিল তৈরি করবে।

সারণী ব্যবহারকারী তৈরি করুন (ব্যবহারকারীর নাম VARCHAR(20), create_date DATE);

অনুগ্রহ করে মনে রাখবেন যে আমরা আমাদের প্রশ্নগুলি একাধিক লাইনে এবং ইন্ডেন্টেশনের জন্য ট্যাব সহ লিখতে পারি।

প্রথম লাইনটি সহজ। আমরা কেবল "ব্যবহারকারী" নামে একটি টেবিল তৈরি করি। পরবর্তী, বন্ধনীতে, কমা দ্বারা পৃথক করা, সমস্ত কলামের একটি তালিকা। প্রতিটি কলামের নামের পরে আমাদের তথ্যের ধরন আছে, যেমন VARCHAR বা DATE।

VARCHAR(20) এর অর্থ হল কলামটি স্ট্রিং ধরনের এবং দৈর্ঘ্যে সর্বাধিক 20 অক্ষর হতে পারে। DATE হল একটি তথ্য প্রকার যা নিম্নলিখিত বিন্যাসে তারিখগুলি সংরক্ষণ করতে ব্যবহৃত হয়: "YYYY - MM-DD"৷

প্রাথমিক কী ( প্রাথমিক কীজ)

আমরা পরবর্তী ক্যোয়ারী চালানোর আগে, আমাদের অবশ্যই "user_id" এর জন্য একটি কলাম অন্তর্ভুক্ত করতে হবে, যেটি হবে আমাদের প্রাথমিক কী। আপনি PRIMARY KEY কে তথ্য হিসাবে ভাবতে পারেন যা একটি টেবিলের প্রতিটি সারি সনাক্ত করতে ব্যবহৃত হয়।

সারণী ব্যবহারকারী তৈরি করুন (user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20), create_date DATE);

আইএনটি একটি 32-বিট পূর্ণসংখ্যার ধরন তৈরি করে (উদাহরণস্বরূপ, সংখ্যা)।অটো স্বয়ংক্রিয়ভাবে একটি নতুন মান তৈরি করেআইডি প্রতিবার আমরা তথ্যের নতুন সিরিজ যোগ করি। এটি প্রয়োজনীয় নয়, তবে এটি পুরো প্রক্রিয়াটিকে সহজ করে তোলে।

এই কলামটি একটি পূর্ণসংখ্যা মান হতে হবে না, তবে এটি প্রায়শই ব্যবহৃত হয়। একটি প্রাথমিক কী থাকাও ঐচ্ছিক, কিন্তু ডাটাবেস আর্কিটেকচার এবং কর্মক্ষমতার জন্য সুপারিশ করা হয়।

আসুন ক্যোয়ারী রান করা যাক:

টেবিল দেখান:সমস্ত টেবিল দেখান

এই ক্যোয়ারীটি আপনাকে ডাটাবেসের মধ্যে থাকা টেবিলের একটি তালিকা পেতে দেয়।

ব্যাখ্যা করা:টেবিল গঠন দেখান

একটি বিদ্যমান টেবিলের গঠন দেখাতে, আপনি এই ক্যোয়ারী ব্যবহার করতে পারেন.

কলামগুলি সমস্ত বৈশিষ্ট্য সহ প্রদর্শিত হয়।

ড্রপ টেবিল:টেবিল মুছে দিন

ড্রপ ডেটাবেসের মতোই, এই প্রশ্নটি সতর্কতা ছাড়াই টেবিল এবং এর বিষয়বস্তু মুছে দেয়।

সারণী পরিবর্তন করুন: টেবিল পরিবর্তন

এই ক্যোয়ারীতে জটিল গঠনও থাকতে পারে কারণ এটি টেবিলে অনেক বেশি পরিবর্তন করতে পারে। এর উদাহরণ তাকান.

(যদি আপনি পূর্ববর্তী ধাপে টেবিলটি মুছে ফেলেন, পরীক্ষার জন্য এটি আবার তৈরি করুন)

একটি কলাম যোগ করা হচ্ছে

সারণী ব্যবহারকারীরা ব্যবহারকারীর নামের পরে ইমেল VARCHAR(100) যোগ করুন;

SQL এর ভাল পঠনযোগ্যতার কারণে, আমি মনে করি এটি বিস্তারিতভাবে ব্যাখ্যা করার কোন মানে নেই। আমরা "ইউজারনেম" এর পরে একটি নতুন কলাম "ইমেল" যোগ করছি।

একটি কলাম সরানো হচ্ছে

এটাও খুব সহজ ছিল। সতর্কতার সাথে এই অনুরোধটি ব্যবহার করুন কারণ আপনার ডেটা সতর্কতা ছাড়াই মুছে ফেলা হতে পারে।

আরও পরীক্ষার জন্য আপনি মুছে ফেলা কলামটি পুনরুদ্ধার করুন।

একটি কলামে পরিবর্তন করা

কখনও কখনও আপনি একটি কলামের বৈশিষ্ট্যগুলিতে পরিবর্তন করতে চাইতে পারেন এবং এটি করার জন্য আপনাকে এটি সম্পূর্ণরূপে মুছে ফেলতে হবে না।

এই ক্যোয়ারীটি ব্যবহারকারীর কলামের নাম পরিবর্তন করে "user_name" করেছে এবং এর ধরন VARCHAR(20) থেকে VARCHAR(30) এ পরিবর্তন করেছে। এই পরিবর্তন টেবিলের তথ্য পরিবর্তন করা উচিত নয়.

ঢোকান: একটি টেবিলে তথ্য যোগ করা

নিচের প্রশ্নটি ব্যবহার করে টেবিলে কিছু তথ্য যোগ করা যাক।

আপনি দেখতে পাচ্ছেন, VALUES() কমা দ্বারা পৃথক করা মানগুলির একটি তালিকা রয়েছে৷ সমস্ত মান একক কলামে আবদ্ধ। এবং মানগুলি অবশ্যই কলামগুলির ক্রম অনুসারে হতে হবে যা টেবিলটি তৈরি করার সময় সংজ্ঞায়িত করা হয়েছিল।

লক্ষ্য করুন যে "user_id" নামক প্রাথমিক কী ক্ষেত্রের প্রথম মানটি NULL। আমরা এটি করি যাতে আইডি স্বয়ংক্রিয়ভাবে তৈরি হয়, যেহেতু কলামটিতে AUTO_INCREMENT বৈশিষ্ট্য রয়েছে৷ প্রথমবার তথ্য যোগ করা হলে ID হবে 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 শর্তগুলি একত্রিত করতে ব্যবহার করা যেতে পারে:

মনে রাখবেন সাংখ্যিক মান অবশ্যই উদ্ধৃতিতে থাকা উচিত নয়।

ভিতরে()

এটি একাধিক মান নমুনা জন্য দরকারী

লাইক

আপনাকে "ওয়াইল্ডকার্ড" অনুরোধ করার অনুমতি দেয়

% আইকনটি "ওয়াইল্ডকার্ড" হিসাবে ব্যবহৃত হয়। অর্থাৎ যে কোনো কিছু তার জায়গায় থাকতে পারে।

অবস্থাঅর্ডার করুন

আপনি যদি কোন মাপকাঠি অনুযায়ী অর্ডারকৃত ফর্মে ফলাফল পেতে চান

ডিফল্ট অর্ডার হল ASC (সবচেয়ে ছোট থেকে বড়)। বিপরীত জন্য, DESC ব্যবহার করা হয়।

সীমা... অফসেট...

আপনি ফলাফলের সংখ্যা সীমিত করতে পারেন।

LIMIT 2 শুধুমাত্র প্রথম 2টি ফলাফল নেয়৷ সীমা 1 অফসেট 2 প্রথম 2 এর পরে 1টি ফলাফল পায়৷ LIMIT 2, 1 মানে একই জিনিস (শুধু মনে রাখবেন অফসেট প্রথমে আসে এবং তারপর সীমা)।

হালনাগাদ: টেবিলে তথ্য পরিবর্তন করুন

এই প্রশ্নটি একটি টেবিলে তথ্য পরিবর্তন করতে ব্যবহৃত হয়।

বেশিরভাগ ক্ষেত্রে, এটি একটি WHERE ক্লজের সাথে ব্যবহার করা হয়, যেহেতু আপনি সম্ভবত নির্দিষ্ট কলামে পরিবর্তন করতে চান। কোন WHERE ক্লজ না থাকলে, পরিবর্তনগুলি সমস্ত সারিকে প্রভাবিত করবে।

এছাড়াও আপনি LIMIT ব্যবহার করতে পারেন সারির সংখ্যা সীমিত করতে যেখানে পরিবর্তন করতে হবে।

মুছে ফেলা: একটি টেবিল থেকে তথ্য অপসারণ

আপডেটের মতই, এই ক্যোয়ারীটি কোথায় ব্যবহার করা হয়:

একটি টেবিলের বিষয়বস্তু মুছে ফেলার জন্য, আপনি কেবল এটি করতে পারেন:

ব্যবহারকারীদের থেকে মুছে ফেলুন;

তবে এটি ব্যবহার করা ভালছিন্ন করুন

মুছে ফেলার পাশাপাশি, এই অনুরোধটি মানও রিসেট করেঅটো এবং আবার সারি যোগ করার সময়, কাউন্টডাউন শূন্য থেকে শুরু হবে।মুছে ফেলা এটা করে না এবং কাউন্টডাউন চলতে থাকে।

ছোট হাতের মান এবং বিশেষ শব্দ নিষ্ক্রিয় করা

স্ট্রিং মান

কিছু অক্ষর নিষ্ক্রিয় করা প্রয়োজন (পলায়ন ), অথবা সমস্যা হতে পারে।

এর জন্য ব্যাকস্ল্যাশ ব্যবহার করা হয়।(\).

বিশেষ শব্দ

কারণ মাইএসকিউএল-এ অনেক বিশেষ শব্দ আছে (নির্বাচন করুন বা আপডেট করুন ), এগুলি ব্যবহার করার সময় ত্রুটিগুলি এড়াতে, আপনাকে অবশ্যই উদ্ধৃতিগুলি ব্যবহার করতে হবে৷ তবে সাধারণ উদ্ধৃতি নয়, এইরকম(`).

অর্থাৎ, আপনাকে "নামের একটি কলাম যোগ করতে হবেমুছে ফেলা ", আপনাকে এটি এভাবে করতে হবে:

উপসংহার

শেষ পর্যন্ত পড়ার জন্য আপনাকে ধন্যবাদ. আমি আশা করি আপনি এই নিবন্ধটি সহায়ক হয়েছে. এখনো শেষ হয়নি! চলবে:).

স্ট্যান্ডার্ড SQL ক্যোয়ারী ভাষা ব্যবহার করে ডাটাবেস ডেভেলপমেন্টে স্বাগতম। ডাটাবেস ম্যানেজমেন্ট সিস্টেমের (DBMS) অনেক টুল রয়েছে যা বিভিন্ন হার্ডওয়্যার প্ল্যাটফর্মে চলে।

  • রিলেশনাল ডাটাবেস বেসিক

    এই অধ্যায়ে... | তথ্য আয়োজন | একটি ডাটাবেস কি | একটি DBMS কি | ডাটাবেস মডেলের তুলনা | একটি রিলেশনাল ডাটাবেস কি

  • এসকিউএল বেসিক

    এই অধ্যায়ে... | SQL কি | এসকিউএল ভুল ধারণা | বিভিন্ন এসকিউএল স্ট্যান্ডার্ডের উপর এক নজর | স্ট্যান্ডার্ড এসকিউএল কমান্ড এবং সংরক্ষিত শব্দের ভূমিকা | সংখ্যা, চিহ্ন, তারিখ, সময় এবং অন্যান্য ধরনের ডেটা প্রতিনিধিত্ব করে | অনির্ধারিত মান এবং সীমাবদ্ধতা

  • এসকিউএল উপাদান

    এই অধ্যায়ে... | ডাটাবেস তৈরি | ডেটা প্রসেসিং | ডাটাবেস সুরক্ষা | এসকিউএল একটি ভাষা যা বিশেষভাবে রিলেশনাল ডাটাবেসে ডেটা তৈরি এবং বজায় রাখার জন্য ডিজাইন করা হয়েছে। এবং যদিও এই ধরনের ডাটাবেসগুলি পরিচালনার জন্য সিস্টেম সরবরাহকারী সংস্থাগুলি তাদের নিজস্ব SQL বাস্তবায়নের প্রস্তাব দেয়, তবে ভাষার বিকাশ নিজেই ISO/ANSI মান দ্বারা নির্ধারিত এবং নিয়ন্ত্রিত হয়।

  • একটি সাধারণ ডাটাবেস তৈরি এবং বজায় রাখা

    এই অধ্যায়ে... | RAD টুল ব্যবহার করে একটি ডাটাবেস থেকে একটি টেবিল তৈরি করুন, পরিবর্তন করুন এবং মুছুন। | এসকিউএল ব্যবহার করে একটি ডাটাবেস থেকে একটি টেবিল তৈরি করুন, পরিবর্তন করুন এবং মুছুন। | একটি ডাটাবেস অন্য ডিবিএমএসে স্থানান্তর করা হচ্ছে।

  • একটি মাল্টি-টেবিল রিলেশনাল ডাটাবেস তৈরি করা

    এই অধ্যায়ে... | ডাটাবেসে কি থাকা উচিত | ডাটাবেস উপাদানের মধ্যে সম্পর্ক সংজ্ঞায়িত করা | কী ব্যবহার করে টেবিল লিঙ্ক করা | ডেটা ইন্টিগ্রিটি ডিজাইন | ডাটাবেস স্বাভাবিককরণ | এই অধ্যায়টি একটি মাল্টি-টেবিল ডাটাবেস তৈরির উদাহরণ উপস্থাপন করবে।

  • ডাটাবেস থেকে ডেটা ম্যানিপুলেট করা

    এই অধ্যায়ে... | ডেটা নিয়ে কাজ করা | টেবিল থেকে প্রয়োজনীয় তথ্য প্রাপ্তি | এক বা একাধিক টেবিল থেকে নির্বাচিত তথ্য প্রদর্শন করা হচ্ছে | সারণী এবং দর্শনে তথ্য আপডেট করা হচ্ছে | একটি টেবিলে একটি নতুন সারি যোগ করা হচ্ছে

  • মান সংজ্ঞায়িত করা

    এই অধ্যায়ে... | অপ্রয়োজনীয় কোডিং কমাতে ভেরিয়েবল ব্যবহার করে | একটি ডাটাবেস টেবিল ক্ষেত্রে অবস্থিত ঘন ঘন অনুরোধ করা তথ্য পুনরুদ্ধার করা | যৌগিক অভিব্যক্তি তৈরি করতে সরল মান একত্রিত করা | এই বইটি ক্রমাগত জোর দেয় যে একটি ডাটাবেসের অখণ্ডতা বজায় রাখার জন্য একটি ডাটাবেসের কাঠামো কতটা গুরুত্বপূর্ণ।

  • অর্থ সহ জটিল অভিব্যক্তি

    এই অধ্যায়ে... | শর্তসাপেক্ষ কেস স্টেটমেন্ট ব্যবহার করে | একটি ডেটা আইটেমকে এক ডেটা টাইপ থেকে অন্য ডেটাতে রূপান্তর করা | রেকর্ড-মূল্যবান অভিব্যক্তি সহ ডেটা এন্ট্রি সময় সংরক্ষণ করুন | অধ্যায় 2-এ, এসকিউএলকে ডেটা উপভাষা বলা হয়েছিল।

  • প্রয়োজনীয় ডেটাতে "টার্গেটিং"

    এই অধ্যায়ে... | প্রয়োজনীয় সারণী উল্লেখ করা | অন্য সব থেকে প্রয়োজনীয় লাইন আলাদা করা | কার্যকরী যেখানে ধারা তৈরি করা | কিভাবে নাল মান নিয়ে কাজ করবেন | যৌগিক সংযোজক সহ যৌগিক অভিব্যক্তি তৈরি করা | কলাম দ্বারা ক্যোয়ারী ফলাফল আউটপুট গ্রুপিং

  • রিলেশনাল অপারেটর

    এই অধ্যায়ে... | একটি অনুরূপ গঠন আছে যে টেবিল যোগদান | বিভিন্ন স্ট্রাকচার আছে যে টেবিল একত্রিত | একাধিক টেবিল থেকে আপনার প্রয়োজনীয় ডেটা পাওয়া যাচ্ছে | এসকিউএল হল রিলেশনাল ডাটাবেসে ব্যবহৃত একটি কোয়েরি ভাষা।

  • নেস্টেড কোয়েরি ব্যবহার করে

    এই অধ্যায়ে... | একটি একক SQL স্টেটমেন্ট সহ একাধিক টেবিল থেকে ডেটা পুনরুদ্ধার করা হচ্ছে | একটি টেবিল থেকে অন্য টেবিল থেকে মানগুলির একটি সেটের সাথে তুলনা করে ডেটা আইটেমগুলি সন্ধান করা একটি টেবিল থেকে একটি মান তুলনা করে ডেটা আইটেম খোঁজা একটি একক মানের সাথে অন্য একটি থেকে একটি নির্বাচন বিবৃতি ব্যবহার করে নির্বাচন করা

  • পুনরাবৃত্ত প্রশ্ন

  • ডেটাবেস সুরক্ষিত করা

    এই অধ্যায়ে... | ডাটাবেস টেবিলের অ্যাক্সেস নিয়ন্ত্রণ করা | এক্সেস মঞ্জুর করবেন কিনা সিদ্ধান্ত নেওয়া | প্রবেশের অনুমতি প্রদান | প্রত্যাহার অ্যাক্সেস কর্তৃপক্ষ | অননুমোদিত অ্যাক্সেস প্রচেষ্টা প্রতিরোধ

  • তথ্য সুরক্ষা

    এই অধ্যায়ে... | কিভাবে ডাটাবেস দুর্নীতি এড়ানো যায় | একযোগে অপারেশন দ্বারা সৃষ্ট সমস্যা | এসকিউএল ইঞ্জিন ব্যবহার করে এই সমস্যাগুলি সমাধান করা | সেট লেনদেন কমান্ড ব্যবহার করে প্রয়োজনীয় নিরাপত্তা স্তর সেট করা

  • অ্যাপ্লিকেশনগুলিতে এসকিউএল ব্যবহার করা

    এই অধ্যায়ে... | অ্যাপ্লিকেশনে SQL | পদ্ধতিগত ভাষার সাথে SQL ভাগ করা | কিভাবে অসঙ্গতি এড়াতে হয় | এসকিউএল কোড পদ্ধতিগত কোড এম্বেডেড | পদ্ধতিগত কোড থেকে SQL মডিউল কল করা হচ্ছে | একটি RAD টুল থেকে SQL কল করা হচ্ছে | পূর্ববর্তী অধ্যায়গুলিতে, আমরা মূলত পৃথকভাবে SQL কমান্ডগুলি দেখেছি, যেমন ডেটা প্রসেসিং টাস্ক প্রণয়ন করা হয়েছিল, এবং এটির জন্য একটি এসকিউএল কোয়েরি তৈরি করা হয়েছিল।

  • ODBC এবং JDBC

    এই অধ্যায়ে... | ODBC সংজ্ঞা | ODBC যন্ত্রাংশের বর্ণনা | একটি ক্লায়েন্ট/সার্ভার পরিবেশে ODBC ব্যবহার করে | ইন্টারনেটে ODBC ব্যবহার করে | স্থানীয় নেটওয়ার্কে ODBC ব্যবহার করা | JDBC ব্যবহার করে | প্রতি বছর, একটি সংস্থা বা বিভিন্ন সংস্থার কম্পিউটারগুলি একে অপরের সাথে ক্রমবর্ধমানভাবে সংযুক্ত হচ্ছে। অতএব, নেটওয়ার্কে ডাটাবেসে শেয়ার্ড এক্সেস স্থাপনের প্রয়োজন আছে।

  • SQL: 2003 এবং XML

    এই অধ্যায়ে... | XML এর সাথে SQL ব্যবহার করা | XML, ডাটাবেস এবং ইন্টারনেট | SQL:2003-এর সবচেয়ে উল্লেখযোগ্য নতুন বৈশিষ্ট্যগুলির মধ্যে একটি হল এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজ (XML) ফাইলগুলির জন্য এটির সমর্থন, যা ক্রমবর্ধমানভাবে ভিন্ন প্ল্যাটফর্মগুলির মধ্যে ডেটা আদান-প্রদানের জন্য একটি সর্বজনীন মান হয়ে উঠছে।

  • কার্সার

    এই অধ্যায়ে... | ডিক্লার স্টেটমেন্টে কার্সারের সুযোগ সংজ্ঞায়িত করা | কার্সার খোলা হচ্ছে | সারি সারি ডেটা স্যাম্পলিং | কার্সার বন্ধ করা হচ্ছে | এসকিউএল সর্বাধিক জনপ্রিয় প্রোগ্রামিং ল্যাঙ্গুয়েজগুলির থেকে আলাদা যে এটি একটি টেবিলের সমস্ত সারির ডেটাতে একযোগে ক্রিয়াকলাপ সম্পাদন করে, যখন পদ্ধতিগত ভাষাগুলি সারিতে ডেটা সারি প্রক্রিয়া করে।

  • স্ট্রাকচার্ড কোয়েরি ল্যাঙ্গুয়েজ বা এসকিউএলআধা-রিলেশনাল ডাটাবেসে ব্যবহারের জন্য একটি ঘোষণামূলক প্রোগ্রামিং ভাষা। এসকিউএল-এর মূল বৈশিষ্ট্যগুলির অনেকগুলিই টিপল ক্যালকুলাস থেকে নেওয়া হয়েছিল, তবে এসকিউএল-এর সাম্প্রতিক এক্সটেনশনগুলি আরও বেশি করে সম্পর্কযুক্ত বীজগণিত অন্তর্ভুক্ত করে।
    SQL মূলত IBM দ্বারা তৈরি করা হয়েছিল, কিন্তু অনেক বিক্রেতা তাদের নিজস্ব উপভাষা তৈরি করেছে। এটি 1986 সালে আমেরিকান ন্যাশনাল স্ট্যান্ডার্ড ইনস্টিটিউট (ANSI) এবং 1987 সালে ISO দ্বারা একটি মান হিসাবে গৃহীত হয়েছিল। এসকিউএল প্রোগ্রামিং ল্যাঙ্গুয়েজ স্ট্যান্ডার্ডে, এএনএসআই জানিয়েছে যে এসকিউএল-এর অফিসিয়াল উচ্চারণ হল "es q el"। যাইহোক, অনেক ডাটাবেস বিশেষজ্ঞ "স্ল্যাং" উচ্চারণ "সিক্যুয়েল" ব্যবহার করেছেন, যা ভাষার আসল নাম সিক্যুয়েলকে প্রতিফলিত করে, যা পরবর্তীতে আইবিএম-এর সাথে ট্রেডমার্ক এবং নামের দ্বন্দ্বের কারণে পরিবর্তিত হয়। নতুনদের জন্য প্রোগ্রামিং.
    এসকিউএল প্রোগ্রামিং ভাষা 1992 সালে সংশোধিত হয়েছিল এবং এই সংস্করণটি SQL-92 নামে পরিচিত। 1999 আবার সংশোধিত হয়ে SQL:1999 (একেএ SQL3) হয়। ডামি জন্য প্রোগ্রামিং. SQL 1999 এমন বস্তুগুলিকে সমর্থন করে যেগুলি পূর্বে অন্যান্য সংস্করণে সমর্থিত ছিল না, কিন্তু 2001 সালের শেষের দিকে, শুধুমাত্র কয়েকটি ডাটাবেস ম্যানেজমেন্ট সিস্টেম এসকিউএল বাস্তবায়ন সমর্থন করে: SQL 1999।
    এসকিউএল, যদিও এএনএসআই এবং আইএসও হিসাবে সংজ্ঞায়িত করা হয়েছে, এর অনেক বৈচিত্র এবং এক্সটেনশন রয়েছে, যার বেশিরভাগেরই নিজস্ব বৈশিষ্ট্য রয়েছে, যেমন ওরাকল কর্পোরেশনের "PL/SQL" বাস্তবায়ন বা সাইবেস এবং মাইক্রোসফ্টের বাস্তবায়ন "Transact-SQL", যা বিভ্রান্তিকর হতে পারে। যারা প্রোগ্রামিং বেসিকগুলির সাথে পরিচিত। বাণিজ্যিক বাস্তবায়নের জন্য স্ট্যান্ডার্ডের প্রধান বৈশিষ্ট্যগুলির জন্য সমর্থন বাদ দেওয়াও অস্বাভাবিক নয়, যেমন তারিখ এবং সময়ের মতো ডেটা প্রকার, তাদের নিজস্ব কিছু বৈকল্পিক পছন্দ করে। ফলস্বরূপ, ANSI C বা ANSI Fortran এর বিপরীতে যা সাধারণত বড় কাঠামোগত পরিবর্তন ছাড়াই প্ল্যাটফর্ম থেকে প্ল্যাটফর্মে পোর্ট করা যেতে পারে, SQL প্রোগ্রামিং ভাষার প্রশ্নগুলি খুব কমই উল্লেখযোগ্য পরিবর্তন ছাড়াই বিভিন্ন ডাটাবেস সিস্টেমের মধ্যে পোর্ট করা যেতে পারে। ডাটাবেস শিল্পের বেশিরভাগ লোক বিশ্বাস করে যে সামঞ্জস্যের এই অভাবটি ইচ্ছাকৃত, প্রতিটি বিকাশকারীকে তাদের নিজস্ব ডাটাবেস ম্যানেজমেন্ট সিস্টেম সরবরাহ করার জন্য এবং ক্রেতাকে একটি নির্দিষ্ট ডাটাবেসের সাথে সংযুক্ত করতে।
    এর নাম অনুসারে, এসকিউএল প্রোগ্রামিং ভাষাটি নির্দিষ্ট, সীমিত উদ্দেশ্যে ডিজাইন করা হয়েছে - একটি রিলেশনাল ডাটাবেসে থাকা ডেটা অনুসন্ধান করার জন্য। যেমন, এটি সি বা বেসিকের মতো পদ্ধতিগত ভাষার পরিবর্তে ডেটা নমুনা তৈরির জন্য প্রোগ্রামিং ভাষার নির্দেশাবলীর একটি সেট, যা অনেক বিস্তৃত সমস্যার সমাধান করার জন্য ডিজাইন করা হয়েছে। ল্যাঙ্গুয়েজ এক্সটেনশন যেমন "PL/SQL" এসকিউএল-এর সুবিধা বজায় রেখে এসকিউএল-এ পদ্ধতিগত উপাদান যোগ করে এই সীমাবদ্ধতা সমাধান করার জন্য ডিজাইন করা হয়েছে। আরেকটি পদ্ধতি হল এসকিউএল কোয়েরির মধ্যে পদ্ধতিগত প্রোগ্রামিং ভাষা কমান্ড এম্বেড করা এবং ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করা। উদাহরণস্বরূপ, ওরাকল এবং অন্যরা ডাটাবেসে জাভা সমর্থন করে, যখন PostgreSQL ফাংশনগুলিকে পার্ল, টিসিএল বা সি-তে লেখার অনুমতি দেয়।
    এসকিউএল সম্পর্কে একটি কৌতুক: "এসকিউএল কাঠামোগত বা ভাষা নয়।" রসিকতার বিষয় হল যে এসকিউএল একটি টুরিং ভাষা নয়। .

    T থেকে * নির্বাচন করুন
    গ 1 C2
    1
    2
    গ 1 C2
    1
    2
    T থেকে C1 নির্বাচন করুন
    গ 1
    1
    2
    গ 1 C2
    1
    2
    T থেকে * নির্বাচন করুন যেখানে C1=1
    গ 1 C2
    1

    একটি টেবিল T দেওয়া, T ক্যোয়ারী থেকে * নির্বাচন করুন টেবিলের সমস্ত সারির সমস্ত উপাদান প্রদর্শন করবে।
    একই টেবিল থেকে, ক্যোয়ারী সিলেক্ট C1 ফ্রম T টেবিলের সমস্ত সারির কলাম C1 থেকে উপাদানগুলি প্রদর্শন করবে।
    একই টেবিল থেকে, টি থেকে * নির্বাচন করুন যেখানে C1=1 সমস্ত সারির সমস্ত উপাদান প্রদর্শন করবে যেখানে C1 কলামের মান "1"।

    এসকিউএল কীওয়ার্ড

    এসকিউএল শব্দগুলিকে কয়েকটি গ্রুপে ভাগ করা হয়েছে।

    প্রথম এক ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ বা ডিএমএল(ডেটা ম্যানেজমেন্ট ভাষা)। DML হল ভাষার একটি উপসেট যা ডেটাবেস অনুসন্ধান করতে এবং ডেটা যোগ, আপডেট এবং মুছে ফেলতে ব্যবহৃত হয়।

    • SELECT হল সবচেয়ে বেশি ব্যবহৃত DML কমান্ডগুলির মধ্যে একটি এবং ব্যবহারকারীকে পছন্দসই ফলাফলের একটি সেট বিবরণ হিসাবে একটি ক্যোয়ারী নির্দিষ্ট করার অনুমতি দেয়। ক্যোয়ারীটি নির্দিষ্ট করে না কিভাবে ফলাফলগুলি সাজানো উচিত - ক্যোয়ারীটিকে একটি ফর্মে অনুবাদ করা যা ডাটাবেসে কার্যকর করা যেতে পারে ডাটাবেস সিস্টেমের কাজ, আরও নির্দিষ্টভাবে ক্যোয়ারী অপ্টিমাইজারের কাজ।
    • INSERT একটি বিদ্যমান টেবিলে সারি (আনুষ্ঠানিক সেট) যোগ করতে ব্যবহৃত হয়।
    • UPDATE একটি বিদ্যমান টেবিল সারিতে ডেটা মান পরিবর্তন করতে ব্যবহৃত হয়।
    • DELETE বিদ্যমান সারিগুলি নির্দিষ্ট করে যেগুলি টেবিল থেকে মুছে ফেলা হবে৷

    আরও তিনটি কীওয়ার্ড ডিএমএল গ্রুপের মধ্যে পড়ে বলা যেতে পারে:

    • কাজ শুরু করুন (বা SQL উপভাষার উপর নির্ভর করে লেনদেন শুরু করুন) একটি ডাটাবেস লেনদেনের শুরুকে চিহ্নিত করতে ব্যবহার করা যেতে পারে যা হয় সব সম্পূর্ণ করবে বা মোটেও কার্যকর করবে না।
    • COMMIT বলে যে অপারেশন সঞ্চালিত হওয়ার পরে করা সমস্ত ডেটা পরিবর্তনগুলি সংরক্ষণ করা হয়।
    • ROLLBACK নির্দিষ্ট করে যে শেষ কমিট বা রোলব্যাকের পরে সমস্ত ডেটা পরিবর্তনগুলি অবশ্যই ধ্বংস করতে হবে, সেই বিন্দু পর্যন্ত যা ডাটাবেসে "রোলব্যাক" হিসাবে রেকর্ড করা হয়েছিল।

    কমিট এবং রোলব্যাক ব্যবহার করা হয় লেনদেন নিয়ন্ত্রণ এবং লকিংয়ের মতো ক্ষেত্রে। উভয় নির্দেশাবলী সমস্ত বর্তমান লেনদেন সম্পূর্ণ করে (ডাটাবেসে অপারেশনের সেট) এবং টেবিলে ডেটা পরিবর্তন করার সমস্ত লক মুছে দেয়। একটি BEGIN WORK বা অনুরূপ বিবৃতির উপস্থিতি বা অনুপস্থিতি নির্দিষ্ট SQL বাস্তবায়নের উপর নির্ভর করে।

    কীওয়ার্ডের দ্বিতীয় গ্রুপটি গ্রুপের অন্তর্গত ডেটা সংজ্ঞা ভাষা বা DDL (ডেটা সংজ্ঞা ভাষা). ডিডিএলব্যবহারকারীকে নতুন টেবিল এবং তাদের সম্পর্কিত উপাদানগুলি সংজ্ঞায়িত করার অনুমতি দেয়। বেশিরভাগ বাণিজ্যিক SQL ডাটাবেসের নিজস্ব DDL এক্সটেনশন রয়েছে যা একটি নির্দিষ্ট সিস্টেমের অ-মানক, কিন্তু সাধারণত অত্যাবশ্যক উপাদানগুলির উপর নিয়ন্ত্রণের অনুমতি দেয়।
    ডিডিএল-এর প্রধান পয়েন্টগুলি হল তৈরি এবং মুছে ফেলা কমান্ড।

    • CREATE বস্তুগুলি নির্দিষ্ট করে (যেমন টেবিল) যেগুলি ডাটাবেসে তৈরি করা হবে।
    • DROP নির্দিষ্ট করে যে ডাটাবেসের বিদ্যমান বস্তুগুলি সাধারণত স্থায়ীভাবে মুছে ফেলা হবে।
    • কিছু ডাটাবেস সিস্টেম ALTER কমান্ডকেও সমর্থন করে, যা ব্যবহারকারীকে একটি বিদ্যমান বস্তুকে বিভিন্ন উপায়ে পরিবর্তন করতে দেয়, যেমন একটি বিদ্যমান টেবিলে কলাম যোগ করা।

    এসকিউএল কিওয়ার্ডের তৃতীয় গ্রুপ হল ডেটা কন্ট্রোল ল্যাঙ্গুয়েজ বা ডিসিএল (ডেটা কন্ট্রোল ল্যাঙ্গুয়েজ). ডিসিএলডেটা অ্যাক্সেস অধিকারের জন্য দায়ী এবং ব্যবহারকারীকে ডাটাবেসের ডেটা দেখতে বা ম্যানিপুলেট করার অ্যাক্সেস কে নিয়ন্ত্রণ করতে দেয়। এখানে দুটি প্রধান কীওয়ার্ড রয়েছে।

    আপনি নিবন্ধটি পছন্দ করেছেন? বন্ধুদের সাথে ভাগাভাগি করা: