MariaDB - คู่มือฉบับย่อ

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

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

ระบบจัดการฐานข้อมูลเชิงสัมพันธ์หรือ RDBMS จัดเก็บข้อมูลในตารางต่างๆความสัมพันธ์ระหว่างตารางเหล่านี้สร้างขึ้นโดยใช้คีย์หลักและคีย์ต่างประเทศ

RDBMS มีคุณสมบัติดังต่อไปนี้ -

  • ช่วยให้คุณใช้แหล่งข้อมูลที่มีตารางคอลัมน์และดัชนีได้

  • ทำให้มั่นใจได้ถึงความสมบูรณ์ของการอ้างอิงในแถวของตารางหลายตาราง

  • พวกเขาอัปเดตดัชนีโดยอัตโนมัติ

  • พวกเขาตีความคำสั่ง SQL และการดำเนินการในการจัดการหรือจัดหาข้อมูลจากตาราง

คำศัพท์ RDBMS

ก่อนที่เราจะเริ่มการสนทนาเกี่ยวกับ MariaDB ขอให้เราตรวจสอบคำศัพท์ที่เกี่ยวข้องกับฐานข้อมูล

  • Database - ฐานข้อมูลเป็นแหล่งข้อมูลที่ประกอบด้วยตารางที่เก็บข้อมูลที่เกี่ยวข้อง

  • Table - ตารางหมายถึงสเปรดชีตคือเมทริกซ์ที่มีข้อมูล

  • Column- คอลัมน์หมายถึงองค์ประกอบข้อมูลคือโครงสร้างที่เก็บข้อมูลประเภทหนึ่ง ตัวอย่างเช่นวันที่จัดส่ง

  • Row- แถวคือโครงสร้างการจัดกลุ่มข้อมูลที่เกี่ยวข้อง ตัวอย่างเช่นข้อมูลสำหรับลูกค้า เรียกอีกอย่างว่าทูเพิลรายการหรือเรกคอร์ด

  • Redundancy - คำนี้หมายถึงการจัดเก็บข้อมูลสองครั้งเพื่อเร่งระบบ

  • Primary Key- หมายถึงค่าที่เป็นเอกลักษณ์และระบุตัวตนได้ ค่านี้ไม่สามารถปรากฏสองครั้งภายในตารางและมีเพียงแถวเดียวที่เชื่อมโยงกับค่านี้

  • Foreign Key - คีย์นอกทำหน้าที่เป็นตัวเชื่อมระหว่างสองตาราง

  • Compound Key- คีย์ผสมหรือคีย์ผสมคือคีย์ที่อ้างถึงหลายคอลัมน์ หมายถึงคอลัมน์หลายคอลัมน์เนื่องจากคอลัมน์ไม่มีคุณภาพที่เป็นเอกลักษณ์

  • Index - ดัชนีแทบจะเหมือนกับดัชนีของหนังสือ

  • Referential Integrity - คำนี้หมายถึงการตรวจสอบให้แน่ใจว่าค่าคีย์ต่างประเทศทั้งหมดชี้ไปที่แถวที่มีอยู่

ฐานข้อมูล MariaDB

MariaDB เป็นทางแยกยอดนิยมของ MySQL ที่สร้างโดยนักพัฒนาดั้งเดิมของ MySQL เพิ่มขึ้นจากความกังวลที่เกี่ยวข้องกับการเข้าซื้อกิจการของ MySQL โดย Oracle ให้การสนับสนุนทั้งงานประมวลผลข้อมูลขนาดเล็กและความต้องการขององค์กร มีจุดมุ่งหมายเพื่อเป็นการทดแทนแบบดรอปอินสำหรับ MySQL ที่ต้องการเพียงการถอนการติดตั้ง MySQL และการติดตั้ง MariaDB เท่านั้น MariaDB นำเสนอคุณสมบัติเดียวกันของ MySQL และอื่น ๆ อีกมากมาย

คุณสมบัติที่สำคัญของ MariaDB

คุณสมบัติที่สำคัญของ MariaDB คือ -

  • MariaDB ทั้งหมดอยู่ภายใต้ GPL, LGPL หรือ BSD

  • MariaDB มีเอ็นจินการจัดเก็บข้อมูลที่มีให้เลือกมากมายรวมถึงเอ็นจิ้นการจัดเก็บข้อมูลประสิทธิภาพสูงสำหรับการทำงานกับแหล่งข้อมูล RDBMS อื่น ๆ

  • MariaDB ใช้ภาษาสอบถามมาตรฐานและเป็นที่นิยม

  • MariaDB ทำงานบนระบบปฏิบัติการหลายระบบและรองรับภาษาการเขียนโปรแกรมที่หลากหลาย

  • MariaDB ให้การสนับสนุน PHP ซึ่งเป็นหนึ่งในภาษาพัฒนาเว็บที่ได้รับความนิยมมากที่สุด

  • MariaDB นำเสนอเทคโนโลยีคลัสเตอร์ Galera

  • MariaDB ยังเสนอการดำเนินการและคำสั่งมากมายที่ไม่สามารถใช้งานได้ใน MySQL และกำจัด / แทนที่คุณสมบัติที่ส่งผลต่อประสิทธิภาพในทางลบ

เริ่มต้นใช้งาน

ก่อนที่คุณจะเริ่มบทช่วยสอนนี้ตรวจสอบให้แน่ใจว่าคุณมีความรู้พื้นฐานเกี่ยวกับ PHP และ HTML โดยเฉพาะเนื้อหาที่กล่าวถึงในบทแนะนำ PHP และ HTML ของเรา

คู่มือนี้มุ่งเน้นไปที่การใช้ MariaDB ในสภาพแวดล้อม PHP ดังนั้นตัวอย่างของเราจะมีประโยชน์มากที่สุดสำหรับนักพัฒนา PHP

เราขอแนะนำอย่างยิ่งให้อ่านบทช่วยสอน PHP ของเราหากคุณไม่มีความคุ้นเคยหรือต้องการทบทวน

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

การติดตั้งบน LINUX / UNIX

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

  • RedHat/CentOS/Fedora
  • Debian/Ubuntu

การแจกแจงต่อไปนี้รวมแพ็คเกจ MariaDB ในที่เก็บ -

  • openSUSE
  • Arch Linux
  • Mageia
  • Mint
  • Slackware

ทำตามขั้นตอนเหล่านี้เพื่อติดตั้งในสภาพแวดล้อม Ubuntu -

Step 1 - เข้าสู่ระบบในฐานะผู้ใช้รูท

Step 2 - ไปที่ไดเร็กทอรีที่มีแพ็คเกจ MariaDB

Step 3 - นำเข้าคีย์การลงนาม GnuPG ด้วยรหัสต่อไปนี้ -

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

Step 4 - เพิ่ม MariaDB ไปที่ไฟล์ sources.listไฟล์. เปิดไฟล์และเพิ่มรหัสต่อไปนี้ -

sudo add-apt-repository 'deb http://ftp.osuosl.org/pub/mariadb/repo/5.5/ubuntuprecise main'

Step 5 - รีเฟรชระบบดังต่อไปนี้ -

sudo apt-get update

Step 6 - ติดตั้ง MariaDB ดังต่อไปนี้ -

sudo apt-get install mariadb-server

การติดตั้งบน Windows

หลังจากค้นหาและดาวน์โหลดไฟล์ติดตั้งอัตโนมัติ (MSI) แล้วให้ดับเบิลคลิกที่ไฟล์เพื่อเริ่มการติดตั้ง วิซาร์ดการติดตั้งจะแนะนำคุณตลอดทุกขั้นตอนของการติดตั้งและการตั้งค่าที่จำเป็น

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

mysqld.exe --console

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

ทดสอบการติดตั้ง

ดำเนินการง่ายๆสองสามอย่างเพื่อยืนยันการทำงานและการติดตั้ง MariaDB

Use the Admin Utility to Get Server Status

ดูเวอร์ชันเซิร์ฟเวอร์ด้วยไบนารี mysqladmin

[root@host]# mysqladmin --version

ควรแสดงเวอร์ชันการแจกจ่ายระบบปฏิบัติการและสถาปัตยกรรม หากคุณไม่เห็นผลลัพธ์ประเภทนั้นให้ตรวจสอบการติดตั้งของคุณเพื่อหาปัญหา

Execute Simple Commands with a Client

เปิดพรอมต์คำสั่งสำหรับ MariaDB สิ่งนี้ควรเชื่อมต่อคุณกับ MariaDB และอนุญาตให้ดำเนินการคำสั่ง ป้อนคำสั่งง่ายๆดังนี้ -

mysql> SHOW DATABASES;

หลังการติดตั้ง

หลังจากติดตั้ง MariaDB สำเร็จแล้วให้ตั้งรหัสผ่านรูท การติดตั้งใหม่จะมีรหัสผ่านว่างเปล่า ป้อนข้อมูลต่อไปนี้เพื่อตั้งรหัสผ่านใหม่ -

mysqladmin -u root password "[enter your password here]";

ป้อนข้อมูลต่อไปนี้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ด้วยข้อมูลรับรองใหม่ของคุณ -

mysql -u root -p
Enter password:*******

การอัพเกรดบน Windows

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

ตัวเลือกของไฟล์ MySQL my.cnf ของคุณควรทำงานร่วมกับ MariaDB อย่างไรก็ตาม MariaDB มีคุณสมบัติมากมายซึ่งไม่พบใน MySQL

พิจารณาข้อขัดแย้งต่อไปนี้ในไฟล์ my.cnf ของคุณ -

  • MariaDB ใช้เครื่องมือจัดเก็บข้อมูล Aria เป็นค่าเริ่มต้นสำหรับไฟล์ชั่วคราว หากคุณมีไฟล์ชั่วคราวจำนวนมากให้แก้ไขขนาดบัฟเฟอร์คีย์หากคุณไม่ใช้ตาราง MyISAM

  • หากแอปพลิเคชันของคุณเชื่อมต่อ / ตัดการเชื่อมต่อบ่อยๆให้เปลี่ยนขนาดแคชเธรด

  • หากคุณใช้มากกว่า 100 การเชื่อมต่อให้ใช้เธรดพูล

ความเข้ากันได้

MySQL และ MariaDB นั้นเหมือนกันเป็นหลัก อย่างไรก็ตามมีความแตกต่างเพียงพอที่จะสร้างปัญหาในการอัปเกรด ตรวจสอบความแตกต่างที่สำคัญเหล่านี้เพิ่มเติมในฐานความรู้ MariaDB

ก่อนที่จะพยายามเรียกใช้ MariaDB ก่อนอื่นให้กำหนดสถานะปัจจุบันการทำงานหรือการปิดระบบ มีสามทางเลือกในการเริ่มต้นและหยุด MariaDB -

  • เรียกใช้ mysqld (ไบนารี MariaDB)
  • รันสคริปต์เริ่มต้น mysqld_safe
  • รันสคริปต์เริ่มต้น mysql.server

หากคุณติดตั้ง MariaDB ในตำแหน่งที่ไม่ได้มาตรฐานคุณอาจต้องแก้ไขข้อมูลตำแหน่งในไฟล์สคริปต์ หยุด MariaDB เพียงแค่เพิ่มพารามิเตอร์ "stop" พร้อมกับสคริปต์

หากคุณต้องการเริ่มโดยอัตโนมัติใน Linux ให้เพิ่มสคริปต์เริ่มต้นในไฟล์ initระบบ. การแจกแจงแต่ละครั้งมีขั้นตอนที่แตกต่างกัน อ้างถึงเอกสารระบบของคุณ

การสร้างบัญชีผู้ใช้

สร้างบัญชีผู้ใช้ใหม่ด้วยรหัสต่อไปนี้ -

CREATE USER 'newusername'@'localhost' IDENTIFIED BY 'userpassword';

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

GRANT SELECT, INSERT, UPDATE, DELETE ON database1 TO 'newusername'@'localhost';

สิทธิพิเศษอื่น ๆ รวมถึงทุกคำสั่งหรือการดำเนินการที่เป็นไปได้ใน MariaDB หลังจากสร้างผู้ใช้แล้วให้ดำเนินการคำสั่ง“ FLUSH PRIVILEGES” เพื่อรีเฟรชตารางการให้สิทธิ์ สิ่งนี้ช่วยให้สามารถใช้บัญชีผู้ใช้

ไฟล์คอนฟิกูเรชัน

หลังจากสร้างบน Unix / Linux ไฟล์คอนฟิกูเรชัน“ /etc/mysql/my.cnf” ควรได้รับการแก้ไขดังต่อไปนี้ -

# Example mysql config file.
# You can copy this to one of:
# /etc/my.cnf to set global options,
# /mysql-data-dir/my.cnf to get server specific options or
# ~/my.cnf for user specific options.

#

# One can use all long options that the program supports.
# Run the program with --help to get a list of available options

# This will be passed to all mysql clients
[client]
#password = my_password
#port = 3306
#socket = /tmp/mysql.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# The MySQL server
[mysqld]
#port = 3306
#socket = /tmp/mysql.sock
temp-pool

# The following three entries caused mysqld 10.0.1-MariaDB (and possibly other
   versions) to abort...
# skip-locking
# set-variable = key_buffer = 16M
# set-variable = thread_cache = 4

loose-innodb_data_file_path = ibdata1:1000M
loose-mutex-deadlock-detector
gdb

######### Fix the two following paths

# Where you want to have your database
data = /path/to/data/dir

# Where you have your mysql/MariaDB source + sql/share/english
language = /path/to/src/dir/sql/share/english

[mysqldump]
quick
MariaDB
8
set-variable = max_allowed_packet=16M
[mysql]
no-auto-rehash

[myisamchk]
set-variable = key_buffer = 128M

แก้ไขบรรทัด“ data =” และ“ language =” เพื่อให้เข้ากับสภาพแวดล้อมของคุณ

หลังจากแก้ไขไฟล์ให้ไปที่ไดเร็กทอรีต้นทางและดำเนินการดังต่อไปนี้ -

./scripts/mysql_install_db --srcdir = $PWD --datadir = /path/to/data/dir -- user = $LOGNAME

ละเว้น“$PWD” variable if you added datadir to the configuration file. Ensure “$LOGNAME” ถูกใช้เมื่อเรียกใช้ MariaDB เวอร์ชัน 10.0.1

คำสั่งการดูแลระบบ

