პირველადი გასაღებების შექმნა. შეზღუდვა PRIMARY KEY ძირითადი გასაღების სინტაქსი

ამ სტატიაში ჩვენ შევეცდებით განვიხილოთ ყველაფერი, რაც დაკავშირებულია გასაღებებთან SQL:რისთვის არის გასაღებების შექმნა და შეზღუდვები? ზოგადად: მოსაწყენი იქნება 😉

დღევანდელი გეგმა ასეთია:

რელაციური მონაცემთა ბაზის თეორიაში - გასაღებებიეს არის გარკვეული პირები, რომლებიც შექმნილია გარკვეული შეზღუდვების დასამყარებლად, რომლებიც ინარჩუნებენ მონაცემთა მთლიანობას და ხელმისაწვდომობას მონაცემთა ბაზის ცხრილებში.

მარტივი სიტყვებით, გასაღებები შეყვანილია sqlშექმნილია სვეტისთვის დამატებითი ფუნქციონირების მითითებისთვის. იქნება ეს უნიკალურობა თუ ის ფაქტი, რომ სვეტი მიუთითებს სხვა ცხრილზე (უცხო გასაღები).

Მთავარი გასაღები

სვეტი, რომელიც უნიკალური უნდა იყოს მონაცემთა ბაზაში, აღინიშნება პირველადი გასაღებით. პირველადი გასაღები ან პირველადი გასაღები ნიშნავს, რომ პირველადი გასაღების სვეტის მნიშვნელობა არ შეიძლება განმეორდეს ცხრილში. ამრიგად, ეს გასაღები საშუალებას გაძლევთ ცალსახად ამოიცნოთ ჩანაწერი ცხრილში, იმის შიშის გარეშე, რომ სვეტის მნიშვნელობა განმეორდება. მხოლოდ მაგალითი: ვთქვათ, რომ თქვენ გაქვთ მომხმარებლების ცხრილი. ამ ცხრილს აქვს შემდეგი ველები: სრული სახელი, დაბადების წელი, ტელეფონი. როგორ ამოვიცნოთ მომხმარებელი? ისეთი პარამეტრები, როგორიცაა სრული სახელი და ტელეფონის ნომერი, არ შეიძლება იყოს სანდო. ჩვენ ხომ შეიძლება გვყავდეს რამდენიმე მომხმარებელი არა მხოლოდ ერთი და იგივე გვარით, არამედ ერთი და იგივე სახელით. ტელეფონის ნომერი შეიძლება დროთა განმავლობაში შეიცვალოს და ტელეფონის ნომრის მქონე მომხმარებელი არ იყოს ჩვენს მონაცემთა ბაზაში.

სწორედ ამიტომ გამოიგონეს პირველადი გასაღები. ერთხელ მიენიჭა უნიკალური იდენტიფიკატორი და ეს არის ის. IN mySqlრომლის მაგალითზეც ვასრულებთ ყველა მაგალითს ველიდან AUTO_INCREMENTდაყენება შეუძლებელია, თუ არ მიუთითებთ, რომ ეს არის ძირითადი გასაღები.

ვფიქრობ, არ ღირს იმის აღნიშვნა, რომ ჩანაწერის შექმნისას ველი არ შეიძლება იყოს ცარიელი.

გარე გასაღები ( უცხოური გასაღები)

კიდევ არის კიდევ გარე გასაღები (უცხოური გასაღები). მას ასევე უწოდებენ მითითებას. საჭიროა ცხრილების ერთმანეთთან დაკავშირება.

თუ დააკვირდებით ზემოთ მოცემულ სურათს, უცხოური გასაღები იქნება მიმწოდებლის ველი ფეხსაცმლის ცხრილში. როგორც წესი, ცხრილის შექმნისას თქვენ მიუთითებთ უნიკალური მთელი მნიშვნელობების სვეტს. როგორ გავაკეთეთ ეს ცხრილის შექმნისას მიმწოდებელი

სვეტი მომწოდებელი_იდენტიფიკატორიუნიკალური იქნება თითოეული ჩანაწერისთვის. მისი მნიშვნელობა გამოჩნდება სვეტში პროვაიდერიმაგიდაზე ფეხსაცმელი.მე გთავაზობთ დაუყოვნებლივ გადახედოთ მაგალითს, თუ როგორ იქმნება უცხო გასაღები.

უცხო გასაღების შექმნა

შექმნა მაგიდის ფეხსაცმელი(shoes_id int auto_increment პირველადი გასაღები, სათაურის ტექსტი, ზომა int, ფასი float, count int, ტიპი varchar(30), მომწოდებელი int, უცხო გასაღები (მიმწოდებელი) მითითებები მომწოდებელი (supplier_id));

როგორც ზემოთ მოყვანილ მაგალითში ხედავთ, უცხო გასაღების შექმნის სინტაქსი საკმაოდ მარტივია. თქვენ უნდა დაამატოთ ველი მაგიდაზე, შემდეგ კი გამოაცხადოთ ეს ველი, როგორც უცხო გასაღები და მიუთითოთ სად მიმართავს. ამ შემთხვევაში ველი მიმწოდებელიმიმართავს სფეროს მომწოდებელი_იდენტიფიკატორიმაგიდაზე მიმწოდებელი

