MariaDB - Hướng dẫn nhanh

Một ứng dụng cơ sở dữ liệu tồn tại tách biệt với ứng dụng chính và lưu trữ các bộ sưu tập dữ liệu. Mọi cơ sở dữ liệu sử dụng một hoặc nhiều API để tạo, truy cập, quản lý, tìm kiếm và sao chép dữ liệu mà nó chứa.

Cơ sở dữ liệu cũng sử dụng các nguồn dữ liệu không quan hệ như các đối tượng hoặc tệp. Tuy nhiên, cơ sở dữ liệu chứng minh là lựa chọn tốt nhất cho các tập dữ liệu lớn, vốn sẽ bị chậm truy xuất và ghi với các nguồn dữ liệu khác.

Hệ thống quản lý cơ sở dữ liệu quan hệ, hoặc RDBMS, lưu trữ dữ liệu trong các bảng khác nhau. Mối quan hệ giữa các bảng này được thiết lập bằng cách sử dụng khóa chính và khóa ngoại.

RDBMS cung cấp các tính năng sau:

  • Chúng cho phép bạn triển khai nguồn dữ liệu với các bảng, cột và chỉ số.

  • Chúng đảm bảo tính toàn vẹn của các tham chiếu trên các hàng của nhiều bảng.

  • Chúng tự động cập nhật các chỉ số.

  • Chúng diễn giải các truy vấn và hoạt động SQL trong thao tác hoặc tìm nguồn dữ liệu từ các bảng.

Thuật ngữ RDBMS

Trước khi bắt đầu thảo luận về MariaDB, chúng ta hãy xem xét một số thuật ngữ liên quan đến cơ sở dữ liệu.

  • Database - Cơ sở dữ liệu là một nguồn dữ liệu bao gồm các bảng chứa dữ liệu liên quan.

  • Table - Một bảng, có nghĩa là một bảng tính, là một ma trận chứa dữ liệu.

  • Column- Một cột, nghĩa là phần tử dữ liệu, là một cấu trúc chứa dữ liệu của một kiểu; ví dụ, ngày vận chuyển.

  • Row- Một hàng là một cấu trúc nhóm dữ liệu liên quan; ví dụ: dữ liệu cho một khách hàng. Nó còn được gọi là tuple, entry hoặc record.

  • Redundancy - Thuật ngữ này đề cập đến việc lưu trữ dữ liệu hai lần để tăng tốc hệ thống.

  • Primary Key- Điều này đề cập đến một giá trị nhận dạng, duy nhất. Giá trị này không thể xuất hiện hai lần trong một bảng và chỉ có một hàng được liên kết với nó.

  • Foreign Key - Một khóa ngoại dùng như một liên kết giữa hai bảng.

  • Compound Key- Một khóa ghép, hoặc khóa tổng hợp, là một khóa tham chiếu đến nhiều cột. Nó đề cập đến nhiều cột do một cột thiếu chất lượng duy nhất.

  • Index - Một chỉ mục hầu như giống với chỉ mục của một cuốn sách.

  • Referential Integrity - Thuật ngữ này đề cập đến việc đảm bảo tất cả các giá trị khóa ngoại đều trỏ đến các hàng hiện có.

Cơ sở dữ liệu MariaDB

MariaDB là một nhánh rẽ phổ biến của MySQL được tạo bởi các nhà phát triển ban đầu của MySQL. Nó xuất phát từ những lo ngại liên quan đến việc mua lại MySQL bởi Oracle. Nó cung cấp hỗ trợ cho cả các tác vụ xử lý dữ liệu nhỏ và nhu cầu của doanh nghiệp. Nó nhằm mục đích trở thành một bản thay thế cho MySQL chỉ yêu cầu gỡ cài đặt MySQL đơn giản và cài đặt MariaDB. MariaDB cung cấp các tính năng tương tự của MySQL và hơn thế nữa.

Các tính năng chính của MariaDB

Các tính năng quan trọng của MariaDB là -

  • Tất cả MariaDB đều theo GPL, LGPL hoặc BSD.

  • MariaDB bao gồm nhiều lựa chọn công cụ lưu trữ, bao gồm cả công cụ lưu trữ hiệu suất cao, để làm việc với các nguồn dữ liệu RDBMS khác.

  • MariaDB sử dụng một ngôn ngữ truy vấn chuẩn và phổ biến.

  • MariaDB chạy trên một số hệ điều hành và hỗ trợ nhiều ngôn ngữ lập trình.

  • MariaDB cung cấp hỗ trợ cho PHP, một trong những ngôn ngữ phát triển web phổ biến nhất.

  • MariaDB cung cấp công nghệ cụm Galera.

  • MariaDB cũng cung cấp nhiều thao tác và lệnh không có trong MySQL, đồng thời loại bỏ / thay thế các tính năng ảnh hưởng tiêu cực đến hiệu suất.

Bắt đầu

Trước khi bạn bắt đầu hướng dẫn này, hãy đảm bảo rằng bạn có một số kiến ​​thức cơ bản về PHP và HTML, cụ thể là tài liệu được thảo luận trong hướng dẫn PHP và HTML của chúng tôi.

Hướng dẫn này tập trung vào việc sử dụng MariaDB trong môi trường PHP, vì vậy các ví dụ của chúng tôi sẽ hữu ích nhất cho các nhà phát triển PHP.

Chúng tôi thực sự khuyên bạn nên xem lại Hướng dẫn PHP của chúng tôi nếu bạn chưa quen hoặc cần xem lại.

Tất cả các bản tải xuống cho MariaDB đều nằm trong phần Tải xuống của trang web chính thức của nền tảng MariaDB. Nhấp vào liên kết đến phiên bản bạn muốn và danh sách các bản tải xuống cho nhiều hệ điều hành, kiến ​​trúc và loại tệp cài đặt được hiển thị.

Cài đặt trên LINUX / UNIX

Nếu bạn có kiến ​​thức sâu sắc về hệ thống Linux / Unix, chỉ cần tải xuống nguồn để xây dựng bản cài đặt của bạn. Cách cài đặt được khuyến nghị của chúng tôi là sử dụng các gói phân phối. MariaDB cung cấp các gói cho các bản phân phối Linux / Unix sau:

  • RedHat/CentOS/Fedora
  • Debian/Ubuntu

Các bản phân phối sau đây bao gồm một gói MariaDB trong kho của chúng -

  • openSUSE
  • Arch Linux
  • Mageia
  • Mint
  • Slackware

Làm theo các bước sau để cài đặt trong môi trường Ubuntu -

Step 1 - Đăng nhập với tư cách người dùng root.

Step 2 - Điều hướng đến thư mục chứa gói MariaDB.

Step 3 - Nhập khóa ký GnuPG với mã sau -

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

Step 4 - Thêm MariaDB vào sources.listtập tin. Mở tệp và thêm mã sau:

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

Step 5 - Làm mới hệ thống với những điều sau -

sudo apt-get update

Step 6 - Cài đặt MariaDB với những thứ sau -

sudo apt-get install mariadb-server

Cài đặt trên Windows

Sau khi định vị và tải xuống tệp cài đặt tự động (MSI), chỉ cần nhấp đúp vào tệp để bắt đầu cài đặt. Trình hướng dẫn cài đặt sẽ hướng dẫn bạn từng bước cài đặt và mọi cài đặt cần thiết.

Kiểm tra cài đặt bằng cách khởi động nó từ dấu nhắc lệnh. Điều hướng đến vị trí cài đặt, thường là trong thư mục và nhập nội dung sau vào dấu nhắc:

mysqld.exe --console

Nếu cài đặt thành công, bạn sẽ thấy các thông báo liên quan đến khởi động. Nếu điều này không xuất hiện, bạn có thể gặp vấn đề về quyền. Đảm bảo rằng tài khoản người dùng của bạn có thể truy cập ứng dụng. Máy khách đồ họa có sẵn để quản trị MariaDB trong môi trường Windows. Nếu bạn thấy dòng lệnh không thoải mái hoặc rườm rà, hãy chắc chắn thử nghiệm với chúng.

Kiểm tra cài đặt

Thực hiện một số tác vụ đơn giản để xác nhận hoạt động và cài đặt của MariaDB.

Use the Admin Utility to Get Server Status

Xem phiên bản máy chủ với nhị phân mysqladmin.

[root@host]# mysqladmin --version

Nó sẽ hiển thị phiên bản, phân phối, hệ điều hành và kiến ​​trúc. Nếu bạn không thấy đầu ra của loại đó, hãy kiểm tra cài đặt của bạn để tìm sự cố.

Execute Simple Commands with a Client

Hiển thị dấu nhắc lệnh cho MariaDB. Điều này sẽ kết nối bạn với MariaDB và cho phép thực hiện các lệnh. Nhập một lệnh đơn giản như sau:

mysql> SHOW DATABASES;

Bài cài đặt

Sau khi cài đặt thành công MariaDB, hãy đặt mật khẩu gốc. Một cài đặt mới sẽ có một mật khẩu trống. Nhập thông tin sau để đặt mật khẩu mới -

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

Nhập thông tin sau để kết nối với máy chủ bằng thông tin đăng nhập mới của bạn -

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

Nâng cấp trên Windows

Nếu bạn đã cài đặt MySQL trên hệ thống Windows của mình và muốn nâng cấp lên MariaDB; không gỡ cài đặt MySQL và cài đặt MariaDB. Điều này sẽ gây ra xung đột với cơ sở dữ liệu hiện có. Thay vào đó, bạn phải cài đặt MariaDB, sau đó sử dụng trình hướng dẫn nâng cấp trong tệp cài đặt Windows.

Các tùy chọn của tệp MySQL my.cnf của bạn sẽ hoạt động với MariaDB. Tuy nhiên, MariaDB có nhiều tính năng, không có trong MySQL.

Xem xét các xung đột sau trong tệp my.cnf của bạn:

  • MariaDB sử dụng công cụ lưu trữ Aria theo mặc định cho các tệp tạm thời. Nếu bạn có nhiều tệp tạm thời, hãy sửa đổi kích thước bộ đệm khóa nếu bạn không sử dụng bảng MyISAM.

  • Nếu các ứng dụng của bạn thường xuyên kết nối / ngắt kết nối, hãy thay đổi kích thước bộ nhớ cache của chuỗi.

  • Nếu bạn sử dụng hơn 100 kết nối, hãy sử dụng nhóm chủ đề.

Khả năng tương thích

MySQL và MariaDB về cơ bản giống hệt nhau. Tuy nhiên, có đủ sự khác biệt để tạo ra các vấn đề trong việc nâng cấp. Xem xét thêm về những khác biệt chính này trong Cơ sở kiến ​​thức MariaDB.

Trước khi cố gắng chạy MariaDB, trước tiên hãy xác định trạng thái hiện tại của nó, đang chạy hay tắt. Có ba tùy chọn để bắt đầu và dừng MariaDB -

  • Chạy mysqld (nhị phân MariaDB).
  • Chạy tập lệnh khởi động mysqld_safe.
  • Chạy tập lệnh khởi động mysql.server.

Nếu bạn đã cài đặt MariaDB ở một vị trí không chuẩn, bạn có thể phải chỉnh sửa thông tin vị trí trong các tệp tập lệnh. Dừng MariaDB bằng cách chỉ cần thêm một tham số "dừng" với tập lệnh.

Nếu bạn muốn khởi động nó tự động trong Linux, hãy thêm các tập lệnh khởi động vào inithệ thống. Mỗi phân phối có một thủ tục khác nhau. Tham khảo tài liệu hệ thống của bạn.

Tạo tài khoản người dùng

Tạo tài khoản người dùng mới với mã sau:

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