ตรวจสอบรายการคำสั่งสำคัญต่อไปนี้ที่คุณจะใช้เป็นประจำเมื่อทำงานกับ MariaDB -

  • USE [database name] - ตั้งค่าฐานข้อมูลเริ่มต้นปัจจุบัน

  • SHOW DATABASES - แสดงรายการฐานข้อมูลที่อยู่บนเซิร์ฟเวอร์

  • SHOW TABLES - แสดงรายการตารางที่ไม่ใช่ชั่วคราวทั้งหมด

  • SHOW COLUMNS FROM [table name] - ให้ข้อมูลคอลัมน์ที่เกี่ยวข้องกับตารางที่ระบุ

  • SHOW INDEX FROM TABLENAME [table name] - ให้ข้อมูลดัชนีตารางที่เกี่ยวข้องกับตารางที่ระบุ

  • SHOW TABLE STATUS LIKE [table name]\G – - จัดเตรียมตารางที่มีข้อมูลเกี่ยวกับตารางที่ไม่ชั่วคราวและรูปแบบที่ปรากฏหลังจากส่วนคำสั่ง LIKE ถูกใช้เพื่อดึงชื่อตาราง

MariaDB เป็นพันธมิตรกับภาษาการเขียนโปรแกรมและเฟรมเวิร์กที่หลากหลายเช่น PHP, C #, JavaScript, Ruby on Rails, Django และอื่น ๆ PHP ยังคงเป็นที่นิยมมากที่สุดในบรรดาภาษาที่มีให้ใช้งานเนื่องจากความเรียบง่ายและรอยทางประวัติศาสตร์ คู่มือนี้จะเน้นที่ PHP ที่เป็นพันธมิตรกับ MariaDB

PHP มีฟังก์ชันมากมายสำหรับการทำงานกับฐานข้อมูล MySQL ฟังก์ชั่นเหล่านี้ทำหน้าที่ต่างๆเช่นการเข้าถึงหรือการดำเนินการและเข้ากันได้กับ MariaDB อย่างสมบูรณ์ เพียงเรียกใช้ฟังก์ชันเหล่านี้ตามที่คุณเรียกใช้ฟังก์ชัน PHP อื่น ๆ

ฟังก์ชัน PHP ที่คุณจะใช้สำหรับ MariaDB เป็นไปตามรูปแบบต่อไปนี้ -

mysql_function(value,value,...);

ส่วนที่สองของฟังก์ชันระบุการกระทำ สองฟังก์ชันที่ใช้ในคู่มือนี้มีดังต่อไปนี้ -

mysqli_connect($connect); mysqli_query($connect,"SQL statement");

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงไวยากรณ์ทั่วไปของการเรียก PHP ไปยังฟังก์ชัน MariaDB -

<html>
   <head>
      <title>PHP and MariaDB</title>
   </head>

   <body>
      <?php
         $retval = mysql_function(value, [value,...]); if( !$retval ) {
            die ( "Error: Error message here" );
         }
         // MariaDB or PHP Statements
      ?>
   </body>
</html>

ในส่วนถัดไปเราจะตรวจสอบงาน MariaDB ที่จำเป็นโดยใช้ฟังก์ชัน PHP

วิธีหนึ่งในการสร้างการเชื่อมต่อกับ MariaDB ประกอบด้วยการใช้ไบนารี mysql ที่พรอมต์คำสั่ง

MYSQL ไบนารี

ดูตัวอย่างด้านล่าง

[root@host]# mysql -u root -p

Enter password:******

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

Welcome to the MariaDB monitor. Commands end with ; or \g. 
Your MariaDB connection id is 122323232 
Server version: 5.5.40-MariaDB-log
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  
mysql>

ตัวอย่างใช้การเข้าถึงรูท แต่ผู้ใช้ที่มีสิทธิ์สามารถเข้าถึงพรอมต์ MariaDB และดำเนินการได้แน่นอน

ตัดการเชื่อมต่อจาก MariaDB ผ่านไฟล์ exit คำสั่งดังนี้ -

mysql> exit

สคริปต์การเชื่อมต่อ PHP

อีกวิธีหนึ่งในการเชื่อมต่อและยกเลิกการเชื่อมต่อจาก MariaDB คือการใช้สคริปต์ PHP PHP ให้ไฟล์mysql_connect()ฟังก์ชันสำหรับเปิดการเชื่อมต่อฐานข้อมูล ใช้พารามิเตอร์ทางเลือกห้าพารามิเตอร์และส่งคืนตัวระบุลิงก์ MariaDB หลังจากการเชื่อมต่อสำเร็จหรือเท็จเมื่อเชื่อมต่อไม่สำเร็จ นอกจากนี้ยังมีไฟล์mysql_close() ฟังก์ชันสำหรับปิดการเชื่อมต่อฐานข้อมูลซึ่งใช้พารามิเตอร์เดียว

ไวยากรณ์

ตรวจสอบไวยากรณ์สคริปต์การเชื่อมต่อ PHP ต่อไปนี้ -

connection mysql_connect(server,user,passwd,new_link,client_flag);

คำอธิบายของพารามิเตอร์แสดงไว้ด้านล่าง -

ซีเนียร์ No พารามิเตอร์และคำอธิบาย
1

server

พารามิเตอร์ทางเลือกนี้ระบุชื่อโฮสต์ที่รันเซิร์ฟเวอร์ฐานข้อมูล ค่าเริ่มต้นคือ“ localhost: .3036”

2

user

พารามิเตอร์ทางเลือกนี้ระบุชื่อผู้ใช้ที่เข้าถึงฐานข้อมูล ค่าเริ่มต้นคือเจ้าของเซิร์ฟเวอร์

3

passwd

พารามิเตอร์ทางเลือกนี้ระบุรหัสผ่านของผู้ใช้ ค่าเริ่มต้นว่างเปล่า

4

new_link

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

5

client flags

พารามิเตอร์ทางเลือกนี้ใช้การรวมกันของค่าคงที่ต่อไปนี้ -

  • MYSQL_CLIENT_SSL - ใช้การเข้ารหัส ssl

  • MYSQL_CLIENT_COMPRESS - ใช้โปรโตคอลการบีบอัด

  • MYSQL_CLIENT_IGNORE_SPACE - อนุญาตให้มีช่องว่างหลังชื่อฟังก์ชัน

  • MYSQL_CLIENT_INTERACTIVE - อนุญาตให้ไม่มีการใช้งานแบบโต้ตอบหมดเวลาวินาทีก่อนที่จะปิดการเชื่อมต่อ

ตรวจสอบไวยากรณ์สคริปต์การตัดการเชื่อมต่อ PHP ที่ระบุด้านล่าง -

bool mysql_close ( resource $link_identifier );

หากคุณละเว้นทรัพยากรทรัพยากรที่เปิดล่าสุดจะปิด ส่งคืนค่าจริงเมื่อปิดสำเร็จหรือเท็จ

ลองใช้โค้ดตัวอย่างต่อไปนี้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ MariaDB -

<html>
   <head>
      <title>Connect to MariaDB Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'guest1'; $dbpass = 'guest1a';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
      
         if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_close($conn);
      ?>
   </body>
</html>

เมื่อเชื่อมต่อสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

mysql> Connected successfully

การสร้างหรือการลบฐานข้อมูลใน MariaDB จำเป็นต้องมีสิทธิพิเศษที่มอบให้กับผู้ใช้หรือผู้ดูแลระบบรูทเท่านั้น ภายใต้บัญชีเหล่านี้คุณมีสองทางเลือกในการสร้างฐานข้อมูล - ไบนารี mysqladmin และสคริปต์ PHP

mysqladmin ไบนารี

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้ไบนารี mysqladmin ในการสร้างฐานข้อมูลด้วยชื่อ Products -

[root@host]# mysqladmin -u root -p create PRODUCTS
Enter password:******

PHP สร้างสคริปต์ฐานข้อมูล

PHP ใช้ไฟล์ mysql_queryฟังก์ชันในการสร้างฐานข้อมูล MariaDB ฟังก์ชันนี้ใช้พารามิเตอร์สองตัวตัวเลือกหนึ่งและส่งกลับค่าเป็น“ จริง” เมื่อสำเร็จหรือ“ เท็จ” เมื่อไม่เป็นเช่นนั้น

ไวยากรณ์

ทบทวนสิ่งต่อไปนี้ create database script ไวยากรณ์ -

bool mysql_query( sql, connection );

คำอธิบายของพารามิเตอร์แสดงไว้ด้านล่าง -

ส. เลขที่ พารามิเตอร์และคำอธิบาย
1

sql

พารามิเตอร์ที่ต้องการนี้ประกอบด้วยคิวรี SQL ที่จำเป็นในการดำเนินการ

2

connection

เมื่อไม่ได้ระบุพารามิเตอร์ทางเลือกนี้จะใช้การเชื่อมต่อล่าสุดที่ใช้

ลองใช้โค้ดตัวอย่างต่อไปนี้เพื่อสร้างฐานข้อมูล -

<html>
   <head>
      <title>Create a MariaDB Database</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036'; $dbuser = 'root';
         $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }

         echo 'Connected successfully<br />';
         $sql = 'CREATE DATABASE PRODUCTS'; $retval = mysql_query( $sql, $conn );
      
         if(! $retval ) { die('Could not create database: ' . mysql_error()); } echo "Database PRODUCTS created successfully\n"; mysql_close($conn);
      ?>
   </body>
</html>

เมื่อลบสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

mysql> Database PRODUCTS created successfully 
mysql> SHOW DATABASES; 
+-----------------------+ 
| Database              | 
+-----------------------+ 
| PRODUCTS              | 
+-----------------------+

การสร้างหรือการลบฐานข้อมูลใน MariaDB จำเป็นต้องมีสิทธิ์โดยทั่วไปมอบให้กับผู้ใช้รูทหรือผู้ดูแลระบบเท่านั้น ภายใต้บัญชีเหล่านี้คุณมีสองตัวเลือกในการลบฐานข้อมูล: ไบนารี mysqladmin และสคริปต์ PHP

โปรดทราบว่าฐานข้อมูลที่ถูกลบจะไม่สามารถกู้คืนได้ดังนั้นโปรดใช้ความระมัดระวังในการดำเนินการนี้ นอกจากนี้สคริปต์ PHP ที่ใช้ในการลบทำnot แจ้งให้คุณยืนยันก่อนการลบ

mysqladmin ไบนารี

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไบนารี mysqladmin เพื่อลบฐานข้อมูลที่มีอยู่ -

[root@host]# mysqladmin -u root -p drop PRODUCTS
Enter password:******
mysql> DROP PRODUCTS
ERROR 1008 (HY000): Can't drop database 'PRODUCTS'; database doesn't exist

PHP Drop Database Script

PHP ใช้ไฟล์ mysql_queryฟังก์ชันในการลบฐานข้อมูล MariaDB ฟังก์ชันนี้ใช้พารามิเตอร์สองตัวตัวเลือกหนึ่งและส่งกลับค่าเป็น“ จริง” เมื่อสำเร็จหรือ“ เท็จ” เมื่อไม่เป็นเช่นนั้น

ไวยากรณ์

ตรวจสอบไวยากรณ์สคริปต์ฐานข้อมูลดร็อปต่อไปนี้ -

bool mysql_query( sql, connection );

คำอธิบายของพารามิเตอร์แสดงไว้ด้านล่าง -

ซีเนียร์ No พารามิเตอร์และคำอธิบาย
1

sql

พารามิเตอร์ที่ต้องการนี้ประกอบด้วยคิวรี SQL ที่จำเป็นในการดำเนินการ

2

connection

เมื่อไม่ได้ระบุพารามิเตอร์ทางเลือกนี้จะใช้การเชื่อมต่อล่าสุดที่ใช้

ลองใช้โค้ดตัวอย่างต่อไปนี้สำหรับการลบฐานข้อมูล -

<html>
   <head>
      <title>Delete a MariaDB Database</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036'; $dbuser = 'root';
         $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully<br />';
         
         $sql = 'DROP DATABASE PRODUCTS'; $retval = mysql_query( $sql, $conn );
         
         if(! $retval ){ die('Could not delete database: ' . mysql_error()); } echo "Database PRODUCTS deleted successfully\n"; mysql_close($conn);
      ?>
   </body>
</html>

เมื่อลบสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

mysql> Database PRODUCTS deleted successfully

หลังจากเชื่อมต่อกับ MariaDB คุณต้องเลือกฐานข้อมูลที่จะใช้งานได้เนื่องจากอาจมีฐานข้อมูลจำนวนมาก มีสองวิธีในการทำงานนี้: จากพรอมต์คำสั่งหรือผ่านสคริปต์ PHP

พร้อมรับคำสั่ง

ในการเลือกฐานข้อมูลที่พรอมต์คำสั่งเพียงใช้คำสั่ง SQL ‘use’ -

[root@host]# mysql -u root -p

Enter password:******

mysql> use PRODUCTS;

Database changed

mysql> SELECT database();  
+-------------------------+ 
| Database                | 
+-------------------------+ 
| PRODUCTS                | 
+-------------------------+

เมื่อคุณเลือกฐานข้อมูลคำสั่งที่ตามมาทั้งหมดจะทำงานบนฐานข้อมูลที่เลือก

Note- ชื่อทั้งหมด (เช่นฐานข้อมูลตารางฟิลด์) ต้องตรงตามตัวพิมพ์เล็กและใหญ่ ตรวจสอบว่าคำสั่งเป็นไปตามกรณีที่เหมาะสม

PHP เลือกสคริปต์ฐานข้อมูล

PHP ให้ไฟล์ mysql_select_dbฟังก์ชันสำหรับการเลือกฐานข้อมูล ฟังก์ชันนี้ใช้พารามิเตอร์สองตัวตัวเลือกหนึ่งตัวเลือกและส่งกลับค่าเป็น“ จริง” ในการเลือกที่สำเร็จหรือเท็จเมื่อล้มเหลว

ไวยากรณ์

ตรวจสอบไวยากรณ์สคริปต์ฐานข้อมูลที่เลือกต่อไปนี้

bool mysql_select_db( db_name, connection );

คำอธิบายของพารามิเตอร์แสดงไว้ด้านล่าง -

ส. เลขที่ พารามิเตอร์และคำอธิบาย
1

db_name

พารามิเตอร์ที่จำเป็นนี้ระบุชื่อของฐานข้อมูลที่จะใช้

2

connection

เมื่อไม่ได้ระบุพารามิเตอร์ทางเลือกนี้จะใช้การเชื่อมต่อล่าสุดที่ใช้

ลองใช้โค้ดตัวอย่างต่อไปนี้เพื่อเลือกฐานข้อมูล -

