แลกเปลี่ยนคีย์หลัก

หุ่นยนต์

คีย์หลักคือเขตข้อมูลในตารางที่ระบุแต่ละแถว/บันทึกในตารางฐานข้อมูลโดยไม่ซ้ำกัน

กุญแจหลักของแม่ที่มีความผิดมีความหมายเฉพาะตัว

คีย์แรกต้องไม่มีความสำคัญใดๆตารางสามารถมีคีย์หลักได้เพียงคีย์เดียวเท่านั้น ซึ่งสามารถสร้างขึ้นจากฟิลด์เดียวหรือหลายฟิลด์ได้

หากมีการเลือกฟิลด์จำนวนหนึ่งเป็นคีย์หลัก จะเรียกว่าคีย์คลังสินค้า

เนื่องจากตารางมีคีย์หลัก ไม่ว่าค่าของเขตข้อมูลใดๆ ก็ตาม คุณจึงสามารถมีระเบียนได้ 2 รายการ แต่ไม่ใช่ค่าของเขตข้อมูลเดียวกัน

บันทึก

- คุณสามารถเข้าใจความเข้าใจนี้และสร้างตารางฐานข้อมูลได้ การสร้างคีย์หลัก:

ไวยากรณ์แกนสำหรับการกำหนดแอตทริบิวต์ ID เป็นคีย์หลักในตารางลูกค้า

คีย์แรกต้องไม่มีความสำคัญใดๆ

สร้างลูกค้าตาราง (ID INT ไม่ใช่ NULL, ชื่อ VARCHAR (20) ไม่ใช่ NULL, อายุ INT ไม่ใช่ NULL, ที่อยู่ CHAR (25) , เงินเดือนทศนิยม (18, 2), คีย์หลัก (ID));

ในการสร้างการแลกเปลี่ยนคีย์หลักในคอลัมน์ ID หากมีตารางลูกค้าอยู่แล้ว ให้ใช้ขั้นตอนต่อไปนี้:

ไวยากรณ์ SQL

แก้ไขลูกค้าตารางเพิ่มคีย์หลัก (ID);

หากคุณใช้คำสั่ง ALTER TABLE เพื่อเพิ่มคีย์หลัก ส่วนประกอบของคีย์หลักจะอยู่ภายใต้กฎเดียวกันกับค่าที่ไม่มี NULL (เนื่องจากตารางถูกสร้างขึ้นก่อน)

หากต้องการกำหนดคีย์หลักให้กับหลายรายการ ให้ใช้ไวยากรณ์ SQL ด้านล่าง:

สร้างลูกค้าตาราง (ID INT ไม่เป็นโมฆะ, ชื่อ VARCHAR (20) ไม่เป็นโมฆะ, อายุ INT ไม่เป็นโมฆะ, ที่อยู่ CHAR (25) , เงินเดือนทศนิยม (18, 2), คีย์หลัก (ID, NAME));

หากต้องการสร้างการแยกคีย์หลักลงในคอลัมน์ ID และ NAME หากมีตารางลูกค้าอยู่แล้ว ให้แก้ไขไวยากรณ์ SQL ต่อไปนี้

แก้ไขลูกค้าตารางเพิ่มข้อจำกัดคีย์หลัก PK_CUSTID (ID, NAME);

มุมมองของคีย์หลัก

คุณสามารถล้างคีย์หลักออกจากตารางได้โดยใช้ไวยากรณ์เพิ่มเติมด้านล่าง

คีย์ต่างประเทศ (stovpets1, Stovets2, ... StovetsN) การอ้างอิง head_table (stovets_head_table1, Stovets_head_table2, ... Stovets_head_tablesN)

หากต้องการสร้างการแลกเปลี่ยนคีย์ต่างประเทศ หลังจาก FOREIGN KEY ให้ระบุส่วนของตารางที่แสดงถึงคีย์ต่างประเทศ

และหลังจากคีย์เวิร์ด REFERENCES ชื่อของตารางที่เกี่ยวข้องจะถูกระบุ และจากนั้นที่แขนของตารางที่เกี่ยวข้อง ขึ้นอยู่กับว่าคีย์ต่างประเทศใดถูกระบุ

หลังจากนิพจน์ REFERENCES จะมีนิพจน์ ON DELETE และ ON UPDATE ซึ่งกำหนดเวลาในการลบและอัปเดตแถวจากตารางหลัก