კომპოზიტური გასაღები (კომპოზიტური გასაღები)

რაც შეეხება კომპოზიციურ გასაღებს, ეს არის რამდენიმე ძირითადი გასაღები ცხრილში. ამრიგად, რომელმაც შექმნა კომპოზიტური გასაღები, ჩანაწერის უნიკალურობა შემოწმდება ველებით, რომლებიც გაერთიანებულია ამ კლავიშში.

არის სიტუაციები, როდესაც ცხრილში ჩასმისას საჭიროა ჩანაწერის უნიკალურობის შემოწმება ერთდროულად რამდენიმე ველის გამოყენებით. სწორედ ამიტომ გამოიგონეს კომპოზიციური გასაღები. მაგალითად, მე შევქმნი მარტივ ცხრილს კომპოზიტური გასაღები სინტაქსის საჩვენებლად:

ცხრილის ტესტის შექმნა (field_1 int, field_2 text, field_3 bigint, პირველადი გასაღები (field_1, field_3));

ზემოთ მოყვანილ მაგალითში ორი ველი გაერთიანებულია კომპოზიტურ გასაღებად და ცხრილში არ იქნება ჩანაწერები ამ იდენტური ველებით.

ეს ყველაფერი გასაღებებზეა SQL.ეს მცირე გაკვეთილი არის მომზადება სტატიისთვის, სადაც დეტალურად განვიხილავთ, თუ როგორ გავაერთიანოთ ცხრილები ისე, რომ მათ შექმნან ერთიანი მონაცემთა ბაზა.

ის ეხება: SQL სერვერი (2016 წლიდან) Azure SQL მონაცემთა ბაზაAzure SQL მონაცემთა საწყობი პარალელური მონაცემთა საწყობი

თქვენ შეგიძლიათ განსაზღვროთ პირველადი გასაღები SQL Server 2016-ში SQL Server Management Studio-ის ან Transact-SQL-ის გამოყენებით. პირველადი გასაღების შექმნა ავტომატურად ქმნის შესაბამის უნიკალურ კლასტერულ ან არაკლასტერულ ინდექსს.

Ამ განყოფილებაში

    სანამ დაიწყებთ, შეასრულეთ შემდეგი ნაბიჯები.

    შეზღუდვები

    Უსაფრთხოება

    შექმენით პირველადი გასაღები:

    SQL Server Management Studio

შეზღუდვები

    ცხრილს შეიძლება ჰქონდეს მხოლოდ ერთი ძირითადი გასაღების შეზღუდვა.

    ყველა სვეტი PRIMARY KEY შეზღუდვით არ უნდა იყოს NOT NULL. თუ nullability არ არის მითითებული, მაშინ NOT NULL დროშა დაყენებულია ყველა სვეტისთვის PRIMARY KEY შეზღუდვით.

Უსაფრთხოება

ნებართვები

ახალი ცხრილის შექმნა პირველადი გასაღებით მოითხოვს CREATE TABLE ნებართვას მონაცემთა ბაზაში და ALTER ნებართვას სქემაზე, რომელშიც იქმნება ცხრილი.

პირველადი გასაღების შექმნა არსებულ მაგიდაზე მოითხოვს ALTER ნებართვას მაგიდაზე.

პირველადი გასაღების შექმნა

    Object Explorer-ში დააწკაპუნეთ ცხრილზე, რომელზეც გსურთ უნიკალური შეზღუდვის დამატება და აირჩიეთ კონსტრუქტორი.

    IN მაგიდის დიზაინერიდააწკაპუნეთ მწკრივის ამომრჩეველზე მონაცემთა ბაზის სვეტისთვის, რომლის განსაზღვრაც გსურთ, როგორც ძირითადი გასაღები. რამდენიმე სვეტის ასარჩევად დააჭირეთ და ხანგრძლივად დააჭირეთ CTRL ღილაკს და დააწკაპუნეთ მწკრივების ამომრჩეველზე დარჩენილი სვეტებისთვის.

    დააწკაპუნეთ მარჯვენა ღილაკით სვეტის მწკრივის ამომრჩეველზე და აირჩიეთ დააყენეთ პირველადი გასაღები.

გასაღების წყაროს სვეტი იდენტიფიცირებულია პირველადი გასაღების სიმბოლოთი შესაბამისი მწკრივის ამომრჩეველში.

თუ პირველადი გასაღები შედგება ერთზე მეტი სვეტისგან, მაშინ შეიძლება იყოს დუბლიკატი მნიშვნელობები ერთ სვეტში, მაგრამ ძირითადი გასაღების ყველა სვეტიდან მნიშვნელობების ყველა კომბინაცია უნიკალური უნდა იყოს.