<html>
   <head>
      <title>Select a MariaDB Database</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036'; $dbuser = 'guest1';
         $dbpass = 'guest1a'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully';
         
         mysql_select_db( 'PRODUCTS' );
         mysql_close($conn);
      ?>
   </body>
</html>

เมื่อเลือกสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

mysql> Connected successfully

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

ประเภทข้อมูล MariaDB สามารถแบ่งเป็นตัวเลขวันที่และเวลาและค่าสตริง

ประเภทข้อมูลตัวเลข

ประเภทข้อมูลตัวเลขที่รองรับโดย MariaDB มีดังนี้ -

  • TINYINT - ประเภทข้อมูลนี้แสดงจำนวนเต็มขนาดเล็กที่อยู่ในช่วงที่ลงนาม -128 ถึง 127 และช่วงที่ไม่ได้ลงนามคือ 0 ถึง 255

  • BOOLEAN - ประเภทข้อมูลนี้เชื่อมโยงค่า 0 กับ "เท็จ" และค่า 1 กับ "จริง"

  • SMALLINT - ประเภทข้อมูลนี้แสดงถึงจำนวนเต็มภายในช่วงที่ลงนาม -32768 ถึง 32768 และช่วงที่ไม่ได้ลงนามคือ 0 ถึง 65535

  • MEDIUMINT - ประเภทข้อมูลนี้แสดงจำนวนเต็มในช่วงที่ลงนามตั้งแต่ -8388608 ถึง 8388607 และช่วงที่ไม่ได้ลงชื่อ 0 ถึง 16777215

  • INT(also INTEGER)- ชนิดข้อมูลนี้แสดงจำนวนเต็มขนาดปกติ เมื่อทำเครื่องหมายว่าไม่ได้ลงนามช่วงจะมีช่วง 0 ถึง 4294967295 เมื่อลงชื่อ (การตั้งค่าเริ่มต้น) ช่วงจะครอบคลุม -2147483648 ถึง 2147483647 เมื่อคอลัมน์ถูกตั้งค่าเป็น ZEROFILL (สถานะที่ไม่ได้ลงนาม) ค่าทั้งหมดจะถูกนำหน้าด้วยศูนย์เพื่อวาง M หลักในค่า INT

  • BIGINT - ชนิดข้อมูลนี้แสดงจำนวนเต็มภายในช่วงที่มีการลงชื่อ 9223372036854775808 ถึง 9223372036854775807 และช่วงที่ไม่ได้ลงนามคือ 0 ถึง 18446744073709551615

  • DECIMAL(เช่น DEC, NUMERIC, FIXED) - ชนิดข้อมูลนี้แสดงถึงตัวเลขจุดคงที่ที่แม่นยำโดย M ระบุตัวเลขและ D ระบุตัวเลขหลังทศนิยม ค่า M ไม่เพิ่ม“ -” หรือจุดทศนิยม ถ้า D ถูกตั้งค่าเป็น 0 จะไม่มีส่วนทศนิยมหรือเศษส่วนปรากฏขึ้นและค่าจะถูกปัดเศษเป็น DECIMAL ที่ใกล้ที่สุดบน INSERT ตัวเลขสูงสุดที่อนุญาตคือ 65 และค่าสูงสุดสำหรับทศนิยมคือ 30 ค่าดีฟอลต์สำหรับ M เมื่อละเว้นคือ 10 และ 0 สำหรับ D เมื่อละเว้น

  • FLOAT - ประเภทข้อมูลนี้แสดงถึงตัวเลขทศนิยมขนาดเล็กของค่า 0 หรือตัวเลขภายในช่วงต่อไปนี้ -

    • -3.402823466E + 38 ถึง -1.175494351E-38

    • 1.175494351E-38 ถึง 3.402823466E + 38

  • DOUBLE (เช่นกัน REAL และ DOUBLE PRECISION) - ประเภทข้อมูลนี้แสดงถึงขนาดปกติตัวเลขทศนิยมของค่า 0 หรือภายในช่วงต่อไปนี้ -

    • -1.7976931348623157E + 308 ถึง -2.2250738585072014E-308

    • 2.2250738585072014E-308 ถึง 1.7976931348623157E + 308

  • BIT- ชนิดข้อมูลนี้แสดงถึงเขตข้อมูลบิตโดย M ระบุจำนวนบิตต่อค่า ในการละเว้น M ค่าเริ่มต้นคือ 1 สามารถใช้ค่าบิตกับ“ b '[value]'” ซึ่งค่าแทนค่าบิตเป็น 0 และ 1 Zero-padding เกิดขึ้นโดยอัตโนมัติจากด้านซ้ายตลอดความยาว ตัวอย่างเช่น“ 10” กลายเป็น“ 0010”

ประเภทข้อมูลวันที่และเวลา

ประเภทข้อมูลวันที่และเวลาที่ MariaDB รองรับมีดังนี้ -

  • DATE - ประเภทข้อมูลนี้แสดงถึงช่วงวันที่ตั้งแต่“ 1000-01-01” ถึง“ 9999-12-31” และใช้รูปแบบวันที่“ ปปปป - ดด - วว”

  • TIME - ประเภทข้อมูลนี้แสดงถึงช่วงเวลา“ -838: 59: 59.999999” ถึง“ 838: 59: 59.999999”

  • DATETIME- ประเภทข้อมูลนี้แสดงถึงช่วง“ 1000-01-01 00: 00: 00.000000” ถึง“ 9999-12-31 23: 59: 59.999999” โดยใช้รูปแบบ“ YYYY-MM-DD HH: MM: SS”

  • TIMESTAMP- ประเภทข้อมูลนี้แสดงถึงการประทับเวลาของรูปแบบ "ปปปป - ดด - วว HH: MM: DD" โดยส่วนใหญ่จะใช้ในรายละเอียดเวลาของการแก้ไขฐานข้อมูลเช่นการแทรกหรือการอัปเดต

  • YEAR- ประเภทข้อมูลนี้แสดงปีในรูปแบบ 4 หลัก รูปแบบสี่หลักให้ค่าในช่วง 1901 ถึง 2155 และ 0000

String DataTypes

ค่าประเภทสตริงที่ MariaDB รองรับมีดังนี้ -

  • String literals - ประเภทข้อมูลนี้แสดงถึงลำดับอักขระที่ล้อมรอบด้วยเครื่องหมายคำพูด

  • CHAR- ประเภทข้อมูลนี้แสดงสตริงความยาวคงที่ที่มีเบาะด้านขวาซึ่งมีช่องว่างตามความยาวที่ระบุ M แสดงถึงความยาวคอลัมน์ของอักขระในช่วง 0 ถึง 255 ค่าเริ่มต้นคือ 1

  • VARCHAR - ชนิดข้อมูลนี้แสดงสตริงความยาวตัวแปรโดยมีช่วง M (ความยาวคอลัมน์สูงสุด) ตั้งแต่ 0 ถึง 65535

  • BINARY - ชนิดข้อมูลนี้แสดงถึงสตริงไบต์ไบนารีโดย M เป็นความยาวคอลัมน์เป็นไบต์

  • VARBINARY - ชนิดข้อมูลนี้แสดงถึงสตริงไบต์ไบต์ที่มีความยาวตัวแปรโดย M เป็นความยาวคอลัมน์

  • TINYBLOB- ชนิดข้อมูลนี้แสดงคอลัมน์หยดที่มีความยาวสูงสุด 255 (28 - 1) ไบต์ ในการจัดเก็บแต่ละรายการใช้คำนำหน้าความยาวหนึ่งไบต์ซึ่งระบุปริมาณไบต์ในค่า

  • BLOB- ชนิดข้อมูลนี้แสดงคอลัมน์หยดที่มีความยาวสูงสุด 65,535 (216 - 1) ไบต์ ในการจัดเก็บแต่ละรายการใช้คำนำหน้าความยาวสองไบต์ซึ่งระบุปริมาณไบต์ในค่า

  • MEDIUMBLOB- ชนิดข้อมูลนี้แสดงคอลัมน์หยดที่มีความยาวสูงสุด 16,777,215 (2 24 - 1) ไบต์ ในการจัดเก็บแต่ละรายการใช้คำนำหน้าความยาวสามไบต์ซึ่งระบุปริมาณไบต์ในค่า

  • LONGBLOB- ชนิดข้อมูลนี้แสดงคอลัมน์หยดที่มีความยาวสูงสุด 4,294,967,295 (2 32 - 1) ไบต์ ในการจัดเก็บแต่ละรายการใช้คำนำหน้าความยาวสี่ไบต์ซึ่งระบุปริมาณไบต์ในค่า

  • TINYTEXT- ชนิดข้อมูลนี้แสดงคอลัมน์ข้อความที่มีความยาวสูงสุด 255 อักขระ(2 8 - 1) ตัว ในการจัดเก็บแต่ละรายการใช้คำนำหน้าความยาวหนึ่งไบต์ซึ่งระบุปริมาณไบต์ในค่า

  • TEXT- ชนิดข้อมูลนี้แสดงคอลัมน์ข้อความที่มีความยาวสูงสุด 65,535 (2 16 - 1) อักขระ ในการจัดเก็บแต่ละรายการใช้คำนำหน้าความยาวสองไบต์ซึ่งระบุปริมาณไบต์ในค่า

  • MEDIUMTEXT- ชนิดข้อมูลนี้แสดงคอลัมน์ข้อความที่มีความยาวสูงสุด 16,777,215 อักขระ(2 24 - 1) ในการจัดเก็บแต่ละรายการใช้คำนำหน้าความยาวสามไบต์ซึ่งระบุปริมาณไบต์ในค่า

  • LONGTEXT- ชนิดข้อมูลนี้แสดงคอลัมน์ข้อความที่มีความยาวสูงสุด 4,294,967,295 หรือ 4GB (2 32 - 1) อักขระ ในการจัดเก็บแต่ละรายการใช้คำนำหน้าความยาวสี่ไบต์ซึ่งระบุปริมาณไบต์ในค่า

  • ENUM - ประเภทข้อมูลนี้แสดงถึงออบเจ็กต์สตริงที่มีเพียงค่าเดียวจากรายการ

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

ในบทนี้เราจะเรียนรู้วิธีการสร้างตาราง ก่อนสร้างตารางอันดับแรกให้กำหนดชื่อชื่อเขตข้อมูลและคำจำกัดความของเขตข้อมูล

ต่อไปนี้เป็นไวยากรณ์ทั่วไปสำหรับการสร้างตาราง -

CREATE TABLE table_name (column_name column_type);

ตรวจสอบคำสั่งที่ใช้กับการสร้างตารางในฐานข้อมูล PRODUCTS -

databaseproducts_ tbl(
   product_id INT NOT NULL AUTO_INCREMENT,
   product_name VARCHAR(100) NOT NULL,
   product_manufacturer VARCHAR(40) NOT NULL,
   submission_date DATE,
   PRIMARY KEY ( product_id )
);

ตัวอย่างข้างต้นใช้“ NOT NULL” เป็นแอตทริบิวต์ของช่องเพื่อหลีกเลี่ยงข้อผิดพลาดที่เกิดจากค่า null แอตทริบิวต์“ AUTO_INCREMENT” สั่งให้ MariaDB เพิ่มค่าถัดไปที่มีให้ในช่อง ID คีย์หลักของคีย์เวิร์ดกำหนดคอลัมน์เป็นไฟล์primary key. หลายคอลัมน์ที่คั่นด้วยลูกน้ำสามารถกำหนดคีย์หลักได้

สองวิธีหลักในการสร้างตารางคือการใช้พรอมต์คำสั่งและสคริปต์ PHP

พร้อมรับคำสั่ง

ใช้คำสั่ง CREATE TABLE เพื่อดำเนินการตามที่แสดงด้านล่าง -

root@host# mysql -u root -p
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> CREATE TABLE products_tbl(
   -> product_id INT NOT NULL AUTO_INCREMENT,
   -> product_name VARCHAR(100) NOT NULL,
   -> product_manufacturer VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( product_id )
   -> );
mysql> SHOW TABLES;
+------------------------+
| PRODUCTS               |
+------------------------+
| products_tbl           |
+------------------------+

ตรวจสอบให้แน่ใจว่าคำสั่งทั้งหมดถูกยกเลิกด้วยอัฒภาค

PHP สร้างสคริปต์ตาราง

PHP ให้ mysql_query()สำหรับการสร้างตาราง อาร์กิวเมนต์ที่สองประกอบด้วยคำสั่ง SQL ที่จำเป็น -