Mã này thêm một hàng vào bảng người dùng không có đặc quyền. Bạn cũng có tùy chọn sử dụng giá trị băm cho mật khẩu. Cấp các đặc quyền của người dùng bằng mã sau:

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

Các đặc quyền khác chỉ bao gồm mọi lệnh hoặc thao tác có thể có trong MariaDB. Sau khi tạo người dùng, hãy thực hiện lệnh “FLUSH PRIVILEGES” để làm mới bảng cấp. Điều này cho phép tài khoản người dùng được sử dụng.

Tệp cấu hình

Sau khi xây dựng trên Unix / Linux, tệp cấu hình “/etc/mysql/my.cnf” sẽ được chỉnh sửa để xuất hiện như sau:

# 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

Chỉnh sửa các dòng “data =” và “language =” để phù hợp với môi trường của bạn.

Sau khi sửa đổi tệp, điều hướng đến thư mục nguồn và thực hiện như sau:

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

Bỏ qua “$PWD” variable if you added datadir to the configuration file. Ensure “$LOGNAME ”được sử dụng khi chạy phiên bản 10.0.1 của MariaDB.

Lệnh quản trị

Xem lại danh sách các lệnh quan trọng sau đây mà bạn sẽ thường xuyên sử dụng khi làm việc với MariaDB:

  • USE [database name] - Đặt cơ sở dữ liệu mặc định hiện tại.

  • SHOW DATABASES - Liệt kê các cơ sở dữ liệu hiện có trên máy chủ.

  • SHOW TABLES - Liệt kê tất cả các bảng không tạm thời.

  • SHOW COLUMNS FROM [table name] - Cung cấp thông tin cột liên quan đến bảng được chỉ định.

  • SHOW INDEX FROM TABLENAME [table name] - Cung cấp thông tin chỉ mục bảng liên quan đến bảng được chỉ định.

  • SHOW TABLE STATUS LIKE [table name]\G – - Cung cấp các bảng với thông tin về các bảng không tạm thời và mẫu xuất hiện sau mệnh đề LIKE được sử dụng để tìm nạp tên bảng.

MariaDB hợp tác tốt với nhiều ngôn ngữ lập trình và khuôn khổ khác nhau như PHP, C #, JavaScript, Ruby on Rails, Django, v.v. PHP vẫn là ngôn ngữ phổ biến nhất trong số các ngôn ngữ có sẵn do tính đơn giản và dấu ấn lịch sử của nó. Hướng dẫn này sẽ tập trung vào PHP hợp tác với MariaDB.

PHP cung cấp một lựa chọn các chức năng để làm việc với cơ sở dữ liệu MySQL. Các hàm này thực hiện các tác vụ như truy cập nó hoặc thực hiện các hoạt động và chúng hoàn toàn tương thích với MariaDB. Đơn giản chỉ cần gọi các hàm này như cách bạn gọi bất kỳ hàm PHP nào khác.

Các hàm PHP bạn sẽ sử dụng cho MariaDB tuân theo định dạng sau:

mysql_function(value,value,...);

Phần thứ hai của hàm chỉ định hành động của nó. Hai trong số các chức năng được sử dụng trong hướng dẫn này như sau:

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

Ví dụ sau minh họa cú pháp chung của lệnh gọi PHP tới hàm 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>

Trong phần tiếp theo, chúng ta sẽ xem xét các tác vụ MariaDB thiết yếu, sử dụng các hàm PHP.

Một cách để thiết lập kết nối với MariaDB bao gồm sử dụng nhị phân mysql tại dấu nhắc lệnh.

MYSQL nhị phân

Xem lại một ví dụ dưới đây.

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

Enter password:******

Đoạn mã được đưa ra ở trên kết nối với MariaDB và cung cấp dấu nhắc lệnh để thực thi các lệnh SQL. Sau khi nhập mã, một thông báo chào mừng sẽ xuất hiện cho biết kết nối thành công, với số phiên bản được hiển thị.

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>

Ví dụ sử dụng quyền truy cập root, nhưng bất kỳ người dùng nào có đặc quyền tất nhiên có thể truy cập lời nhắc MariaDB và thực hiện các thao tác.

Ngắt kết nối khỏi MariaDB thông qua exit lệnh như sau:

mysql> exit

Tập lệnh kết nối PHP

Một cách khác để kết nối và ngắt kết nối khỏi MariaDB bao gồm sử dụng tập lệnh PHP. PHP cung cấpmysql_connect()chức năng để mở một kết nối cơ sở dữ liệu. Nó sử dụng năm tham số tùy chọn và trả về mã nhận dạng liên kết MariaDB sau khi kết nối thành công hoặc sai khi kết nối không thành công. Nó cũng cung cấpmysql_close() hàm để đóng các kết nối cơ sở dữ liệu, sử dụng một tham số duy nhất.

Cú pháp

Xem lại cú pháp tập lệnh kết nối PHP sau:

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

Mô tả các thông số được đưa ra dưới đây:

Sr.No Mô tả về Thông Số
1

server

Tham số tùy chọn này chỉ định tên máy chủ chạy máy chủ cơ sở dữ liệu. Giá trị mặc định của nó là “localhost: .3036.”

2

user

Tham số tùy chọn này chỉ định tên người dùng truy cập cơ sở dữ liệu. Giá trị mặc định của nó là chủ sở hữu của máy chủ.

3

passwd

Tham số tùy chọn này chỉ định mật khẩu của người dùng. Giá trị mặc định của nó là trống.

4

new_link

Tham số tùy chọn này chỉ định rằng trong lần gọi thứ hai tới mysql_connect() với các đối số giống hệt nhau, thay vì một kết nối mới, mã định danh của kết nối hiện tại sẽ được trả về.

5

client flags

Tham số tùy chọn này sử dụng kết hợp các giá trị không đổi sau:

  • MYSQL_CLIENT_SSL - Nó sử dụng mã hóa ssl.

  • MYSQL_CLIENT_COMPRESS - Nó sử dụng giao thức nén.

  • MYSQL_CLIENT_IGNORE_SPACE - Nó cho phép khoảng trắng sau tên hàm.

  • MYSQL_CLIENT_INTERACTIVE - Nó cho phép tương tác thời gian chờ giây không hoạt động trước khi đóng kết nối.

Xem lại cú pháp tập lệnh ngắt kết nối PHP được cung cấp bên dưới:

bool mysql_close ( resource $link_identifier );

Nếu bạn bỏ qua tài nguyên, tài nguyên được mở gần đây nhất sẽ đóng. Nó trả về giá trị true khi đóng thành công hoặc false.

Hãy thử mã ví dụ sau để kết nối với máy chủ 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>

Khi kết nối thành công, bạn sẽ thấy kết quả sau:

mysql> Connected successfully

Việc tạo hoặc xóa cơ sở dữ liệu trong MariaDB yêu cầu các đặc quyền thường chỉ được cấp cho người dùng hoặc quản trị viên root. Trong các tài khoản này, bạn có hai tùy chọn để tạo cơ sở dữ liệu - nhị phân mysqladmin và tập lệnh PHP.

nhị phân mysqladmin

Ví dụ sau minh họa việc sử dụng nhị phân mysqladmin trong việc tạo cơ sở dữ liệu với tên Products -

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

PHP Tạo tập lệnh cơ sở dữ liệu

PHP sử dụng mysql_querychức năng tạo cơ sở dữ liệu MariaDB. Hàm sử dụng hai tham số, một tùy chọn và trả về giá trị “true” khi thành công hoặc “false” khi không.

Cú pháp

Xem lại phần sau create database script cú pháp -

bool mysql_query( sql, connection );

Mô tả các thông số được đưa ra dưới đây:

S.Không Mô tả về Thông Số
1

sql

Tham số bắt buộc này bao gồm truy vấn SQL cần thiết để thực hiện thao tác.

2

connection

Khi không được chỉ định, tham số tùy chọn này sử dụng kết nối gần đây nhất được sử dụng.

Hãy thử mã ví dụ sau để tạo cơ sở dữ liệu:

<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>

Khi xóa thành công, bạn sẽ thấy kết quả sau:

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

Việc tạo hoặc xóa cơ sở dữ liệu trong MariaDB yêu cầu đặc quyền, thường chỉ được cấp cho người dùng hoặc quản trị viên root. Trong các tài khoản này, bạn có hai tùy chọn để xóa cơ sở dữ liệu: nhị phân mysqladmin và tập lệnh PHP.

Lưu ý rằng cơ sở dữ liệu đã xóa không thể khôi phục được, vì vậy hãy cẩn thận khi thực hiện thao tác này. Hơn nữa, các tập lệnh PHP được sử dụng để xóanot nhắc bạn xác nhận trước khi xóa.

nhị phân mysqladmin

Ví dụ sau minh họa cách sử dụng nhị phân mysqladmin để xóa cơ sở dữ liệu hiện có:

[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

Tập lệnh cơ sở dữ liệu thả PHP

PHP sử dụng mysql_querychức năng xóa cơ sở dữ liệu MariaDB. Hàm sử dụng hai tham số, một tùy chọn và trả về giá trị “true” khi thành công hoặc “false” khi không.

Cú pháp

Xem lại cú pháp tập lệnh cơ sở dữ liệu thả sau:

bool mysql_query( sql, connection );

Mô tả các thông số được đưa ra dưới đây:

Sr.No Mô tả về Thông Số
1

sql

Tham số bắt buộc này bao gồm truy vấn SQL cần thiết để thực hiện thao tác.

2

connection

Khi không được chỉ định, tham số tùy chọn này sử dụng kết nối gần đây nhất được sử dụng.

Hãy thử mã ví dụ sau để xóa cơ sở dữ liệu -

<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>

Khi xóa thành công, bạn sẽ thấy kết quả sau:

mysql> Database PRODUCTS deleted successfully

Sau khi kết nối với MariaDB, bạn phải chọn một cơ sở dữ liệu để làm việc vì nhiều cơ sở dữ liệu có thể tồn tại. Có hai cách để thực hiện tác vụ này: từ dấu nhắc lệnh hoặc thông qua tập lệnh PHP.

Dấu nhắc lệnh

Khi chọn cơ sở dữ liệu tại dấu nhắc lệnh, chỉ cần sử dụng lệnh SQL ‘use’ -

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

Enter password:******

mysql> use PRODUCTS;

Database changed

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

Khi bạn chọn một cơ sở dữ liệu, tất cả các lệnh tiếp theo sẽ hoạt động trên cơ sở dữ liệu đã chọn.

Note- Tất cả các tên (ví dụ: cơ sở dữ liệu, bảng, các trường) đều phân biệt chữ hoa chữ thường. Đảm bảo các lệnh phù hợp với trường hợp thích hợp.

PHP Select Database Script

PHP cung cấp mysql_select_dbchức năng lựa chọn cơ sở dữ liệu. Hàm sử dụng hai tham số, một tham số tùy chọn và trả về giá trị “true” khi lựa chọn thành công hoặc false khi thất bại.

Cú pháp

Xem lại cú pháp kịch bản cơ sở dữ liệu chọn sau.

bool mysql_select_db( db_name, connection );

Mô tả các thông số được đưa ra dưới đây:

S.Không Mô tả về Thông Số
1

db_name

Tham số bắt buộc này chỉ định tên của cơ sở dữ liệu sẽ sử dụng.

2

connection

Khi không được chỉ định, tham số tùy chọn này sử dụng kết nối gần đây nhất được sử dụng.

Hãy thử mã ví dụ sau để chọn cơ sở dữ liệu -

<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>

Khi lựa chọn thành công, bạn sẽ thấy kết quả sau:

mysql> Connected successfully

Định nghĩa trường tốt là điều cần thiết cho việc tối ưu hóa cơ sở dữ liệu của bạn. Cách tiếp cận lý tưởng yêu cầu bạn sử dụng riêng một trường thuộc loại và kích thước cần thiết. Ví dụ: nếu bạn chỉ sử dụng một trường, rộng năm ký tự, không xác định một trường, rộng 20 ký tự. Các kiểu trường (hoặc cột) còn được gọi là kiểu dữ liệu dựa trên các kiểu dữ liệu được lưu trữ trong trường.

Các kiểu dữ liệu MariaDB có thể được phân loại thành giá trị số, ngày và giờ và chuỗi.

Các kiểu dữ liệu số

Các kiểu dữ liệu số được MariaDB hỗ trợ như sau:

  • TINYINT - Kiểu dữ liệu này đại diện cho các số nguyên nhỏ nằm trong phạm vi có dấu từ -128 đến 127 và phạm vi không dấu từ 0 đến 255.

  • BOOLEAN - Kiểu dữ liệu này liên kết giá trị 0 với "false" và giá trị 1 với "true".

  • SMALLINT - Kiểu dữ liệu này đại diện cho các số nguyên trong phạm vi có dấu từ -32768 đến 32768 và phạm vi không dấu từ 0 đến 65535.

  • MEDIUMINT - Kiểu dữ liệu này đại diện cho các số nguyên trong phạm vi có dấu từ -8388608 đến 8388607 và phạm vi không dấu từ 0 đến 16777215.

  • INT(also INTEGER)- Kiểu dữ liệu này biểu diễn một số nguyên có kích thước bình thường. Khi được đánh dấu là chưa có dấu, phạm vi kéo dài từ 0 đến 4294967295. Khi có dấu (cài đặt mặc định), phạm vi kéo dài từ -2147483648 đến 2147483647. Khi một cột được đặt thành ZEROFILL (trạng thái không dấu), tất cả các giá trị của nó sẽ được thêm vào trước bởi các số không để đặt M chữ số trong giá trị INT.

  • BIGINT - Kiểu dữ liệu này đại diện cho các số nguyên trong phạm vi có dấu từ 9223372036854775808 đến 9223372036854775807 và phạm vi không dấu từ 0 đến 18446744073709551615.

  • DECIMAL(cũng DEC, SỐ, CỐ ĐỊNH) - Kiểu dữ liệu này biểu thị các số điểm cố định chính xác, với M chỉ định các chữ số của nó và D chỉ định các chữ số sau số thập phân. Giá trị M không thêm “-” hoặc dấu thập phân. Nếu D được đặt thành 0, không có phần thập phân hoặc phân số nào xuất hiện và giá trị sẽ được làm tròn đến DECIMAL gần nhất trên INSERT. Các chữ số được phép tối đa là 65 và tối đa cho số thập phân là 30. Giá trị mặc định cho M khi bỏ sót là 10 và 0 cho D khi bỏ sót.

  • FLOAT - Kiểu dữ liệu này đại diện cho một số nhỏ, dấu phẩy động của giá trị 0 hoặc một số trong các phạm vi sau:

    • -3.402823466E + 38 đến -1.175494351E-38

    • 1,175494351E-38 đến 3,402823466E + 38

  • DOUBLE (cũng thế REALDOUBLE PRECISION) - Kiểu dữ liệu này đại diện cho các số có kích thước bình thường, dấu phẩy động của giá trị 0 hoặc trong các phạm vi sau:

    • -1.7976931348623157E + 308 đến -2.2250738585072014E-308

    • 2.2250738585072014E-308 đến 1.7976931348623157E + 308

  • BIT- Kiểu dữ liệu này đại diện cho các trường bit với M chỉ định số bit trên mỗi giá trị. Khi bỏ qua M, giá trị mặc định là 1. Giá trị bit có thể được áp dụng với “b '[value]'” trong đó giá trị đại diện cho giá trị bit trong 0s và 1s. Zero-padding xảy ra tự động từ bên trái cho toàn bộ chiều dài; ví dụ: “10” trở thành “0010.”

Loại dữ liệu ngày và giờ

Các kiểu dữ liệu ngày và giờ được MariaDB hỗ trợ như sau:

  • DATE - Loại dữ liệu này đại diện cho một phạm vi ngày từ “1000-01-01” đến “9999-12-31” và sử dụng định dạng ngày “YYYY-MM-DD”.

  • TIME - Loại dữ liệu này đại diện cho một phạm vi thời gian từ “-838: 59: 59.999999” đến “838: 59: 59.999999”.

  • DATETIME- Kiểu dữ liệu này đại diện cho phạm vi “1000-01-01 00: 00: 00.000000” đến “9999-12-31 23: 59: 59.999999.” Nó sử dụng định dạng “YYYY-MM-DD HH: MM: SS”.

  • TIMESTAMP- Loại dữ liệu này đại diện cho một dấu thời gian của định dạng “YYYY-MM-DD HH: MM: DD”. Nó chủ yếu được sử dụng trong việc nêu chi tiết thời gian sửa đổi cơ sở dữ liệu, ví dụ: chèn hoặc cập nhật.

  • YEAR- Kiểu dữ liệu này đại diện cho một năm ở định dạng 4 chữ số. Định dạng bốn chữ số cho phép các giá trị trong phạm vi từ 1901 đến 2155 và 0000.

String DataTypes

Các giá trị kiểu chuỗi được MariaDB hỗ trợ như sau:

  • String literals - Kiểu dữ liệu này biểu diễn các chuỗi ký tự được bao bởi dấu ngoặc kép.

  • CHAR- Kiểu dữ liệu này đại diện cho một chuỗi có độ dài cố định, được đệm bên phải chứa các khoảng trắng có độ dài xác định. M đại diện cho độ dài cột của các ký tự trong phạm vi từ 0 đến 255, giá trị mặc định của nó là 1.

  • VARCHAR - Kiểu dữ liệu này đại diện cho một chuỗi có độ dài thay đổi, với phạm vi M (độ dài cột tối đa) từ 0 đến 65535.

  • BINARY - Kiểu dữ liệu này đại diện cho chuỗi byte nhị phân, với M là độ dài cột tính bằng byte.

  • VARBINARY - Kiểu dữ liệu này biểu diễn chuỗi byte nhị phân có độ dài thay đổi, với M là độ dài cột.

  • TINYBLOB- Kiểu dữ liệu này đại diện cho một cột blob có độ dài tối đa là 255 (28 - 1) byte. Trong bộ nhớ, mỗi phần sử dụng tiền tố độ dài một byte cho biết số lượng byte trong giá trị.

  • BLOB- Kiểu dữ liệu này đại diện cho một cột blob có độ dài tối đa là 65,535 (216 - 1) byte. Trong bộ nhớ, mỗi phần sử dụng tiền tố độ dài hai byte cho biết số lượng byte trong giá trị.

  • MEDIUMBLOB- Kiểu dữ liệu này đại diện cho một cột đốm màu với độ dài tối đa là 16,777,215 (2 24 - 1) byte. Trong bộ nhớ, mỗi phần sử dụng một tiền tố độ dài ba byte cho biết số lượng byte trong giá trị.

  • LONGBLOB- Kiểu dữ liệu này đại diện cho một cột blob có độ dài tối đa là 4,294,967,295 (2 32 - 1) byte. Trong bộ nhớ, mỗi mã sử dụng tiền tố độ dài bốn byte cho biết số lượng byte trong giá trị.

  • TINYTEXT- Kiểu dữ liệu này đại diện cho một cột văn bản có độ dài tối đa là 255 (2 8 - 1) ký tự. Trong bộ nhớ, mỗi phần sử dụng tiền tố độ dài một byte cho biết số lượng byte trong giá trị.

  • TEXT- Kiểu dữ liệu này đại diện cho một cột văn bản có độ dài tối đa là 65.535 (2 16 - 1) ký tự. Trong bộ nhớ, mỗi phần sử dụng tiền tố độ dài hai byte cho biết số lượng byte trong giá trị.

  • MEDIUMTEXT- Kiểu dữ liệu này đại diện cho một cột văn bản có độ dài tối đa là 16.777.215 (2 24 - 1) ký tự. Trong bộ nhớ, mỗi phần sử dụng một tiền tố độ dài ba byte cho biết số lượng byte trong giá trị.

  • LONGTEXT- Kiểu dữ liệu này đại diện cho một cột văn bản có độ dài tối đa là 4,294,967,295 hoặc 4GB (2 32 - 1) ký tự. Trong bộ nhớ, mỗi mã sử dụng tiền tố độ dài bốn byte cho biết số lượng byte trong giá trị.

  • ENUM - Kiểu dữ liệu này đại diện cho một đối tượng chuỗi chỉ có một giá trị duy nhất từ ​​một danh sách.

  • SET- Kiểu dữ liệu này đại diện cho một đối tượng chuỗi không có hoặc nhiều giá trị từ một danh sách, với tối đa 64 phần tử. Giá trị SET hiển thị bên trong dưới dạng giá trị số nguyên.

Trong chương này, chúng ta sẽ học cách tạo bảng. Trước khi tạo bảng, trước tiên hãy xác định tên, tên trường và định nghĩa trường.

Sau đây là cú pháp chung để tạo bảng:

CREATE TABLE table_name (column_name column_type);

Xem lại lệnh được áp dụng để tạo bảng trong cơ sở dữ liệu 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 )
);

Ví dụ trên sử dụng “NOT NULL” làm thuộc tính trường để tránh các lỗi do giá trị null gây ra. Thuộc tính “AUTO_INCREMENT” hướng dẫn MariaDB thêm giá trị có sẵn tiếp theo vào trường ID. Khóa chính của từ khóa xác định một cột làprimary key. Nhiều cột được phân tách bằng dấu phẩy có thể xác định một khóa chính.

Hai phương pháp chính để tạo bảng là sử dụng dấu nhắc lệnh và tập lệnh PHP.

Dấu nhắc lệnh

Sử dụng lệnh CREATE TABLE để thực hiện tác vụ như hình dưới đây:

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           |
+------------------------+

Đảm bảo tất cả các lệnh được kết thúc bằng dấu chấm phẩy.

Tập lệnh tạo bảng trong PHP

PHP cung cấp mysql_query()để tạo bảng. Đối số thứ hai của nó chứa lệnh SQL cần thiết:

<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>

Khi tạo bảng thành công, bạn sẽ thấy kết quả sau:

mysql> Table created successfully

Trong chương này, chúng ta sẽ học cách xóa bảng.

Việc xóa bảng rất dễ dàng, nhưng hãy nhớ rằng tất cả các bảng đã xóa đều không thể khôi phục được. Cú pháp chung để xóa bảng như sau:

DROP TABLE table_name ;

Có hai tùy chọn để thực hiện thả bảng: sử dụng dấu nhắc lệnh hoặc tập lệnh PHP.

Dấu nhắc lệnh

Tại dấu nhắc lệnh, chỉ cần sử dụng DROP TABLE Lệnh 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

Tập lệnh bảng thả PHP

PHP cung cấp mysql_query()để giảm bảng. Chỉ cần chuyển đối số thứ hai của nó lệnh SQL thích hợp -

<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>

Khi xóa bảng thành công, bạn sẽ thấy kết quả sau:

mysql> Table deleted successfully

Trong chương này, chúng ta sẽ học cách chèn dữ liệu vào bảng.

Việc chèn dữ liệu vào bảng yêu cầu lệnh INSERT. Cú pháp chung của lệnh là INSERT theo sau là tên bảng, trường và giá trị.

Xem lại cú pháp chung của nó dưới đây -

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