კომპოზიციური გასაღების განსაზღვრისას, პირველადი გასაღების სვეტების თანმიმდევრობა იგივეა, რაც ცხრილში ნაჩვენები სვეტების თანმიმდევრობა. თუმცა, პირველადი გასაღების შექმნის შემდეგ, სვეტების თანმიმდევრობა შეიძლება შეიცვალოს. დამატებითი ინფორმაციისთვის იხ.

შექმენით პირველადი გასაღები არსებულ მაგიდაზე

    IN ობიექტის მკვლევარი

    შექმენით მოთხოვნა.

    შეასრულეთ. ეს მაგალითი ქმნის ძირითად გასაღებს TransactionID სვეტზე.

    გამოიყენეთ AdventureWorks2012;წადი ALTER TABLE Production.TransactionHistoryArchive ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID);წადი

შექმენით პირველადი გასაღები ახალ ცხრილში

    IN ობიექტის მკვლევარიდაუკავშირდით მონაცემთა ბაზის ძრავის მაგალითს.

    სტანდარტულ პანელზე აირჩიეთ შექმენით მოთხოვნა.

    დააკოპირეთ შემდეგი მაგალითი შეკითხვის ფანჯარაში და დააჭირეთ ღილაკს შეასრულეთ. ეს მაგალითი ქმნის ცხრილს და განსაზღვრავს ძირითად გასაღებს TransactionID სვეტისთვის.

    გამოიყენეთ AdventureWorks2012;წადი CREATE TABLE Production.TransactionHistoryArchive1 (TransactionID int NOT NULL , CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID));წადი

    დამატებითი ინფორმაციისთვის იხილეთ სექციები და .

თქვენს ყურადღებას წარმოგიდგენთ სტატიის უფასო თარგმანს SQL დამწყებთათვის ნაწილი 2

ყველა ვებ დეველოპერისთვის მნიშვნელოვანია მონაცემთა ბაზებთან ურთიერთობა. მეორე ნაწილში ვაგრძელებთ ენის შესწავლას SQLდა გამოვიყენოთ ჩვენი უნარები DBMS-ზე MySQL. ჩვენ შევისწავლით ინდექსებს, მონაცემთა ტიპებს და უფრო რთულ მოთხოვნებს.

Რა გჭირდება

გთხოვთ, იხილოთ პირველი ნაწილის განყოფილება "რა გჭირდებათ", რომელიც მდებარეობს.

თუ გსურთ ამ მაგალითების გაშვება თქვენს სერვერზე, გააკეთეთ შემდეგი:

  1. გახსენით თქვენი კონსოლი MySQLდა შედით.
  2. შექმენით მონაცემთა ბაზა "my_first_db" შეკითხვის გამოყენებით ᲨᲔᲥᲛᲜᲐ, თუ ის ადრე არ იყო შექმნილი.
  3. შეცვალეთ ბაზა ოპერატორის გამოყენებით გამოყენება.

ინდექსები

ინდექსები (ან კლავიშები) ჩვეულებრივ გამოიყენება იმ განცხადებების შესრულების სიჩქარის გასაუმჯობესებლად, რომლებიც ირჩევენ მონაცემებს (მაგ. აირჩიეთ) მაგიდებიდან.

ისინი წარმოადგენს მონაცემთა კარგი არქიტექტურის მნიშვნელოვან ნაწილს; ძნელია მათი კლასიფიკაცია „ოპტიმიზაციად“. როგორც წესი, ინდექსები ემატება თავდაპირველად, მაგრამ შეიძლება მოგვიანებით დაემატოს მოთხოვნის გამოყენებით ALTER Table.

მონაცემთა ბაზის სვეტების ინდექსირების ძირითადი მიზეზებია:

  • თითქმის ყველა ცხრილს აქვს ძირითადი გასაღები ( ᲛᲗᲐᲕᲐᲠᲘ ᲒᲐᲡᲐᲦᲔᲑᲘ), ჩვეულებრივ ეს არის "id" სვეტი.
  • თუ სვეტი განკუთვნილია უნიკალური მნიშვნელობების შესანახად, მას უნდა ჰქონდეს უნიკალური ინდექსი ( უნიკალური).
  • თუ თქვენ გჭირდებათ ხშირი ძებნა სვეტზე (გამოიყენეთ იგი წინადადებაში სად), მას უნდა ჰქონდეს რეგულარული ინდექსი ( ინდექსი).
  • თუ სვეტი გამოიყენება სხვა ცხრილთან დასაკავშირებლად, ის უნდა იყოს უცხო გასაღები, თუ ეს შესაძლებელია ( ᲣᲪᲮᲝᲣᲠᲘ ᲒᲐᲡᲐᲦᲔᲑᲘ) ან ჩვეულებრივი ინდექსი.

ძირითადი გასაღები (PRIMARY KEY)

თითქმის ყველა ცხრილს აქვს პირველადი გასაღები, ჩვეულებრივ მთელი რიცხვი ავტომატური გაზრდის ოფციით ( AUTO_INCREMET).