<html>
   <head>
      <title>Create a MariaDB Table</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'root'; $dbpass = 'rootpassword';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
      
         if(! $conn ){ die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = "CREATE TABLE products_tbl( ".
            "product_id INT NOT NULL AUTO_INCREMENT, ".
            "product_name VARCHAR(100) NOT NULL, ".
            "product_manufacturer VARCHAR(40) NOT NULL, ".
            "submission_date DATE, ".
            "PRIMARY KEY ( product_id )); ";
      
         mysql_select_db( 'PRODUCTS' );
         $retval = mysql_query( $sql, $conn ); if(! $retval ) {
            die('Could not create table: ' . mysql_error());
         }
         echo "Table created successfully\n";
         
         mysql_close($conn);
      ?>
   </body>
</html>

เมื่อสร้างตารางสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

mysql> Table created successfully

ในบทนี้เราจะเรียนรู้การลบตาราง

การลบตารางทำได้ง่ายมาก แต่อย่าลืมว่าตารางที่ถูกลบทั้งหมดจะไม่สามารถกู้คืนได้ ไวยากรณ์ทั่วไปสำหรับการลบตารางมีดังนี้ -

DROP TABLE table_name ;

มีสองตัวเลือกสำหรับการวางตาราง: ใช้พรอมต์คำสั่งหรือสคริปต์ PHP

พร้อมรับคำสั่ง

ที่พรอมต์คำสั่งเพียงใช้ไฟล์ DROP TABLE คำสั่ง SQL -

root@host# mysql -u root -p
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> DROP TABLE products_tbl

mysql> SELECT * from products_tbl
ERROR 1146 (42S02): Table 'products_tbl' doesn't exist

PHP Drop Table Script

PHP ให้ mysql_query()สำหรับวางตาราง เพียงส่งอาร์กิวเมนต์ที่สองของคำสั่ง SQL ที่เหมาะสม -

<html>
   <head>
      <title>Create a MariaDB Table</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'root'; $dbpass = 'rootpassword';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = "DROP TABLE products_tbl";
         mysql_select_db( 'PRODUCTS' );
         $retval = mysql_query( $sql, $conn ); if(! $retval ) {
            die('Could not delete table: ' . mysql_error());
         }
         echo "Table deleted successfully\n";
         
         mysql_close($conn);
      ?>
   </body>
</html>

เมื่อลบตารางสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

mysql> Table deleted successfully

ในบทนี้เราจะเรียนรู้วิธีการแทรกข้อมูลในตาราง

การแทรกข้อมูลลงในตารางต้องใช้คำสั่ง INSERT ไวยากรณ์ทั่วไปของคำสั่งคือ INSERT ตามด้วยชื่อตารางฟิลด์และค่า

ตรวจสอบไวยากรณ์ทั่วไปที่ระบุด้านล่าง -

INSERT INTO tablename (field,field2,...) VALUES (value, value2,...);

คำสั่งต้องใช้อัญประกาศเดี่ยวหรือคู่สำหรับค่าสตริง ตัวเลือกอื่น ๆ สำหรับคำสั่ง ได้แก่ คำสั่ง“ INSERT ... SET” คำสั่ง“ INSERT ... SELECT” และตัวเลือกอื่น ๆ

Note - ฟังก์ชัน VALUES () ที่ปรากฏภายในคำสั่งใช้เฉพาะกับคำสั่ง INSERT และส่งคืนค่า NULL หากใช้ที่อื่น

มีสองตัวเลือกสำหรับการดำเนินการ: ใช้บรรทัดคำสั่งหรือใช้สคริปต์ PHP

พร้อมรับคำสั่ง

ที่พรอมต์มีหลายวิธีในการดำเนินการเลือก คำสั่งมาตรฐานได้รับด้านล่าง -

belowmysql>
INSERT INTO products_tbl (ID_number, Nomenclature) VALUES (12345,“Orbitron 4000”);
mysql> SHOW COLUMNS FROM products_tbl;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| ID_number   | int(5)      |      |     |         |       |
| Nomenclature| char(13)    |      |     |         |       |
+-------------+-------------+------+-----+---------+-------+

คุณสามารถแทรกหลายแถว -

INSERT INTO products VALUES (1, “first row”), (2, “second row”);

คุณยังสามารถใช้ SET clause -

INSERT INTO products SELECT * FROM inventory WHERE status = 'available';

สคริปต์การแทรก PHP

ใช้คำสั่ง“ INSERT INTO ... ” เดียวกันภายในฟังก์ชัน PHP เพื่อดำเนินการ คุณจะใช้ไฟล์mysql_query() ฟังก์ชั่นอีกครั้ง

ตรวจสอบตัวอย่างด้านล่าง -

<?php
   if(isset($_POST['add'])) {
      $dbhost = 'localhost:3036'; $dbuser = 'root';
      $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
         die('Could not connect: ' . mysql_error());
      }

      if(! get_magic_quotes_gpc() ) {
         $product_name = addslashes ($_POST['product_name']);
         $product_manufacturer = addslashes ($_POST['product_name']);
      } else {
         $product_name = $_POST['product_name'];
         $product_manufacturer = $_POST['product_manufacturer'];
      }
      $ship_date = $_POST['ship_date'];
      $sql = "INSERT INTO products_tbl ". "(product_name,product_manufacturer, ship_date) ". "VALUES"."('$product_name','$product_manufacturer','$ship_date')";

      mysql_select_db('PRODUCTS');
      $retval = mysql_query( $sql, $conn ); if(! $retval ) {
         die('Could not enter data: ' . mysql_error());
      }

      echo "Entered data successfully\n";
      mysql_close($conn);
   }
?>

ในการแทรกข้อมูลสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

mysql> Entered data successfully

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

ในบทนี้เราจะเรียนรู้วิธีการเลือกข้อมูลจากตาราง

คำสั่ง SELECT ดึงข้อมูลแถวที่เลือก ซึ่งสามารถรวมคำสั่ง UNION, ประโยคสั่งซื้อ, LIMIT clause, WHERE clause, GROUP BY ... HAVING clause และ subqueries

ตรวจสอบไวยากรณ์ทั่วไปต่อไปนี้ -

SELECT field, field2,... FROM table_name, table_name2,... WHERE...

คำสั่ง SELECT มีหลายตัวเลือกสำหรับการระบุตารางที่ใช้ -

  • database_name.table_name

  • table_name.column_name

  • database_name.table_name.column_name

ข้อความที่เลือกทั้งหมดต้องมีอย่างน้อยหนึ่งรายการ select expressions. เลือกนิพจน์ประกอบด้วยหนึ่งในตัวเลือกต่อไปนี้ -

  • ชื่อคอลัมน์

  • นิพจน์ที่ใช้ตัวดำเนินการและฟังก์ชัน

  • ข้อกำหนด“ table_name. *” เพื่อเลือกคอลัมน์ทั้งหมดภายในตารางที่กำหนด

  • อักขระ“ *” เพื่อเลือกคอลัมน์ทั้งหมดจากตารางทั้งหมดที่ระบุในส่วนคำสั่ง FROM

สามารถใช้พรอมต์คำสั่งหรือสคริปต์ PHP ในการเรียกใช้คำสั่ง select

พร้อมรับคำสั่ง

ที่พรอมต์คำสั่งเรียกใช้คำสั่งดังนี้ -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> SELECT * from products_tbl
+-------------+---------------+
| ID_number   | Nomenclature  |
+-------------+---------------+
| 12345       | Orbitron 4000 |
+-------------+---------------+

PHP เลือกสคริปต์

ใช้คำสั่ง SELECT เดียวกันภายในฟังก์ชัน PHP เพื่อดำเนินการ คุณจะใช้ไฟล์mysql_query()ฟังก์ชั่นอีกครั้ง ตรวจสอบตัวอย่างด้านล่าง -

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT product_id, product_name,product_manufacturer, ship_date FROM products_tbl';
   mysql_select_db('PRODUCTS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Product ID :{$row['product_id']} <br> ". "Name: {$row['product_name']} <br> ".
         "Manufacturer: {$row['product_manufacturer']} <br> ". "Ship Date : {$row['ship_date']} <br>".
         "--------------------------------<br>";
   }

   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

ในการดึงข้อมูลสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Product ID: 12345
Nomenclature: Orbitron 4000
Manufacturer: XYZ Corp
Ship Date: 01/01/17
----------------------------------------------
Product ID: 12346
Nomenclature: Orbitron 3000
Manufacturer: XYZ Corp
Ship Date: 01/02/17
----------------------------------------------
mysql> Fetched data successfully

แนวทางปฏิบัติที่ดีที่สุดแนะนำให้ปล่อยหน่วยความจำเคอร์เซอร์หลังจากทุกคำสั่ง SELECT PHP ให้ไฟล์mysql_free_result()เพื่อวัตถุประสงค์นี้ ตรวจสอบการใช้งานตามที่แสดงด้านล่าง -

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl';
   mysql_select_db('PRODUCTS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
      echo "Product ID :{$row[0]} <br> ". "Name: {$row[1]} <br> ".
         "Manufacturer: {$row[2]} <br> ". "Ship Date : {$row[3]} <br> ".
         "--------------------------------<br>";
   }

   mysql_free_result($retval); echo "Fetched data successfully\n"; mysql_close($conn);
?>

WHEREคำสั่งกรองคำสั่งต่างๆเช่น SELECT, UPDATE, DELETE และ INSERT พวกเขานำเสนอเกณฑ์ที่ใช้ระบุการกระทำ โดยทั่วไปจะปรากฏหลังชื่อตารางในคำสั่งและเงื่อนไขจะเป็นดังนี้ คำสั่ง WHERE โดยพื้นฐานแล้วจะทำหน้าที่เหมือนกับคำสั่ง if

ตรวจสอบไวยากรณ์ทั่วไปของ WHERE clause ที่ระบุด้านล่าง -

[COMMAND] field,field2,... FROM table_name,table_name2,... WHERE [CONDITION]

สังเกตคุณสมบัติดังต่อไปนี้ของคำสั่ง WHERE -

  • เป็นทางเลือก

  • อนุญาตให้ระบุเงื่อนไขใด ๆ

  • ช่วยให้สามารถกำหนดเงื่อนไขหลายเงื่อนไขโดยใช้ตัวดำเนินการ AND หรือ OR

  • ความไวของตัวพิมพ์เล็กและใหญ่ใช้กับข้อความที่ใช้การเปรียบเทียบ LIKE

คำสั่ง WHERE อนุญาตให้ใช้ตัวดำเนินการต่อไปนี้ -

ตัวดำเนินการ
=! =
> <
> = <=

คำสั่ง WHERE สามารถใช้ที่พรอมต์คำสั่งหรือภายในสคริปต์ PHP

พร้อมรับคำสั่ง

ที่พรอมต์คำสั่งเพียงใช้คำสั่งมาตรฐาน -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> SELECT * from products_tbl WHERE product_manufacturer = 'XYZ Corp';
+-------------+----------------+----------------------+
| ID_number   | Nomenclature   | product_manufacturer |
+-------------+----------------+----------------------+
| 12345       | Orbitron 4000  | XYZ Corp             |
+-------------+----------------+----------------------+
| 12346       | Orbitron 3000  | XYZ Corp             |
+-------------+----------------+----------------------+
| 12347       | Orbitron 1000  | XYZ Corp             |
+-------------+----------------+----------------------+

ตรวจสอบตัวอย่างโดยใช้ไฟล์ AND เงื่อนไข -

SELECT *
FROM products_tbl
WHERE product_name = 'Bun Janshu 3000';
AND product_id <= 344;

ตัวอย่างนี้รวมทั้งเงื่อนไข AND และ OR

SELECT *
FROM products_tbl
WHERE (product_name = 'Bun Janshu 3000' AND product_id < 344)
OR (product_name = 'Bun Janshu 3000');

สคริปต์ PHP โดยใช้ Where Clause

จ้าง mysql_query() ฟังก์ชันในการดำเนินการโดยใช้ WHERE clause -

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl WHERE product_manufacturer = "XYZ Corp"'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product ID :{$row['product_id']} <br> ".
         "Name: {$row['product_name']} <br> ". "Manufacturer: {$row['product_manufacturer']} <br> ".
         "Ship Date: {$row['ship_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

ในการดึงข้อมูลสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Product ID: 12345
Nomenclature: Orbitron 4000
Manufacturer: XYZ Corp
Ship Date: 01/01/17
----------------------------------------------
Product ID: 12346
Nomenclature: Orbitron 3000
Manufacturer: XYZ Corp
Ship Date: 01/02/17
----------------------------------------------
Product ID: 12347
Nomenclature: Orbitron 1000
Manufacturer: XYZ Corp
Ship Date: 01/02/17
----------------------------------------------
mysql> Fetched data successfully

UPDATEคำสั่งแก้ไขฟิลด์ที่มีอยู่โดยการเปลี่ยนค่า ใช้คำสั่ง SET เพื่อระบุคอลัมน์สำหรับการแก้ไขและเพื่อระบุค่าใหม่ที่กำหนด ค่าเหล่านี้สามารถเป็นได้ทั้งนิพจน์หรือค่าเริ่มต้นของฟิลด์ การตั้งค่าเริ่มต้นจำเป็นต้องใช้คีย์เวิร์ด DEFAULT คำสั่งยังสามารถใช้คำสั่ง WHERE เพื่อระบุเงื่อนไขสำหรับการอัพเดตและ / หรือคำสั่ง ORDER BY เพื่ออัปเดตตามลำดับที่กำหนด

ตรวจสอบไวยากรณ์ทั่วไปต่อไปนี้ -

UPDATE table_name SET field=new_value, field2=new_value2,...
[WHERE ...]

ดำเนินการคำสั่ง UPDATE จากพรอมต์คำสั่งหรือใช้สคริปต์ PHP

พร้อมรับคำสั่ง

ที่พรอมต์คำสั่งเพียงใช้ commandroot มาตรฐาน -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> UPDATE products_tbl
   SET nomenclature = 'Fiber Blaster 300Z' WHERE ID_number = 112;
mysql> SELECT * from products_tbl WHERE ID_number='112';
+-------------+---------------------+----------------------+
| ID_number   | Nomenclature        | product_manufacturer |
+-------------+---------------------+----------------------+
| 112         | Fiber Blaster 300Z  | XYZ Corp             |
+-------------+---------------------+----------------------+

PHP Update Query Script

จ้าง mysql_query() ฟังก์ชันในคำสั่ง UPDATE คำสั่ง -

<?php
   $dbhost = ‘localhost:3036’; $dbuser = ‘root’;
   $dbpass = ‘rootpassword’; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die(‘Could not connect: ‘ . mysql_error());
   }

   $sql = ‘UPDATE products_tbl SET product_name = ”Fiber Blaster 300z” WHERE product_id = 112’; mysql_select_db(‘PRODUCTS’); $retval = mysql_query( $sql, $conn );

   if(! $retval ) { die(‘Could not update data: ‘ . mysql_error()); } echo “Updated data successfully\n”; mysql_close($conn);
?>

เมื่ออัปเดตข้อมูลสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

mysql> Updated data successfully

คำสั่ง DELETE จะลบแถวตารางออกจากตารางที่ระบุและส่งคืนปริมาณที่ถูกลบ เข้าถึงปริมาณที่ถูกลบด้วยฟังก์ชัน ROW_COUNT () คำสั่ง WHERE ระบุแถวและในกรณีที่ไม่มีแถวทั้งหมดจะถูกลบออก ประโยค LIMIT ควบคุมจำนวนแถวที่ลบ

ในคำสั่ง DELETE สำหรับหลายแถวจะลบเฉพาะแถวที่ตรงตามเงื่อนไข และ LIMIT และ WHERE อนุประโยคไม่ได้รับอนุญาต คำสั่ง DELETE อนุญาตให้ลบแถวจากตารางในฐานข้อมูลที่แตกต่างกัน แต่ไม่อนุญาตให้ลบออกจากตารางจากนั้นเลือกจากตารางเดียวกันภายในแบบสอบถามย่อย

ตรวจสอบไวยากรณ์ DELETE ต่อไปนี้ -

DELETE FROM table_name [WHERE …]

ดำเนินการคำสั่ง DELETE จากพรอมต์คำสั่งหรือใช้สคริปต์ PHP

พร้อมรับคำสั่ง

ที่พรอมต์คำสั่งเพียงใช้คำสั่งมาตรฐาน -

root@host# mysql –u root –p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> DELETE FROM products_tbl WHERE product_id=133;
mysql> SELECT * from products_tbl WHERE ID_number='133';
ERROR 1032 (HY000): Can't find record in 'products_tbl'