Câu lệnh yêu cầu sử dụng dấu ngoặc đơn hoặc dấu ngoặc kép cho các giá trị chuỗi. Các tùy chọn khác cho câu lệnh bao gồm câu lệnh “INSERT… SET”, câu lệnh “INSERT… SELECT” và một số tùy chọn khác.

Note - Hàm VALUES () xuất hiện bên trong câu lệnh, chỉ áp dụng cho câu lệnh INSERT và trả về NULL nếu được sử dụng ở nơi khác.

Có hai tùy chọn để thực hiện thao tác: sử dụng dòng lệnh hoặc sử dụng tập lệnh PHP.

Dấu nhắc lệnh

Tại lời nhắc, có nhiều cách để thực hiện một thao tác chọn. Một tuyên bố tiêu chuẩn được đưa ra dưới đây:

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)    |      |     |         |       |
+-------------+-------------+------+-----+---------+-------+

Bạn có thể chèn nhiều hàng -

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

Bạn cũng có thể sử dụng mệnh đề SET -

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

Tập lệnh chèn PHP

Sử dụng cùng một câu lệnh “INSERT INTO ...” trong một hàm PHP để thực hiện thao tác. Bạn sẽ sử dụngmysql_query() hoạt động một lần nữa.

Xem lại ví dụ dưới đây -

<?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);
   }
?>

Khi chèn dữ liệu thành công, bạn sẽ thấy kết quả sau:

mysql> Entered data successfully

Bạn cũng sẽ phối hợp các câu lệnh xác thực với các câu lệnh chèn, chẳng hạn như kiểm tra để đảm bảo nhập dữ liệu chính xác. MariaDB bao gồm một số tùy chọn cho mục đích này, một số trong số đó là tự động.

Trong chương này, chúng ta sẽ học cách chọn dữ liệu từ một bảng.

Câu lệnh SELECT truy xuất các hàng đã chọn. Chúng có thể bao gồm các câu lệnh UNION, một mệnh đề sắp xếp, một mệnh đề LIMIT, một mệnh đề WHERE, một mệnh đề GROUP BY ... HAVING và các truy vấn con.

Xem lại cú pháp chung sau -

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

Câu lệnh SELECT cung cấp nhiều tùy chọn để chỉ định bảng được sử dụng -

  • database_name.table_name

  • table_name.column_name

  • database_name.table_name.column_name

Tất cả các câu lệnh chọn phải chứa một hoặc nhiều select expressions. Chọn biểu thức bao gồm một trong các tùy chọn sau:

  • Tên cột.

  • Một biểu thức sử dụng toán tử và hàm.

  • Đặc tả “tên_bảng. *” Để chọn tất cả các cột trong bảng nhất định.

  • Ký tự “*” để chọn tất cả các cột từ tất cả các bảng được chỉ định trong mệnh đề FROM.

Dấu nhắc lệnh hoặc tập lệnh PHP có thể được sử dụng để thực hiện một câu lệnh select.

Dấu nhắc lệnh

Tại dấu nhắc lệnh, thực hiện các câu lệnh như sau:

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 |
+-------------+---------------+

Tập lệnh chọn PHP

Sử dụng cùng (các) câu lệnh SELECT trong một hàm PHP để thực hiện thao tác. Bạn sẽ sử dụngmysql_query()hoạt động một lần nữa. Xem lại một ví dụ dưới đây -

<?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);
?>

Khi truy xuất dữ liệu thành công, bạn sẽ thấy kết quả sau:

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

Các phương pháp hay nhất đề xuất giải phóng bộ nhớ con trỏ sau mỗi câu lệnh SELECT. PHP cung cấpmysql_free_result()chức năng cho mục đích này. Xem lại công dụng của nó như hình dưới đây -

<?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);
?>

WHEREmệnh đề lọc các câu lệnh khác nhau như SELECT, UPDATE, DELETE và INSERT. Chúng trình bày các tiêu chí được sử dụng để chỉ định hành động. Chúng thường xuất hiện sau tên bảng trong một câu lệnh và điều kiện của chúng theo sau. Mệnh đề WHERE về cơ bản hoạt động giống như một câu lệnh if.

Xem lại cú pháp chung của mệnh đề WHERE bên dưới -

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

Lưu ý các phẩm chất sau của mệnh đề WHERE:

  • Nó là tùy chọn.

  • Nó cho phép bất kỳ điều kiện nào được chỉ định.

  • Nó cho phép đặc tả nhiều điều kiện thông qua việc sử dụng toán tử AND hoặc OR.

  • Phân biệt chữ hoa chữ thường chỉ áp dụng cho các câu lệnh sử dụng so sánh LIKE.

Mệnh đề WHERE cho phép sử dụng các toán tử sau:

Nhà điều hành
=! =
> <
> = <=

Mệnh đề WHERE có thể được sử dụng tại dấu nhắc lệnh hoặc trong tập lệnh PHP.

Dấu nhắc lệnh

Tại dấu nhắc lệnh, chỉ cần sử dụng một lệnh chuẩn:

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             |
+-------------+----------------+----------------------+

Xem lại một ví dụ bằng cách sử dụng AND điều kiện -

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

Ví dụ này kết hợp cả điều kiện AND và OR

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

Tập lệnh PHP sử dụng mệnh đề Where

Sử dụng mysql_query() trong các hoạt động sử dụng mệnh đề WHERE -

<?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);
?>

Khi truy xuất dữ liệu thành công, bạn sẽ thấy kết quả sau:

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

Các UPDATElệnh sửa đổi các trường hiện có bằng cách thay đổi giá trị. Nó sử dụng mệnh đề SET để chỉ định các cột để sửa đổi và xác định các giá trị mới được gán. Các giá trị này có thể là một biểu thức hoặc giá trị mặc định của trường. Đặt giá trị mặc định yêu cầu sử dụng từ khóa DEFAULT. Lệnh cũng có thể sử dụng mệnh đề WHERE để chỉ định các điều kiện để cập nhật và / hoặc mệnh đề ORDER BY để cập nhật theo một thứ tự nhất định.

Xem lại cú pháp chung sau -

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

Thực thi lệnh UPDATE từ dấu nhắc lệnh hoặc sử dụng tập lệnh PHP.

Dấu nhắc lệnh

Tại dấu nhắc lệnh, chỉ cần sử dụng một lệnh chuẩn:

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             |
+-------------+---------------------+----------------------+

Tập lệnh truy vấn cập nhật PHP

Sử dụng mysql_query() hàm trong câu lệnh 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);
?>

Khi cập nhật dữ liệu thành công, bạn sẽ thấy kết quả sau:

mysql> Updated data successfully

Lệnh DELETE xóa các hàng trong bảng khỏi bảng được chỉ định và trả về số lượng đã xóa. Truy cập số lượng đã xóa bằng hàm ROW_COUNT (). Mệnh đề WHERE chỉ định các hàng và nếu thiếu nó, tất cả các hàng sẽ bị xóa. Mệnh đề LIMIT kiểm soát số hàng bị xóa.

Trong câu lệnh DELETE cho nhiều hàng, nó chỉ xóa những hàng thỏa mãn một điều kiện; và các mệnh đề LIMIT và WHERE không được phép. Câu lệnh DELETE cho phép xóa các hàng khỏi bảng trong các cơ sở dữ liệu khác nhau, nhưng không cho phép xóa khỏi một bảng rồi chọn từ cùng một bảng trong một truy vấn con.

Xem lại cú pháp DELETE sau -

DELETE FROM table_name [WHERE …]

Thực thi lệnh DELETE từ dấu nhắc lệnh hoặc sử dụng tập lệnh PHP.

Dấu nhắc lệnh

Tại dấu nhắc lệnh, chỉ cần sử dụng một lệnh chuẩn:

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'

Tập lệnh xóa truy vấn PHP

Sử dụng mysql_query() hàm trong các câu lệnh 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);
?>

Khi xóa dữ liệu thành công, bạn sẽ thấy kết quả sau:

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

Mệnh đề WHERE cung cấp một cách để truy xuất dữ liệu khi một phép toán sử dụng kết hợp chính xác. Trong các tình huống yêu cầu nhiều kết quả với các đặc điểm chung,LIKE mệnh đề cho phép đối sánh mẫu rộng.

Mệnh đề LIKE kiểm tra đối sánh mẫu, trả về true hoặc false. Các mẫu được sử dụng để so sánh chấp nhận các ký tự đại diện sau: “%”, khớp với số ký tự (0 hoặc nhiều hơn); và “_”, phù hợp với một ký tự. Ký tự đại diện “_” chỉ khớp với các ký tự trong bộ của nó, có nghĩa là nó sẽ bỏ qua các ký tự latin khi sử dụng bộ khác. Các kết quả trùng khớp theo mặc định không phân biệt chữ hoa chữ thường và yêu cầu cài đặt bổ sung cho phân biệt chữ hoa chữ thường.

Mệnh đề KHÔNG THÍCH cho phép kiểm tra điều kiện ngược lại, giống như not nhà điều hành.

Nếu biểu thức hoặc mẫu câu lệnh đánh giá thành NULL, kết quả là NULL.

Xem lại cú pháp mệnh đề LIKE chung dưới đây -

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

Sử dụng mệnh đề LIKE tại dấu nhắc lệnh hoặc trong tập lệnh PHP.

Dấu nhắc lệnh

Tại dấu nhắc lệnh, chỉ cần sử dụng một lệnh chuẩn:

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 sử dụng mệnh đề Like

Sử dụng mysql_query() hàm trong các câu lệnh sử dụng mệnh đề 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);
?>

Khi truy xuất dữ liệu thành công, bạn sẽ thấy kết quả sau:

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

Các ORDER BY, như đã đề cập trong các cuộc thảo luận trước, sắp xếp các kết quả của một tuyên bố. Nó chỉ định thứ tự của dữ liệu được vận hành và bao gồm tùy chọn sắp xếp theo thứ tự tăng dần (ASC) hoặc giảm dần (DESC). Khi bỏ qua đặc tả đơn hàng, thứ tự mặc định sẽ tăng dần.

Mệnh đề ORDER BY xuất hiện trong nhiều loại câu lệnh như DELETE và UPDATE. Chúng luôn xuất hiện ở cuối một câu lệnh, không phải trong một truy vấn con hoặc trước một hàm đặt, bởi vì chúng hoạt động trên bảng kết quả cuối cùng. Bạn cũng không thể sử dụng một số nguyên để xác định một cột.

Xem lại cú pháp chung của mệnh đề ORDER BY dưới đây -

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

Sử dụng mệnh đề ORDER BY tại dấu nhắc lệnh hoặc trong tập lệnh PHP.

Dấu nhắc lệnh

Tại dấu nhắc lệnh, chỉ cần sử dụng một lệnh chuẩn:

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 sử dụng mệnh đề thứ tự

Sử dụng mysql_query() , một lần nữa, trong các câu lệnh sử dụng mệnh đề 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);
?>

Khi truy xuất dữ liệu thành công, bạn sẽ thấy kết quả sau:

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

Trong các cuộc thảo luận và ví dụ trước đây, chúng tôi đã kiểm tra việc truy xuất từ ​​một bảng hoặc truy xuất nhiều giá trị từ nhiều nguồn. Hầu hết các hoạt động dữ liệu trong thế giới thực phức tạp hơn nhiều, đòi hỏi phải tổng hợp, so sánh và truy xuất từ ​​nhiều bảng.

JOINscho phép hợp nhất hai hoặc nhiều bảng thành một đối tượng duy nhất. Chúng được sử dụng thông qua các câu lệnh SELECT, UPDATE và DELETE.

Xem lại cú pháp chung của câu lệnh sử dụng JOIN như hình dưới đây:

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