ქვემოთხოვნები ხშირად იწვევენ შესრულების მნიშვნელოვან დეგრადაციას, ამიტომ გამოიყენეთ ისინი სიფრთხილით.

UNION: მონაცემთა გაერთიანება

შეკითხვის გამოყენება გაერთიანება, შეგიძლიათ დააკავშიროთ მრავალი SELECT შეკითხვის შედეგები.

ეს მაგალითი აერთიანებს მდგომარეობებს, რომლებიც იწყება ასო "N"-ით უფრო დიდი პოპულაციის მქონე შტატებთან:

(SELECT * FROM ქვეყნები WHERE სახელი LIKE "n%") UNION (SELECT * FROM ქვეყნები WHERE მოსახლეობა > 10000000);

გთხოვთ გაითვალისწინოთ, რომ ნიუ-იორკი არის დიდი სახელმწიფო და იწყება ასო "N"-ით. თუმცა სიაში მხოლოდ ერთხელ ჩნდება, რადგან დუბლიკატები ამოღებულია ავტომატურად.

ასევე თხოვნების სილამაზე გაერთიანებაარის ის, რომ მათი გამოყენება შესაძლებელია სხვადასხვა ცხრილების მიმართ მოთხოვნების გაერთიანებისთვის.

მაგალითად, გვყავს მაგიდის თანამშრომლები (თანამშრომლები), მენეჯერები (მენეჯერები) და მომხმარებლები (კლიენტები). თითოეულ ცხრილს აქვს ველი ელექტრონული ფოსტის მისამართით. თუ გვსურს მივიღოთ ყველა ელექტრონული ფოსტის მისამართი ერთ მოთხოვნაში, შეგვიძლია გავაკეთოთ შემდეგი:

(SELECT email FROM თანამშრომლებისგან) UNION (SELECT email FROM managers) UNION (SELECT email FROM customers WHERE subscribed = 1);

ამ მოთხოვნის შევსებით, ჩვენ მივიღებთ ყველა თანამშრომლისა და მენეჯერის საფოსტო მისამართებს და მხოლოდ იმ კლიენტებს, რომლებიც გამოწერილი არიან დაგზავნის სიაში.

INSERT გაგრძელდა

თხოვნაზე უკვე ვისაუბრეთ INSERTწინა სტატიაში. ახლა, როდესაც ჩვენ გადავხედეთ ინდექსებს, შეგვიძლია ვისაუბროთ შეკითხვის დამატებით შესაძლებლობებზე INSERT.

ჩასმა ... დუბლიკატი გასაღების განახლებაზე

ეს არის ყველაზე ხშირად გამოყენებული მდგომარეობა. ჯერ მოთხოვნა ცდილობს შეასრულოს INSERTდა თუ მოთხოვნა ვერ მოხერხდა პირველადი დუბლიკატის გამო ( ᲛᲗᲐᲕᲐᲠᲘ ᲒᲐᲡᲐᲦᲔᲑᲘ) ან უნიკალური ( უნიკალური გასაღები) გასაღები, შემდეგ მოთხოვნა შესრულებულია განახლება.

ჯერ შევქმნათ სატესტო ცხრილი.

ეს არის საკვების შესანახი მაგიდა. "საფონდო" ველი ინახავს მარაგში არსებული პროდუქტების რაოდენობას.

ახლა ვცადოთ ცხრილში არსებული მნიშვნელობის ჩასმა და ვნახოთ რა მოხდება.

ჩვენ მივიღეთ შეცდომა.

ვთქვათ, ჩვენ მივიღეთ ახალი საცხობი და გვინდა მონაცემთა ბაზის განახლება, მაგრამ არ ვიცით უკვე არის თუ არა ჩანაწერი მონაცემთა ბაზაში. ჩვენ შეგვიძლია ჯერ შევამოწმოთ ჩანაწერის არსებობა და შემდეგ შევასრულოთ სხვა ჩასმის მოთხოვნა. ან შეგიძლიათ გააკეთოთ ყველაფერი ერთი მარტივი შეკითხვით:

მუშაობს ისევე როგორც INSERT, მაგრამ ერთი მნიშვნელოვანი მახასიათებლით. თუ ჩანაწერი უკვე არსებობს, ის წაიშლება და შემდეგ შესრულდება მოთხოვნა INSERTდა ჩვენ არ მივიღებთ შეცდომის შეტყობინებებს.

გთხოვთ გაითვალისწინოთ, რადგან ჩასმულია სრულიად ახალი მწკრივი, ავტომატური ზრდის ველი იზრდება ერთით.

ეს არის გზა თავიდან აცილების თავიდან აცილების დუბლირების შეცდომის თავიდან აცილება აპლიკაციის გაშვების შესანარჩუნებლად. შეიძლება დაგჭირდეთ ახალი ხაზის ჩასმა შეცდომების დაბეჭდვის გარეშე, თუნდაც დუბლირება იყოს.

არ არის შეცდომები ან განახლებული ხაზები.