PHP ลบสคริปต์แบบสอบถาม

ใช้ mysql_query() ฟังก์ชันในคำสั่ง DELETE คำสั่ง -

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'DELETE FROM products_tbl WHERE product_id = 261'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn );

   if(! $retval ) { die('Could not delete data: ' . mysql_error()); } echo "Deleted data successfully\n"; mysql_close($conn);
?>

เมื่อลบข้อมูลสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

mysql> Deleted data successfully
mysql> SELECT * from products_tbl WHERE ID_number='261';
ERROR 1032 (HY000): Can't find record in 'products_tbl'

WHERE clause ให้วิธีการดึงข้อมูลเมื่อการดำเนินการใช้การจับคู่แบบตรงทั้งหมด ในสถานการณ์ที่ต้องการผลลัพธ์หลายรายการที่มีลักษณะร่วมกันไฟล์LIKE อนุประโยครองรับการจับคู่รูปแบบกว้าง ๆ

ประโยค LIKE จะทดสอบการจับคู่รูปแบบโดยส่งคืนจริงหรือเท็จ รูปแบบที่ใช้ในการเปรียบเทียบยอมรับอักขระตัวแทนต่อไปนี้:“%” ซึ่งตรงกับจำนวนอักขระ (0 หรือมากกว่า) และ“ _” ซึ่งจับคู่อักขระเดี่ยว อักขระตัวแทน“ _” จะจับคู่เฉพาะอักขระภายในชุดซึ่งหมายความว่าจะไม่สนใจอักขระละตินเมื่อใช้ชุดอื่น การจับคู่จะไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่โดยค่าเริ่มต้นที่ต้องการการตั้งค่าเพิ่มเติมสำหรับความไวของตัวพิมพ์เล็กและใหญ่

คำสั่ง NOT LIKE ช่วยให้สามารถทดสอบเงื่อนไขตรงกันข้ามได้เช่นเดียวกับ not ตัวดำเนินการ

หากนิพจน์หรือรูปแบบคำสั่งประเมินเป็น NULL ผลลัพธ์จะเป็น NULL

ตรวจสอบไวยากรณ์คำสั่ง LIKE ทั่วไปที่ระบุด้านล่าง -

SELECT field, field2,... FROM table_name, table_name2,...
WHERE field LIKE condition

ใช้ประโยค LIKE ที่พรอมต์คำสั่งหรือภายในสคริปต์ PHP

พร้อมรับคำสั่ง

ที่พรอมต์คำสั่งเพียงใช้คำสั่งมาตรฐาน -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from products_tbl
   WHERE product_manufacturer LIKE 'XYZ%';
+-------------+----------------+----------------------+
| ID_number   | Nomenclature   | product_manufacturer |
+-------------+----------------+----------------------+
| 12345       | Orbitron 4000  | XYZ Corp             |
+-------------+----------------+----------------------+
| 12346       | Orbitron 3000  | XYZ Corp             |
+-------------+----------------+----------------------+
| 12347       | Orbitron 1000  | XYZ Corp             |
+-------------+----------------+----------------------+

PHP Script โดยใช้ Like Clause

ใช้ mysql_query() ฟังก์ชันในคำสั่งที่ใช้ประโยค LIKE

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl WHERE product_manufacturer LIKE "xyz%"'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product ID:{$row['product_id']} <br> ".
         "Name: {$row['product_name']} <br> ". "Manufacturer: {$row['product_manufacturer']} <br> ".
         "Ship Date: {$row['ship_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

ในการดึงข้อมูลสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Product ID: 12345
Nomenclature: Orbitron 4000
Manufacturer: XYZ Corp
Ship Date: 01/01/17
----------------------------------------------
Product ID: 12346
Nomenclature: Orbitron 3000
Manufacturer: XYZ Corp
Ship Date: 01/02/17
----------------------------------------------
Product ID: 12347
Nomenclature: Orbitron 1000
Manufacturer: XYZ Corp
Ship Date: 01/02/17
----------------------------------------------
mysql> Fetched data successfully

ORDER BYอนุประโยคตามที่กล่าวไว้ในการสนทนาครั้งก่อนจัดเรียงผลลัพธ์ของคำสั่ง ระบุลำดับของข้อมูลที่ดำเนินการและรวมถึงตัวเลือกในการเรียงลำดับจากน้อยไปมาก (ASC) หรือจากมากไปหาน้อย (DESC) ในการละเว้นข้อกำหนดคำสั่งลำดับเริ่มต้นคือจากน้อยไปมาก

คำสั่ง ORDER BY ปรากฏในข้อความสั่งต่างๆเช่น DELETE และ UPDATE มักจะปรากฏที่ส่วนท้ายของคำสั่งไม่ใช่ในเคียวรีย่อยหรือก่อนฟังก์ชัน set เนื่องจากทำงานบนตารางผลลัพธ์สุดท้าย คุณไม่สามารถใช้จำนวนเต็มเพื่อระบุคอลัมน์ได้

ตรวจสอบไวยากรณ์ทั่วไปของคำสั่ง ORDER BY ที่ระบุด้านล่าง -

SELECT field, field2,... [or column] FROM table_name, table_name2,...
ORDER BY field, field2,... ASC[or DESC]

ใช้คำสั่ง ORDER BY ที่พรอมต์คำสั่งหรือภายในสคริปต์ PHP

พร้อมรับคำสั่ง

ที่พรอมต์คำสั่งเพียงใช้คำสั่งมาตรฐาน -

root@ host# mysql -u root -p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed

mysql> SELECT * from products_tbl ORDER BY product_manufacturer ASC
+-------------+----------------+----------------------+
| ID_number   | Nomenclature   | product_manufacturer |
+-------------+----------------+----------------------+
| 56789       | SuperBlast 400 | LMN Corp             |
+-------------+----------------+----------------------+
| 67891       | Zoomzoom 5000  | QFT Corp             |
+-------------+----------------+----------------------+
| 12347       | Orbitron 1000  | XYZ Corp             |
+-------------+----------------+----------------------+

PHP Script โดยใช้ Order By Clause

ใช้ประโยชน์จากไฟล์ mysql_query() ฟังก์ชันอีกครั้งในคำสั่งที่ใช้คำสั่ง ORDER BY -

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl ORDER BY product_manufacturer DESC'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn );

   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product ID :{$row['product_id']} <br> ".
         "Name: {$row['product_name']} <br> ". "Manufacturer: {$row['product_manufacturer']} <br> ".
         "Ship Date : {$row['ship_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

ในการดึงข้อมูลสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Product ID: 12347
Nomenclature: Orbitron 1000
Manufacturer: XYZ Corp
Ship Date: 01/01/17
----------------------------------------------
Product ID: 67891
Nomenclature: Zoomzoom 5000
Manufacturer: QFT Corp
Ship Date: 01/01/17
----------------------------------------------
Product ID: 56789
Nomenclature: SuperBlast 400
Manufacturer: LMN Corp
Ship Date: 01/04/17
----------------------------------------------
mysql> Fetched data successfully

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

JOINsอนุญาตให้รวมตารางตั้งแต่สองตารางขึ้นไปเป็นวัตถุชิ้นเดียว พวกเขาใช้ผ่านคำสั่ง SELECT, UPDATE และ DELETE

ตรวจสอบไวยากรณ์ทั่วไปของคำสั่งที่ใช้ JOIN ดังที่แสดงด้านล่าง -

SELECT column
FROM table_name1
INNER JOIN table_name2
ON table_name1.column = table_name2.column;

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

การเข้าร่วมมีหลายรูปแบบเช่นการเข้าร่วมทางซ้ายการเข้าร่วมทางขวาหรือการเข้าร่วมภายใน การเข้าร่วมประเภทต่างๆเสนอการรวมประเภทต่างๆตามค่าหรือลักษณะที่ใช้ร่วมกัน

ใช้ JOIN ที่พรอมต์คำสั่งหรือด้วยสคริปต์ PHP

พร้อมรับคำสั่ง

ที่พรอมต์คำสั่งเพียงใช้คำสั่งมาตรฐาน -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed

mysql> SELECT products.ID_number, products.Nomenclature, inventory.inventory_ct
   FROM products
   INNER JOIN inventory
   ON products.ID_numbeer = inventory.ID_number;
+-------------+----------------+-----------------+
| ID_number   | Nomenclature   | Inventory Count |
+-------------+----------------+-----------------+
| 12345       | Orbitron 4000  | 150             |
+-------------+----------------+-----------------+
| 12346       | Orbitron 3000  | 200             |
+-------------+----------------+-----------------+
| 12347       | Orbitron 1000  | 0               |
+-------------+----------------+-----------------+

PHP Script โดยใช้ JOIN

ใช้ mysql_query() ฟังก์ชันเพื่อดำเนินการเข้าร่วม -

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT a.product_id, a.product_manufacturer, b.product_count FROM products_tbl a, pcount_tbl b WHERE a.product_manufacturer = b.product_manufacturer'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn );

   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Manufacturer:{$row['product_manufacturer']} <br> ".
         "Count: {$row['product_count']} <br> ". "Product ID: {$row['product_id']} <br> ".
         "--------------------------------<br>";
   }

   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

ในการดึงข้อมูลสำเร็จคุณจะเห็นผลลัพธ์ต่อไปนี้ -

ID Number: 12345
Nomenclature: Orbitron 4000
Inventory Count: 150
--------------------------------------
ID Number: 12346
Nomenclature: Orbitron 3000
Inventory Count: 200
--------------------------------------
ID Number: 12347
Nomenclature: Orbitron 1000
Inventory Count: 0
--------------------------------------
mysql> Fetched data successfully

เมื่อทำงานกับค่า NULL โปรดจำไว้ว่าเป็นค่าที่ไม่รู้จัก ไม่ใช่สตริงว่างหรือศูนย์ซึ่งเป็นค่าที่ถูกต้อง ในการสร้างตารางข้อกำหนดของคอลัมน์อนุญาตให้ตั้งค่าให้ยอมรับค่าว่างหรือปฏิเสธ เพียงใช้คำสั่ง NULL หรือ NOT NULL สิ่งนี้มีแอปพลิเคชันในกรณีที่ข้อมูลบันทึกหายไปเช่นหมายเลข ID

ตัวแปรที่ผู้ใช้กำหนดจะมีค่าเป็น NULL จนกว่าจะมีการกำหนดอย่างชัดเจน พารามิเตอร์รูทีนที่เก็บไว้และตัวแปรโลคัลอนุญาตให้ตั้งค่าเป็น NULL เมื่อตัวแปรโลคัลไม่มีค่าเริ่มต้นจะมีค่าเป็น NULL

NULL ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่และมีนามแฝงต่อไปนี้ -

  • UNKNOWN (ค่าบูลีน)
  • \N

ตัวดำเนินการ NULL

ไม่สามารถใช้ตัวดำเนินการเปรียบเทียบมาตรฐานกับ NULL (เช่น =,>,> =, <=, <, หรือ! =) เนื่องจากการเปรียบเทียบทั้งหมดด้วยค่า NULL จะส่งคืนค่า NULL ไม่ใช่จริงหรือเท็จ การเปรียบเทียบกับ NULL หรืออาจมีอยู่ต้องใช้ตัวดำเนินการ“ <=>” (NULL-SAFE)

ตัวดำเนินการอื่น ๆ ที่มีอยู่ ได้แก่ -

  • IS NULL - ทดสอบค่า NULL

  • ไม่เป็นโมฆะ - เป็นการยืนยันว่าไม่มีค่า NULL

  • ISNULL - ส่งคืนค่า 1 เมื่อพบค่า NULL และ 0 หากไม่มี

  • COALESCE - ส่งคืนค่าที่ไม่ใช่ NULL แรกของรายการหรือส่งกลับค่า NULL หากไม่มีค่าหนึ่ง

การเรียงลำดับค่า NULL

ในการดำเนินการเรียงลำดับค่า NULL จะมีค่าต่ำสุดดังนั้นลำดับ DESC จึงให้ผลลัพธ์เป็นค่า NULL ที่ด้านล่าง MariaDB อนุญาตให้ตั้งค่าที่สูงขึ้นสำหรับค่า NULL

มีสองวิธีในการดำเนินการดังที่แสดงด้านล่าง -

SELECT column1 FROM product_tbl ORDER BY ISNULL(column1), column1;

อีกทางหนึ่ง -

SELECT column1 FROM product_tbl ORDER BY IF(column1 IS NULL, 0, 1), column1 DESC;

ฟังก์ชัน NULL

โดยทั่วไปฟังก์ชันจะแสดงผลเป็น NULL เมื่อพารามิเตอร์ใด ๆ เป็นโมฆะ อย่างไรก็ตามมีฟังก์ชันที่ออกแบบมาโดยเฉพาะสำหรับการจัดการค่า NULL พวกเขาคือ -

  • IFNULL()- ถ้านิพจน์แรกไม่ใช่ NULL มันจะส่งกลับ เมื่อประเมินเป็น NULL จะส่งกลับนิพจน์ที่สอง

  • NULLIF() - ส่งคืนค่า NULL เมื่อนิพจน์ที่เปรียบเทียบมีค่าเท่ากันถ้าไม่คืนค่านิพจน์แรก

ฟังก์ชันเช่น SUM และ AVG จะละเว้นค่า NULL

การแทรกค่า NULL

ในการแทรกค่า NULL ในคอลัมน์ที่ประกาศว่าไม่เป็นโมฆะจะมีข้อผิดพลาดเกิดขึ้น ในโหมด SQL เริ่มต้นคอลัมน์ NOT NULL จะแทรกค่าเริ่มต้นตามชนิดข้อมูลแทน

เมื่อฟิลด์เป็น TIMESTAMP, AUTO_INCREMENT หรือคอลัมน์เสมือน MariaDB จะจัดการค่า NULL ที่แตกต่างกัน การแทรกในคอลัมน์ AUTO_INCREMENT ทำให้หมายเลขถัดไปในลำดับแทรกเข้าที่ ในช่อง TIMESTAMP MariaDB จะกำหนดเวลาประทับปัจจุบันแทน ในคอลัมน์เสมือนหัวข้อที่กล่าวถึงในบทช่วยสอนนี้จะมีการกำหนดค่าเริ่มต้น

ดัชนี UNIQUE สามารถเก็บค่า NULL ได้หลายค่าอย่างไรก็ตามคีย์หลักไม่สามารถเป็น NULL ได้

ค่า NULL และคำสั่ง Alter