ตัวอย่างเช่น มีตารางสำคัญสองตาราง และเราเชื่อมโยงตารางเหล่านั้นด้วยคีย์ต่างประเทศเพิ่มเติม: สร้างตารางลูกค้า (Id INT PRIMARY KEY AUTO_INCREMENT, Age INT, FirstName VARCHAR(20) NOT NULL, LastName VARCHAR(20) NOT NULL, Phone VARCHAR(20) NOT NULL UNIQUE);สร้างคำสั่งซื้อตาราง (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreateAt Date, FOREIGN KEY (CustomerId) REFERENCES ลูกค้า (Id));

ใน

ถึงผู้ชายคนนี้

กำหนดให้กับตารางลูกค้าและคำสั่งซื้อ

ลูกค้าคือหัวหน้าและเป็นตัวแทนของลูกค้า

    คำสั่งซื้อเก่าและแสดงถึงคำสั่งซื้อที่ทำโดยลูกค้า

    ตารางคำสั่งซื้อเชื่อมโยงผ่านคอลัมน์ CustomerId ไปยังตารางลูกค้าและคอลัมน์ Id

    จากนั้นคอลัมน์ CustomerId จะเป็นคีย์นอกที่ตรงกับคอลัมน์ Id จากตารางลูกค้า

    เมื่อใช้ตัวดำเนินการ CONSTRAINT คุณสามารถตั้งชื่อเพื่อกำหนดคีย์นอกได้:

    SET DEFAULT : เมื่อแถวที่เกี่ยวข้องถูกลบออกจากตารางหลัก ให้ตั้งค่าสำหรับตัวเรียงคีย์นอกเป็นค่าที่ระบุสำหรับแอตทริบิวต์ DEFAULT เพิ่มเติม

ไม่ว่าตัวเลือกนี้จะใช้ได้โดยทั่วไปหรือไม่ แต่เอ็นจิ้น InnoDB pro ก็ไม่รองรับไวรัสนี้

น้ำตกแห่งมุมมอง

มุมมองแบบเรียงซ้อนช่วยให้เมื่อแถวถูกลบออกจากตารางหลัก สามารถลบแถวที่เกี่ยวข้องทั้งหมดออกจากตารางเก่าได้โดยอัตโนมัติ

สำหรับผู้ที่ใช้ตัวเลือก CASCADE: สร้างคำสั่งซื้อตาราง (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreateAt Date, FOREIGN KEY (CustomerId) REFERENCES ลูกค้า (Id) ON DELETE CASCADE);ไวรัส ON UPDATE CASCADE ทำงานในลักษณะเดียวกัน

เมื่อเปลี่ยนคีย์หลัก ค่าของคีย์รองที่เกี่ยวข้องจะเปลี่ยนโดยอัตโนมัติ

อย่างไรก็ตาม ส่วนของคีย์หลักเปลี่ยนแปลงน้อยมาก และโดยหลักการแล้ว ไม่แนะนำให้เปลี่ยนคีย์หลักจาก

ค่าที่เปลี่ยนแปลงได้

จากนั้นในทางปฏิบัติแล้วนิพจน์ ON UPDATE จะไม่ค่อยได้ใช้ ตั้งค่าเป็นโมฆะเมื่อตั้งค่าตัวเลือก SET NULL สำหรับคีย์ต่างประเทศ จำเป็นต้องตั้งค่าคีย์ต่างประเทศเพื่อให้อนุญาตค่า NULL:

สร้างคำสั่งซื้อตาราง (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreateAt Date, FOREIGN KEY (CustomerId) REFERENCES ลูกค้า (Id) ON DELETE SET NULL);

ในบทความนี้เราจะลองดูทุกอย่างที่มีกุญแจ ฐานข้อมูล SQL:ความจำเป็น การสร้างสรรค์ การแลกเปลี่ยนกุญแจ

ซากาลอม : มันจะน่าเบื่อ😉 แผนสำหรับวันนี้คือ:ฐานข้อมูลเชิงสัมพันธ์ทางทฤษฎี กุญแจกิจกรรมเหล่านี้ได้รับการออกแบบเพื่อสร้างขอบเขตพิเศษที่สนับสนุนความสมบูรณ์และความพร้อมใช้งานของข้อมูลในตารางฐานข้อมูล

ยาคโช คาซาติ

ด้วยคำพูดง่ายๆ จากนั้นกุญแจก็เข้าช่วยให้คุณระบุบันทึกในตารางโดยไม่ซ้ำกันโดยไม่ต้องกลัวว่ารายการสำคัญจะถูกทำซ้ำ