Lưu ý rằng cú pháp cũ cho JOINS được sử dụng các phép nối ngầm và không có từ khóa. Có thể sử dụng mệnh đề WHERE để đạt được liên kết, nhưng từ khóa hoạt động tốt nhất để dễ đọc, duy trì và các phương pháp hay nhất.

Tham gia có nhiều dạng như tham gia trái, tham gia phải hoặc tham gia bên trong. Các kiểu nối khác nhau cung cấp các kiểu tổng hợp khác nhau dựa trên các giá trị hoặc đặc điểm được chia sẻ.

Sử dụng JOIN tại dấu nhắc lệnh hoặc với một tập lệnh PHP.

Dấu nhắc lệnh

Tại dấu nhắc lệnh, chỉ cần sử dụng một câu lệnh chuẩn:

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               |
+-------------+----------------+-----------------+

Tập lệnh PHP sử dụng JOIN

Sử dụng mysql_query() chức năng để thực hiện một hoạt động nối -

<?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);
?>

Khi truy xuất dữ liệu thành công, bạn sẽ thấy kết quả sau:

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

Khi làm việc với các giá trị NULL, hãy nhớ chúng là các giá trị chưa biết. Chúng không phải là chuỗi rỗng hoặc số không, là giá trị hợp lệ. Trong quá trình tạo bảng, các đặc tả cột cho phép thiết lập chúng chấp nhận giá trị null hoặc từ chối chúng. Chỉ cần sử dụng mệnh đề NULL hoặc NOT NULL. Điều này có ứng dụng trong các trường hợp thiếu thông tin hồ sơ như số ID.

Các biến do người dùng xác định có giá trị NULL cho đến khi được gán rõ ràng. Các tham số quy trình được lưu trữ và các biến cục bộ cho phép đặt giá trị NULL. Khi một biến cục bộ không có giá trị mặc định, nó có giá trị là NULL.

NULL không phân biệt chữ hoa chữ thường và có các bí danh sau:

  • UNKNOWN (một giá trị boolean)
  • \N

Toán tử NULL

Toán tử so sánh tiêu chuẩn không thể được sử dụng với NULL (ví dụ: =,>,> =, <=, <, hoặc! =) Vì tất cả các phép so sánh có giá trị NULL đều trả về NULL, không đúng hoặc sai. Các phép so sánh với NULL hoặc có thể chứa nó phải sử dụng toán tử “<=>” (NULL-SAFE).

Các toán tử khả dụng khác là -

  • IS NULL - Nó kiểm tra giá trị NULL.

  • IS NOT NULL - Nó xác nhận không có giá trị NULL.

  • ISNULL - Nó trả về giá trị 1 khi phát hiện ra giá trị NULL và 0 khi không có.

  • COALESCE - Nó trả về giá trị không phải NULL đầu tiên của danh sách hoặc trả về giá trị NULL nếu không có.

Sắp xếp giá trị NULL

Trong các thao tác sắp xếp, giá trị NULL có giá trị thấp nhất, vì vậy thứ tự DESC dẫn đến giá trị NULL ở dưới cùng. MariaDB cho phép đặt giá trị cao hơn cho các giá trị NULL.

Có hai cách để thực hiện việc này như hình dưới đây -

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

Mặt khác -

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

Chức năng NULL

Các hàm thường xuất ra NULL khi bất kỳ tham số nào là NULL. Tuy nhiên, có những chức năng được thiết kế đặc biệt để quản lý các giá trị NULL. Họ là -

  • IFNULL()- Nếu biểu thức đầu tiên không phải là NULL, nó sẽ trả về nó. Khi nó đánh giá là NULL, nó trả về biểu thức thứ hai.

  • NULLIF() - Nó trả về NULL khi các biểu thức được so sánh bằng nhau, nếu không, nó trả về biểu thức đầu tiên.

Các hàm như SUM và AVG bỏ qua giá trị NULL.

Chèn giá trị NULL

Khi chèn giá trị NULL vào cột được khai báo NOT NULL, lỗi xảy ra. Trong chế độ SQL mặc định, cột NOT NULL thay vào đó sẽ chèn một giá trị mặc định dựa trên kiểu dữ liệu.

Khi một trường là TIMESTAMP, AUTO_INCREMENT hoặc cột ảo, MariaDB quản lý các giá trị NULL theo cách khác. Việc chèn vào cột AUTO_INCREMENT làm cho số tiếp theo trong chuỗi được chèn vào vị trí của nó. Trong trường TIMESTAMP, MariaDB chỉ định dấu thời gian hiện tại. Trong các cột ảo, một chủ đề được thảo luận ở phần sau của hướng dẫn này, giá trị mặc định được gán.

Các chỉ mục UNIQUE có thể chứa nhiều giá trị NULL, tuy nhiên, khóa chính không thể NULL.

Giá trị NULL và lệnh Alter

Khi bạn sử dụng lệnh ALTER để sửa đổi một cột, trong trường hợp không có thông số kỹ thuật NULL, MariaDB sẽ tự động gán giá trị.

Ngoài đối sánh mẫu có sẵn từ mệnh đề LIKE, MariaDB cung cấp đối sánh dựa trên biểu thức chính quy thông qua toán tử REGEXP. Toán tử thực hiện đối sánh mẫu cho một biểu thức chuỗi dựa trên một mẫu nhất định.

MariaDB 10.0.5 đã giới thiệu Biểu thức chính quy PCRE, giúp tăng đáng kể phạm vi đối sánh vào các khu vực như mẫu đệ quy, xác nhận nhìn trước và hơn thế nữa.

Xem lại việc sử dụng cú pháp của toán tử REGEXP chuẩn được cung cấp bên dưới -

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

REGEXP trả về 1 cho một khớp mẫu hoặc 0 khi không có.

Một tùy chọn cho điều ngược lại tồn tại ở dạng NOT REGEXP. MariaDB cũng cung cấp các từ đồng nghĩa cho REGEXP và NOT REGEXP, RLIKE và NOT RLIKE, được tạo ra vì lý do tương thích.

Mẫu được so sánh có thể là một chuỗi ký tự hoặc một cái gì đó khác, chẳng hạn như một cột bảng. Trong chuỗi, nó sử dụng cú pháp thoát C, vì vậy hãy nhân đôi bất kỳ ký tự “\” nào. REGEXP cũng không phân biệt chữ hoa chữ thường, ngoại trừ các chuỗi nhị phân.

Dưới đây là bảng các mẫu có thể sử dụng:

Sr.No Mô hình & Mô tả
1

^

Nó khớp với phần bắt đầu của chuỗi.

2

$

Nó khớp với phần cuối của chuỗi.

3

.

Nó khớp với một ký tự duy nhất.

4

[...]

Nó khớp với bất kỳ ký tự nào trong ngoặc.

5

[^...]

Nó khớp với bất kỳ ký tự nào không được liệt kê trong ngoặc.

6

p1|p2|p3

Nó phù hợp với bất kỳ mẫu nào.

7

*

Nó khớp với 0 hoặc nhiều trường hợp của phần tử trước đó.

số 8

+

Nó khớp với 1 hoặc nhiều trường hợp của phần tử trước đó.

9

{n}

Nó khớp với n thể hiện của phần tử trước đó.

10

{m,n}

Nó so khớp từ m đến n trường hợp của phần tử trước đó.

Xem lại các ví dụ đối sánh mẫu được cung cấp bên dưới -

Các sản phẩm bắt đầu bằng “pr” -

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

Các sản phẩm kết thúc bằng "na" -

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

Các sản phẩm bắt đầu bằng một nguyên âm -

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

Các giao dịch là các hoạt động nhóm tuần tự. Chúng hoạt động như một đơn vị duy nhất và không kết thúc cho đến khi tất cả các hoạt động trong nhóm thực thi thành công. Một lỗi duy nhất trong nhóm khiến toàn bộ giao dịch không thành công và không ảnh hưởng đến cơ sở dữ liệu.

Các giao dịch tuân theo ACID (Tính nguyên tử, Tính nhất quán, Tính cô lập và Độ bền) -

  • Atomicity - Nó đảm bảo sự thành công của tất cả các hoạt động bằng cách hủy bỏ các lỗi và quay lại các thay đổi.

  • Consistency - Nó đảm bảo cơ sở dữ liệu áp dụng các thay đổi trên một giao dịch thành công.

  • Isolation - Nó cho phép hoạt động giao dịch độc lập của các giao dịch.

  • Durability - Nó đảm bảo sự tồn tại của một giao dịch thành công trong trường hợp hệ thống bị lỗi.

Ở đầu câu lệnh giao dịch là câu lệnh BẮT ĐẦU GIAO DỊCH, sau đó là câu lệnh CAM KẾT và ROLLBACK -

  • BẮT ĐẦU GIAO DỊCH bắt đầu giao dịch.

  • COMMIT lưu các thay đổi đối với dữ liệu.

  • ROLLBACK kết thúc giao dịch, hủy mọi thay đổi.

Đối với một giao dịch thành công, CAM KẾT thực hiện. Khi bị lỗi, ROLLBACK sẽ hoạt động.

Note- Một số câu lệnh gây ra một cam kết ngầm và chúng cũng gây ra lỗi khi được sử dụng trong các giao dịch. Ví dụ về các câu lệnh như vậy bao gồm, nhưng không giới hạn ở CREATE, ALTER và DROP.

Các giao dịch MariaDB cũng bao gồm các tùy chọn như SAVEPOINT và LOCK TABLES. SAVEPOINT đặt điểm khôi phục để sử dụng với ROLLBACK. LOCK TABLES cho phép kiểm soát quyền truy cập vào bảng trong các phiên để ngăn chặn các sửa đổi trong khoảng thời gian nhất định.

Biến AUTOCOMMIT cung cấp quyền kiểm soát các giao dịch. Cài đặt 1 buộc tất cả các hoạt động được coi là giao dịch thành công và cài đặt 0 khiến các thay đổi liên tục chỉ xảy ra trên một câu lệnh COMMIT rõ ràng.

Cấu trúc của một giao dịch

Cấu trúc chung của một báo cáo giao dịch bao gồm bắt đầu bằng BẮT ĐẦU GIAO DỊCH. Bước tiếp theo là chèn một hoặc nhiều lệnh / hoạt động, chèn câu lệnh kiểm tra lỗi, chèn câu lệnh ROLLBACK để quản lý bất kỳ lỗi nào được phát hiện và cuối cùng là chèn câu lệnh COMMIT để áp dụng các thay đổi trên các hoạt động thành công.

Xem lại ví dụ dưới đây -

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

Lệnh ALTER cung cấp một cách để thay đổi cấu trúc của bảng hiện có, nghĩa là các sửa đổi như xóa hoặc thêm cột, sửa đổi chỉ mục, thay đổi kiểu dữ liệu hoặc thay đổi tên. ALTER cũng chờ áp dụng các thay đổi khi khóa siêu dữ liệu hoạt động.

Sử dụng ALTER để sửa đổi cột

ALTER được ghép nối với DROP sẽ xóa một cột hiện có. Tuy nhiên, nó không thành công nếu cột là cột duy nhất còn lại.

Xem lại ví dụ dưới đây -

mysql> ALTER TABLE products_tbl DROP version_num;

Sử dụng câu lệnh ALTER ... ADD để thêm cột -

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

Sử dụng các từ khóa ĐẦU TIÊN và SAU ĐÓ để chỉ định vị trí của cột -

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

Lưu ý từ khóa FIRST và SAU chỉ áp dụng cho câu lệnh ALTER ... ADD. Hơn nữa, bạn phải thả một bảng và sau đó thêm nó để định vị lại nó.

Thay đổi định nghĩa hoặc tên cột bằng cách sử dụng mệnh đề MODIFY hoặc CHANGE trong câu lệnh ALTER. Các mệnh đề có tác dụng tương tự, nhưng sử dụng cú pháp về cơ bản khác nhau.