მონაცემთა ტიპები

ცხრილის თითოეული სვეტი უნდა იყოს კონკრეტული ტიპის. ჩვენ უკვე გამოვიყენეთ ტიპები INT, VARCHARდა თარიღი, მაგრამ მათზე დეტალურად არ შეჩერებულა. ჩვენ ასევე განვიხილავთ მონაცემთა რამდენიმე ტიპს.

დავიწყოთ რიცხვითი მონაცემების ტიპებით. მე მათ ორ ჯგუფად ვყოფ: მთელი რიცხვები და წილადები.

მთელი

მთელ სვეტს შეუძლია შეინახოს მხოლოდ ნატურალური რიცხვები (ათწილადი წერტილის გარეშე). სტანდარტულად, ისინი შეიძლება იყოს დადებითი ან უარყოფითი. თუ არჩეულია ვარიანტი ხელმოუწერელი, მაშინ მხოლოდ დადებითი რიცხვების შენახვაა შესაძლებელი.

MySQL მხარს უჭერს სხვადასხვა ზომისა და დიაპაზონის 5 ტიპის მთელ რიცხვს:

წილადი რიცხვითი მონაცემების ტიპები

ამ ტიპებს შეუძლიათ წილადი რიცხვების შენახვა: FLOAT, DOUBLE და DECIMAL.

FLOAT იღებს 4 ბაიტს, DOUBLE იღებს 8 ბაიტს და მსგავსია წინა. DOUBLE უფრო ზუსტია.

DECIMAL(M,N) აქვს ცვლადი სიზუსტე. M არის ციფრების მაქსიმალური რაოდენობა, N არის ციფრების რაოდენობა ათობითი წერტილის შემდეგ.

მაგალითად, DECIMAL(13,4) აქვს 9 ათობითი ადგილი და 4 ათობითი ადგილი.

სიმებიანი მონაცემთა ტიპები

სახელიდან შეგიძლიათ გამოიცნოთ, რომ მათ შეუძლიათ სტრიქონების შენახვა.

CHAR(N)-ს შეუძლია შეინახოს N სიმბოლო და აქვს ფიქსირებული მნიშვნელობა. მაგალითად, CHAR(50) ყოველთვის უნდა შეიცავდეს 50 სიმბოლოს თითო სტრიქონზე მთელ სვეტში. მაქსიმალური შესაძლო მნიშვნელობა არის 255 სიმბოლო

VARCHAR(N) მუშაობს იგივე, მაგრამ დიაპაზონი შეიძლება განსხვავდებოდეს. N - აღნიშნავს მაქსიმალურ მნიშვნელობას. თუ შენახული სტრიქონი N სიმბოლოზე მოკლეა, მაშინ ის ნაკლებ ადგილს დაიკავებს მყარ დისკზე. მაქსიმალური შესაძლო მნიშვნელობა არის 65535 სიმბოლო.

TEXT ტიპის ვარიანტები უფრო შესაფერისია გრძელი სიმებისთვის. TEXT-ს აქვს 65535 სიმბოლოს ლიმიტი, MEDIUMTEXT-ს აქვს ლიმიტი 16,7 მილიონი, ხოლო LONGTEXT-ს აქვს ლიმიტი 4,3 მილიარდი სიმბოლოსგან. MySQL ჩვეულებრივ ინახავს მათ ცალკეულ საცავებში სერვერზე, რათა ძირითადი საცავი იყოს რაც შეიძლება მცირე და სწრაფი.

.

დასკვნა

გმადლობთ სტატიის წაკითხვისთვის. SQL არის მნიშვნელოვანი ენა და ინსტრუმენტი ვებ დეველოპერების არსენალში.

P rimary Key არის ველი ცხრილში, რომელიც ცალსახად განსაზღვრავს თითოეულ სტრიქონს/ჩანაწერს მონაცემთა ბაზის ცხრილში. ძირითადი გასაღებები უნდა შეიცავდეს უნიკალურ მნიშვნელობებს. პირველადი გასაღების სვეტს არ შეიძლება ჰქონდეს მნიშვნელობა.

ცხრილს შეიძლება ჰქონდეს მხოლოდ ერთი ძირითადი გასაღები, რომელიც შეიძლება შედგებოდეს ერთი ან მეტი ველისგან. როდესაც რამდენიმე ველი გამოიყენება ძირითად გასაღებად, მათ უწოდებენ კომპოზიტურ გასაღებს.

თუ ცხრილს აქვს პირველადი გასაღები განსაზღვრული რომელიმე ველ(ებ)ზე, მაშინ არ შეიძლება გქონდეთ ორი ჩანაწერი, რომლებსაც აქვთ იგივე მნიშვნელობა ამ ველ(ებ)ისთვის.

შენიშვნა– თქვენ შეგიძლიათ გამოიყენოთ ეს ცნებები მონაცემთა ბაზის ცხრილების შექმნისას.

პირველადი გასაღების შექმნა