ลองดูตัวอย่าง: สมมติว่าคุณมีที่วางโต๊ะ ตารางนี้มีฟิลด์ต่อไปนี้: PIB, People's Republic, Phoneจะระบุชาวต่างชาติได้อย่างไร? พารามิเตอร์เช่น PIB และโทรศัพท์ไม่สามารถเชื่อถือได้แม้ว่าเราอาจมีโคริสตูแวคสองสามตัวที่มีชื่อเล่นเหมือนกันและยังมีชื่อของพวกเขาด้วย

หมายเลขโทรศัพท์อาจมีการเปลี่ยนแปลงเมื่อเวลาผ่านไป และผู้ใช้ที่มีหมายเลขโทรศัพท์อาจไม่ใช่หมายเลขในฐานข้อมูลของเรา

แกนที่เดาคีย์แรก ระบุตัวระบุที่ไม่ซ้ำกันเพียงครั้งเดียวเท่านั้น)

ใน mySql (ระบุตัวระบุที่ไม่ซ้ำกันเพียงครั้งเดียวเท่านั้นที่ก้นเราสามารถเลือกก้นทั้งหมดจากสนามได้

AUTO_INCREMENT ไม่สามารถระบุได้เว้นแต่จะระบุว่านี่คือคีย์แรก

ฉันคิดว่าเป็นการยากที่จะเดาว่าฟิลด์นั้นถูกกำหนดให้เป็นคีย์หลักและต้องไม่ว่างเปล่าก่อนที่จะสร้างเรกคอร์ด กุญแจภายนอก (คีย์ต่างประเทศ มากกว่ากุญแจภายนอก - Yogo เรียกว่าเป็นไปได้คุณต้องเชื่อมโยงตารางเข้าด้วยกัน

หากคุณดูภาพด้านบน คีย์ภายนอกจะเป็นช่องเจ้าของโพสต์ในตาราง

ตามกฎแล้ว เมื่อสร้างตาราง ให้ระบุคอลัมน์ที่มีค่าจำนวนเต็มที่ไม่ซ้ำกัน

Yak mi tse กลัวถ้าพวกเขาสร้างโต๊ะขึ้นมา ผู้จัดหาคอลัมน์ กุญแจภายนอก (กุญแจภายนอก ไม่สามารถระบุได้เว้นแต่จะระบุว่านี่คือคีย์แรก

ซัพพลายเออร์_id จะมีเอกลักษณ์เฉพาะตัวต่อผิว

ค่าเหล่านี้จะแสดงบนพื้นที่คอลัมน์ บุรุษไปรษณีย์ในตาราง

วซุตยา. บุรุษไปรษณีย์ ลองพูดแบบนี้และดูตัวอย่างเพื่อดูว่าคีย์ใหม่ถูกสร้างขึ้นอย่างไร

การสร้างคีย์ภายนอก

ในแอปพลิเคชัน สองฟิลด์จะรวมกันเป็นคีย์คลังสินค้า และตารางจะไม่มีเรกคอร์ดที่มีฟิลด์ใหม่เหล่านี้

นั่นคือทั้งหมดที่มีสำหรับกุญแจ SQL.นี่เป็นความช่วยเหลือเล็กน้อย - การเตรียมสถิติและเราจะดูวิธีรวมตารางเพื่อให้กลายเป็นฐานข้อมูลเดียว

ในระหว่างกระบวนการออกแบบฐานข้อมูล จะมีการตัดสินใจเกี่ยวกับตารางที่จะเข้าไปในฐานข้อมูล ชื่อ (ตัวระบุ) ที่จะเป็นอย่างไร ข้อมูลประเภทใดที่จำเป็นในตาราง และเครื่องมือประเภทใดที่จะถูกปฏิเสธการเข้าถึง

  • นอกจากนี้ เพื่อให้สร้างตารางได้อย่างมีประสิทธิภาพ จำเป็นต้องตอบคำถามต่อไปนี้:
  • แต่ละตารางจะมีรายการประเภทและขนาดใดจะต้องเลือกชื่อรายการในตารางอย่างไร
  • ตัวเลือกใดที่สามารถลบค่า NULL ได้ Vikorstans จะเป็นใคร?การแลกเปลี่ยนความซื่อสัตย์
  • ความหมายเบื้องหลังกฎและกฎเกณฑ์ของ stovpts คืออะไร?
  • การจัดทำดัชนีประเภทใดที่จำเป็นสำหรับรายการเฉพาะ?

ส่วนประกอบใดบ้างที่รวมอยู่ในคีย์หลักและคีย์ภายนอก เพื่อสร้างตารางที่อยู่ตรงกลางของ MSเซิร์ฟเวอร์ SQL

<определение_таблицы>คำสั่งวิโคริสต์:<элемент_таблицы>::= สร้างตาราง [data_base_name.[vlasnik].

<элемент_таблицы> ::= {<определение_столбца>} | <имя_столбца>- วลาสนิค<выражение> | <ограничение_таблицы>

]table_name (

<Выражение>[,...น]) เช่น. โทรหาเจ้าของตาราง (dbo) ว่าเป็นคนสร้างมันขึ้นมาตั้งค่าสำหรับ เช่นนับสตอฟ โทรหาเจ้าของตาราง (dbo) ว่าเป็นคนสร้างมันขึ้นมารายการที่คำนวณ โทรหาเจ้าของตาราง (dbo) ว่าเป็นคนสร้างมันขึ้นมา- คอลัมน์เสมือนเหล่านี้ เช่น ตารางทางกายภาพจะถูกบันทึกและคำนวณโดยใช้ค่าเพิ่มเติมของคอลัมน์ในตารางเดียวกัน คุณ virazi สำหรับอาจมีชื่อของส่วนคำสั่งเริ่มต้น ค่าคงที่ และฟังก์ชันที่เกี่ยวข้องกับตัวดำเนินการตั้งแต่หนึ่งตัวขึ้นไป

<определение_столбца>พี่น้องไม่อาจยอมรับชะตากรรมด้วยการแสดงออกเช่นนั้นได้<тип_данных>สามารถเปิดได้ก่อนส่วน SELECT เมื่อระบุรายการตัวเลือกที่อาจเปลี่ยนแปลงอันเป็นผลมาจากรายการที่เลือก<выражение>พวกเขาไม่สามารถเข้าไปได้จนกว่าจะถึงกุญแจด้านนอกเพราะพวกเขาไม่คุ้มค่าเงิน<ограничение_столбца>นอกจากนี้,

รายการที่คำนวณ ไม่สามารถมีส่วนร่วมในการดำเนินการ INSERT และ DELETE::= ( ชื่อ ) [ [ ค่าเริ่มต้น- [ ตัวตน (ซัง, จระเข้) ]]] [

แยก obezennya vikoristovuyutsya แลกเปลี่ยน stovptsyaі แลกโต๊ะ- ความแตกต่างระหว่างพวกเขาก็คือ แลกเปลี่ยน stovptsyaมันถึงสนามร้องเพลงเท่านั้นและ แลกโต๊ะ- มากถึงกลุ่มของหนึ่งหรือหลายสาขา

<ограничение_столбца>::= [ CONSTRAINT name_of_replacement ] ( [ NULL | NOT NULL ] | [ (คีย์หลัก | UNIQUE ) [ CLUSTERED | NONCLUSTERED ] [ WITH FILLFACTOR=replacement_factor ] [ ON (file_group_name | DEFAULT ) ] Row_table_name [(_name' table_row) ] [ เมื่อลบ ( CASCADE | ไม่มีการดำเนินการ ) ] [ บนการอัปเดต ( CASCADE | ไม่มีการดำเนินการ ) ] [ ไม่ใช่สำหรับการจำลอง ]] | ตรวจสอบ [ ไม่ใช่สำหรับการจำลอง ](<лог_выражение>) } <ограничение_таблицы>::= ( [ ( PRIMARY KEY | UNIQUE ) [ CLUSTERED | NONCLUSTERED ] ((name_stuff [,...n])) ] |FOREIGN KEY[(name_stuff [,...n])] ข้อมูลอ้างอิง im 'i_read_table [( im_stovtsia_,...n])] [ ON DELETE ( CASCADE | NO ACTION ) ] [ ON UPDATE ( CASCADE | NO ACTION ) ] | ไม่สำหรับการจำลอง ] |

มาดูพารามิเตอร์ของโครงสร้างที่นำเสนอที่เกี่ยวข้องกับขอบเขตกัน ความสมบูรณ์ของข้อมูล. การจำกัดความซื่อสัตย์ให้ความสำคัญกับสิ่งกระตุ้น กฎเกณฑ์ และความหมายเบื้องหลังกฎเกณฑ์ ถึงการแบ่งเขตของความซื่อสัตย์ ปรากฏขอบเขตของคีย์หลัก คีย์หลักการแลกเปลี่ยนคีย์ภายนอก

คีย์ต่างประเทศ, การแลกเปลี่ยนเอกลักษณ์ UNIQUE, การแลกเปลี่ยนค่า NULL, การแลกเปลี่ยน CHECK

การแลกเปลี่ยนคีย์หลัก (PRIMARY KEY) ตารางสามารถประกอบด้วยคอลัมน์รวมกัน โดยค่าที่ระบุแต่ละแถวของตารางโดยไม่ซ้ำกันหุ้นตัวนี้ (หรือหุ้น) เรียกว่า คีย์แรกตารางและการรักษาความปลอดภัยที่จำเป็นของความซื่อสัตย์

หากคีย์หลักรวมอยู่ในคอลัมน์มากกว่าหนึ่งคอลัมน์ก็สามารถทำซ้ำค่าภายในคอลัมน์เดียวได้หรืออาจมีค่าผสมของทุกคอลัมน์ คีย์แรกคีย์หลัก คีย์แรกอาจจะไม่ซ้ำกัน

เมื่อเปิดแล้ว คีย์แรก SQL Server จะสร้างดัชนีเฉพาะสำหรับคอลัมน์ที่ขึ้นไปถึงคีย์หลักโดยอัตโนมัติ ปรากฏคุณจะเข้าถึงบทความเหล่านี้ได้เร็วขึ้นตามชั่วโมงที่คุณค้นหา

ที่ศาปิตาห์ ตารางอาจไม่มีการแบ่งเขตคีย์หลักและเนื่องจากการรวมไว้ในคีย์หลัก จึงไม่สามารถเก็บค่า NULL ได้เมื่อคุณลอง vikorystuvat อย่างไร Vikorstans จะเป็นใคร? stovpets (หรือกลุ่ม stovpts) สำหรับใครก็ตาม ไม่เปลี่ยน ยังไม่ได้สร้างคีย์เดิมแต่ระบบแสดงการแจ้งเตือนเกี่ยวกับการชำระบัญชีชิ้นส่วนการแลกเปลี่ยนคีย์หลักรับประกันความเป็นเอกลักษณ์ของข้อมูล ซึ่งมักใช้เพื่อ คีย์แรกบุคลากรทางการแพทย์ - ประตูตารางข้อมูล

แน่นอนว่าสิ่งนี้สามารถนำไปใช้ได้ก็ต่อเมื่อมีการกำหนดคีย์ภายนอกบางตัวในตารางอื่น

การแลกเปลี่ยนกุญแจต่างประเทศ ( FOREIGN KEY )การแลกเปลี่ยนคีย์ภายนอก - ประตู- นี่คือกลไกหลักในการสนับสนุน ตารางสามารถประกอบด้วยคอลัมน์รวมกัน โดยค่าที่ระบุแต่ละแถวของตารางโดยไม่ซ้ำกันระหว่างตารางของฐานข้อมูลเชิงสัมพันธ์ตารางลูกตัวใดตัวหนึ่งค่าเป็นคีย์นอกในพารามิเตอร์ FOREIGN KEY ข้อความจะถูกส่งไปยังตารางพ่อตัวใดตัวหนึ่งที่มี คีย์แรก- ชื่อโต๊ะของพ่อและเนื้อหา คีย์แรก vkuzuyutsya ที่แม่น้ำ ข้อมูลอ้างอิง

ข้อมูลในส่วนคำสั่งที่มีค่าเป็นคีย์ต่างประเทศสามารถมีค่าเดียวกันกับที่พบในส่วนคำสั่งที่เกี่ยวข้องเท่านั้น

โต๊ะของพ่อ. ตารางสามารถประกอบด้วยคอลัมน์รวมกัน โดยค่าที่ระบุแต่ละแถวของตารางโดยไม่ซ้ำกันไม่จำเป็นต้องหลีกเลี่ยงชื่อของคู่ค้าเพื่อเชื่อมโยงตารางลูกและตารางหลัก

คีย์หลักสามารถกำหนดให้กับชื่อเดียวได้ แต่ด้วยผลจากการที่คีย์ต่างประเทศถูกซ้อนทับ จึงอาจมีชื่อที่แตกต่างไปจากเดิมอย่างสิ้นเชิง ข้อแตกต่างเพียงอย่างเดียวคือความสอดคล้องของข้อมูล ขึ้นอยู่กับประเภทและขนาดของข้อมูล.

คีย์หลักสามารถเข้าถึงได้จากตารางอื่น เช่นเดียวกับจากคอลัมน์ที่เพิ่มลงในตารางเดียวกันซึ่งเป็นเจ้าของคีย์หลัก - ประตูสิ่งนี้ทำให้สามารถสร้างโครงสร้างแบบเรียกซ้ำได้