Xem lại ví dụ về CHANGE dưới đây -

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

Trong một câu lệnh sử dụng CHANGE, hãy chỉ định cột ban đầu và sau đó là cột mới sẽ thay thế nó. Xem lại ví dụ SỬA ĐỔI bên dưới -

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

Lệnh ALTER cũng cho phép thay đổi các giá trị mặc định. Xem lại một ví dụ -

mysql> ALTER TABLE products_tbl ALTER discontinued SET DEFAULT N;

Bạn cũng có thể sử dụng nó để loại bỏ các ràng buộc mặc định bằng cách ghép nối nó với một mệnh đề DROP -

mysql> ALTER TABLE products_tbl ALTER discontinued DROP DEFAULT;

Sử dụng ALTER để sửa đổi bảng

Thay đổi loại bảng với mệnh đề TYPE -

mysql> ALTER TABLE products_tbl TYPE = INNODB;

Đổi tên bảng bằng từ khóa RENAME -

mysql> ALTER TABLE products_tbl RENAME TO products2016_tbl;

Chỉ mục là công cụ để tăng tốc độ truy xuất bản ghi. Một chỉ mục tạo ra một mục nhập cho mỗi giá trị trong một cột được lập chỉ mục.

Có bốn loại chỉ mục -

  • Primary (một bản ghi đại diện cho tất cả các bản ghi)

  • Unique (một bản ghi đại diện cho nhiều bản ghi)

  • Plain

  • Full-Text (cho phép nhiều tùy chọn trong tìm kiếm văn bản).

Các thuật ngữ “khóa” và “chỉ mục” giống hệt nhau trong cách sử dụng này.

Chỉ mục liên kết với một hoặc nhiều cột và hỗ trợ tìm kiếm nhanh và tổ chức hồ sơ hiệu quả. Khi tạo chỉ mục, hãy xem xét những cột nào thường được sử dụng trong các truy vấn của bạn. Sau đó, tạo một hoặc nhiều chỉ mục trên chúng. Ngoài ra, hãy xem các chỉ mục về cơ bản là bảng các khóa chính.

Mặc dù các chỉ mục tăng tốc độ tìm kiếm hoặc câu lệnh SELECT, chúng làm cho việc chèn và cập nhật bị kéo do thực hiện các hoạt động trên cả bảng và chỉ mục.

Tạo chỉ mục

Bạn có thể tạo chỉ mục thông qua câu lệnh CREATE TABLE ... INDEX hoặc câu lệnh CREATE INDEX. Tùy chọn tốt nhất hỗ trợ khả năng đọc, bảo trì và các phương pháp hay nhất là CREATE INDEX.

Xem lại cú pháp chung của Index dưới đây -

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

Xem lại một ví dụ về việc sử dụng nó -

CREATE UNIQUE INDEX top_sellers ON products_tbl product;

Thả một chỉ mục

Bạn có thể giảm chỉ mục bằng DROP INDEX hoặc ALTER TABLE ... DROP. Tùy chọn tốt nhất hỗ trợ khả năng đọc, bảo trì và các phương pháp hay nhất là DROP INDEX.

Xem lại cú pháp chung của Drop Index dưới đây -

DROP INDEX index_name ON table_name;

Xem lại một ví dụ về việc sử dụng nó -

DROP INDEX top_sellers ON product_tbl;

Đổi tên một chỉ mục

Đổi tên một chỉ mục bằng câu lệnh ALTER TABLE. Xem lại cú pháp chung của nó dưới đây -

ALTER TABLE table_name DROP INDEX index_name, ADD INDEX new_index_name;

Xem lại một ví dụ về việc sử dụng nó -

ALTER TABLE products_tbl DROP INDEX top_sellers, ADD INDEX top_2016sellers;

Quản lý chỉ mục

Bạn sẽ cần phải kiểm tra và theo dõi tất cả các chỉ mục. Sử dụng SHOW INDEX để liệt kê tất cả các chỉ mục hiện có được liên kết với một bảng nhất định. Bạn có thể đặt định dạng của nội dung được hiển thị bằng cách sử dụng một tùy chọn chẳng hạn như “\ G”, chỉ định định dạng dọc.

Xem lại ví dụ sau -

mysql > SHOW INDEX FROM products_tbl\G

Bảng thống kê

Các chỉ mục được sử dụng nhiều để tối ưu hóa các truy vấn nhờ quyền truy cập nhanh hơn vào các bản ghi và số liệu thống kê được cung cấp. Tuy nhiên, nhiều người dùng nhận thấy việc bảo trì chỉ mục rất cồng kềnh. MariaDB 10.0 cung cấp các bảng thống kê độc lập với công cụ lưu trữ, tính toán thống kê dữ liệu cho mọi bảng trong mọi công cụ lưu trữ và thậm chí thống kê cho các cột không được lập chỉ mục.

Một số hoạt động có thể được hưởng lợi từ các bảng tạm thời do tốc độ hoặc dữ liệu dùng một lần. Vòng đời của một bảng tạm thời kết thúc khi kết thúc một phiên cho dù bạn sử dụng chúng từ dấu nhắc lệnh, bằng tập lệnh PHP hay thông qua chương trình khách. Nó cũng không xuất hiện trong hệ thống theo kiểu điển hình. Lệnh SHOW TABLES sẽ không hiển thị danh sách chứa các bảng tạm thời.

Tạo bảng tạm thời

Từ khóa TEMPORARY trong câu lệnh CREATE TABLE tạo ra một bảng tạm thời. Xem lại một ví dụ dưới đây -

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
);

Khi tạo một bảng tạm thời, bạn có thể sao chép các bảng hiện có, nghĩa là tất cả các đặc điểm chung của chúng, bằng mệnh đề LIKE. Câu lệnh CREATE TABLE được sử dụng để tạo bảng tạm thời sẽ không thực hiện các giao dịch do kết quả của từ khóa TEMPORARY.

Mặc dù các bảng tạm thời khác với bảng không tạm thời và giảm xuống vào cuối phiên, chúng có thể có những xung đột nhất định -

  • Đôi khi chúng xung đột với các bảng tạm thời ma từ các phiên đã hết hạn.

  • Đôi khi chúng xung đột với tên bóng của các bảng không tạm thời.

Note - Các bảng tạm thời được phép có cùng tên với một bảng không phải tạm thời hiện có vì MariaDB xem nó như một tham chiếu khác biệt.

Hành chính

MariaDB yêu cầu cấp đặc quyền cho người dùng để tạo bảng tạm thời. Sử dụng câu lệnh GRANT để cấp đặc quyền này cho người dùng không phải quản trị viên.

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

Thả một bảng tạm thời

Mặc dù các bảng tạm thời về cơ bản sẽ bị xóa vào cuối phiên, bạn có tùy chọn xóa chúng. Việc loại bỏ bảng tạm thời yêu cầu sử dụng từ khóa TEMPORARY và các phương pháp hay nhất đề xuất loại bỏ bảng tạm thời trước bất kỳ bảng nào không tạm thời.

mysql> DROP TABLE order;

Một số tình huống yêu cầu tạo một bản sao chính xác của một bảng hiện có. Câu lệnh CREATE ... SELECT không thể tạo ra kết quả này vì nó bỏ qua những thứ như chỉ mục và giá trị mặc định.

Quy trình sao chép một bảng như sau:

  • Sử dụng SHOW CREATE TABLE để tạo câu lệnh CREATE TABLE trình bày chi tiết toàn bộ cấu trúc của bảng nguồn.

  • Chỉnh sửa câu lệnh để đặt tên mới cho bảng và thực thi nó.

  • Sử dụng câu lệnh INSERT INTO ... SELECT nếu bạn cũng cần sao chép dữ liệu bảng.

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;

Một phương pháp khác để tạo bản sao sử dụng câu lệnh CREATE TABLE AS. Câu lệnh sao chép tất cả các cột, định nghĩa cột và điền bản sao với dữ liệu của bảng nguồn.

Xem lại cú pháp của nó được đưa ra bên dưới -

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

Xem lại một ví dụ về việc sử dụng nó bên dưới -

CREATE TABLE products_copy_tbl AS
   SELECT *
   FROM products_tbl;

Trong phiên bản 10.0.3, MariaDB đã giới thiệu một công cụ lưu trữ được gọi là trình tự. Đặc biệt của nó tạo ra một chuỗi số nguyên cho các hoạt động, và sau đó nó kết thúc. Chuỗi chứa các số nguyên dương theo thứ tự giảm dần hoặc tăng dần và sử dụng giá trị bắt đầu, kết thúc và tăng dần.

Nó không cho phép sử dụng trong nhiều truy vấn, chỉ trong truy vấn ban đầu vì tính chất ảo (không được ghi vào đĩa) của nó. Tuy nhiên, bảng tuần tự có thể được chuyển đổi thành bảng tiêu chuẩn thông qua lệnh ALTER. Nếu một bảng đã chuyển đổi bị xóa, bảng trình tự vẫn tồn tại. Các chuỗi cũng không thể tạo ra số âm hoặc xoay vòng ở mức tối thiểu / tối đa.

Cài đặt Công cụ trình tự

Việc sử dụng trình tự yêu cầu cài đặt công cụ trình tự mà MariaDB phân phối dưới dạng một plugin thay vì nhị phân. Cài đặt nó bằng lệnh sau:

INSTALL SONAME "ha_sequence";

Sau khi cài đặt, hãy xác minh nó -

SHOW ENGINES\G

Hãy nhớ rằng sau khi cài đặt công cụ, bạn không thể tạo một bảng tiêu chuẩn với tên sử dụng cú pháp trình tự, nhưng bạn có thể tạo một bảng tạm thời với tên cú pháp trình tự.

Tạo trình tự

Có hai phương pháp tạo chuỗi -

  • Tạo bảng và sử dụng thuộc tính AUTO_INCREMENT để xác định cột là tự động tăng.

  • Sử dụng cơ sở dữ liệu hiện có và sử dụng truy vấn CHỌN trình tự để tạo ra một trình tự. Truy vấn sử dụng cú pháp seq_ [FROM] _to_ [TO] hoặc seq_ [FROM] _to_ [TO] _step_STEP.

Các phương pháp hay nhất ưu tiên sử dụng phương pháp thứ hai. Xem lại ví dụ về tạo chuỗi được đưa ra bên dưới -

SELECT * FROM seq_77_to_99;

Chuỗi có nhiều công dụng -

  • Tìm các giá trị bị thiếu trong một cột để bảo vệ khỏi các vấn đề liên quan trong hoạt động -

SELECT myseq.seq FROM seq_22_to_28 myseq LEFT JOIN table1 t ON myseq.seq
   = x.y WHERE x.y IS NULL;
  • Xây dựng kết hợp các giá trị -

SELECT x1.seq, x2.seq FROM seq_5_to_9 x1 JOIN seq_5_to_9 x2 ORDER BY 5, 6;
  • Tìm bội số của một số -

SELECT seq FROM seq_3_to_100_step_4;
  • Xây dựng chuỗi ngày để sử dụng trong các ứng dụng như hệ thống đặt phòng.
  • Xây dựng một chuỗi thời gian.

MariaDB, như đã thảo luận trong các bài học trước, cho phép các bản ghi và bảng trùng lặp trong một số trường hợp. Một số bản sao trong thực tế không phải là bản sao do dữ liệu hoặc kiểu đối tượng riêng biệt, hoặc do tuổi thọ hoặc lưu trữ duy nhất của đối tượng hoạt động. Các bản sao này thường không gây ra vấn đề gì.