აქ არის სინტაქსი, რათა განისაზღვროს ID ატრიბუტი, როგორც ძირითადი გასაღები კლიენტების ცხრილში.

CREATE TABLE CUSTOMERS(ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , ხელფასი ათწილადი (18, 2), ძირითადი გასაღები (ID));

"ID" სვეტზე პირველადი გასაღების შეზღუდვის შესაქმნელად, როდესაც უკვე არსებობს CUSTOMERS ცხრილი, გამოიყენეთ შემდეგი SQL სინტაქსი:

ALTER TABLE CUSTOMERS ADD PRIMARY Key (ID);

შენიშვნა

თუ იყენებთ ALTER TABLE განცხადებას პირველადი გასაღების დასამატებლად, პირველადი გასაღების სვეტ(ებ)ი უკვე უნდა იყოს გამოცხადებული, რომ არ შეიცავს NULL მნიშვნელობებს (თუ ცხრილი პირველად შეიქმნა).

რამდენიმე სვეტზე პირველადი გასაღების დასადგენად, გამოიყენეთ SQL სინტაქსი ქვემოთ:

CREATE Table CUSTOMERS(ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , ხელფასი ათწილადი (18, 2), ძირითადი გასაღები (ID, სახელი));

ID და NAME სვეტებზე პირველადი გასაღების შეზღუდვის შესაქმნელად, როდესაც უკვე არსებობს CUSTOMERS ცხრილი, გამოიყენეთ შემდეგი SQL სინტაქსი.

ALTER TABLE CUSTOMERS ADD CONSTRAINT PK_CUSTID ძირითადი გასაღები (ID, NAME);

პირველადი გასაღების წაშლა

თქვენ შეგიძლიათ წაშალოთ ძირითადი გასაღების შეზღუდვები ცხრილიდან ქვემოთ მოცემული სინტაქსის გამოყენებით.

ALTER TABLE CUSTOMERS DROP PRIMARY KEY;

მონაცემთა ბაზის დიზაინის პროცესში მიიღება გადაწყვეტილებები იმის შესახებ, თუ რომელი ცხრილები უნდა იყოს შეტანილი მონაცემთა ბაზაში, რა სახელები ექნებათ მათ (იდენტიფიკატორები), რა ტიპის მონაცემები იქნება საჭირო ცხრილების ასაგებად და რომელ მომხმარებლებს ექნებათ წვდომა თითოეულ მათგანზე. . გარდა ამისა, ცხრილების ეფექტურად შესაქმნელად, თქვენ უნდა უპასუხოთ შემდეგ კითხვებს:

  • რა ტიპის და ზომის სვეტები შეადგენენ თითოეულ ცხრილს და რა სახელები უნდა აირჩიოთ ცხრილის სვეტებისთვის?
  • რომელი სვეტები შეიძლება შეიცავდეს NULL მნიშვნელობას?
  • გამოყენებული იქნება ისინი? მთლიანობის შეზღუდვები, ნაგულისხმევი მნიშვნელობები და წესები სვეტებისთვის?
  • აუცილებელია თუ არა სვეტების ინდექსირება, რა ტიპის ინდექსები იქნება გამოყენებული კონკრეტულ სვეტებზე?
  • რომელი სვეტები შედის ძირითად და უცხო კლავიშებში.

MS SQL Server-ის გარემოში ცხრილების შესაქმნელად გამოიყენეთ ბრძანება:

<определение_таблицы>::= ცხრილის შექმნა [ბაზის_სახელი.[მფლობელი]. | მფლობელი. ]მაგიდის_სახელი (<элемент_таблицы>[,...n])

<элемент_таблицы> ::= {<определение_столбца>} | <имя_столбца>ას<выражение> | <ограничение_таблицы>

როგორც წესი, ცხრილის (dbo) მფლობელი არის ის, ვინც შექმნა იგი.

<Выражение>ადგენს მნიშვნელობას გამოთვლილი სვეტი. გამოთვლილი სვეტები- ეს არის ვირტუალური სვეტები, ანუ ისინი ფიზიკურად არ ინახება ცხრილში და გამოითვლება იმავე ცხრილის სვეტების მნიშვნელობების გამოყენებით. გამოთქმაში გამოთვლილი სვეტიშეიძლება იყოს რეგულარული სვეტების სახელები, მუდმივები და ფუნქციები, რომლებიც შეკრულია ერთი ან მეტი ოპერატორით. ქვემოთხოვნებს არ შეუძლიათ მონაწილეობა მიიღონ ასეთ გამოხატვაში. გამოთვლილი სვეტებიშეიძლება შევიდეს SELECT პუნქტში, როდესაც მიუთითებს მოთხოვნის შედეგად დასაბრუნებელი სვეტების სიის მითითებით. გამოთვლილი სვეტებიარ შეიძლება ჩაერთოს უცხოურ გასაღებში; მათთვის ნაგულისხმევი მნიშვნელობები არ გამოიყენება. გარდა ამისა, გამოთვლილი სვეტებივერ მიიღებს მონაწილეობას INSERT და DELETE ოპერაციებში.