เมื่อคุณใช้คำสั่ง ALTER เพื่อแก้ไขคอลัมน์ในกรณีที่ไม่มีข้อมูลจำเพาะ NULL MariaDB จะกำหนดค่าโดยอัตโนมัติ

นอกเหนือจากการจับคู่รูปแบบที่พร้อมใช้งานจากประโยค LIKE MariaDB ยังเสนอการจับคู่ตามนิพจน์ทั่วไปผ่านตัวดำเนินการ REGEXP ตัวดำเนินการดำเนินการจับคู่รูปแบบสำหรับนิพจน์สตริงตามรูปแบบที่กำหนด

MariaDB 10.0.5 เปิดตัว PCRE Regular Expressions ซึ่งช่วยเพิ่มขอบเขตของการจับคู่ในพื้นที่ต่างๆเช่นรูปแบบการเรียกซ้ำการยืนยันล่วงหน้าและอื่น ๆ อีกมากมาย

ตรวจสอบการใช้ไวยากรณ์ตัวดำเนินการ REGEXP มาตรฐานที่ระบุด้านล่าง -

SELECT column FROM table_name WHERE column REGEXP '[PATTERN]';

REGEXP ส่งคืน 1 สำหรับการจับคู่รูปแบบหรือ 0 หากไม่มีหนึ่ง

ตัวเลือกสำหรับสิ่งที่ตรงกันข้ามมีอยู่ในรูปแบบของ NOT REGEXP MariaDB ยังมีคำพ้องความหมายสำหรับ REGEXP และ NOT REGEXP, RLIKE และ NOT RLIKE ซึ่งสร้างขึ้นด้วยเหตุผลด้านความเข้ากันได้

รูปแบบการเปรียบเทียบอาจเป็นสตริงตามตัวอักษรหรืออย่างอื่นเช่นคอลัมน์ตาราง ในสตริงจะใช้ไวยากรณ์การหลีกเลี่ยง C ดังนั้นให้เพิ่มอักขระ“ \” ให้เป็นสองเท่า REGEXP ยังไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ยกเว้นสตริงไบนารี

ตารางรูปแบบที่เป็นไปได้ซึ่งสามารถใช้ได้มีดังต่อไปนี้ -

ซีเนียร์ No รูปแบบและคำอธิบาย
1

^

ตรงกับจุดเริ่มต้นของสตริง

2

$

ตรงกับจุดสิ้นสุดของสตริง

3

.

มันตรงกับอักขระเดียว

4

[...]

ตรงกับอักขระใด ๆ ในวงเล็บ

5

[^...]

ตรงกับอักขระใด ๆ ที่ไม่อยู่ในวงเล็บ

6

p1|p2|p3

ตรงกับรูปแบบใด ๆ

7

*

ตรงกับ 0 หรือมากกว่าอินสแตนซ์ขององค์ประกอบก่อนหน้า

8

+

ตรงกับ 1 หรือมากกว่าอินสแตนซ์ขององค์ประกอบก่อนหน้า

9

{n}

ตรงกับ n อินสแตนซ์ขององค์ประกอบก่อนหน้า

10

{m,n}

มันจับคู่ m ถึง n อินสแตนซ์ขององค์ประกอบก่อนหน้า

ตรวจสอบตัวอย่างการจับคู่รูปแบบที่ระบุด้านล่าง -

ผลิตภัณฑ์ที่ขึ้นต้นด้วย "pr" -

SELECT name FROM product_tbl WHERE name REGEXP '^pr';

ผลิตภัณฑ์ที่ลงท้ายด้วย“ na” -

SELECT name FROM product_tbl WHERE name REGEXP 'na$';

ผลิตภัณฑ์ที่ขึ้นต้นด้วยสระ -

SELECT name FROM product_tbl WHERE name REGEXP '^[aeiou]';

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

ธุรกรรมเป็นไปตาม ACID (Atomicity, Consistency, Isolation และ Durability) -

  • Atomicity - ช่วยให้การดำเนินการทั้งหมดประสบความสำเร็จโดยการยกเลิกเมื่อเกิดความล้มเหลวและย้อนกลับการเปลี่ยนแปลง

  • Consistency - ช่วยให้มั่นใจได้ว่าฐานข้อมูลใช้การเปลี่ยนแปลงกับธุรกรรมที่ประสบความสำเร็จ

  • Isolation - ช่วยให้สามารถดำเนินการทำธุรกรรมได้อย่างอิสระ

  • Durability - ช่วยให้มั่นใจได้ถึงความคงอยู่ของธุรกรรมที่ประสบความสำเร็จในกรณีที่ระบบล้มเหลว

ที่ส่วนหัวของคำสั่งธุรกรรมคือคำสั่ง START TRANSACTION ตามด้วยคำสั่ง COMMIT และ ROLLBACK -

  • START TRANSACTION เริ่มการทำธุรกรรม

  • COMMIT บันทึกการเปลี่ยนแปลงข้อมูล

  • ROLLBACK สิ้นสุดธุรกรรมทำลายการเปลี่ยนแปลงใด ๆ

ในการทำธุรกรรมที่ประสบความสำเร็จ COMMIT จะทำหน้าที่ เมื่อเกิดความล้มเหลว ROLLBACK จะทำหน้าที่

Note- คำสั่งบางอย่างทำให้เกิดการกระทำโดยนัยและยังทำให้เกิดข้อผิดพลาดเมื่อใช้ภายในธุรกรรม ตัวอย่างของข้อความดังกล่าวรวมถึง แต่ไม่ จำกัด เพียง CREATE, ALTER และ DROP

ธุรกรรม MariaDB ยังมีตัวเลือกต่างๆเช่น SAVEPOINT และ LOCK TABLES SAVEPOINT กำหนดจุดคืนค่าเพื่อใช้กับ ROLLBACK LOCK TABLES อนุญาตให้ควบคุมการเข้าถึงตารางระหว่างเซสชันเพื่อป้องกันการแก้ไขในช่วงเวลาหนึ่ง

ตัวแปร AUTOCOMMIT ให้การควบคุมธุรกรรม การตั้งค่า 1 บังคับให้การดำเนินการทั้งหมดถือเป็นธุรกรรมที่ประสบความสำเร็จและการตั้งค่าเป็น 0 ทำให้การคงอยู่ของการเปลี่ยนแปลงเกิดขึ้นเฉพาะในคำสั่ง COMMIT ที่ชัดเจนเท่านั้น

โครงสร้างของธุรกรรม

โครงสร้างทั่วไปของใบแจ้งยอดธุรกรรมประกอบด้วยการเริ่มต้นด้วย START TRANSACTION ขั้นตอนต่อไปคือการแทรกคำสั่ง / การดำเนินการอย่างน้อยหนึ่งคำสั่งแทรกคำสั่งที่ตรวจสอบข้อผิดพลาดแทรกคำสั่ง ROLLBACK เพื่อจัดการข้อผิดพลาดที่ค้นพบและสุดท้ายแทรกคำสั่ง COMMIT เพื่อใช้การเปลี่ยนแปลงกับการดำเนินการที่ประสบความสำเร็จ

ตรวจสอบตัวอย่างด้านล่าง -

START TRANSACTION;
SELECT name FROM products WHERE manufacturer = 'XYZ Corp';
UPDATE spring_products SET item = name;
COMMIT;

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

ใช้ ALTER เพื่อแก้ไขคอลัมน์

ALTER จับคู่กับ DROP จะลบคอลัมน์ที่มีอยู่ อย่างไรก็ตามจะล้มเหลวหากคอลัมน์นั้นเป็นคอลัมน์เดียวที่เหลืออยู่

ตรวจสอบตัวอย่างด้านล่าง -

mysql> ALTER TABLE products_tbl DROP version_num;

ใช้คำสั่ง ALTER ... ADD เพื่อเพิ่มคอลัมน์ -

mysql> ALTER TABLE products_tbl ADD discontinued CHAR(1);

ใช้คำหลัก FIRST และ After เพื่อระบุตำแหน่งของคอลัมน์ -

ALTER TABLE products_tbl ADD discontinued CHAR(1) FIRST;
ALTER TABLE products_tbl ADD discontinued CHAR(1) AFTER quantity;

หมายเหตุคำหลัก FIRST และ AFTER ใช้กับคำสั่ง ALTER ... ADD เท่านั้น นอกจากนี้คุณต้องวางตารางแล้วเพิ่มเพื่อที่จะจัดตำแหน่งใหม่

เปลี่ยนนิยามคอลัมน์หรือชื่อโดยใช้ส่วนคำสั่ง MODIFY หรือ CHANGE ในคำสั่ง ALTER ประโยคมีลักษณะพิเศษคล้ายกัน แต่ใช้ไวยากรณ์ที่แตกต่างกันอย่างมาก

ตรวจสอบตัวอย่างการเปลี่ยนแปลงที่ระบุด้านล่าง -

mysql> ALTER TABLE products_tbl CHANGE discontinued status CHAR(4);

ในคำสั่งโดยใช้ CHANGE ระบุคอลัมน์เดิมจากนั้นคอลัมน์ใหม่ที่จะแทนที่ ตรวจสอบตัวอย่าง MODIFY ด้านล่าง -

mysql> ALTER TABLE products_tbl MODIFY discontinued CHAR(4);

คำสั่ง ALTER ยังอนุญาตให้เปลี่ยนค่าเริ่มต้น ตรวจสอบตัวอย่าง -

mysql> ALTER TABLE products_tbl ALTER discontinued SET DEFAULT N;

คุณยังสามารถใช้เพื่อลบข้อ จำกัด เริ่มต้นโดยจับคู่กับประโยค DROP -

mysql> ALTER TABLE products_tbl ALTER discontinued DROP DEFAULT;

การใช้ ALTER เพื่อปรับเปลี่ยนตาราง

เปลี่ยนประเภทตารางด้วยคำสั่ง TYPE -

mysql> ALTER TABLE products_tbl TYPE = INNODB;

เปลี่ยนชื่อตารางด้วยคำหลัก RENAME -

mysql> ALTER TABLE products_tbl RENAME TO products2016_tbl;

ดัชนีเป็นเครื่องมือในการเร่งการดึงข้อมูล ดัชนีสร้างรายการสำหรับแต่ละค่าภายในคอลัมน์ที่จัดทำดัชนี

ดัชนีมีสี่ประเภท -

  • Primary (หนึ่งระเบียนแสดงถึงระเบียนทั้งหมด)

  • Unique (หนึ่งระเบียนแสดงถึงหลายระเบียน)

  • Plain

  • Full-Text (อนุญาตให้มีตัวเลือกมากมายในการค้นหาข้อความ)

คำว่า "คีย์" และ "ดัชนี" เหมือนกันในการใช้งานนี้

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

แม้ว่าดัชนีจะเร่งการค้นหาหรือคำสั่ง SELECT แต่ก็ทำให้การแทรกและการอัปเดตลากเนื่องจากการดำเนินการทั้งในตารางและดัชนี

สร้างดัชนี

คุณสามารถสร้างดัชนีผ่านคำสั่ง CREATE TABLE ... INDEX หรือคำสั่ง CREATE INDEX ตัวเลือกที่ดีที่สุดที่สนับสนุนความสามารถในการอ่านการบำรุงรักษาและแนวทางปฏิบัติที่ดีที่สุดคือ CREATE INDEX

ตรวจสอบไวยากรณ์ทั่วไปของดัชนีที่ระบุด้านล่าง -

CREATE [UNIQUE or FULLTEXT or...] INDEX index_name ON table_name column;

ตรวจสอบตัวอย่างการใช้งาน -

CREATE UNIQUE INDEX top_sellers ON products_tbl product;

วางดัชนี

คุณสามารถวางดัชนีด้วย DROP INDEX หรือ ALTER TABLE ... DROP ตัวเลือกที่ดีที่สุดที่สนับสนุนความสามารถในการอ่านการบำรุงรักษาและแนวทางปฏิบัติที่ดีที่สุดคือ DROP INDEX

ตรวจสอบไวยากรณ์ทั่วไปของ Drop Index ด้านล่าง -

DROP INDEX index_name ON table_name;

ตรวจสอบตัวอย่างการใช้งาน -

DROP INDEX top_sellers ON product_tbl;

เปลี่ยนชื่อดัชนี

เปลี่ยนชื่อดัชนีด้วยคำสั่ง ALTER TABLE ตรวจสอบไวยากรณ์ทั่วไปที่ระบุด้านล่าง -

ALTER TABLE table_name DROP INDEX index_name, ADD INDEX new_index_name;

ตรวจสอบตัวอย่างการใช้งาน -

ALTER TABLE products_tbl DROP INDEX top_sellers, ADD INDEX top_2016sellers;

การจัดการดัชนี

คุณจะต้องตรวจสอบและติดตามดัชนีทั้งหมด ใช้ SHOW INDEX เพื่อแสดงดัชนีที่มีอยู่ทั้งหมดที่เกี่ยวข้องกับตารางที่กำหนด คุณสามารถกำหนดรูปแบบของเนื้อหาที่แสดงได้โดยใช้ตัวเลือกเช่น“ \ G” ซึ่งระบุรูปแบบแนวตั้ง

ตรวจสอบตัวอย่างต่อไปนี้ -

mysql > SHOW INDEX FROM products_tbl\G

สถิติตาราง

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

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

สร้างตารางชั่วคราว

คีย์เวิร์ดชั่วคราวภายในคำสั่ง CREATE TABLE จะสร้างตารางชั่วคราว ตรวจสอบตัวอย่างด้านล่าง -

mysql>CREATE TEMPORARY TABLE order (
   item_name VARCHAR(50) NOT NULL
   , price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   , quantity INT UNSIGNED NOT NULL DEFAULT 0
);

ในการสร้างตารางชั่วคราวคุณสามารถโคลนตารางที่มีอยู่ซึ่งหมายถึงลักษณะทั่วไปทั้งหมดด้วยประโยค LIKE คำสั่ง CREATE TABLE ที่ใช้ในการวางไข่ตารางชั่วคราวจะไม่กระทำธุรกรรมอันเป็นผลมาจากคีย์เวิร์ด TEMPORARY

แม้ว่าตารางชั่วคราวจะแตกต่างจากแบบไม่ชั่วคราวและตกเมื่อสิ้นสุดเซสชัน แต่ก็อาจมีความขัดแย้ง -

  • บางครั้งอาจขัดแย้งกับตารางชั่วคราวแบบโกสต์จากเซสชันที่หมดอายุ

  • บางครั้งอาจขัดแย้งกับชื่อเงาของตารางที่ไม่ใช่ชั่วคราว