Trong một số tình huống, các bản sao gây ra sự cố và chúng thường xuất hiện do các hành động ngầm hoặc chính sách khoan dung của lệnh MariaDB. Có nhiều cách để kiểm soát vấn đề này, tìm bản sao, xóa bản sao và ngăn tạo bản sao.

Chiến lược và Công cụ

Có bốn cách chính để quản lý các bản sao -

  • Cá cho họ với JOIN và xóa chúng bằng một bảng tạm thời.

  • Sử dụng INSERT ... ON DUPLICATE KEY UPDATE để cập nhật khi phát hiện ra một bản sao.

  • Sử dụng DISTINCT để lược bỏ kết quả của câu lệnh SELECT và loại bỏ các bản sao.

  • Sử dụng CHÈN BỎ QUA để ngừng chèn các bản sao.

Sử dụng kết hợp với một bảng tạm thời

Chỉ cần thực hiện một phép nối bán phần giống như phép nối bên trong, sau đó xóa các bản sao được tìm thấy bằng một bảng tạm thời.

Sử dụng INSERT

Khi INSERT ... ON DUPLICATE KEY UPDATE phát hiện ra một khóa chính hoặc duy nhất trùng lặp, nó sẽ thực hiện cập nhật. Khi phát hiện ra nhiều khóa duy nhất, nó chỉ cập nhật khóa đầu tiên. Do đó, không sử dụng nó trên các bảng có nhiều chỉ số duy nhất.

Xem lại ví dụ sau đây, ví dụ này tiết lộ những gì xảy ra trong bảng chứa các giá trị được lập chỉ mục khi chèn vào trường được điền -

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

Note - Nếu không tìm thấy khóa, câu lệnh INSERT ... ON DUPLICATE KEY UPDATE sẽ thực thi giống như một câu lệnh chèn thông thường.

Sử dụng DISTINCT

Các mệnh đề DISTINCT loại bỏ các bản sao khỏi kết quả. Cú pháp chung cho mệnh đề DISTINCT như sau:

SELECT DISTINCT fields
FROM table
[WHERE conditions];

Note - Kết quả của một câu lệnh với mệnh đề DISTINCT -

  • Khi sử dụng một biểu thức, nó trả về các giá trị duy nhất cho nó.

  • Khi sử dụng nhiều biểu thức, nó trả về các kết hợp duy nhất.

  • Nó không bỏ qua các giá trị NULL; do đó, kết quả cũng chứa NULL là giá trị duy nhất.

Xem lại câu lệnh sau bằng mệnh đề DISTINCT cho một biểu thức duy nhất -

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

Xem lại ví dụ sau sử dụng nhiều biểu thức -

SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30

Sử dụng CHÈN BỎ QUA

Câu lệnh INSERT IGNORE hướng dẫn MariaDB hủy việc chèn khi phát hiện ra một bản ghi trùng lặp. Xem lại một ví dụ về việc sử dụng nó dưới đây:

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

Ngoài ra, hãy lưu ý logic đằng sau các bản sao. Một số bảng yêu cầu bản sao dựa trên bản chất của dữ liệu bảng đó. Đáp ứng nhu cầu đó trong chiến lược quản lý hồ sơ trùng lặp của bạn.

Hành động đơn giản chấp nhận thông tin nhập của người dùng sẽ mở ra cánh cửa để khai thác. Vấn đề chủ yếu bắt nguồn từ việc quản lý dữ liệu một cách logic, nhưng may mắn thay, khá dễ dàng để tránh những sai sót lớn này.

Cơ hội để đưa vào SQL thường xảy ra khi người dùng nhập dữ liệu như tên và logic mã không phân tích được đầu vào này. Thay vào đó, Code cho phép kẻ tấn công chèn một câu lệnh MariaDB, câu lệnh này sẽ chạy trên cơ sở dữ liệu.

Luôn xem xét dữ liệu do người dùng nhập, nghi ngờ và cần xác thực mạnh mẽ trước khi xử lý. Thực hiện xác nhận này thông qua đối sánh mẫu. Ví dụ: nếu đầu vào được mong đợi là tên người dùng, hãy hạn chế các ký tự đã nhập thành các ký tự chữ và số, dấu gạch dưới và ở một độ dài nhất định. Xem lại một ví dụ dưới đây -

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";
}

Ngoài ra, sử dụng toán tử REGEXP và mệnh đề LIKE trong việc tạo các ràng buộc đầu vào.

Xem xét tất cả các loại kiểm soát đầu vào rõ ràng cần thiết như:

  • Kiểm soát các ký tự thoát được sử dụng.

  • Kiểm soát các kiểu dữ liệu thích hợp cụ thể cho đầu vào. Giới hạn đầu vào cho kiểu và kích thước dữ liệu cần thiết.

  • Kiểm soát cú pháp của dữ liệu đã nhập. Không cho phép bất cứ thứ gì nằm ngoài khuôn mẫu cần thiết.

  • Kiểm soát các điều khoản được phép. Danh sách đen các từ khóa SQL.

Bạn có thể không biết sự nguy hiểm của các cuộc tấn công tiêm, hoặc có thể coi chúng là không đáng kể, nhưng chúng đứng đầu danh sách các mối quan tâm về bảo mật. Hơn nữa, hãy xem xét ảnh hưởng của hai mục nhập này -

1=1
-or-
*

Mã cho phép nhập một trong hai mã đó cùng với lệnh phù hợp có thể dẫn đến việc tiết lộ tất cả dữ liệu người dùng trên cơ sở dữ liệu hoặc xóa tất cả dữ liệu trên cơ sở dữ liệu và không có việc chèn nào là đặc biệt thông minh. Trong một số trường hợp, những kẻ tấn công thậm chí không dành thời gian kiểm tra các lỗ hổng; họ thực hiện các cuộc tấn công mù với đầu vào đơn giản.

Ngoài ra, hãy xem xét các công cụ đối sánh mẫu và biểu thức chính quy được cung cấp bởi bất kỳ ngôn ngữ lập trình / tập lệnh nào được ghép nối với MariaDB, cung cấp nhiều quyền kiểm soát hơn và đôi khi kiểm soát tốt hơn.

Dữ liệu đóng vai trò là nền tảng của hoạt động và kinh doanh, và với nhiều mối đe dọa có thể xảy ra (ví dụ: kẻ tấn công, lỗi hệ thống, nâng cấp không tốt và lỗi bảo trì) ở đó, các bản sao lưu vẫn rất quan trọng. Các bản sao lưu này có nhiều dạng và tồn tại nhiều tùy chọn để tạo chúng với một bộ tùy chọn thậm chí còn rộng hơn trong các quy trình đó. Những điều quan trọng cần nhớ là loại cơ sở dữ liệu, thông tin quan trọng và cấu trúc liên quan. Thông tin này xác định lựa chọn tốt nhất của bạn.

TÙY CHỌN

Các tùy chọn chính để sao lưu bao gồm sao lưu logic và sao lưu vật lý. Bản sao lưu logic giữ các câu lệnh SQL để khôi phục dữ liệu. Bản sao lưu vật lý chứa các bản sao dữ liệu.

  • Logical backupscung cấp tính linh hoạt khi khôi phục dữ liệu trên một máy khác có cấu hình khác trái ngược với các bản sao lưu vật lý, thường bị giới hạn ở cùng một máy và loại cơ sở dữ liệu. Sao lưu logic xảy ra ở cấp cơ sở dữ liệu và bảng, và vật lý xảy ra ở cấp thư mục và tệp.

  • Physical backupscó kích thước nhỏ hơn lôgic và cũng mất ít thời gian hơn để thực hiện và khôi phục. Các bản sao lưu vật lý cũng bao gồm các tệp nhật ký và cấu hình, nhưng các bản sao lưu lôgic thì không.

Công cụ sao lưu

Công cụ chính được sử dụng để sao lưu MariaDB là mysqldump. Nó cung cấp các bản sao lưu hợp lý và tính linh hoạt. Nó cũng chứng tỏ một lựa chọn tuyệt vời cho các cơ sở dữ liệu nhỏ.Mysqldumpkết xuất dữ liệu sang SQL, CSV, XML và nhiều định dạng khác. Đầu ra của nó không giữ lại các thủ tục, khung nhìn và sự kiện được lưu trữ mà không có hướng dẫn rõ ràng.

Có ba lựa chọn cho mysqldump sao lưu -

  • Raw data - Kết xuất bảng dưới dạng tệp dữ liệu thô thông qua tùy chọn --tab, tùy chọn này cũng chỉ định đích của tệp -

$ mysqldump -u root -p --no-create-info \
   --tab=/tmp PRODUCTS products_tbl
  • Data/Definitions export- Tùy chọn này cho phép xuất một hoặc nhiều bảng thành một tệp và hỗ trợ sao lưu tất cả các cơ sở dữ liệu hiện có trên máy chủ. Kiểm tra ví dụ về xuất nội dung hoặc định nghĩa sang tệp

$ mysqldump -u root -p PRODUCTS products_tbl > export_file.txt
  • Transfer - Bạn cũng có thể xuất cơ sở dữ liệu và bảng sang một máy chủ khác

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

Sử dụng câu lệnh SELECT ... INTO OUTFILE

Một tùy chọn khác để xuất dữ liệu sử dụng câu lệnh SELECT ... INTO OUTFILE. Tùy chọn đơn giản này xuất bảng thành một tệp văn bản có định dạng đơn giản -

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

Các thuộc tính của nó cho phép định dạng tệp theo các thông số kỹ thuật ưa thích của bạn.

Lưu ý những phẩm chất sau của tuyên bố này:

  • Tên tệp phải chỉ định vị trí mong muốn của bạn cho đầu ra.

  • Bạn cần đặc quyền tệp MariaDB để thực hiện câu lệnh.

  • Tên tệp đầu ra phải là duy nhất.

  • Bạn cần thông tin đăng nhập trên máy chủ.

  • Trong môi trường UNIX, tệp đầu ra có thể đọc được trên toàn thế giới, nhưng quyền sở hữu máy chủ của nó ảnh hưởng đến khả năng xóa tệp của bạn. Đảm bảo bạn có đặc quyền.

Sử dụng CONNECT trong Sao lưu

Trình xử lý CONNECT cho phép xuất dữ liệu. Điều này tỏ ra hữu ích chủ yếu trong các tình huống khi thao tác SELECT ... INTO OUTFILE không hỗ trợ định dạng tệp.

Xem lại ví dụ sau -

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';

Các công cụ khác

Các tùy chọn khác để sao lưu như sau:

  • XtraBackup- Tùy chọn này nhắm mục tiêu cơ sở dữ liệu XtraDB / InnoDB và hoạt động với bất kỳ công cụ lưu trữ nào. Tìm hiểu thêm về công cụ này từ trang web chính thức của Percona.

  • Snapshots- Một số hệ thống tập tin cho phép chụp nhanh. Quá trình này bao gồm xóa các bảng bằng khóa đọc, gắn ảnh chụp nhanh, mở khóa các bảng, sao chép ảnh chụp nhanh và sau đó ngắt kết nối ảnh chụp nhanh.

  • LVM- Phương pháp phổ biến này sử dụng tập lệnh Perl. Nó có một khóa đọc trên mỗi bảng và chuyển bộ nhớ đệm vào đĩa. Sau đó, nó nhận được một ảnh chụp nhanh và mở khóa các bảng. Tham khảo ý kiến ​​của các quan chứcmylvmbackup trang web để biết thêm thông tin.

  • TokuBackup- Giải pháp do Percona cung cấp này cung cấp các bản sao lưu nóng có tính đến các vấn đề và hạn chế của các tùy chọn sao lưu InnoDB. Nó tạo ra một bản sao âm thanh giao dịch của các tệp trong khi các ứng dụng tiếp tục thao tác chúng. Hãy tham khảo trang web Percona để biết thêm thông tin ..