<определение_столбца>::= (სვეტის_სახელი<тип_данных>) [ [ ნაგულისხმევი<выражение>] | [ IDENTITY (დაწყება, ნაბიჯი) ]]] [<ограничение_столбца>][...n]]

სვეტის განმარტებაში ყურადღება მიაქციეთ IDENTITY პარამეტრს, რომელიც მიუთითებს, რომ შესაბამისი სვეტი იქნება მრიცხველის სვეტი. ამ თვისებით მხოლოდ ერთი სვეტი შეიძლება განისაზღვროს თითო ცხრილზე. თქვენ შეგიძლიათ დამატებით მიუთითოთ საწყისი მნიშვნელობა და გაზრდის ნაბიჯი. თუ ეს მნიშვნელობები არ არის მითითებული, ორივე ნაგულისხმევად არის 1. თუ NOT FOR REPLICATION მითითებულია IDENTITY საკვანძო სიტყვით, სერვერი ავტომატურად არ გამოიმუშავებს მნიშვნელობებს ამ სვეტისთვის, მაგრამ დაუშვებს თვითნებური მნიშვნელობების ჩასმას. სვეტი.

გამოყენებული შეზღუდვები არის სვეტის შეზღუდვებიდა მაგიდის შეზღუდვები. მათ შორის განსხვავება ისაა სვეტის შეზღუდვავრცელდება მხოლოდ კონკრეტულ სფეროზე და მაგიდის შეზღუდვა- ერთი ან მეტი ველის ჯგუფებში.

<ограничение_столбца>::= [ შეზღუდვის შეზღუდვის სახელი ] ( [ NULL | NOT NULL ] | [ (პირველადი გასაღები | უნიკალური ) [ დაჯგუფებული | არაკლასტერირებული ] [ FILLFACTOR=fillfactor ] [ ჩართულია (ფაილის ჯგუფის სახელი | ნაგულისხმევი ) [REFE ]] FORE NCES | table_genus_name [(column_name_table_genus) ] [ წაშლის შესახებ ( კასკადური | მოქმედების გარეშე ) ] [ განახლებისას ( კასკადის | მოქმედების გარეშე ) ] [ არ არის გამეორებისთვის ]] | შეამოწმეთ [ არა გამეორებისთვის ](<лог_выражение>) } <ограничение_таблицы>::= ( [ (პირველადი გასაღები | უნიკალური ) [ დაჯგუფებული | არაკლასტერირებული ] ((სვეტის_სახელი [,...n])) ] |უცხო გასაღები[(სვეტის_სახელი [,...n])] წყაროები ცხრილის_სახელი [(სვეტის_სახელი ცხრილის_გენი [ ,...n])] [ წაშლის შესახებ (კასკადის შესახებ | მოქმედების გარეშე) ] [განახლების შესახებ (კასკადის გარეშე | მოქმედების გარეშე)] | არა გამეორებისთვის] | შეამოწმეთ [არ არის რეპლიკაციისთვის] (ლოგიკური გამოხატულება)

განვიხილოთ წარმოდგენილი დიზაინის ინდივიდუალური პარამეტრები, რომლებიც დაკავშირებულია შეზღუდვებთან მონაცემთა მთლიანობა. მთლიანობის შეზღუდვებიუპირატესობა ენიჭება ტრიგერებს, წესებსა და ნაგულისხმევს. TO მთლიანობის შეზღუდვებიეხება ძირითადი გასაღების შეზღუდვაᲛᲗᲐᲕᲐᲠᲘ ᲒᲐᲡᲐᲦᲔᲑᲘ საგარეო გასაღების შეზღუდვაუცხო გასაღები, უნიკალური შეზღუდვა, NULL შეზღუდვა, CHECK შეზღუდვა.

ძირითადი გასაღების შეზღუდვა (PRIMARY KEY)

ცხრილს, როგორც წესი, აქვს სვეტი ან სვეტების კომბინაცია, რომელთა მნიშვნელობები ცალსახად იდენტიფიცირებს ცხრილის თითოეულ მწკრივს. ამ სვეტს (ან სვეტებს) ე.წ მთავარი გასაღებიმაგიდა და საჭიროა მისი მთლიანობის უზრუნველსაყოფად. თუ პირველადი გასაღები შეიცავს ერთზე მეტ სვეტს, მაშინ ერთი სვეტის მნიშვნელობები შეიძლება იყოს დუბლირებული, მაგრამ ყველა სვეტის მნიშვნელობების ნებისმიერი კომბინაცია. მთავარი გასაღებიუნდა იყოს უნიკალური.

შექმნისას მთავარი გასაღები SQL Server ავტომატურად ქმნის უნიკალურ ინდექსს სვეტებზე, რომლებიც ძირითადი გასაღების ნაწილია. ის აჩქარებს ამ სვეტების მონაცემთა წვდომას გამოყენებისას მთავარი გასაღებიმოთხოვნებში.