Note - ตารางชั่วคราวได้รับอนุญาตให้มีชื่อเดียวกันกับตารางที่ไม่ใช่ชั่วคราวที่มีอยู่เนื่องจาก MariaDB มองว่าเป็นการอ้างอิงที่แตกต่างกัน

ธุรการ

MariaDB ต้องการให้สิทธิ์แก่ผู้ใช้ในการสร้างตารางชั่วคราว ใช้คำสั่ง GRANT เพื่อมอบสิทธิพิเศษนี้ให้กับผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ

GRANT CREATE TEMPORARY TABLES ON orders TO 'machine122'@'localhost';

วางตารางชั่วคราว

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

mysql> DROP TABLE order;

บางสถานการณ์จำเป็นต้องสร้างสำเนาที่ถูกต้องของตารางที่มีอยู่ คำสั่ง CREATE ... SELECT ไม่สามารถสร้างเอาต์พุตนี้ได้เนื่องจากละเลยสิ่งต่างๆเช่นดัชนีและค่าเริ่มต้น

ขั้นตอนในการทำซ้ำตารางมีดังนี้ -

  • ใช้ SHOW CREATE TABLE เพื่อสร้างคำสั่ง CREATE TABLE ที่ให้รายละเอียดโครงสร้างทั้งหมดของตารางต้นทาง

  • แก้ไขคำสั่งเพื่อตั้งชื่อใหม่ให้ตารางและดำเนินการ

  • ใช้คำสั่ง INSERT INTO ... SELECT หากคุณต้องการคัดลอกข้อมูลตารางด้วย

mysql> INSERT INTO inventory_copy_tbl (
   product_id,product_name,product_manufacturer,ship_date)
   
   SELECT product_id,product_name,product_manufacturer,ship_date,
   FROM inventory_tbl;

อีกวิธีหนึ่งในการสร้างสำเนาใช้คำสั่ง CREATE TABLE AS คำสั่งคัดลอกคอลัมน์คำจำกัดความคอลัมน์ทั้งหมดและเติมข้อมูลสำเนาด้วยข้อมูลของตารางต้นทาง

ตรวจสอบไวยากรณ์ที่ระบุด้านล่าง -

CREATE TABLE clone_tbl AS
   SELECT columns
   FROM original_tbl
   WHERE conditions];

ตรวจสอบตัวอย่างการใช้งานด้านล่าง -

CREATE TABLE products_copy_tbl AS
   SELECT *
   FROM products_tbl;

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

ไม่อนุญาตให้ใช้ในหลายแบบสอบถามเฉพาะในแบบสอบถามเดิมเนื่องจากลักษณะเสมือน (ไม่ได้เขียนลงดิสก์) อย่างไรก็ตามตารางลำดับสามารถแปลงเป็นตารางมาตรฐานได้โดยใช้คำสั่ง ALTER หากตารางที่แปลงแล้วถูกลบตารางลำดับยังคงมีอยู่ ลำดับยังไม่สามารถสร้างตัวเลขติดลบหรือหมุนต่ำสุด / สูงสุด

การติดตั้ง Sequence Engine

การใช้ลำดับต้องติดตั้งเอ็นจิ้นลำดับซึ่ง MariaDB กระจายเป็นปลั๊กอินแทนที่จะเป็นไบนารี ติดตั้งด้วยคำสั่งต่อไปนี้ -

INSTALL SONAME "ha_sequence";

หลังจากติดตั้งแล้วให้ตรวจสอบ -

SHOW ENGINES\G

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

การสร้างลำดับ

มีสองวิธีในการสร้างลำดับ -

  • สร้างตารางและใช้แอตทริบิวต์ AUTO_INCREMENT เพื่อกำหนดคอลัมน์เป็นการเพิ่มอัตโนมัติ

  • ใช้ฐานข้อมูลที่มีอยู่และใช้คิวรี SELECT ลำดับเพื่อสร้างลำดับ แบบสอบถามใช้ไวยากรณ์ seq_ [FROM] _to_ [TO] หรือ seq_ [FROM] _to_ [TO] _step_STEP

แนวทางปฏิบัติที่ดีที่สุดชอบใช้วิธีที่สอง ดูตัวอย่างการสร้างลำดับที่ระบุด้านล่าง -

SELECT * FROM seq_77_to_99;

ลำดับมีประโยชน์มากมาย -

  • ค้นหาค่าที่ขาดหายไปภายในคอลัมน์เพื่อป้องกันปัญหาที่เกี่ยวข้องในการดำเนินการ -

SELECT myseq.seq FROM seq_22_to_28 myseq LEFT JOIN table1 t ON myseq.seq
   = x.y WHERE x.y IS NULL;
  • สร้างชุดค่าผสม -

SELECT x1.seq, x2.seq FROM seq_5_to_9 x1 JOIN seq_5_to_9 x2 ORDER BY 5, 6;
  • ค้นหาจำนวนทวีคูณ -

SELECT seq FROM seq_3_to_100_step_4;
  • สร้างลำดับวันที่เพื่อใช้ในแอปพลิเคชันเช่นระบบการจอง
  • สร้างลำดับเวลา

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

ในบางสถานการณ์รายการที่ซ้ำกันอาจทำให้เกิดปัญหาและมักปรากฏขึ้นเนื่องจากการกระทำโดยปริยายหรือนโยบายผ่อนปรนของคำสั่ง MariaDB มีหลายวิธีในการควบคุมปัญหานี้ค้นหารายการที่ซ้ำกันลบรายการที่ซ้ำกันและป้องกันการสร้างซ้ำ

กลยุทธ์และเครื่องมือ

มีสี่วิธีหลักในการจัดการรายการที่ซ้ำกัน -

  • ตกปลาด้วย JOIN และลบด้วยตารางชั่วคราว

  • ใช้ INSERT ... ON DUPLICATE KEY UPDATE เพื่ออัปเดตเกี่ยวกับการค้นพบรายการที่ซ้ำกัน

  • ใช้ DISTINCT เพื่อตัดผลลัพธ์ของคำสั่ง SELECT และลบรายการที่ซ้ำกัน

  • ใช้ INSERT IGNORE เพื่อหยุดการแทรกข้อมูลที่ซ้ำกัน

ใช้เข้าร่วมกับตารางชั่วคราว

เพียงแค่ดำเนินการกึ่งเข้าร่วมเช่นการรวมภายในจากนั้นลบรายการที่ซ้ำกันที่พบในตารางชั่วคราว

การใช้ INSERT

เมื่อ INSERT ... ON DUPLICATE KEY UPDATE พบว่ามีคีย์เฉพาะหรือคีย์หลักที่ซ้ำกันระบบจะทำการอัปเดต ในการค้นพบคีย์ที่ไม่ซ้ำกันหลายคีย์จะอัปเดตเฉพาะคีย์แรกเท่านั้น ดังนั้นอย่าใช้บนตารางที่มีดัชนีเฉพาะหลายตัว

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

INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Note - หากไม่พบคีย์คำสั่ง INSERT ... ON DUPLICATE KEY UPDATE จะทำงานเหมือนกับคำสั่งแทรกปกติ

ใช้ DISTINCT

คำสั่ง DISTINCT ลบรายการที่ซ้ำกันออกจากผลลัพธ์ ไวยากรณ์ทั่วไปสำหรับอนุประโยค DISTINCT มีดังนี้ -

SELECT DISTINCT fields
FROM table
[WHERE conditions];

Note - ผลลัพธ์ของคำสั่งที่มีอนุประโยค DISTINCT -

  • เมื่อใช้นิพจน์เดียวจะส่งคืนค่าที่ไม่ซ้ำกันสำหรับมัน

  • เมื่อใช้หลายนิพจน์จะส่งกลับชุดค่าผสมที่ไม่ซ้ำกัน

  • ไม่ละเว้นค่า NULL ดังนั้นผลลัพธ์ยังมี NULL เป็นค่าเฉพาะ

ตรวจสอบคำสั่งต่อไปนี้โดยใช้ประโยค DISTINCT สำหรับนิพจน์เดียว -

SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';

ตรวจสอบตัวอย่างต่อไปนี้โดยใช้หลายนิพจน์ -

SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30

ใช้ INSERT IGNORE

คำสั่ง INSERT IGNORE สั่งให้ MariaDB ยกเลิกการแทรกในการค้นหาเรกคอร์ดที่ซ้ำกัน ตรวจสอบตัวอย่างการใช้งานด้านล่าง -

mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
   VALUES( 'Lex', 'Luther');

นอกจากนี้โปรดสังเกตตรรกะเบื้องหลังรายการที่ซ้ำกัน บางตารางต้องการข้อมูลซ้ำตามลักษณะของข้อมูลตารางนั้น รองรับความต้องการดังกล่าวในกลยุทธ์ของคุณสำหรับการจัดการระเบียนที่ซ้ำกัน

การกระทำง่ายๆในการยอมรับอินพุตของผู้ใช้จะเปิดประตูสู่การหาประโยชน์ ปัญหาส่วนใหญ่เกิดจากการจัดการข้อมูลเชิงตรรกะ แต่โชคดีที่การหลีกเลี่ยงข้อบกพร่องที่สำคัญเหล่านี้ค่อนข้างง่าย

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

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

if(check_match("/^\w{8,20}$/", $_GET['user_name'], $matches)) {
   $result = mysql_query("SELECT * FROM system_users WHERE user_name = $matches[0]");
} else {
   echo "Invalid username";
}

ใช้ตัวดำเนินการ REGEXP และส่วนคำสั่ง LIKE ในการสร้างข้อ จำกัด ของอินพุต

พิจารณาการควบคุมอินพุตที่จำเป็นอย่างชัดเจนทุกประเภทเช่น -

  • ควบคุมอักขระหนีที่ใช้

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

  • ควบคุมไวยากรณ์ของข้อมูลที่ป้อน อย่าให้มีสิ่งใดนอกรูปแบบที่ต้องการ

  • ควบคุมข้อกำหนดที่อนุญาต คำหลัก Blacklist SQL

คุณอาจไม่ทราบถึงอันตรายของการโจมตีด้วยการฉีดยาหรืออาจถือว่าไม่มีนัยสำคัญ แต่สิ่งเหล่านี้อยู่ในอันดับต้น ๆ ของข้อกังวลด้านความปลอดภัย นอกจากนี้ให้พิจารณาผลของสองรายการนี้ -

1=1
-or-
*

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

นอกจากนี้ให้พิจารณาการจับคู่รูปแบบและเครื่องมือนิพจน์ทั่วไปที่จัดเตรียมโดยภาษาโปรแกรม / สคริปต์ใด ๆ ที่จับคู่กับ MariaDB ซึ่งให้การควบคุมที่มากขึ้นและบางครั้งก็ควบคุมได้ดีขึ้น

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

ตัวเลือก

ตัวเลือกหลักสำหรับการสำรองข้อมูล ได้แก่ การสำรองข้อมูลเชิงตรรกะและการสำรองข้อมูลทางกายภาพ การสำรองข้อมูลเชิงตรรกะถือคำสั่ง SQL สำหรับการกู้คืนข้อมูล การสำรองข้อมูลทางกายภาพประกอบด้วยสำเนาของข้อมูล

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

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

เครื่องมือสำรอง

เครื่องมือหลักที่ใช้สำหรับการสำรองข้อมูล MariaDB คือ mysqldump. มีการสำรองข้อมูลเชิงตรรกะและความยืดหยุ่น นอกจากนี้ยังพิสูจน์ตัวเลือกที่ยอดเยี่ยมสำหรับฐานข้อมูลขนาดเล็กMysqldumpทิ้งข้อมูลลงใน SQL, CSV, XML และรูปแบบอื่น ๆ อีกมากมาย เอาต์พุตจะไม่เก็บรักษากระบวนงานมุมมองและเหตุการณ์ที่จัดเก็บไว้โดยไม่มีคำแนะนำที่ชัดเจน

มีสามตัวเลือกสำหรับ mysqldump การสำรองข้อมูล -

  • Raw data - ถ่ายโอนข้อมูลตารางเป็นไฟล์ข้อมูลดิบผ่านตัวเลือก --tab ซึ่งระบุปลายทางของไฟล์ด้วย -

$ mysqldump -u root -p --no-create-info \
   --tab=/tmp PRODUCTS products_tbl
  • Data/Definitions export- ตัวเลือกนี้อนุญาตให้ส่งออกตารางเดียวหรือหลายตารางไปยังไฟล์และรองรับการสำรองฐานข้อมูลที่มีอยู่ทั้งหมดบนเครื่องโฮสต์ ตรวจสอบตัวอย่างของการเอ็กซ์พอร์ตเนื้อหาหรือคำจำกัดความไปยังไฟล์

$ mysqldump -u root -p PRODUCTS products_tbl > export_file.txt
  • Transfer - คุณยังสามารถส่งออกฐานข้อมูลและตารางไปยังโฮสต์อื่นได้

$ mysqldump -u root -p database_name \
   | mysql -h other-host.com database_name

การใช้คำสั่ง SELECT ... INTO OUTFILE

อีกทางเลือกหนึ่งสำหรับการส่งออกข้อมูลใช้คำสั่ง SELECT ... INTO OUTFILE ตัวเลือกง่ายๆนี้ส่งออกตารางเป็นไฟล์ข้อความที่จัดรูปแบบอย่างง่าย -

mysql> SELECT * FROM products_tbl
   -> INTO OUTFILE '/tmp/products.txt';

แอตทริบิวต์อนุญาตให้จัดรูปแบบไฟล์ตามข้อกำหนดที่คุณต้องการ

สังเกตคุณสมบัติต่อไปนี้ของข้อความนี้ -

  • ชื่อไฟล์ต้องระบุตำแหน่งที่คุณต้องการสำหรับเอาต์พุต

  • คุณต้องมีสิทธิ์ไฟล์ MariaDB เพื่อดำเนินการคำสั่ง

  • ชื่อไฟล์เอาต์พุตต้องไม่ซ้ำกัน

  • คุณต้องมีข้อมูลรับรองการเข้าสู่ระบบบนโฮสต์

  • ในสภาพแวดล้อม UNIX ไฟล์เอาต์พุตสามารถอ่านได้ทั่วโลก แต่ความเป็นเจ้าของเซิร์ฟเวอร์มีผลต่อความสามารถในการลบไฟล์ รับรองว่าคุณมีสิทธิพิเศษ

การใช้ CONNECT ในการสำรองข้อมูล

ตัวจัดการ CONNECT อนุญาตให้ส่งออกข้อมูล สิ่งนี้พิสูจน์ได้ว่ามีประโยชน์เป็นหลักในสถานการณ์เมื่อการดำเนินการ SELECT ... INTO OUTFILE ไม่รองรับรูปแบบไฟล์

