ชนิดข้อมูลใน SQL

มีอยู่

รู้เบื้องต้นเกี่ยวกับประเภทข้อมูลใน SQL

ซึ่งแตกต่างจาก JavaScript, SQL มีการพิมพ์ที่แข็งแกร่ง ในทุกตาราง ทุกคอลัมน์มีประเภทข้อมูลคงที่ของตัวเอง

มีชนิดข้อมูลจำนวนมาก แต่ไม่เหมือนกับภาษา Java คือมีชนิดข้อมูลจำนวนมากไม่ใช่เพราะมีชนิดข้อมูลสำหรับทุกโอกาส ฐานข้อมูลขึ้นอยู่กับขนาดของข้อมูลเป็นอย่างมาก ดังนั้น ชนิดข้อมูลจำนวนมากจึงแตกต่างกันเฉพาะในความยาวเท่านั้น

โดยรวมแล้วสามารถแบ่งประเภทข้อมูลออกเป็น 5 กลุ่ม:

  • ประเภทตัวเลข
  • ประเภทสตริง
  • ประเภทการจัดเก็บวันที่และเวลา
  • วัตถุ: มักจะแสดงเป็นชุดของไบต์
  • การขนส่ง : JSON และ XML

โดยปกติแล้ว DBMS ที่แตกต่างกันยังคงมีประเภทข้อมูลของตัวเอง DBMS แต่ละรายการมีความเชี่ยวชาญเฉพาะของตนเอง ดังนั้นการเพิ่มประเภทข้อมูลใหม่จึงเป็นเรื่องธรรมดามาก

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

หากคุณทำงานใน DBMS ของอุตสาหกรรม (องค์กร) ใด ๆ มีแนวโน้มว่าคุณจะต้องจัดการกับประเภทข้อมูลและหน้าที่ของมัน สิ่งที่จำเป็นต้องอ่านหนังสือดีๆ 2-5 เล่ม

ในฐานะที่เป็นส่วนหนึ่งของความคุ้นเคยกับ SQL เราจะพิจารณาประเภทข้อมูลหลักสามกลุ่ม:

  • ตัวเลข
  • สตริง
  • วันที่

ประเภทตัวเลขใน SQL

ใน SQL ประเภทตัวเลขแบ่งออกเป็นสามกลุ่ม:

  • ประเภทจำนวนเต็ม
  • เลขจุดคงที่ (จำนวนทศนิยมคงที่)
  • เลขทศนิยม

เริ่มต้นด้วยจำนวนเต็ม มีเพียง 5 รายการและสามารถอธิบายได้ในตารางเดียว:

# พิมพ์ชื่อ ความยาวเป็นไบต์ อะนาล็อกจาก Java ค่าต่ำสุด มูลค่าสูงสุด
1 ไทนี่อินท์ 1 ไบต์ -128 127
2 สมอลลินท์ 2 สั้น -32.768 32.767
3 ขนาดกลาง 3 -8,388,608 8,388,607
4 INT 4 นานาชาติ -2,147,483,648 2,147,483,647
5 บิ๊กอินท์ 8 ยาว -2 63 2 63-1

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

ถัดมาประเภทจุดลอยตัวเช่นเดียวกับใน Java มีเพียงสองประเภทเท่านั้น:

# พิมพ์ชื่อ ความยาวเป็นไบต์ อะนาล็อกจาก Java ค่าต่ำสุด มูลค่าสูงสุด
1 ลอย 4 ลอย -3.40E+38 +1.18E+38
2 สองเท่า 8 สองเท่า -1.79E+308 +1.79E+308

อีกครั้งไม่มีอะไรใหม่ ทุกอย่างเหมือนกับใน Java อย่างไรก็ตาม ไม่เหมือนกับ Java ตรง SQL มีชนิดพิเศษอีกประเภทหนึ่ง นั่นคือจำนวนจริงแบบจุดตายตัว มันเรียกว่าทศนิยม

โดยทั่วไปแล้วประเภทนี้จะใช้ในการจัดเก็บจำนวนเงิน เมื่อเขียนชื่อประเภทนี้ มักจะระบุว่ามีทศนิยมกี่ตำแหน่งก่อนและหลังจุดทศนิยม รูปแบบทั่วไปมีลักษณะดังนี้:

DECIMAL(total_characters, after_comma)

และตัวอย่างเล็กน้อย:

salary DECIMAL(5,2)

นี่คือวิธีที่เราอธิบายความจริงที่ว่าคอลัมน์เงินเดือนสามารถมีจำนวนเต็ม (ทศนิยมสูงสุด 3 ตำแหน่ง) และเศษส่วน - ทศนิยม 2 ตำแหน่ง

จำนวนอักขระสูงสุดที่ประเภท DECIMAL รองรับคือ 65

ประเภทสตริงใน SQL

แถวในฐานข้อมูลสามารถจัดเก็บได้สองรูปแบบ:

  • สตริงความยาวคงที่
  • สตริงที่มีความยาวผันแปรได้

ระบุสตริงความยาวคง ที่เป็น CHAR :

CHAR(length)

ความยาวคงที่หมายความว่าค่าทั้งหมดของคอลัมน์นี้จะมีจำนวนอักขระคงที่อย่างเคร่งครัด

ตัวอย่างของสตริงที่มีความยาวคงที่:

country_code CHAR(2)

สตริงความยาวผันแปรระบุตาม ประเภท VARCHAR :

VARCHAR(max_length)

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

ตัวอย่างสตริงความยาวผันแปร:

phone VARCHAR(12)

สตริงที่มีความยาวคงที่มีข้อได้เปรียบอย่างมาก หากไคลเอนต์ขอให้เซิร์ฟเวอร์ SQL คืนแถวที่ 1,000,000 จากตารางให้เขา และแถวในตารางมีความยาวคงที่ เมื่อทราบความยาวของแถวแล้ว คุณสามารถคำนวณไบต์ที่เกี่ยวข้องกับที่ต้องการได้อย่างง่ายดาย แถว.

ในกรณีของบรรทัดที่มีความยาวผันแปร จะไม่สามารถค้นหาแถวที่ต้องการในตารางได้อย่างรวดเร็ว จำความเร็วในการเข้าถึง ArrayList และ LinkedList สถานการณ์จะใกล้เคียงกันที่นี่

ลองเปรียบเทียบวิธีจัดเก็บสตริงที่มีความยาวต่างกันในตาราง โดยขึ้นอยู่กับประเภทข้อมูล

เส้น ชาร์(4) ไบต์ที่จะจัดเก็บ วาร์ชาร์(4) ไบต์ที่จะจัดเก็บ
'' ' ' 4 '' 1
'แอ๊บ' 'แอ๊บ' 4 'แอ๊บ' 3
'เอบีซีดี' 'เอบีซีดี' 4 'เอบีซีดี' 5
'abcdefgh' 'เอบีซีดี' 4 'เอบีซีดี' 5

บันทึก. ประเภท VARCHAR ต้องการอีกหนึ่งไบต์สำหรับความยาวเดียวกัน เนื่องจากต้องเก็บความยาวของสตริงเพิ่มเติม

ประเภทชั่วคราวใน SQL

SQL ยังมีประเภทพิเศษสำหรับการจัดเก็บวันที่และเวลา มีทั้งหมดห้าประเภท:

# พิมพ์ชื่อ อะนาล็อกจาก Java DateTime API ตัวอย่าง ค่าต่ำสุด มูลค่าสูงสุด
1 วันที่ วันที่ท้องถิ่น '2022-06-30' '1000-01-01' '9999-12-31'
2 เวลา เวลาท้องถิ่น 'hh:mm:ss[.เศษส่วน]' '-838:59:59.000000' '838:59:59.000000'
3 วันเวลา LocalDateTime '1000-01-01 00:00:00.000000' '9999-12-31 23:59:59.999999'
4 ประทับเวลา วันที่ '1970-01-01 00:00:01.000000' '2038-01-19 03:14:07.999999'
5 ปี พ.ศ. 2444 2155

ข้อมูลทั้งหมดในแบบสอบถามเขียนเป็นสตริง - ในเครื่องหมายอัญประกาศเดี่ยว รูปแบบรายการเริ่มจากใหญ่ไปหาเล็กที่สุด:

  • ปี
  • เดือน
  • วัน
  • ชั่วโมง
  • นาที
  • ที่สอง
  • เสี้ยววินาที

ประเภท DATE, TIME และ DATETIME สามารถพิจารณาโดยทั่วไปว่าเป็นแอนะล็อกของประเภทจาก Java DateTme API: LocalDate, LocalTime, LocalDateTime ตรรกะเป็นเรื่องเดียวกัน

ประเภท TIMESTAMP เก็บข้อมูลในหน่วยมิลลิวินาทีตั้งแต่ต้นปี 1970 (มาตรฐานระบบปฏิบัติการ UNIX) ในรูปแบบนี้จะถูกจัดเก็บตามประเภทวันที่ในภาษาจาวา

และสุดท้ายคือประเภท YEAR ซึ่งมีความยาว 1 ไบต์และเก็บค่าตั้งแต่ 1 ถึง 255 ดังนั้นช่วงปีที่มีให้คือ 1901-2155 ประเภทนี้ไม่สามารถจัดเก็บปี 1900 ได้ เนื่องจากค่า 0 ใช้เพื่อเข้ารหัสค่า NULL

การจัดเก็บวัตถุใน SQL

มีประเภทพิเศษสำหรับจัดเก็บวัตถุหรือข้อความที่มีความยาวมาก เราจะไม่ลงรายละเอียดเกี่ยวกับพวกเขา แต่ฉันจะแสดงรายการต่อไป:

# พิมพ์ชื่อ คำอธิบาย
1 ข้อความ ใช้สำหรับเก็บข้อความยาวๆ เมื่อเปรียบเทียบและเรียงลำดับในฟิลด์นี้ จะใช้อักขระ 100 ตัวแรกเท่านั้น
2 หยด ชื่อย่อมาจาก Byte Large Object เก็บเป็นเพียงชุดของไบต์ สามารถใช้เก็บรูปภาพในฐานข้อมูลได้ เช่น
3 CLOB ชื่อย่อมาจาก Char Large Object ใช้สำหรับเก็บข้อความยาวๆ
4 ENUM ให้คุณตั้งค่าชุดค่าคงที่และเก็บค่าใดค่าหนึ่งเป็นค่า
5 ชุด ให้คุณตั้งค่าชุดค่าคงที่และเก็บชุดย่อยเป็นค่า มักจะเก็บไว้เป็นไบนารีมาสก์

ในทางทฤษฎี คุณสามารถซีเรียลไลซ์วัตถุ Java เป็นชุดของไบต์และจัดเก็บไว้ในฐานข้อมูลเป็น BLOB การบันทึกวัตถุไม่ใช่ปัญหา จะทำงานร่วมกับเขาต่อไปได้อย่างไร?

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

ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