INNODB Cân nhắc

InnoDB sử dụng một vùng đệm để nâng cao hiệu suất. Trong một bản sao lưu, hãy cấu hình InnoDB để tránh sao chép toàn bộ bảng vào vùng đệm bởi vì các bản sao lưu lôgic thường thực hiện quét toàn bộ bảng.

Trong chương này, chúng ta sẽ tìm hiểu về các phương pháp tải sao lưu khác nhau. Khôi phục cơ sở dữ liệu từ bản sao lưu là một quá trình đơn giản và đôi khi rất lâu.

Có ba tùy chọn khi tải dữ liệu: câu lệnh LOAD DATA, mysqlimport và khôi phục mysqldump đơn giản.

Sử dụng TẢI DỮ LIỆU

Câu lệnh LOAD DATA hoạt động như một bộ tải hàng loạt. Xem lại một ví dụ về việc sử dụng nó để tải một tệp văn bản -

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

Lưu ý các phẩm chất sau của câu lệnh TẢI DỮ LIỆU:

  • Sử dụng từ khóa LOCAL để ngăn MariaDB thực hiện tìm kiếm sâu máy chủ và sử dụng một đường dẫn rất cụ thể.

  • Câu lệnh giả định một định dạng bao gồm các dòng được kết thúc bởi dòng cấp dữ liệu (dòng mới) và các giá trị dữ liệu được phân tách bằng các tab.

  • Sử dụng mệnh đề FIELDS để chỉ định rõ ràng định dạng của các trường trên một dòng. Sử dụng mệnh đề LINES để chỉ định kết thúc dòng. Xem lại một ví dụ dưới đây.

mysql> LOAD DATA LOCAL INFILE 'products_copy.txt' INTO TABLE empty_tbl
   FIELDS TERMINATED BY '|'
   LINES TERMINATED BY '\n';
  • Câu lệnh giả định các cột trong tệp dữ liệu sử dụng cùng một thứ tự của bảng. Nếu bạn cần đặt một thứ tự khác, bạn có thể tải tệp như sau:

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

Sử dụng MYSQLIMPORT

Công cụ mysqlimport hoạt động như một trình bao bọc TẢI DỮ LIỆU cho phép các hoạt động tương tự từ dòng lệnh.

Tải dữ liệu như sau:

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

Chỉ định định dạng như sau:

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

Sử dụng --columns tùy chọn để chỉ định thứ tự cột -

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

Sử dụng MYSQLDUMP

Khôi phục với mysqldump yêu cầu câu lệnh đơn giản này để tải lại tệp kết xuất vào máy chủ lưu trữ -

shell> mysql database_name < source_file.sql

CÁC NHÂN VẬT VÀ BÁO GIÁ ĐẶC BIỆT

Trong một câu lệnh TẢI DỮ LIỆU, dấu ngoặc kép và các ký tự đặc biệt có thể không được diễn giải chính xác. Câu lệnh giả định các giá trị không được trích dẫn và coi các dấu gạch chéo ngược là các ký tự thoát. Sử dụng mệnh đề FIELDS để chỉ định định dạng. Trỏ đến dấu ngoặc kép có "ENCLOSED BY", điều này gây ra việc loại bỏ dấu ngoặc kép khỏi các giá trị dữ liệu. Thay đổi thoát với "ESCAPED BY."

Chương này chứa danh sách các hàm được sử dụng thường xuyên nhất, cung cấp các định nghĩa, giải thích và ví dụ.

Hàm tổng hợp MariaDB

Các hàm tổng hợp được sử dụng thường xuyên nhất được đưa ra dưới đây:

Sr.No Tên & Mô tả
1

COUNT

Nó đếm số lượng bản ghi.

Example - CHỌN COUNT (*) TỪ customer_table;

2

MIN

Nó tiết lộ giá trị tối thiểu của một tập hợp các bản ghi.

Example - CHỌN tổ chức, MIN (tài khoản) TỪ các hợp đồng NHÓM THEO tổ chức;

3

MAX

Nó tiết lộ giá trị lớn nhất của một tập hợp các bản ghi.

Example - CHỌN tổ chức, MAX (kích thước tài khoản) TỪ hợp đồng NHÓM THEO tổ chức;

4

AVG

Nó tính toán giá trị trung bình của một tập hợp các bản ghi.

Example - CHỌN AVG (kích thước tài khoản) TỪ hợp đồng;

5

SUM

Nó tính tổng của một tập hợp các bản ghi.

Example - CHỌN SUM (kích thước tài khoản) TỪ hợp đồng;

MariaDB Tính tuổi

Các TIMESTAMPDIFF hàm cung cấp một cách để tính tuổi -

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

Kết nối chuỗi MariaDB

Các CONCAThàm trả về chuỗi kết quả sau một thao tác nối. Bạn có thể sử dụng một hoặc nhiều đối số. Xem lại cú pháp của nó được đưa ra bên dưới -

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

Xem lại ví dụ sau -

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

Chức năng Ngày / Giờ của MariaDB

Dưới đây là các hàm ngày quan trọng -

Sr.No Tên & Mô tả
1

CURDATE()

Nó trả về ngày ở định dạng yyyy-mm-dd hoặc yyyymmdd.

Example - CHỌN CURDATE ();

2

DATE()

Nó trả về ngày tháng ở nhiều định dạng.

Example −CREATE TABLE product_release_tbl (x DATE);

3

CURTIME()

Nó trả về thời gian ở định dạng HH: MM: SS hoặc HHMMSS.uuuuuu.

Example - CHỌN CURTIME ();

4

DATE_SUB()

Nó cộng hoặc trừ một số ngày từ ngày được chỉ định.

Example - SELECT DATE_SUB ('2016-02-08', INTERVAL 60 NGÀY);

5

DATEDIFF()

Nó xác định ngày giữa hai ngày.

Example - CHỌN DATEDIFF ('2016-01-01 23:59:59', '2016-01-03');

6

DATE ADD()

Nó thêm hoặc bớt bất kỳ đơn vị thời gian nào cho / từ ngày và giờ.

Example - CHỌN NGÀY_ADD ('2016-01-04 23:59:59', INTERVAL 22 GIÂY);

7

EXTRACT()

Nó trích xuất một đơn vị từ ngày.

Example - CHỌN TRÍCH (NĂM TỪ '2016-01-08');

số 8

NOW()

Nó trả về ngày và giờ hiện tại ở định dạng yyyy-mm-dd hh: mm: ss hoặc yyyymmddhhmmss.uuuuuu.

Example - CHỌN NGAY ();

9

DATE FORMAT()

Nó định dạng ngày phù hợp với chuỗi định dạng được chỉ định.

Example - CHỌN DATE_FORMAT ('2016-01-09 20:20:00', '% W% M% Y');

Sau đây là một số hàm thời gian quan trọng:

Sr.No Tên & Mô tả
1

HOUR()

Nó trả về giờ của thời gian hoặc số giờ đã trôi qua.

Example - CHỌN GIỜ ('19: 17: 09');

2

LOCALTIME()

Nó hoạt động chính xác như NOW ().

3

MICROSECOND()

Nó trả về micro giây của thời gian.

Example - CHỌN MICROSECOND ('16: 30: 00.543876');

4

MINUTE()

Nó trả về số phút của thời gian.

Example - CHỌN PHÚT ('2016-05-22 17:22:01');

5

SECOND()

Nó trả về giây của ngày.

Example - CHỌN THỨ HAI ('2016-03-12 16: 30: 04.000001');

6

TIME_FORMAT()

Nó định dạng thời gian phù hợp với chuỗi định dạng được chỉ định.

Example - CHỌN TIME_FORMAT ('22: 02: 20', '% H% k% h% I% l');

7

TIMESTAMP()

Nó cung cấp dấu thời gian cho một hoạt động ở định dạng yyyy-mm-dd hh: mm: dd.

Example - TẠO BẢNG đơn hàng_ (ID INT, tmst TIMESTAMP);

Hàm số MariaDB

Dưới đây là một số hàm số quan trọng trong MariaDB -

Sr.No Tên & Mô tả
1

TRUNCATE()

Nó trả về một số bị cắt ngắn thành đặc tả vị trí thập phân.

Example - CHỌN TRUNCATE (101.222, 1);

2

COS()

Nó trả về cosine của x radian.

Example - CHỌN COS (PI ());

3

CEILING()

Nó trả về số nguyên nhỏ nhất không dưới x.

Example - CHỌN TRẦN (2.11);

4

DEGREES()

Nó chuyển đổi radian sang độ.

Example - CHỌN DEGREES (PI ());

5

DIV()

Nó thực hiện phép chia số nguyên.

Example - CHỌN 100 DIV 4;

6

EXP()

Nó trả e về lũy thừa của x.

Example - CHỌN EXP (2);

7

FLOOR()

Nó trả về số nguyên lớn nhất không nằm trên x.

Example - CHỌN SÀN (2.01);

số 8

LN()

Nó trả về logarit tự nhiên của x.

Example - CHỌN LN (3);

9

LOG()

Nó trả về lôgarit tự nhiên hoặc lôgarit cho một cơ số nhất định.

Example - CHỌN ĐĂNG NHẬP (3);

10

SQRT()

Nó trả về căn bậc hai.

Example - CHỌN SQRT (16);

Hàm chuỗi MariaDB

Các hàm chuỗi quan trọng được đưa ra bên dưới:

Sr.No Tên & Mô tả
1

INSTR()

Nó trả về vị trí của phiên bản đầu tiên của một chuỗi con.

Example - CHỌN INSTR ('chôm chôm', 'tan');

2

RIGHT()

Nó trả về các ký tự chuỗi ngoài cùng bên phải.

Example - CHỌN QUYỀN ('chôm chôm', 3);

3

LENGTH()

Nó trả về độ dài byte của một chuỗi.

Example - CHỌN CHIỀU DÀI ('chôm chôm');

4

LOCATE()

Nó trả về vị trí của phiên bản đầu tiên của một chuỗi con.

Example - CHỌN VỊ TRÍ ('tan', 'chôm chôm');

5

INSERT()

Nó trả về một chuỗi, với một chuỗi con được chỉ định ở một vị trí nhất định, đã được sửa đổi.

Example - CHÈN CHÈN CHỌN ('dốc ngược', 4, 1, 'b');

6

LEFT()

Nó trả về các ký tự ngoài cùng bên trái.

Example - CHỌN LEFT ('chôm chôm', 3);

7

UPPER()

Nó thay đổi các ký tự thành chữ hoa.

Example - CHỌN LÊN (họ);

số 8

LOWER()

Nó thay đổi các ký tự thành chữ thường.

Example - CHỌN LOWER (họ);

9

STRCMP()

Nó so sánh các chuỗi và trả về 0 khi chúng bằng nhau.

Example - CHỌN STRCMP ('trứng', 'pho mát');

10

REPLACE()

Nó trả về một chuỗi sau khi thay thế các ký tự.

Example - CHỌN THAY THẾ ('sully', 'l', 'n');

11

REVERSE()

Nó đảo ngược các ký tự trong một chuỗi.

Example - CHỌN REVERSE ('xe đua');

12

REPEAT()

Nó trả về một chuỗi lặp lại các ký tự đã cho x lần.

Example - CHỌN LẶP LẠI ('ha', 10);

13

SUBSTRING()

It returns a substring from a string, starting at position x.

Example − SELECT SUBSTRING('rambutan',3);

14

TRIM()

It removes trailing/leading characters from a string.

Example − SELECT TRIM(LEADING '_' FROM '_rambutan');