ตรวจสอบตัวอย่างต่อไปนี้ -

create table products
engine = CONNECT table_type = XML file_name = 'products.htm' header = yes
option_list = 'name = TABLE,coltype = HTML,attribute = border = 1;cellpadding = 5'

select plugin_name handler, plugin_version version, plugin_author
author, plugin_description description, plugin_maturity maturity
from information_schema.plugins where plugin_type = 'STORAGE ENGINE';

เครื่องมืออื่น ๆ

ตัวเลือกอื่น ๆ สำหรับการสำรองข้อมูลมีดังนี้ -

  • XtraBackup- ตัวเลือกนี้กำหนดเป้าหมายฐานข้อมูล XtraDB / InnoDB และทำงานร่วมกับเครื่องมือจัดเก็บข้อมูลใด ๆ เรียนรู้เพิ่มเติมเกี่ยวกับเครื่องมือนี้จากเว็บไซต์ทางการของ Percona

  • Snapshots- ระบบไฟล์บางระบบอนุญาตให้ใช้สแนปชอตได้ กระบวนการนี้ประกอบด้วยการล้างตารางด้วยการล็อกการอ่านการติดตั้งสแน็ปช็อตการปลดล็อกตารางการคัดลอกสแน็ปช็อตจากนั้นการยกเลิกการต่อเชื่อมสแน็ปช็อต

  • LVM- วิธีการยอดนิยมนี้ใช้สคริปต์ Perl ได้รับการล็อคการอ่านในทุกตารางและล้างแคชลงในดิสก์ จากนั้นจะได้รับภาพรวมและปลดล็อกตาราง ปรึกษาอย่างเป็นทางการmylvmbackup เว็บไซต์สำหรับข้อมูลเพิ่มเติม

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

ข้อพิจารณาของ INNODB

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

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

มีสามตัวเลือกในการโหลดข้อมูล: คำสั่ง LOAD DATA, mysqlimport และ mysqldump restore แบบธรรมดา

การใช้ LOAD DATA

คำสั่ง LOAD DATA ทำหน้าที่เป็นตัวโหลดจำนวนมาก ตรวจสอบตัวอย่างการใช้งานที่โหลดไฟล์ข้อความ -

mysql> LOAD DATA LOCAL INFILE 'products_copy.txt' INTO TABLE empty_tbl;

สังเกตคุณสมบัติดังต่อไปนี้ของคำสั่ง LOAD DATA -

  • ใช้คีย์เวิร์ด LOCAL เพื่อป้องกันไม่ให้ MariaDB ทำการค้นหาโฮสต์แบบเจาะลึกและใช้พา ธ ที่เฉพาะเจาะจง

  • คำสั่งจะถือว่ารูปแบบประกอบด้วยบรรทัดที่สิ้นสุดโดย linefeeds (บรรทัดใหม่) และค่าข้อมูลที่คั่นด้วยแท็บ

  • ใช้คำสั่ง FIELDS เพื่อระบุการจัดรูปแบบของเขตข้อมูลบนบรรทัดอย่างชัดเจน ใช้คำสั่ง LINES เพื่อระบุการสิ้นสุดบรรทัด ดูตัวอย่างด้านล่าง

mysql> LOAD DATA LOCAL INFILE 'products_copy.txt' INTO TABLE empty_tbl
   FIELDS TERMINATED BY '|'
   LINES TERMINATED BY '\n';
  • คำสั่งถือว่าคอลัมน์ภายใน datafile ใช้ลำดับเดียวกันของตาราง หากคุณต้องการตั้งค่าลำดับอื่นคุณสามารถโหลดไฟล์ได้ดังนี้ -

mysql> LOAD DATA LOCAL INFILE 'products_copy.txt' INTO TABLE empty_tbl (c, b, a);

ใช้ MYSQLIMPORT

เครื่องมือ mysqlimport ทำหน้าที่เป็น LOAD DATA wrapper ซึ่งอนุญาตให้ดำเนินการเดียวกันจากบรรทัดคำสั่ง

โหลดข้อมูลดังนี้ -

$ mysqlimport -u root -p --local database_name source_file.txt

ระบุการจัดรูปแบบดังนี้ -

$ mysqlimport -u root -p --local --fields-terminated-by="|" \
   --lines-terminated-by="\n" database_name source_file.txt

ใช้ --columns ตัวเลือกในการระบุลำดับคอลัมน์ -

$ mysqlimport -u root -p --local --columns=c,b,a \
   database_name source_file.txt

ใช้ MYSQLDUMP

คืนค่าด้วย mysqldump ต้องการคำสั่งง่ายๆนี้สำหรับการโหลดไฟล์ดัมพ์กลับไปที่โฮสต์ -

shell> mysql database_name < source_file.sql

ตัวละครพิเศษและใบเสนอราคา

ในคำสั่ง LOAD DATA คำพูดและอักขระพิเศษอาจตีความไม่ถูกต้อง คำสั่งจะถือว่าค่าที่ไม่ได้ใส่เครื่องหมายคำพูดและถือว่าแบ็กสแลชเป็นอักขระหลีก ใช้คำสั่ง FIELDS เพื่อระบุการจัดรูปแบบ ชี้ไปที่เครื่องหมายคำพูดที่มี "ENCLOSED BY" ซึ่งทำให้เกิดการตัดเครื่องหมายคำพูดออกจากค่าข้อมูล เปลี่ยน Escape ด้วย“ ESCAPED BY”

บทนี้ประกอบด้วยรายการฟังก์ชันที่ใช้บ่อยที่สุดโดยเสนอคำจำกัดความคำอธิบายและตัวอย่าง

ฟังก์ชัน MariaDB Aggregate

ฟังก์ชันการรวมที่ใช้บ่อยที่สุดจะได้รับด้านล่าง -

ซีเนียร์ No ชื่อและคำอธิบาย
1

COUNT

นับจำนวนบันทึก

Example - เลือก COUNT (*) จาก customer_table;

2

MIN

เผยให้เห็นค่าต่ำสุดของชุดระเบียน

Example - เลือกองค์กรขั้นต่ำ (บัญชี) จากสัญญา GROUP BY องค์กร;

3

MAX

เผยให้เห็นค่าสูงสุดของชุดระเบียน

Example - เลือกองค์กร MAX (ขนาดบัญชี) จากสัญญา GROUP BY องค์กร

4

AVG

จะคำนวณค่าเฉลี่ยของชุดระเบียน

Example - เลือก AVG (ขนาดบัญชี) จากสัญญา;

5

SUM

จะคำนวณผลรวมของชุดระเบียน

Example - เลือก SUM (ขนาดบัญชี) จากสัญญา;

การคำนวณอายุ MariaDB

TIMESTAMPDIFF ฟังก์ชันมีวิธีคำนวณอายุ -

SELECT CURDATE() AS today;
SELECT ID, DOB, TIMESTAMPDIFF(YEAR,DOB,'2015-07-01') AS age FROM officer_info;

การต่อสายอักขระ MariaDB

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

SELECT CONCAT(item, item,...);

ตรวจสอบตัวอย่างต่อไปนี้ -

SELECT CONCAT('Ram', 'bu', 'tan');
Output:Rambutan

MariaDB ฟังก์ชันวันที่ / เวลา

ด้านล่างนี้เป็นฟังก์ชันวันที่ที่สำคัญ -

ซีเนียร์ No ชื่อและคำอธิบาย
1

CURDATE()

ส่งคืนวันที่ในรูปแบบ yyyy-mm-dd หรือ yyyymmdd

Example - เลือก CURDATE ();

2

DATE()

ส่งคืนวันที่ในหลายรูปแบบ

Example − สร้างตาราง product_release_tbl (x DATE);

3

CURTIME()

ส่งคืนเวลาในรูปแบบ HH: MM: SS หรือ HHMMSS.uuuuuu

Example - เลือก CURTIME ();

4

DATE_SUB()

เพิ่มหรือลบจำนวนวันจากวันที่ระบุ

Example - เลือก DATE_SUB ('2016-02-08', INTERVAL 60 DAY);

5

DATEDIFF()

กำหนดวันระหว่างวันที่สองวัน

Example - เลือก DATEDIFF ('2016-01-01 23:59:59', '2016-01-03');

6

DATE ADD()

เพิ่มหรือลบหน่วยเวลาใด ๆ เป็น / จากวันที่และเวลา

Example - เลือก DATE_ADD ('2016-01-04 23:59:59', ช่วงเวลา 22 วินาที);

7

EXTRACT()

มันแยกหน่วยจากวันที่

Example - เลือกสารสกัด (ปีจาก '2016-01-08');

8

NOW()

มันส่งคืนวันที่และเวลาปัจจุบันในรูปแบบ yyyy-mm-dd hh: mm: ss หรือ yyyymmddhhmmss.uuuuuu

Example - เลือกทันที ();

9

DATE FORMAT()

มันจัดรูปแบบวันที่ตามสตริงรูปแบบที่ระบุ

Example - เลือก DATE_FORMAT ('2016-01-09 20:20:00', '% W% M% Y');

ต่อไปนี้เป็นฟังก์ชั่นเวลาที่สำคัญ -

ซีเนียร์ No ชื่อและคำอธิบาย
1

HOUR()

จะคืนค่าชั่วโมงของเวลาหรือชั่วโมงที่ผ่านไป

Example - เลือกชั่วโมง ('19: 17: 09 ');

2

LOCALTIME()

มันทำหน้าที่เหมือนกับ NOW ()

3

MICROSECOND()

จะคืนค่าไมโครวินาทีของเวลา

Example - เลือก MICROSECOND ('16: 30: 00.543876 ');

4

MINUTE()

จะคืนค่านาทีของเวลา

Example - นาทีที่เลือก ('2016-05-22 17:22:01');

5

SECOND()

จะคืนค่าวินาทีของวันที่

Example - เลือกวินาที ('2016-03-12 16: 30: 04.000001');

6

TIME_FORMAT()

จัดรูปแบบเวลาให้สอดคล้องกับสตริงรูปแบบที่ระบุ

Example - เลือก TIME_FORMAT ('22: 02: 20 ','% H% k% h% I% l ');

7

TIMESTAMP()

มีการประทับเวลาสำหรับกิจกรรมในรูปแบบ yyyy-mm-dd hh: mm: dd

Example - สร้างคำสั่งตาราง _ (ID INT, tmst TIMESTAMP);

ฟังก์ชันตัวเลข MariaDB

ด้านล่างนี้เป็นฟังก์ชันตัวเลขที่สำคัญใน MariaDB -

ซีเนียร์ No ชื่อและคำอธิบาย
1

TRUNCATE()

จะส่งคืนตัวเลขที่ถูกตัดทอนเป็นข้อมูลจำเพาะตำแหน่งทศนิยม

Example - เลือกตัดทอน (101.222, 1);

2

COS()

ส่งคืนโคไซน์ของ x เรเดียน

Example - เลือก COS (PI ());

3

CEILING()

จะส่งกลับจำนวนเต็มที่น้อยที่สุดที่ไม่ต่ำกว่า x

Example - เลือกเพดาน (2.11);

4

DEGREES()

มันแปลงเรเดียนเป็นองศา

Example - เลือก DEGREES (PI ());

5

DIV()

ดำเนินการหารจำนวนเต็ม

Example - เลือก 100 DIV 4;

6

EXP()

มันส่งกลับ e กลับไปเป็นพลังของ x

Example - เลือก EXP (2);

7

FLOOR()

จะส่งคืนจำนวนเต็มที่มากที่สุดไม่เกิน x

Example - เลือกชั้น (2.01);

8

LN()

มันส่งคืนลอการิทึมธรรมชาติของ x

Example - เลือก LN (3);

9

LOG()

มันจะส่งคืนลอการิทึมธรรมชาติหรือลอการิทึมไปยังฐานที่กำหนด

Example - เลือกบันทึก (3);

10

SQRT()

จะคืนค่ารากที่สอง

Example - เลือก SQRT (16);

ฟังก์ชันสตริง MariaDB

ฟังก์ชันสตริงที่สำคัญได้รับด้านล่าง -

ซีเนียร์ No ชื่อและคำอธิบาย
1

INSTR()

ส่งคืนตำแหน่งของอินสแตนซ์แรกของสตริงย่อย

Example - เลือก INSTR ('เงาะ', 'ตาล');

2

RIGHT()

จะส่งคืนอักขระสตริงขวาสุด

Example - เลือกขวา ('เงาะ', 3);

3

LENGTH()

ส่งกลับค่าความยาวไบต์ของสตริง

Example - เลือกความยาว ('เงาะ');

4

LOCATE()

ส่งคืนตำแหน่งของอินสแตนซ์แรกของสตริงย่อย

Example - เลือกที่ตั้ง ('tan', 'rambutan');

5

INSERT()

ส่งคืนสตริงโดยมีสตริงย่อยที่ระบุที่ตำแหน่งหนึ่งซึ่งถูกแก้ไข

Example - เลือกแทรก ('ramputan', 4, 1, 'b');

6

LEFT()

จะส่งคืนอักขระซ้ายสุด

Example - เลือกซ้าย ('เงาะ', 3);

7

UPPER()

มันเปลี่ยนตัวอักษรเป็นตัวพิมพ์ใหญ่

Example - เลือกบน (นามสกุล);

8

LOWER()

มันเปลี่ยนอักขระเป็นตัวพิมพ์เล็ก

Example - เลือก LOWER (นามสกุล);

9

STRCMP()

จะเปรียบเทียบสตริงและส่งกลับ 0 เมื่อมีค่าเท่ากัน

Example - เลือก STRCMP ('ไข่', 'ชีส');

10

REPLACE()

ส่งคืนสตริงหลังจากแทนที่อักขระ

Example - เลือกแทนที่ ('sully', 'l', 'n');

11

REVERSE()

มันกลับอักขระในสตริง

Example - เลือก REVERSE ('รถแข่ง');

12

REPEAT()

ส่งคืนสตริงที่ซ้ำอักขระที่กำหนด x ครั้ง

Example - เลือกซ้ำ ('ha', 10);

13

SUBSTRING()

ส่งคืนสตริงย่อยจากสตริงเริ่มต้นที่ตำแหน่ง x

Example - เลือกย่อย ('เงาะ', 3);

14

TRIM()

ลบอักขระต่อท้าย / นำหน้าออกจากสตริง

Example - เลือก TRIM (นำหน้า '_' จาก '_rambutan');