ცხრილს შეიძლება ჰქონდეს მხოლოდ ერთი PRIMARY KEY შეზღუდვა და არცერთი სვეტი, რომელიც შედის ძირითად გასაღებში, არ შეიძლება იყოს NULL. როდესაც ცდილობთ მის გამოყენებას როგორც მთავარი გასაღებისვეტი (ან სვეტების ჯგუფი), რომლისთვისაც ძირითადი გასაღების შეზღუდვებიარ არის შესრულებული, პირველადი გასაღები არ შეიქმნება და სისტემა აჩვენებს შეცდომის შეტყობინებას.

იმის გამო, რომ PRIMARY KEY შეზღუდვა უზრუნველყოფს მონაცემთა უნიკალურობას, ის ხშირად განისაზღვრება მრიცხველის სვეტები. შემოქმედება მთლიანობის შეზღუდვები PRIMARY KEY შესაძლებელია როგორც შექმნისას, ასევე როდის მაგიდის შეცვლა. ერთ-ერთი დანიშვნა მთავარი გასაღებიარის დებულება რეფერენციული მთლიანობამონაცემები რამდენიმე ცხრილიდან. ბუნებრივია, ამის განხორციელება შესაძლებელია მხოლოდ სხვა ცხრილებში შესაბამისი უცხოური გასაღებების განსაზღვრით.

საგარეო საკვანძო შეზღუდვა

საგარეო გასაღების შეზღუდვაშენარჩუნების მთავარი მექანიზმია რეფერენციული მთლიანობაცხრილებს შორის ურთიერთობით მონაცემთა ბაზაში. FOREIGN KEY პარამეტრში უცხო გასაღების სახით მითითებული შვილობილი ცხრილის სვეტი გამოიყენება მასში არსებული ცხრილის მშობელი სვეტის მითითებისთვის. მთავარი გასაღები. მშობელი ცხრილის სახელი და მისი სვეტები მთავარი გასაღებიმითითებულია REFERENCES პუნქტში. უცხო გასაღების სახით განსაზღვრულ სვეტებში მონაცემებს შეიძლება ჰქონდეს მხოლოდ იგივე მნიშვნელობები, რაც მასთან დაკავშირებულ სვეტებში მთავარი გასაღებიმშობლის მაგიდა. არ არის აუცილებელი, რომ სვეტების სახელები ემთხვეოდეს ბავშვისა და მშობლის ცხრილების დასაკავშირებლად. პირველადი გასაღები შეიძლება განისაზღვროს სვეტზე ერთი სახელით, ხოლო სვეტს, რომელიც ექვემდებარება FOREIGN KEY შეზღუდვას, შეიძლება ჰქონდეს სრულიად განსხვავებული სახელი. ერთადერთი მოთხოვნაა, რომ სვეტები შეესაბამებოდეს მონაცემთა ტიპს და ზომას.

პირველადი გასაღების მითითება შესაძლებელია არა მხოლოდ სხვა ცხრილების სვეტებით, არამედ იმავე ცხრილში განთავსებული სვეტებით, როგორც თავად პირველადი გასაღები; ეს საშუალებას გაძლევთ შექმნათ რეკურსიული სტრუქტურები.

უცხო გასაღები შეიძლება იყოს დაკავშირებული არა მხოლოდ მთავარი გასაღებისხვა მაგიდა. ის შეიძლება განისაზღვროს მეორე ცხრილის ან ნებისმიერი სხვა სვეტისთვის UNIQUE სვეტებისთვის, მაგრამ ცხრილები უნდა იყოს იმავე მონაცემთა ბაზაში.

უცხო გასაღების სვეტები შეიძლება შეიცავდეს NULL მნიშვნელობას, მაგრამ FOREIGN KEY შეზღუდვის შემოწმება იგნორირებულია. უცხოური გასაღების ინდექსირება შესაძლებელია, შემდეგ სერვერი უფრო სწრაფად იპოვის საჭირო მონაცემებს. საგარეო გასაღები განისაზღვრება როგორც შექმნისას, ასევე დროს მაგიდების შეცვლა.

შეზღუდვა რეფერენციული მთლიანობაგანსაზღვრავს მოთხოვნას, რომ ბავშვის ცხრილის ყველა ჩანაწერისთვის უნდა იყოს ჩანაწერი მშობლის ცხრილში. ამ შემთხვევაში, დაბლოკილია ურთიერთობის სვეტის მნიშვნელობის შეცვლა მშობლის ცხრილის ჩანაწერში ბავშვის ჩანაწერის თანდასწრებით, ასევე მშობლის ჩანაწერის წაშლა (კასკადური ცვლილებებისა და წაშლის აკრძალვა), რაც გარანტირებულია ნაგულისხმევად. ON DELETE NO ACTION და ON UPDATE NO ACTION პარამეტრები. კასკადური ეფექტების ჩასართავად გამოიყენეთ ON DELETE CASCADE და ON UPDATE CASCADE პარამეტრები.