MySQLi - Hướng dẫn nhanh

Cơ sở dữ liệu là gì?

Cơ sở dữ liệu là một ứng dụng riêng biệt để lưu trữ một bộ sưu tập dữ liệu. Mỗi cơ sở dữ liệu có một hoặc nhiều API riêng biệt để tạo, truy cập, quản lý, tìm kiếm và sao chép dữ liệu mà nó nắm giữ.

Có thể sử dụng các loại lưu trữ dữ liệu khác, chẳng hạn như các tệp trên hệ thống tệp hoặc các bảng băm lớn trong bộ nhớ nhưng việc tìm nạp và ghi dữ liệu sẽ không nhanh và dễ dàng với các loại hệ thống đó.

Vì vậy, ngày nay chúng ta sử dụng hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) để lưu trữ và quản lý khối lượng dữ liệu khổng lồ. Đây được gọi là cơ sở dữ liệu quan hệ vì tất cả dữ liệu được lưu trữ trong các bảng khác nhau và các quan hệ được thiết lập bằng cách sử dụng khóa chính hoặc các khóa khác được gọi là khóa ngoại.

A Relational DataBase Management System (RDBMS) là một phần mềm -

  • Cho phép bạn triển khai cơ sở dữ liệu với các bảng, cột và chỉ mục.

  • Đảm bảo tính toàn vẹn tham chiếu giữa các hàng của bảng khác nhau.

  • Cập nhật các chỉ mục tự động.

  • Thông dịch một truy vấn SQL và kết hợp thông tin từ các bảng khác nhau.

Thuật ngữ RDBMS

Trước khi chúng ta tiến hành giải thích hệ thống cơ sở dữ liệu MySQLi, chúng ta hãy xem xét lại một số định nghĩa liên quan đến cơ sở dữ liệu.

  • Database - Cơ sở dữ liệu là một tập hợp các bảng, với các dữ liệu liên quan.

  • Table- Một bảng là một ma trận với dữ liệu. Một bảng trong cơ sở dữ liệu trông giống như một bảng tính đơn giản.

  • Column - Một cột (phần tử dữ liệu) chứa dữ liệu cùng loại, ví dụ mã bưu điện của cột.

  • Row - Một hàng (= tuple, mục nhập hoặc bản ghi) là một nhóm dữ liệu có liên quan, ví dụ dữ liệu của một đăng ký.

  • Redundancy - Lưu trữ dữ liệu hai lần, dự phòng để hệ thống nhanh hơn.

  • Primary Key- Một khóa chính là duy nhất. Giá trị khóa không thể xuất hiện hai lần trong một bảng. Với một khóa, bạn có thể tìm thấy nhiều nhất một hàng.

  • Foreign Key - Khoá ngoại là chốt liên kết giữa hai bảng.

  • Compound Key - Khóa ghép (composite key) là khóa bao gồm nhiều cột, vì một cột không đủ duy nhất.

  • Index - Một chỉ mục trong cơ sở dữ liệu giống như một chỉ mục ở cuối sách.

  • Referential Integrity - Tính toàn vẹn tham chiếu đảm bảo rằng giá trị khóa ngoại luôn trỏ đến một hàng hiện có.

Cơ sở dữ liệu MySQLi

MySQLi là một RDBMS nhanh, dễ sử dụng đang được sử dụng cho nhiều doanh nghiệp lớn và nhỏ. MySQLi Extension được phát triển, tiếp thị và hỗ trợ bởi MySQL. MySQL đang trở nên rất phổ biến vì nhiều lý do chính đáng -

  • MySQLi được phát hành theo giấy phép nguồn mở. Vì vậy, bạn không có gì phải trả để sử dụng nó.

  • MySQLi là một chương trình rất mạnh theo đúng nghĩa của nó. Nó xử lý một tập hợp con lớn các chức năng của các gói cơ sở dữ liệu mạnh mẽ và đắt tiền nhất.

  • MySQLi sử dụng một dạng chuẩn của ngôn ngữ dữ liệu SQL nổi tiếng.

  • MySQLi hoạt động trên nhiều hệ điều hành và với nhiều ngôn ngữ bao gồm PHP, PERL, C, C ++, JAVA, v.v.

  • MySQLi hoạt động rất nhanh và hoạt động tốt ngay cả với các tập dữ liệu lớn.

  • MySQLi rất thân thiện với PHP, ngôn ngữ được đánh giá cao nhất để phát triển web.

  • MySQLi hỗ trợ cơ sở dữ liệu lớn, lên đến 50 triệu hàng hoặc hơn trong một bảng. Giới hạn kích thước tệp mặc định cho một bảng là 4GB, nhưng bạn có thể tăng giới hạn này (nếu hệ điều hành của bạn có thể xử lý nó) lên giới hạn lý thuyết là 8 triệu terabyte (TB).

  • MySQLi có thể tùy chỉnh. Giấy phép GPL mã nguồn mở cho phép các lập trình viên sửa đổi phần mềm MySQL để phù hợp với môi trường cụ thể của riêng họ.

Trước khi bắt đầu

Trước khi bắt đầu hướng dẫn này, bạn nên có kiến ​​thức cơ bản về thông tin được đề cập trong các hướng dẫn về PHP và HTML của chúng tôi.

Hướng dẫn này tập trung nhiều vào việc sử dụng MySQLi trong môi trường PHP. Nhiều ví dụ được đưa ra trong hướng dẫn này sẽ hữu ích cho các Lập trình viên PHP.

Chúng tôi khuyên bạn nên xem Hướng dẫn PHP của chúng tôi để bạn tham khảo.

Tải xuống MySQL

Phần mở rộng MySQLi được thiết kế để hoạt động với MySQL phiên bản 4.1.13 hoặc mới hơn, Vì vậy, phải tải xuống MySQL. Tất cả các bản tải xuống cho MySQL đều có tại MySQL Downloads . Chọn số phiên bản mới nhất cho Máy chủ cộng đồng MySQL mà bạn muốn và chính xác nhất có thể, nền tảng bạn muốn.

Cài đặt MySQL trên Linux / UNIX

Cách được khuyến nghị để cài đặt MySQL trên hệ thống Linux là thông qua RPM. MySQL AB cung cấp các RPM sau để tải xuống trên trang web của nó -

  • MySQL - Máy chủ cơ sở dữ liệu MySQL, quản lý cơ sở dữ liệu và bảng, kiểm soát quyền truy cập của người dùng và xử lý các truy vấn SQL.

  • MySQL-client - Các chương trình máy khách MySQL, cho phép kết nối và tương tác với máy chủ.

  • MySQL-devel - Các thư viện và tệp tiêu đề có ích khi biên dịch các chương trình khác sử dụng MySQL.

  • MySQL-shared - Các thư viện dùng chung cho máy khách MySQL.

  • MySQL-bench - Các công cụ kiểm tra hiệu suất và điểm chuẩn cho máy chủ cơ sở dữ liệu MySQL.

Các RPM của MySQL được liệt kê ở đây đều được xây dựng trên hệ thống SuSE Linux, nhưng chúng thường sẽ hoạt động trên các biến thể Linux khác mà không gặp khó khăn gì.

Bây giờ, hãy làm theo các bước sau để tiến hành cài đặt -

  • Đăng nhập vào hệ thống bằng root người dùng.

  • Chuyển sang thư mục chứa RPM -

  • Cài đặt máy chủ cơ sở dữ liệu MySQL bằng cách thực hiện lệnh sau. Hãy nhớ thay thế tên tệp in nghiêng bằng tên tệp RPM của bạn.

[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm

    Lệnh trên sẽ xử lý cài đặt máy chủ MySQL, tạo người dùng MySQL, tạo cấu hình cần thiết và khởi động máy chủ MySQL tự động.

    Bạn có thể tìm thấy tất cả các tệp nhị phân liên quan đến MySQL trong / usr / bin và / usr / sbin. Tất cả các bảng và cơ sở dữ liệu sẽ được tạo trong thư mục / var / lib / mysql.

  • Đây là bước tùy chọn nhưng được khuyến nghị để cài đặt các RPM còn lại theo cách tương tự -

[root@host]# rpm -i MySQL-client-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-devel-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-shared-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-bench-5.0.9-0.i386.rpm

Cài đặt MySQL trên Windows

Cài đặt mặc định trên bất kỳ phiên bản Windows nào giờ đây dễ dàng hơn nhiều so với trước đây, vì MySQL hiện được đóng gói gọn gàng với một trình cài đặt. Chỉ cần tải xuống gói trình cài đặt, giải nén nó ở bất kỳ đâu và chạy setup.exe.

Trình cài đặt mặc định setup.exe sẽ hướng dẫn bạn qua quy trình nhỏ và theo mặc định sẽ cài đặt mọi thứ trong C: \ mysql.

Kiểm tra máy chủ bằng cách kích hoạt nó từ dấu nhắc lệnh lần đầu tiên. Đi tới vị trí của máy chủ mysqld có thể là C: \ mysql \ bin và nhập -

mysqld.exe --console

NOTE - Nếu bạn đang ở trên NT, thì bạn sẽ phải sử dụng mysqld-nt.exe thay vì mysqld.exe

Nếu mọi việc suôn sẻ, bạn sẽ thấy một số thông báo về khởi động và InnoDB. Nếu không, bạn có thể gặp vấn đề về quyền. Đảm bảo rằng thư mục chứa dữ liệu của bạn có thể truy cập được cho bất kỳ người dùng nào (có thể là mysql) mà các quy trình cơ sở dữ liệu đang chạy dưới đó.

MySQL sẽ không tự thêm chính nó vào menu bắt đầu và cũng không có cách GUI đặc biệt hay để dừng máy chủ. Do đó, nếu bạn có xu hướng khởi động máy chủ bằng cách nhấp đúp vào tệp thực thi mysqld, bạn nên nhớ tạm dừng quá trình bằng tay bằng cách sử dụng mysqladmin, Danh sách tác vụ, Trình quản lý tác vụ hoặc các phương tiện dành riêng cho Windows.

Xác minh cài đặt MySQL

Sau khi MySQL đã được cài đặt thành công, các bảng cơ sở đã được khởi tạo và máy chủ đã được khởi động, bạn có thể xác minh rằng tất cả đều hoạt động bình thường thông qua một số kiểm tra đơn giản.

Sử dụng Tiện ích mysqladmin để có được trạng thái máy chủ

Sử dụng mysqladminnhị phân để kiểm tra phiên bản máy chủ. Hệ nhị phân này sẽ có sẵn trong / usr / bin trên linux và trong C: \ mysql \ bin trên windows.

[root@host]# mysqladmin --version

Nó sẽ tạo ra kết quả sau trên Linux. Nó có thể khác nhau tùy thuộc vào cài đặt của bạn -

mysqladmin  Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386

Nếu bạn không nhận được thông báo như vậy, thì có thể có một số vấn đề trong quá trình cài đặt của bạn và bạn sẽ cần một số trợ giúp để khắc phục.

Thực thi các lệnh SQL đơn giản bằng MySQL Client

Bạn có thể kết nối với máy chủ MySQL của mình bằng cách sử dụng máy khách MySQL bằng mysqlchỉ huy. Tại thời điểm này, bạn không cần phải cung cấp bất kỳ mật khẩu nào vì theo mặc định, mật khẩu sẽ được đặt thành trống.

Vì vậy, chỉ cần sử dụng lệnh sau

[root@host]# mysql

Nó sẽ được thưởng bằng một lời nhắc mysql>. Bây giờ, bạn đã kết nối với máy chủ MySQL và bạn có thể thực thi tất cả lệnh SQL tại dấu nhắc mysql> như sau:

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.13 sec)

Các bước sau cài đặt

MySQL cung cấp một mật khẩu trống cho người dùng MySQL gốc. Ngay sau khi bạn đã cài đặt thành công cơ sở dữ liệu và máy khách, bạn cần đặt mật khẩu gốc như sau:

[root@host]# mysqladmin -u root password "new_password";

Bây giờ để tạo kết nối với máy chủ MySQL của bạn, bạn sẽ phải sử dụng lệnh sau:

[root@host]# mysql -u root -p
Enter password:*******

Người dùng UNIX cũng sẽ muốn đặt thư mục MySQL của bạn trong PATH của bạn, vì vậy bạn sẽ không phải tiếp tục nhập đường dẫn đầy đủ mỗi khi bạn muốn sử dụng máy khách dòng lệnh. Đối với bash, nó sẽ giống như -

export PATH = $PATH:/usr/bin:/usr/sbin

Chạy MySQL tại thời điểm khởi động

Nếu bạn muốn chạy máy chủ MySQL tại thời điểm khởi động, hãy đảm bảo rằng bạn có mục nhập sau trong tệp /etc/rc.local.

/etc/init.d/mysqld start

Ngoài ra, bạn nên có nhị phân mysqld trong thư mục /etc/init.d/.

Chạy và tắt Máy chủ MySQLi

MySQLi là phần mở rộng của MySQL vì vậy trước tiên hãy kiểm tra xem máy chủ MySQL của bạn có đang chạy hay không. Bạn có thể sử dụng lệnh sau để kiểm tra điều này:

ps -ef | grep mysqld

Nếu MySql của bạn đang chạy, thì bạn sẽ thấy mysqldquá trình được liệt kê trong kết quả của bạn. Nếu máy chủ không chạy, thì bạn có thể khởi động nó bằng cách sử dụng lệnh sau

root@host# cd /usr/bin
./safe_mysqld &

Bây giờ, nếu bạn muốn tắt một máy chủ MySQL đã chạy, thì bạn có thể thực hiện bằng cách sử dụng lệnh sau:

root@host# cd /usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******

Thiết lập tài khoản người dùng MySQLi

Để thêm người dùng mới vào MySQLi Đây là phiên bản cải tiến của MySQL, bạn chỉ cần thêm một mục mới vào user bảng trong cơ sở dữ liệu mysql.

Dưới đây là ví dụ về việc thêm người dùng mới guest với các đặc quyền CHỌN, CHÈN và CẬP NHẬT với mật khẩu guest123; truy vấn SQL là -

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

mysql> INSERT INTO user (
   host, user, password, select_priv, insert_priv, update_priv) 
   VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y');

Query OK, 1 row affected (0.20 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)

mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
| host      | user    | password         |
+-----------+---------+------------------+
| localhost | guest | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)

Khi thêm người dùng mới, hãy nhớ mã hóa mật khẩu mới bằng hàm PASSWORD () do MySQL cung cấp. Như bạn có thể thấy trong ví dụ trên, mật khẩu mypass được mã hóa thành 6f8c114b58f2ce9e.

Lưu ý tuyên bố FLUSH PRIVILEGES. Điều này yêu cầu máy chủ tải lại các bảng cấp. Nếu bạn không sử dụng nó, thì bạn sẽ không thể kết nối với mysql bằng tài khoản người dùng mới ít nhất cho đến khi máy chủ được khởi động lại.

Bạn cũng có thể chỉ định các đặc quyền khác cho người dùng mới bằng cách đặt giá trị của các cột sau trong bảng người dùng thành 'Y' khi thực hiện truy vấn CHÈN hoặc bạn có thể cập nhật chúng sau bằng cách sử dụng truy vấn CẬP NHẬT.

  • Select_priv
  • Insert_priv
  • Update_priv
  • Delete_priv
  • Create_priv
  • Drop_priv
  • Reload_priv
  • Shutdown_priv
  • Process_priv
  • File_priv
  • Grant_priv
  • References_priv
  • Index_priv
  • Alter_priv

Một cách khác để thêm tài khoản người dùng là sử dụng lệnh GRANT SQL; ví dụ sau sẽ thêm người dùngzara với mật khẩu zara123 cho một cơ sở dữ liệu cụ thể được gọi là TUTORIALS.

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

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
   -> ON TUTORIALS.*
   -> TO 'zara'@'localhost'
   -> IDENTIFIED BY 'zara123';

Điều này cũng sẽ tạo một mục nhập trong bảng cơ sở dữ liệu mysql được gọi là user.

NOTE - MySQL không kết thúc lệnh cho đến khi bạn đặt dấu chấm phẩy (;) ở cuối lệnh SQL.

Cấu hình tệp /etc/my.cnf

Hầu hết các trường hợp, bạn không nên chạm vào tệp này. Theo mặc định, nó sẽ có các mục sau:

[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock

[mysql.server]
user = mysql
basedir = /var/lib

[safe_mysqld]
err-log = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid

Tại đây, bạn có thể chỉ định một thư mục khác cho nhật ký lỗi, nếu không, bạn không nên thay đổi bất kỳ mục nhập nào trong bảng này.

Lệnh MySQLi quản trị

Đây là danh sách các lệnh MySQLi quan trọng mà bạn sẽ dành thời gian để làm việc với cơ sở dữ liệu MySQL -

  • USE Databasename - Điều này sẽ được sử dụng để chọn một cơ sở dữ liệu cụ thể trong MySQLi workarea.

  • SHOW DATABASES - Liệt kê các cơ sở dữ liệu mà MySQLi DBMS có thể truy cập được.

  • SHOW TABLES - Hiển thị các bảng trong cơ sở dữ liệu khi một cơ sở dữ liệu đã được chọn bằng lệnh sử dụng.

  • SHOW COLUMNS FROM tablename - Hiển thị các thuộc tính, loại thuộc tính, thông tin chính, liệu NULL có được phép hay không, giá trị mặc định và thông tin khác cho một bảng.

  • SHOW INDEX FROM tablename - Hiển thị thông tin chi tiết của tất cả các chỉ mục trên bảng, bao gồm cả KHÓA CHÍNH.

  • SHOW TABLE STATUS LIKE tablename\G - Báo cáo chi tiết về hiệu suất và thống kê MySQLi DBMS.

MySQLi hoạt động rất tốt khi kết hợp nhiều ngôn ngữ lập trình khác nhau như PERL, C, C ++, JAVA và PHP. Trong số các ngôn ngữ này, PHP là ngôn ngữ phổ biến nhất vì khả năng phát triển ứng dụng web của nó.

Hướng dẫn này tập trung nhiều vào việc sử dụng MySQLi trong môi trường PHP. PHP cung cấp các chức năng khác nhau để truy cập cơ sở dữ liệu MySQLi và thao tác các bản ghi dữ liệu bên trong cơ sở dữ liệu MySQLi. Bạn sẽ yêu cầu gọi các hàm PHP giống như cách bạn gọi bất kỳ hàm PHP nào khác.

Các hàm PHP để sử dụng với MySQLi có định dạng chung sau:

mysqli_function(value,value,...);

Phần thứ hai của tên hàm là cụ thể cho hàm, thường là một từ mô tả những gì hàm thực hiện. Sau đây là hai trong số các hàm, chúng tôi sẽ sử dụng trong hướng dẫn của mình -

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

Ví dụ sau cho thấy một cú pháp chung của PHP để gọi bất kỳ hàm MySQLi nào.

<html>
   <head>
      <title>PHP with MySQLi</title>
   </head>
   
   <body>
      <?php
         $retval = mysqli_function(value, [value,...]);
         if( !$retval ){
            die ( "Error: a related error message" );
         }
         // Otherwise MySQLi  or PHP Statements
      ?>
   </body>
</html>

Bắt đầu từ chương tiếp theo, chúng ta sẽ thấy tất cả các chức năng quan trọng của MySQLi cùng với PHP.

Kết nối MySQLi sử dụng nhị phân mysql

Bạn có thể thiết lập cơ sở dữ liệu MySQLi bằng cách sử dụng mysql nhị phân tại dấu nhắc lệnh.

Thí dụ

Đây là một ví dụ đơn giản để kết nối với máy chủ MySQL để thiết lập cơ sở dữ liệu mysqli từ dấu nhắc lệnh -

[root@host]# mysql -u root -p
Enter password:******

Điều này sẽ cung cấp cho bạn dấu nhắc lệnh mysql> nơi bạn có thể thực thi bất kỳ lệnh SQL nào. Sau đây là kết quả của lệnh trên:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 5.0.9

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

Trong ví dụ trên, chúng tôi đã sử dụng rootvới tư cách là người dùng nhưng bạn có thể sử dụng bất kỳ người dùng nào khác. Bất kỳ người dùng nào sẽ có thể thực hiện tất cả các hoạt động SQL, được phép cho người dùng đó.

Bạn có thể ngắt kết nối khỏi cơ sở dữ liệu MySQL bất kỳ lúc nào bằng exit lệnh tại dấu nhắc mysql>.

mysql> exit
Bye

Kết nối MySQLi bằng PHP Script

PHP cung cấp mysqli_connect()chức năng để mở một kết nối cơ sở dữ liệu. Hàm này nhận năm tham số và trả về mã định danh liên kết MySQLi khi thành công hoặc FALSE khi thất bại.

Cú pháp

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

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

server

Tùy chọn - Tên máy chủ đang chạy máy chủ cơ sở dữ liệu. Nếu không được chỉ định, thì giá trị mặc định làlocalhost:3306.

2

user

Tùy chọn - Tên người dùng truy cập cơ sở dữ liệu. Nếu không được chỉ định, thì mặc định là tên của người dùng sở hữu tiến trình máy chủ.

3

passwd

Tùy chọn - Mật khẩu của người dùng truy cập cơ sở dữ liệu. Nếu không được chỉ định, thì mặc định là mật khẩu trống.

4

new_link

Tùy chọn - Nếu cuộc gọi thứ hai được thực hiện tới mysqli_connect () với các đối số giống nhau, sẽ không có kết nối mới nào được thiết lập; thay vào đó, số nhận dạng của kết nối đã được mở sẽ được trả về.

5

client_flags

Tùy chọn - Sự kết hợp của các hằng số sau -

  • MYSQLI_CLIENT_SSL - Sử dụng mã hóa SSL
  • MYSQLI_CLIENT_COMPRESS - Sử dụng giao thức nén
  • MYSQLI_CLIENT_IGNORE_SPACE - Cho phép khoảng trắng sau tên hàm
  • MYSQLI_CLIENT_INTERACTIVE - Cho phép thời gian chờ tương tác giây không hoạt động trước khi đóng kết nối

Bạn có thể ngắt kết nối khỏi cơ sở dữ liệu MySQLi bất cứ lúc nào bằng cách sử dụng một hàm PHP khác mysqli_close(). Hàm này nhận một tham số duy nhất, là một kết nối được trả về bởimysqli_connect() chức năng.

Cú pháp

bool mysqli_close ( resource $link_identifier );

Nếu tài nguyên không được chỉ định thì cơ sở dữ liệu mở lần cuối sẽ bị đóng. Hàm này trả về true nếu nó đóng kết nối thành công, ngược lại nó trả về false.

Thí dụ

Hãy thử ví dụ sau để kết nối với máy chủ MySQL:

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3306'; $dbuser = 'guest';
         $dbpass = 'guest123'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ){
            die('Could not connect: ' . mysqli_error());
         }
         echo 'Connected successfully';
         mysqli_close($conn);
      ?>
   </body>
</html>

Nếu ví dụ trên được kết nối với MySQLi, thì đầu ra sẽ như thế này trên trình duyệt của bạn -

Connected successfully

Tạo cơ sở dữ liệu bằng mysqladmin

Bạn sẽ cần các đặc quyền đặc biệt để tạo hoặc xóa cơ sở dữ liệu MySQLi. Vì vậy, giả sử bạn có quyền truy cập vào người dùng root, bạn có thể tạo bất kỳ cơ sở dữ liệu nào bằng cách sử dụng mysqlmysqladmin nhị phân.

Thí dụ

Đây là một ví dụ đơn giản để tạo cơ sở dữ liệu có tên TUTORIALS -

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

Điều này sẽ tạo ra một cơ sở dữ liệu MySQLi HƯỚNG DẪN.

Tạo cơ sở dữ liệu bằng PHP Script

Sử dụng PHP mysqli_querychức năng tạo hoặc xóa cơ sở dữ liệu MySQLi. Hàm này nhận hai tham số và trả về TRUE khi thành công hoặc FALSE nếu thất bại.

Thí dụ

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

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root'; $dbpass = '<password here>';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
   
         if(! $conn ){ echo 'Connected failure<br>'; } echo 'Connected successfully<br>'; $sql = "CREATE DATABASE TUTORIALS";
         
         if (mysqli_query($conn, $sql)) {
            echo "Database created successfully";
         } else {
            echo "Error creating database: " . mysqli_error($conn); } mysqli_close($conn);
      ?>
   </body>
</html>

Nếu kết nối và tạo cơ sở dữ liệu thành công, thì đầu ra mẫu sẽ như thế này:

Connected successfully
Database created successfully

Thả Cơ sở dữ liệu bằng mysqladmin

Bạn sẽ cần các đặc quyền đặc biệt để tạo hoặc xóa cơ sở dữ liệu MySQLi. Vì vậy, giả sử bạn có quyền truy cập vào người dùng root, bạn có thể tạo bất kỳ cơ sở dữ liệu nào bằng cách sử dụng mysqlmysqladmin nhị phân.

Hãy cẩn thận trong khi xóa bất kỳ cơ sở dữ liệu nào vì bạn sẽ mất tất cả dữ liệu có sẵn trong cơ sở dữ liệu của mình.

Đây là một ví dụ để xóa một cơ sở dữ liệu được tạo trong chương trước -

[root@host]# mysqladmin -u root -p drop TUTORIALS
Enter password:******

Điều này sẽ cung cấp cho bạn một cảnh báo và nó sẽ xác nhận xem bạn có thực sự muốn xóa cơ sở dữ liệu này hay không.

Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'TUTORIALS' database [y/N] y
Database "TUTORIALS" dropped

Thả cơ sở dữ liệu bằng PHP Script

Sử dụng PHP querychức năng tạo hoặc xóa cơ sở dữ liệu MySQLi. Hàm này nhận hai tham số và trả về TRUE khi thành công hoặc FALSE nếu thất bại.

Thí dụ

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

<html>
   <head>
      <title>Connecting MySQLi Server>/title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3306'; $dbuser = 'root';
         $dbpass = '<Password Here>'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ){
            echo 'Connected failure<br>';
         }
         echo 'Connected successfully<br>';
         $sql = "DROP DATABASE TUTORIALS"; if (mysqli_query($conn, $sql)) { echo "Record deleted successfully"; } else { echo "Error deleting record: " . mysqli_error($conn);
         }
         mysqli_close($conn);
      ?>
   </body>
</html>

WARNING- Trong khi xóa cơ sở dữ liệu bằng tập lệnh PHP, nó không nhắc bạn xác nhận. Vì vậy, hãy cẩn thận khi xóa cơ sở dữ liệu MySQLi.

Nếu cơ sở dữ liệu được kết nối và xóa thành công, thì đầu ra mẫu sẽ như thế này:

Connected successfully
Database deleted successfully

Khi bạn có kết nối với máy chủ MySQLi, bạn phải chọn một cơ sở dữ liệu cụ thể để làm việc. Điều này là do có thể có nhiều hơn một cơ sở dữ liệu có sẵn với Máy chủ MySQLi.

Cú pháp

bool mysqli_select_db( db_name, connection );

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

db_name

Bắt buộc - Tên cơ sở dữ liệu MySQLi được chọn

2

connection

Tùy chọn - nếu không được chỉ định, thì kết nối được mở lần cuối bởi mysqli_connect sẽ được sử dụng.

Thí dụ

Đây là ví dụ hướng dẫn bạn cách chọn cơ sở dữ liệu.

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root'; $dbpass = '<Password Here>';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
   
         if(! $conn ) { echo 'Connected failure<br>'; } echo 'Connected successfully<br>'; mysqli_select_db( 'TUTORIALS' ); //Write some code here mysqli_close($conn);
      ?>
   </body>
</html>

Nếu được kết nối và cơ sở dữ liệu đã chọn thành công, thì đầu ra mẫu sẽ như thế này:

Connected successfully

Việc xác định đúng các trường trong bảng rất quan trọng đối với việc tối ưu hóa tổng thể cơ sở dữ liệu của bạn. Bạn chỉ nên sử dụng loại và kích thước trường mà bạn thực sự cần sử dụng; không xác định một trường rộng 10 ký tự nếu bạn biết rằng bạn sẽ chỉ sử dụng 2 ký tự. Những loại trường (hoặc cột) này cũng được gọi là kiểu dữ liệu, sautype of data bạn sẽ lưu trữ trong các trường đó.

MySQLi sử dụng nhiều kiểu dữ liệu khác nhau được chia thành ba loại: kiểu số, ngày và giờ và kiểu chuỗi.

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

MySQLi sử dụng tất cả các kiểu dữ liệu số ANSI SQL chuẩn, vì vậy nếu bạn đang truy cập MySQLi từ một hệ thống cơ sở dữ liệu khác, các định nghĩa này sẽ trông quen thuộc với bạn. Danh sách sau đây hiển thị các kiểu dữ liệu số phổ biến và mô tả của chúng -

  • INT- Một số nguyên có kích thước bình thường, có thể có dấu hoặc không dấu. Nếu có dấu, phạm vi cho phép là từ -2147483648 đến 2147483647. Nếu chưa có dấu, phạm vi cho phép là từ 0 đến 4294967295. Bạn có thể chỉ định chiều rộng tối đa 11 chữ số.

  • TINYINT- Một số nguyên rất nhỏ có thể có dấu hoặc không dấu. Nếu có dấu, phạm vi cho phép là từ -128 đến 127. Nếu không có dấu, phạm vi cho phép là từ 0 đến 255. Bạn có thể chỉ định chiều rộng tối đa 4 chữ số.

  • SMALLINT- Một số nguyên nhỏ có thể có dấu hoặc không dấu. Nếu có dấu, phạm vi cho phép là từ -32768 đến 32767. Nếu không có dấu, phạm vi cho phép là từ 0 đến 65535. Bạn có thể chỉ định chiều rộng tối đa 5 chữ số.

  • MEDIUMINT- Một số nguyên cỡ vừa, có thể có dấu hoặc không dấu. Nếu có dấu, phạm vi cho phép là từ -8388608 đến 8388607. Nếu không có dấu, phạm vi cho phép là từ 0 đến 16777215. Bạn có thể chỉ định chiều rộng tối đa 9 chữ số.

  • BIGINT- Một số nguyên lớn có thể có dấu hoặc không dấu. Nếu có dấu, phạm vi cho phép là từ -9223372036854775808 đến 9223372036854775807. Nếu chưa ký, phạm vi cho phép là từ 0 đến 18446744073709551615. Bạn có thể chỉ định chiều rộng tối đa 20 chữ số.

  • FLOAT(M,D)- Một số dấu phẩy động không thể không dấu. Bạn có thể xác định độ dài hiển thị (M) và số phần thập phân (D). Điều này không bắt buộc và sẽ mặc định là 10,2, trong đó 2 là số lượng phần thập phân và 10 là tổng số chữ số (bao gồm cả số thập phân). Độ chính xác thập phân có thể lên đến 24 vị trí cho một FLOAT.

  • DOUBLE(M,D)- Một số dấu phẩy động chính xác gấp đôi không thể không dấu. Bạn có thể xác định độ dài hiển thị (M) và số phần thập phân (D). Điều này là không bắt buộc và sẽ mặc định là 16,4, trong đó 4 là số thập phân. Độ chính xác thập phân có thể lên tới 53 vị trí cho DOUBLE. REAL là một từ đồng nghĩa với DOUBLE.

  • DECIMAL(M,D) - Một số dấu phẩy động đã giải nén không thể không dấu. Trong số thập phân được giải nén, mỗi số thập phân tương ứng với một byte. Cần xác định độ dài hiển thị (M) và số thập phân (D). NUMERIC là một từ đồng nghĩa với DECIMAL.

Loại ngày và giờ

Các kiểu dữ liệu ngày và giờ của MySQL là:

  • DATE- Ngày ở định dạng YYYY-MM-DD, từ 1000-01-01 đến 9999-12-31. Ví dụ, ngày 30 tháng 12 năm 1973 sẽ được lưu trữ là 1973-12-30.

  • DATETIME- Kết hợp ngày và giờ ở định dạng YYYY-MM-DD HH: MM: SS, trong khoảng từ 1000-01-01 00:00:00 đến 9999-12-31 23:59:59. Ví dụ: 3:30 chiều ngày 30 tháng 12 năm 1973 sẽ được lưu trữ thành 1973-12-30 15:30:00.

  • TIMESTAMP - Dấu thời gian giữa nửa đêm, ngày 1 tháng 1 năm 1970 và đôi khi vào năm 2037. Định dạng này trông giống như định dạng DATETIME trước đó, chỉ không có dấu gạch ngang giữa các số; 3:30 chiều ngày 30 tháng 12 năm 1973 sẽ được lưu trữ là 19731230153000 (YYYYMMDDHHMMSS).

  • TIME - Lưu trữ thời gian ở định dạng HH: MM: SS.

  • YEAR(M)- Lưu trữ một năm ở định dạng 2 chữ số hoặc 4 chữ số. Nếu độ dài được chỉ định là 2 (ví dụ: YEAR (2)), thì YEAR có thể là 1970 đến 2069 (70 đến 69). Nếu độ dài được chỉ định là 4, thì YEAR có thể là 1901 đến 2155. Độ dài mặc định là 4.

Các loại chuỗi

Mặc dù kiểu số và kiểu ngày tháng rất thú vị, nhưng hầu hết dữ liệu bạn sẽ lưu trữ sẽ ở định dạng chuỗi. Danh sách này mô tả các kiểu dữ liệu chuỗi phổ biến trong MySQLi.

  • CHAR(M)- Một chuỗi có độ dài cố định có độ dài từ 1 đến 255 ký tự (ví dụ CHAR (5)), được đệm bên phải bằng khoảng trắng với độ dài được chỉ định khi được lưu trữ. Không bắt buộc phải xác định độ dài, nhưng mặc định là 1.

  • VARCHAR(M)- Một chuỗi có độ dài thay đổi từ 1 đến 255 ký tự; ví dụ VARCHAR (25). Bạn phải xác định độ dài khi tạo trường VARCHAR.

  • BLOB or TEXT- Một trường có độ dài tối đa là 65535 ký tự. BLOB là "Đối tượng lớn nhị phân" và được sử dụng để lưu trữ lượng lớn dữ liệu nhị phân, chẳng hạn như hình ảnh hoặc các loại tệp khác. Các trường được định nghĩa là TEXT cũng chứa một lượng lớn dữ liệu; sự khác biệt giữa hai cách này là việc sắp xếp và so sánh trên dữ liệu được lưu trữ có phân biệt chữ hoa chữ thường trên BLOB và không phân biệt chữ hoa chữ thường trong các trường TEXT. Bạn không chỉ định độ dài bằng BLOB hoặc TEXT.

  • TINYBLOB or TINYTEXT- Cột BLOB hoặc TEXT có độ dài tối đa là 255 ký tự. Bạn không chỉ định độ dài với TINYBLOB hoặc TINYTEXT.

  • MEDIUMBLOB or MEDIUMTEXT- Cột BLOB hoặc TEXT có độ dài tối đa là 16777215 ký tự. Bạn không chỉ định độ dài với MEDIUMBLOB hoặc MEDIUMTEXT.

  • LONGBLOB or LONGTEXT- Cột BLOB hoặc TEXT có độ dài tối đa là 4294967295 ký tự. Bạn không chỉ định độ dài bằng LONGBLOB hoặc LONGTEXT.

  • ENUM - Một kiểu liệt kê, là một thuật ngữ ưa thích để chỉ danh sách. Khi xác định ENUM, bạn đang tạo một danh sách các mục mà từ đó giá trị phải được chọn (hoặc nó có thể là NULL). Ví dụ: nếu bạn muốn trường của mình chứa "A" hoặc "B" hoặc "C", bạn sẽ xác định ENUM của mình là ENUM ('A', 'B', 'C') và chỉ những giá trị đó (hoặc NULL) bao giờ có thể điền vào trường đó.

Lệnh tạo bảng yêu cầu:

  • Tên của bảng
  • Tên các trường
  • Định nghĩa cho từng trường

Cú pháp

Đây là cú pháp SQL chung để tạo bảng MySQLi -

CREATE TABLE table_name (column_name column_type);

Bây giờ, chúng ta sẽ tạo bảng sau trong TUTORIALS cơ sở dữ liệu.

CREATE TABLE tutorials_inf(
   id INT AUTO_INCREMENT,
   name VARCHAR(20) NOT NULL,
   primary key (id),
);

Ở đây có một số mục cần giải thích -

  • Thuộc tính trường NOT NULLđang được sử dụng vì chúng tôi không muốn trường này là NULL. Vì vậy, nếu người dùng cố gắng tạo một bản ghi với giá trị NULL, thì MySQLi sẽ phát sinh lỗi.

  • Thuộc tính trường AUTO_INCREMENT yêu cầu MySQLi tiếp tục và thêm số có sẵn tiếp theo vào trường id.

  • Từ khóa PRIMARY KEYđược sử dụng để xác định một cột làm khóa chính. Bạn có thể sử dụng nhiều cột được phân tách bằng dấu phẩy để xác định khóa chính.

Tạo bảng từ Command Prompt

Điều này rất dễ dàng để tạo một bảng MySQLi từ lời nhắc mysql>. Bạn sẽ sử dụng lệnh SQLCREATE TABLE để tạo một bảng.

Thí dụ

Đây là một ví dụ, tạo ra tutorials_tbl -

root@host# mysql -u root -p
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> CREATE TABLE tutorials_inf(
   id INT AUTO_INCREMENT,name VARCHAR(20) NOT NULL,primary key (id));
Query OK, 0 rows affected (0.16 sec)

mysql>

NOTE - MySQLi không kết thúc một lệnh cho đến khi bạn đưa ra dấu chấm phẩy (;) ở cuối lệnh SQL.

Tạo bảng bằng PHP Script

Để tạo bảng mới trong bất kỳ cơ sở dữ liệu hiện có nào, bạn cần sử dụng hàm PHP mysqli_query(). Bạn sẽ chuyển đối số thứ hai của nó bằng lệnh SQL thích hợp để tạo một bảng.

Thí dụ

Đây là một ví dụ để tạo một bảng bằng PHP script:

<html>
   <head>
      <title>Creating MySQLi Tables</title>
   </head>
   
   <body>
      <?php  
         $host = 'localhost:3306'; $user = 'root';  
         $pass = '<Password Here>'; $dbname = 'TUTORIALS';  
         $conn = mysqli_connect($host, $user, $pass,$dbname); if(!$conn){  
            die('Could not connect: '.mysqli_connect_error());  
         }  
         echo 'Connected successfully<br/>';  
  
         $sql = "create table tutorials_inf( id INT AUTO_INCREMENT,name VARCHAR(20) NOT NULL,primary key (id))"; if(mysqli_query($conn, $sql)){ echo "Table created successfully"; } else { echo "Table is not created successfully "; } mysqli_close($conn);  
      ?>  
   </body>
</html>

Đầu ra mẫu phải như thế này -

Connected successfully
Table created successfully

Rất dễ dàng để bỏ một bảng MySQLi hiện có, nhưng bạn cần phải rất cẩn thận khi xóa bất kỳ bảng hiện có nào vì dữ liệu bị mất sẽ không được phục hồi sau khi xóa một bảng.

Cú pháp

Đây là cú pháp SQL chung để thả một bảng MySQLi -

DROP TABLE table_name ;

Bỏ bảng khỏi Command Prompt

Điều này chỉ cần thực hiện DROP TABLE Lệnh SQL tại dấu nhắc mysql>.

Thí dụ

Đây là một ví dụ, xóa tutorials_inf -

root@host# mysql -u root -p
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> DROP TABLE tutorials_inf
Query OK, 0 rows affected (0.8 sec)

mysql>

Bỏ bảng bằng PHP Script

Để thả một bảng hiện có vào bất kỳ cơ sở dữ liệu nào, bạn cần sử dụng hàm PHP mysqli_query(). Bạn sẽ chuyển đối số thứ hai của nó bằng lệnh SQL thích hợp để thả một bảng.

Thí dụ

<html>
   <head>
      <title>Dropping MySQLi Tables</title>
   </head>
   
   <body>
      <?php  
         $host = 'localhost:3306'; $user = 'root';  
         $pass = ''; $dbname = 'TUTORIALS';  
         $conn = mysqli_connect($host, $user, $pass,$dbname); if(!$conn) {  
            die('Could not connect: '.mysqli_connect_error());  
         }  
         echo 'Connected successfully<br/>';  
         $sql = "DROP TABLE tutorials_inf"; if(mysqli_query($conn, $sql)) { echo "Table is deleted successfully"; } else { echo "Table is not deleted successfully\n"; } mysqli_close($conn);  
      ?>  
   </body>
</html>

Đầu ra mẫu phải như thế này -

Connected successfully
Table is deleted successfully

Để chèn dữ liệu vào bảng MySQLi, bạn cần sử dụng SQL INSERT INTOchỉ huy. Bạn có thể chèn dữ liệu vào bảng MySQLi bằng cách sử dụng lời nhắc mysql> hoặc bằng cách sử dụng bất kỳ tập lệnh nào như PHP.

Cú pháp

Đây là cú pháp SQL chung của lệnh INSERT INTO để chèn dữ liệu vào bảng MySQLi:

INSERT INTO table_name 
   ( field1, field2,...fieldN )
   VALUES
   ( value1, value2,...valueN );

Để chèn kiểu dữ liệu chuỗi, bắt buộc phải giữ tất cả các giá trị thành dấu ngoặc kép hoặc dấu nháy đơn, ví dụ: - "value".

Chèn dữ liệu từ Command Prompt

Thao tác này sẽ sử dụng lệnh SQL INSERT INTO để chèn dữ liệu vào bảng hướng dẫn của MySQLi.

Thí dụ

Ví dụ sau sẽ tạo 3 bản ghi thành tutorials_tbl bàn -

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_inf 
   ->(id, name)
   ->VALUES
   ->(10, "John Poul");
Query OK, 1 row affected (0.01 sec)

NOTE- Xin lưu ý rằng tất cả các dấu mũi tên (->) không phải là một phần của lệnh SQL; chúng đang chỉ ra một dòng mới và chúng được tạo tự động bởi dấu nhắc MySQL trong khi nhấn phím enter mà không đưa ra dấu chấm phẩy ở cuối mỗi dòng của lệnh.

Chèn dữ liệu bằng PHP Script

Bạn có thể sử dụng cùng một lệnh SQL INSERT INTO vào hàm PHP mysqli_query() để chèn dữ liệu vào bảng MySQLi.

Thí dụ

Ví dụ này sẽ lấy ba tham số từ người dùng và sẽ chèn chúng vào bảng MySQLi -

<html>
   <head>
      <title>Add New Record in MySQLi Database</title>
      <link rel = "stylesheet" type = "text/css" href = "style.css">
   </head>
   
   <body>
      <div id = "main">
         <form action = "" method = "post">
            <label>Name :</label>
            <input type = "text" name = "name" id = "name" />
            <br />
            <br />
            <input type = "submit" value ="Submit" name = "submit"/>
            <br />
         </form>
      </div>
      
      <?php
         if(isset($_POST["submit"])){ $servername = "localhost:3306";
            $username = "root"; $password = "<Password here>";
            $dbname = "TUTORIALS"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname);

            // Check connection
            if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);
            } 
            $sql = "INSERT INTO tutorials_inf(name)VALUES ('".$_POST["name"]."')";

            if (mysqli_query($conn, $sql)) {
               echo "New record created successfully";
            } else {
               echo "Error: " . $sql . "" . mysqli_error($conn);
            }
            $conn->close();
         }
      ?>
   </body>
</html>

Đầu ra mẫu phải như thế này -

New record created successfully

SQL SELECTlệnh được sử dụng để tìm nạp dữ liệu từ cơ sở dữ liệu MySQLi. Bạn có thể sử dụng lệnh này tại dấu nhắc mysql> cũng như trong bất kỳ tập lệnh nào như PHP.

Cú pháp

Đây là cú pháp SQL chung của lệnh SELECT để tìm nạp dữ liệu từ bảng MySQLi -

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • Bạn có thể sử dụng một hoặc nhiều bảng được phân tách bằng dấu phẩy để bao gồm các điều kiện khác nhau bằng mệnh đề WHERE, nhưng mệnh đề WHERE là một phần tùy chọn của lệnh SELECT.

  • Bạn có thể tìm nạp một hoặc nhiều trường trong một lệnh SELECT.

  • Bạn có thể chỉ định dấu sao (*) thay cho các trường. Trong trường hợp này, SELECT sẽ trả về tất cả các trường.

  • Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.

  • Bạn có thể chỉ định độ lệch bằng cách sử dụng OFFSETtừ đó SELECT sẽ bắt đầu trả về các bản ghi. Theo mặc định bù đắp là 0.

  • Bạn có thể giới hạn số lần trả lại bằng cách sử dụng LIMIT thuộc tính.

Tìm nạp dữ liệu từ Command Prompt -

Điều này sẽ sử dụng lệnh SQL SELECT để tìm nạp dữ liệu từ bảng hướng dẫn của MySQLi

Thí dụ

Ví dụ sau sẽ trả về tất cả các bản ghi từ tutorials_inf bàn -

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | kit  |
|  3 | ram  |
+----+------+
3 rows in set (0.00 sec)

mysql>

Tìm nạp dữ liệu bằng PHP Script

Bạn có thể sử dụng cùng một lệnh SQL SELECT vào hàm PHP mysqli_query(). Hàm này được sử dụng để thực thi lệnh SQL và sau đó là một hàm PHP khácmysqli_fetch_assoc()có thể được sử dụng để tìm nạp tất cả dữ liệu đã chọn. Hàm này trả về hàng dưới dạng một mảng kết hợp, một mảng số hoặc cả hai. Hàm này trả về FALSE nếu không còn hàng nào nữa.

Dưới đây là một ví dụ đơn giản để tìm nạp các bản ghi từ tutorials_inf bàn.

Thí dụ

Hãy thử ví dụ sau để hiển thị tất cả các bản ghi từ bảng tutorial_inf.

<html>
   <head>
      <title>Selecting Table in MySQLi Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root'; $dbpass = '';
         $dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
         if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully<br>'; $sql = 'SELECT name FROM tutorials_inf';
         $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) {
            while($row = mysqli_fetch_assoc($result)) {
               echo "Name: " . $row["name"]. "<br>"; } } else { echo "0 results"; } mysqli_close($conn);
      ?>
   </body>
</html>

Nội dung của các hàng được gán cho biến $ row và các giá trị trong hàng sau đó được in ra.

NOTE - Luôn nhớ đặt dấu ngoặc nhọn khi bạn muốn chèn trực tiếp giá trị mảng vào chuỗi.

Đầu ra mẫu phải như thế này -

Connected successfully
Name: ram
Name: kit
Name: abc

Chúng tôi đã thấy SQL SELECTlệnh tìm nạp dữ liệu từ bảng MySQLi. Chúng ta có thể sử dụng một mệnh đề điều kiện được gọi làWHEREmệnh đề để lọc ra kết quả. Sử dụng mệnh đề WHERE, chúng ta có thể chỉ định tiêu chí lựa chọn để chọn các bản ghi được yêu cầu từ một bảng.

Cú pháp

Đây là cú pháp SQL chung của lệnh SELECT với mệnh đề WHERE để tìm nạp dữ liệu từ bảng MySQLi -

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • Bạn có thể sử dụng một hoặc nhiều bảng được phân tách bằng dấu phẩy để bao gồm các điều kiện khác nhau bằng mệnh đề WHERE, nhưng mệnh đề WHERE là một phần tùy chọn của lệnh SELECT.

  • Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.

  • Bạn có thể chỉ định nhiều hơn một điều kiện bằng cách sử dụng AND hoặc là OR các toán tử.

  • Mệnh đề WHERE có thể được sử dụng cùng với lệnh DELETE hoặc UPDATE SQL để chỉ định một điều kiện.

Các WHEREmệnh đề hoạt động giống như một điều kiện if trong bất kỳ ngôn ngữ lập trình nào. Mệnh đề này được sử dụng để so sánh giá trị đã cho với giá trị trường có sẵn trong bảng MySQLi. Nếu giá trị đã cho từ bên ngoài bằng với giá trị trường có sẵn trong bảng MySQLi, thì nó sẽ trả về hàng đó.

Đây là danh sách các toán tử, có thể được sử dụng với WHERE mệnh đề.

Giả sử trường A giữ 10 và trường B giữ 20, sau đó -

Nhà điều hành Sự miêu tả Thí dụ
= Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu có thì điều kiện trở thành true. (A = B) không đúng.
! = Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu các giá trị không bằng nhau thì điều kiện trở thành true. (A! = B) là đúng.
> Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A> B) là không đúng.
< Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A <B) là đúng.
> = Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A> = B) là không đúng.
<= Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A <= B) là đúng.

Mệnh đề WHERE rất hữu ích khi bạn muốn tìm nạp các hàng đã chọn từ bảng, đặc biệt là khi bạn sử dụng MySQLi Join. Tham gia được thảo luận trong một chương khác.

Một thực tế phổ biến là tìm kiếm hồ sơ bằng cách sử dụng Primary Key để thực hiện tìm kiếm nhanh chóng.

Nếu điều kiện đã cho không khớp với bất kỳ bản ghi nào trong bảng, thì truy vấn sẽ không trả về bất kỳ hàng nào.

Tìm nạp dữ liệu từ Command Prompt

Điều này sẽ sử dụng lệnh SQL SELECT với mệnh đề WHERE để tìm nạp dữ liệu đã chọn từ bảng hướng dẫn của MySQLi.

Thí dụ

Ví dụ sau sẽ trả về tất cả các bản ghi từ tutorials_inf bảng cho tên nào sai -

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql>SELECT * from tutorials_inf where name = 'sai';
+----+------+
| id | name |
+----+------+
|  1 | SAI  |
+----+------+
1 row in set (0.00 sec)

mysql>

Trừ khi thực hiện một LIKEso sánh trên một chuỗi, so sánh không phân biệt chữ hoa chữ thường. Bạn có thể làm cho tìm kiếm của mình phân biệt chữ hoa chữ thường bằngBINARY từ khóa như sau -

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf \WHERE BINARY name = 'sai';
Empty set (0.02 sec)

mysql>

Tìm nạp dữ liệu bằng PHP Script:

Bạn có thể sử dụng cùng một lệnh SQL SELECT với WHERE CLAUSE vào hàm PHP mysqli_query().

Thí dụ

Ví dụ sau sẽ trả về tất cả các bản ghi từ tutorials_inf bảng cho tên nào sai -

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root'; $dbpass = '';
   $dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully<br>'; $sql = 'SELECT * from tutorials_inf where name="sai"';
   $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) {
      while($row = mysqli_fetch_assoc($result)) {
         echo "Name: " . $row["name"]. "<br>"; } } else { echo "0 results"; } mysqli_close($conn);
?>

Đầu ra mẫu phải như thế này -

Connected successfully
Name: SAI

Có thể có một yêu cầu trong đó dữ liệu hiện có trong bảng MySQLi cần được sửa đổi. Bạn có thể làm như vậy bằng cách sử dụng SQLUPDATEchỉ huy. Điều này sẽ sửa đổi bất kỳ giá trị trường nào của bất kỳ bảng MySQLi nào.

Cú pháp

Đây là cú pháp SQL chung của lệnh UPDATE để sửa đổi dữ liệu vào bảng MySQLi -

UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
  • Bạn có thể cập nhật một hoặc nhiều trường hoàn toàn.

  • Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.

  • Bạn có thể cập nhật các giá trị trong một bảng tại một thời điểm.

Mệnh đề WHERE rất hữu ích khi bạn muốn cập nhật các hàng đã chọn trong bảng.

Cập nhật dữ liệu từ Command Prompt

Thao tác này sẽ sử dụng lệnh SQL UPDATE với mệnh đề WHERE để cập nhật dữ liệu đã chọn vào bảng hướng dẫn của MySQLi.

Thí dụ

Ví dụ sau sẽ cập nhật name trường cho một bản ghi có hướng dẫn_inf.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> UPDATE tutorials_inf 
   -> SET name = 'johar' 
   -> WHERE name = 'sai';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

Cập nhật dữ liệu bằng PHP Script

Bạn có thể sử dụng lệnh SQL UPDATE có hoặc không có WHERE CLAUSE vào hàm PHP mysqli_query(). Hàm này sẽ thực thi lệnh SQL theo cách tương tự như nó được thực thi tại dấu nhắc mysql>.

Thí dụ

Hãy thử ví dụ sau để cập nhật name trường cho một bản ghi.

<?php
   $dbhost = 'localhost:3306'; $dbuser = 'root';
   $dbpass = ''; $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname); if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = ' UPDATE tutorials_inf SET name="althamas" WHERE name="ram"'; if (mysqli_query($conn, $sql)) { echo "Record updated successfully"; } else { echo "Error updating record: " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

Đầu ra mẫu phải như thế này -

Connected successfully
Record updated successfully

Nếu bạn muốn xóa một bản ghi khỏi bất kỳ bảng MySQLi nào, thì bạn có thể sử dụng lệnh SQL DELETE FROM. Bạn có thể sử dụng lệnh này tại dấu nhắc mysql> cũng như trong bất kỳ tập lệnh nào như PHP.

Cú pháp

Đây là cú pháp SQL chung của lệnh DELETE để xóa dữ liệu khỏi bảng MySQLi -

DELETE FROM table_name [WHERE Clause]
  • Nếu mệnh đề WHERE không được chỉ định, thì tất cả các bản ghi sẽ bị xóa khỏi bảng MySQLi đã cho.

  • Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.

  • Bạn có thể xóa các bản ghi trong một bảng tại một thời điểm.

Mệnh đề WHERE rất hữu ích khi bạn muốn xóa các hàng đã chọn trong bảng.

Xóa dữ liệu khỏi Command Prompt

Thao tác này sẽ sử dụng lệnh SQL DELETE với mệnh đề WHERE để xóa dữ liệu đã chọn vào bảng hướng dẫn của MySQLi.

Thí dụ

Ví dụ sau sẽ xóa một bản ghi vào tutorial_inf có tên là johar.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> DELETE FROM tutorials_inf where name = 'johar';
Query OK, 1 row affected (0.23 sec)

mysql>

Xóa dữ liệu bằng PHP Script

Bạn có thể sử dụng lệnh SQL DELETE có hoặc không có WHERE CLAUSE vào hàm PHP mysqli_query(). Hàm này sẽ thực thi lệnh SQL theo cách tương tự như nó được thực thi tại dấu nhắc mysql>.

Thí dụ

Hãy thử ví dụ sau để xóa một bản ghi khỏi tutorial_inf có tên là althamas.

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root'; $dbpass = '';
   $dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully<br>'; $sql = ' DELETE FROM tutorials_inf WHERE name = "althamas"';
   
   if (mysqli_query($conn, $sql)) {
      echo "Record deleted successfully";
   } else {
      echo "Error deleting record: " . mysqli_error($conn); } mysqli_close($conn);
?>

Đầu ra mẫu phải như thế này-

Connected successfully
Record deleted successfully

Chúng tôi đã thấy SQL SELECTlệnh tìm nạp dữ liệu từ bảng MySQLi. Chúng ta cũng có thể sử dụng một mệnh đề điều kiện được gọi làWHERE mệnh đề để chọn các bản ghi cần thiết.

Mệnh đề WHERE với dấu bằng (=) hoạt động tốt khi chúng ta muốn so khớp chính xác. Giống như if "name = 'sai'". Nhưng có thể có một yêu cầu mà chúng tôi muốn lọc ra tất cả các kết quả mà tên phải chứa "johar". Điều này có thể được xử lý bằng cách sử dụng SQLLIKE mệnh đề cùng với mệnh đề WHERE.

Nếu mệnh đề SQL LIKE được sử dụng cùng với các ký tự%, thì nó sẽ hoạt động giống như ký tự meta (*) trong UNIX trong khi liệt kê tất cả các tệp hoặc thư mục tại dấu nhắc lệnh.

Không có ký tự%, mệnh đề LIKE rất giống với dấu bằng cùng với mệnh đề WHERE.

Cú pháp

Đây là cú pháp SQL chung của lệnh SELECT cùng với mệnh đề LIKE để tìm nạp dữ liệu từ bảng MySQLi -

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.

  • Bạn có thể sử dụng mệnh đề LIKE cùng với mệnh đề WHERE.

  • Bạn có thể sử dụng mệnh đề LIKE thay cho dấu bằng.

  • Khi LIKE được sử dụng cùng với dấu% thì nó sẽ hoạt động giống như tìm kiếm ký tự meta.

  • Bạn có thể chỉ định nhiều hơn một điều kiện bằng cách sử dụng AND hoặc là OR các toán tử.

  • Mệnh đề WHERE ... LIKE có thể được sử dụng cùng với lệnh DELETE hoặc UPDATE SQL để chỉ định một điều kiện.

Sử dụng mệnh đề LIKE tại Command Prompt

Điều này sẽ sử dụng lệnh SQL SELECT với mệnh đề WHERE ... LIKE để tìm nạp dữ liệu đã chọn từ bảng hướng dẫn của MySQLi.

Thí dụ

Ví dụ sau sẽ trả về tất cả các bản ghi từ tutorials_inf bảng mà tên tác giả kết thúc bằng johar -

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf 
   -> WHERE name LIKE '%johar';
+----+-------+
| id | name  |
+----+-------+
|  2 | johar |
+----+-------+
1 row in set (0.00 sec)

mysql>

Sử dụng mệnh đề LIKE bên trong PHP Script

Bạn có thể sử dụng cú pháp tương tự của mệnh đề WHERE ... LIKE vào hàm PHP mysqli_query(). Hàm này được sử dụng để thực thi lệnh SQL và sau đó là một hàm PHP khácmysqli_fetch_array() có thể được sử dụng để tìm nạp tất cả dữ liệu đã chọn nếu mệnh đề WHERE ... LIKE được sử dụng cùng với lệnh SELECT.

Nhưng nếu mệnh đề WHERE ... LIKE đang được sử dụng với lệnh DELETE hoặc UPDATE, thì không cần gọi thêm hàm PHP.

Thí dụ

Hãy thử ví dụ sau để trả về tất cả các bản ghi từ tutorials_inf bảng chứa tên johar -

<?php
   $dbhost = 'localhost:3306'; $dbuser = 'root';
   $dbpass = ''; $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname); if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = 'SELECT * FROM tutorials_inf WHERE name LIKE "%johar%"'; $result = mysqli_query($conn, $sql);
   $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
   
   printf ("%s \n",$row["name"]); mysqli_free_result($result);
   mysqli_close($conn);
?>

Đầu ra mẫu phải như thế này -

Connected successfully
johar

Chúng tôi đã thấy SQL SELECTlệnh tìm nạp dữ liệu từ bảng MySQLi. Khi bạn chọn các hàng, máy chủ MySQLi có thể trả lại chúng theo bất kỳ thứ tự nào, trừ khi bạn hướng dẫn khác bằng cách nói cách sắp xếp kết quả. Nhưng bạn sắp xếp tập hợp kết quả bằng cách thêm mệnh đề ORDER BY có tên cột hoặc các cột bạn muốn sắp xếp theo.

Cú pháp

Đây là cú pháp SQL chung của lệnh SELECT cùng với mệnh đề ORDER BY để sắp xếp dữ liệu từ bảng MySQL -

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  • Bạn có thể sắp xếp kết quả trả về trên bất kỳ trường nào miễn là trường đó được liệt kê ra.

  • Bạn có thể sắp xếp kết quả trên nhiều trường.

  • Bạn có thể sử dụng từ khóa ASC hoặc DESC để nhận kết quả theo thứ tự tăng dần hoặc giảm dần. Theo mặc định, đó là thứ tự tăng dần.

  • Bạn có thể sử dụng mệnh đề WHERE ... LIKE theo cách thông thường để đặt điều kiện.

Sử dụng mệnh đề ORDER BY tại Command Prompt

Điều này sẽ sử dụng lệnh SQL SELECT với mệnh đề ORDER BY để tìm nạp dữ liệu từ bảng hướng dẫn của MySQLi.

Thí dụ

Hãy thử ví dụ sau, kết quả trả về theo thứ tự giảm dần.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf ORDER BY id desc;
+----+-------+
| id | name  |
+----+-------+
|  4 | ram   |
|  3 | raghu |
|  2 | johar |
|  1 | sai   |
+----+-------+
4 rows in set (0.00 sec)

mysql>

Xác minh tất cả các id được liệt kê theo thứ tự giảm dần.

Sử dụng mệnh đề ORDER BY bên trong PHP Script

Bạn có thể sử dụng cú pháp tương tự của mệnh đề ORDER BY vào hàm PHP mysqli_query(). Hàm này được sử dụng để thực thi lệnh SQL và sau đó là một hàm PHP khácmysqli_fetch_array() có thể được sử dụng để tìm nạp tất cả dữ liệu đã chọn.

Thí dụ

Hãy thử ví dụ sau, nó trả về kết quả theo thứ tự giảm dần của tác giả hướng dẫn.

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root'; $dbpass = '';
   $dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully</br>'; $sql = 'SELECT * from tutorials_inf ORDER BY id desc';
   
   if($result = mysqli_query($conn, $sql)){ if(mysqli_num_rows($result) > 0){
         echo "<table>";
         echo "<tr>";
         echo "<th>id</th>";
         echo "<th>name</th>";
         echo "</tr>";
         
         while($row = mysqli_fetch_array($result)){
            echo "<tr>";
            echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['name'] . "</td>";
            echo "</tr>";
         }
         echo "</table>";
         mysqli_free_result($result); } else { echo "No records matching your query were found."; } } else { echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn); } mysqli_close($conn);
?>

Đầu ra mẫu phải như thế này -

Connected successfully
id	name
4	ram
3	raghu
2	johar
1	sai

Cho đến nay, chúng tôi chỉ nhận được dữ liệu từ một bảng tại một thời điểm. Điều này là tốt cho các thao tác đơn giản, nhưng trong hầu hết việc sử dụng MySQL trong thế giới thực, bạn thường sẽ cần lấy dữ liệu từ nhiều bảng trong một truy vấn duy nhất.

Bạn có thể sử dụng nhiều bảng trong một truy vấn SQL của mình. Hành động tham gia trong MySQLi đề cập đến việc đập hai hoặc nhiều bảng thành một bảng duy nhất.

Bạn có thể sử dụng JOINS trong các câu lệnh SELECT, UPDATE và DELETE để tham gia các bảng MySQLi. Chúng ta sẽ thấy một ví dụ về LEFT JOIN cũng khác với MySQLi JOIN đơn giản.

Sử dụng Joins tại Command Prompt

Giả sử chúng ta có hai bảng tutorials_bkstutorials_inf, trong TUTORIALS. Dưới đây là một danh sách đầy đủ -

Thí dụ

Hãy thử các ví dụ sau:

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * FROM tcount_bks;
+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
+----+---------+
5 rows in set (0.00 sec)

mysql> SELECT * from tutorials_inf;
+----+-------+
| id | name  |
+----+-------+
|  1 | sai   |
|  2 | johar |
|  3 | raghu |
|  4 | ram   |
+----+-------+
4 rows in set (0.00 sec)

mysql>

Bây giờ chúng ta có thể viết một truy vấn SQL để nối hai bảng này. Truy vấn này sẽ chọn tất cả các tên từ bảngtutorials_inf và sẽ nhận số lượng hướng dẫn tương ứng từtutorials_bks.

mysql> SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id;
+----+-------+----+
| id | name  | id |
+----+-------+----+
|  1 | sai   |  1 |
|  2 | johar |  2 |
|  3 | raghu |  3 |
|  4 | ram   |  4 |
+----+-------+----+
4 rows in set (0.00 sec)
mysql>

Trong bảng tutorial_bks, chúng tôi có 5 bản ghi nhưng trong ví dụ trên, nó lọc và chỉ cung cấp 4 bản ghi id theo mỗi truy vấn

Sử dụng Joins trong PHP Script

Bạn có thể sử dụng bất kỳ truy vấn SQL nào được đề cập ở trên trong tập lệnh PHP. Bạn chỉ cần chuyển truy vấn SQL vào hàm PHPmysqli_query() và sau đó bạn sẽ tìm nạp kết quả theo cách thông thường.

Thí dụ

Hãy thử ví dụ sau:

<?php
   $dbhost = 'localhost:3306'; $dbuser = 'root';
   $dbpass = ''; $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname); if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully</br>';
   $sql = 'SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id'; if($result = mysqli_query($conn, $sql)) {
      if(mysqli_num_rows($result) > 0) { echo "<table>"; echo "<tr>"; echo "<th>id</th>"; echo "<th>name</th>"; echo "<th>id</th>"; echo "</tr>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['id'] . "</td>";
            echo "</tr>";
         }
         echo "</table>";
         mysqli_free_result($result); } else { echo "No records matching your query were found."; } } else { echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn); } mysqli_close($conn);
?>

Đầu ra mẫu phải như thế này -

Connected successfully
id	name	id
1	sai	1
2	johar	2
3	raghu	3
4	ram	4

MySQL THAM GIA TRÁI

Một phép nối trái MySQLi khác với một phép nối đơn giản. MySQLi LEFT JOIN cung cấp thêm sự cân nhắc cho bảng ở bên trái.

Nếu tôi thực hiện THAM GIA TRÁI, tôi nhận được tất cả các bản ghi khớp theo cùng một cách và TRONG BỔ SUNG, tôi nhận được thêm một bản ghi cho mỗi bản ghi chưa khớp trong bảng bên trái của phép nối - do đó đảm bảo (trong ví dụ của tôi) rằng mọi tên đều nhận được đề cập đến -

Thí dụ

Hãy thử ví dụ sau để hiểu LEFT JOIN -

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql>SELECT a.id, a.name,b.id FROM tutorials_inf a LEFT JOIN tutorials_bks b ON a.id = b.id;

Bạn sẽ cần thực hành nhiều hơn để làm quen với JOINS. Đây là một khái niệm hơi phức tạp trong MySQL / SQL và sẽ trở nên rõ ràng hơn khi làm các ví dụ thực tế.

Chúng tôi đã thấy SQL SELECT lệnh cùng với WHERE mệnh đề tìm nạp dữ liệu từ bảng MySQLi, nhưng khi chúng tôi cố gắng đưa ra một điều kiện, so sánh giá trị trường hoặc cột với NULL, nó không hoạt động bình thường.

Để xử lý tình huống như vậy MySQLi cung cấp ba toán tử

  • IS NULL - toán tử trả về true nếu giá trị cột là NULL.

  • IS NOT NULL - toán tử trả về true nếu giá trị cột không phải là NULL.

  • <=> - toán tử so sánh các giá trị (không giống như toán tử =) đúng ngay cả với hai giá trị NULL.

Các điều kiện liên quan đến NULL là đặc biệt. Bạn không thể sử dụng = NULL hoặc! = NULL để tìm giá trị NULL trong cột. Những so sánh như vậy luôn luôn thất bại vì không thể biết chúng có đúng hay không. Thậm chí NULL = NULL không thành công.

Để tìm kiếm các cột có hoặc không phải là NULL, hãy sử dụng IS NULL hoặc IS NOT NULL.

Sử dụng giá trị NULL tại Dấu nhắc lệnh

Giả sử một bảng tutorials_bks trong cơ sở dữ liệu TUTORIALS và nó chứa hai cột id name, trong đó tên NULL chỉ ra rằng giá trị là không xác định -

Thí dụ

Hãy thử các ví dụ sau:

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
|  6 |         |
|  7 |         |
|  8 |         |
|  9 | NULL    |
| 10 | NULL    |
| 11 | NULL    |
+----+---------+
11 rows in set (0.00 sec)

mysql>

Để tìm các bản ghi mà cột tên có hoặc không phải là NULL, các truy vấn phải được viết như thế này:

mysql> SELECT * FROM tutorials_bks WHERE book = "null";
+----+------+
| id | book |
+----+------+
|  9 | NULL |
| 10 | NULL |
| 11 | NULL |
+----+------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM tutorials_bks WHERE book ! = "null";
+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
|  6 |         |
|  7 |         |
|  8 |         |
+----+---------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM tutorials_bks WHERE book = "";
+----+------+
| id | book |
+----+------+
|  6 |      |
|  7 |      |
|  8 |      |
+----+------+
3 rows in set (0.01 sec)

Xử lý giá trị NULL trong PHP Script

Bạn có thể sử dụng điều kiện if ... else để chuẩn bị truy vấn dựa trên giá trị NULL.

Thí dụ

Ví dụ sau lấy tutorial_count từ bên ngoài và sau đó so sánh nó với giá trị có sẵn trong bảng.

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   if( isset($tutorial_count )) { $sql = 'SELECT tutorial_author, tutorial_count FROM  tcount_tbl
         WHERE tutorial_count = $tutorial_count'; } else { $sql = 'SELECT tutorial_author, tutorial_count
         FROM  tcount_tbl WHERE tutorial_count IS $tutorial_count'; } mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Author:{$row['tutorial_author']}  <br> ".
         "Count: {$row['tutorial_count']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

Bạn đã thấy mẫu MySQLi khớp với LIKE ...%. MySQLi hỗ trợ một loại hoạt động so khớp mẫu khác dựa trên các biểu thức chính quy vàREGEXPnhà điều hành. Nếu bạn biết về PHP hoặc PERL, thì bạn sẽ hiểu rất đơn giản vì đối sánh này rất giống với các biểu thức chính quy trong kịch bản.

Sau đây là bảng mẫu, có thể được sử dụng cùng với REGEXP nhà điều hành.

Mẫu Những gì mô hình phù hợp
^ Bắt đầu chuỗi
$ Kết thúc chuỗi
. Mọi ký tự đơn lẻ
[...] Bất kỳ ký tự nào được liệt kê giữa dấu ngoặc vuông
[^ ...] Bất kỳ ký tự nào không được liệt kê giữa dấu ngoặc vuông
p1 | p2 | p3 Sự luân phiên; khớp với bất kỳ mẫu p1, p2 hoặc p3 nào
* Không có hoặc nhiều trường hợp của phần tử trước
+ Một hoặc nhiều trường hợp của phần tử trước
{n} n trường hợp của phần tử trước
{m, n} m đến n trường hợp của phần tử trước

Ví dụ

Bây giờ, dựa trên bảng trên, bạn có thể thiết bị nhiều loại truy vấn SQL khác nhau để đáp ứng yêu cầu của bạn. Đây, tôi liệt kê một số để bạn hiểu. Hãy xem xét chúng ta có một bảng được gọi là tutorial_inf và nó có một trường tên là -

Truy vấn để tìm tất cả các tên bắt đầu bằng 'sa'

mysql>  SELECT * FROM tutorials_inf WHERE name REGEXP '^sa';

Đầu ra mẫu phải như thế này -

+----+------+
| id | name |
+----+------+
|  1 | sai  |
+----+------+
1 row in set (0.00 sec)

Truy vấn tìm tất cả các tên kết thúc bằng 'ai'

mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'ai$';

Đầu ra mẫu phải như thế này -

+----+------+
| id | name |
+----+------+
|  1 | sai  |
+----+------+
1 row in set (0.00 sec)

Truy vấn để tìm tất cả các tên có chứa 'a'

mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'a';

Đầu ra mẫu phải như thế này -

+----+-------+
| id | name  |
+----+-------+
|  1 | sai   |
|  3 | ram   |
|  4 | johar |
+----+-------+
3 rows in set (0.00 sec)

Truy vấn để tìm tất cả các tên bắt đầu bằng một nguyên âm

mysql>  SELECT * FROM tutorials_inf WHERE name REGEXP '^[aeiou]';

Giao dịch là một nhóm tuần tự các thao tác thao tác cơ sở dữ liệu, được thực hiện như thể nó là một đơn vị công việc duy nhất. Nói cách khác, một giao dịch sẽ không bao giờ hoàn tất trừ khi từng hoạt động riêng lẻ trong nhóm thành công. Nếu bất kỳ thao tác nào trong giao dịch không thành công, toàn bộ giao dịch sẽ thất bại.

Trên thực tế, bạn sẽ kết hợp nhiều truy vấn SQL thành một nhóm và bạn sẽ thực hiện tất cả chúng cùng nhau như một phần của giao dịch.

Thuộc tính của giao dịch

Các giao dịch có bốn thuộc tính tiêu chuẩn sau, thường được gọi bằng từ viết tắt ACID -

  • Atomicity- đảm bảo rằng tất cả các hoạt động trong đơn vị công việc được hoàn thành thành công; nếu không, giao dịch bị hủy bỏ tại điểm không thành công và các hoạt động trước đó được khôi phục lại trạng thái cũ của chúng.

  • Consistency - đảm bảo rằng cơ sở dữ liệu thay đổi đúng các trạng thái khi giao dịch được cam kết thành công.

  • Isolation - cho phép các giao dịch hoạt động độc lập và minh bạch với nhau.

  • Durability - đảm bảo rằng kết quả hoặc hiệu lực của một giao dịch đã cam kết vẫn tồn tại trong trường hợp hệ thống bị lỗi.

Trong MySQL, các giao dịch bắt đầu bằng câu lệnh BEGIN WORK và kết thúc bằng câu lệnh COMMIT hoặc ROLLBACK. Các lệnh SQLi giữa các câu lệnh bắt đầu và kết thúc tạo thành phần lớn của giao dịch.

CAM KẾT và ROLLBACK

Hai từ khóa này CommitRollback chủ yếu được sử dụng cho các Giao dịch MySQL.

  • Khi một giao dịch thành công được hoàn tất, lệnh COMMIT sẽ được phát hành để các thay đổi đối với tất cả các bảng có liên quan sẽ có hiệu lực.

  • Nếu xảy ra lỗi, lệnh ROLLBACK sẽ được đưa ra để đưa mọi bảng được tham chiếu trong giao dịch về trạng thái trước đó của nó.

Bạn có thể kiểm soát hành vi của một giao dịch bằng cách đặt biến phiên được gọi là AUTOCOMMIT. Nếu AUTOCOMMIT được đặt thành 1 (mặc định), thì mỗi câu lệnh SQL (trong một giao dịch hoặc không) được coi là một giao dịch hoàn chỉnh và được cam kết theo mặc định khi nó kết thúc. Khi AUTOCOMMIT được đặt thành 0, bằng cách đưa ra lệnh SET AUTOCOMMIT = 0, chuỗi các câu lệnh tiếp theo hoạt động giống như một giao dịch và không có hoạt động nào được thực hiện cho đến khi một câu lệnh COMMIT rõ ràng được đưa ra.

Bạn có thể thực thi các lệnh SQL này trong PHP bằng cách sử dụng mysqli_query() chức năng.

Ví dụ chung về giao dịch

Chuỗi sự kiện này độc lập với ngôn ngữ lập trình được sử dụng; đường dẫn logic có thể được tạo bằng bất kỳ ngôn ngữ nào bạn sử dụng để tạo ứng dụng của mình.

Bạn có thể thực thi các lệnh SQL này trong PHP bằng cách sử dụng mysqli_query() chức năng.

  • Bắt đầu giao dịch bằng cách ra lệnh SQL BEGIN WORK.

  • Đưa ra một hoặc nhiều lệnh SQL như SELECT, INSERT, UPDATE hoặc DELETE.

  • Kiểm tra nếu không có lỗi và mọi thứ theo yêu cầu của bạn.

  • Nếu có bất kỳ lỗi nào, hãy sử dụng lệnh ROLLBACK, nếu không, hãy sử dụng lệnh COMMIT.

Các loại bảng an toàn giao dịch trong MySQLi

Bạn không thể sử dụng các giao dịch trực tiếp, bạn có thể nhưng chúng sẽ không an toàn và đảm bảo. Nếu bạn định sử dụng các giao dịch trong lập trình MySQLi của mình, thì bạn cần tạo các bảng của mình theo một cách đặc biệt. Có nhiều loại bảng hỗ trợ giao dịch nhưng phổ biến nhất làInnoDB.

Hỗ trợ cho các bảng InnoDB yêu cầu một tham số biên dịch cụ thể khi biên dịch MySQLi từ nguồn. Nếu phiên bản MySQLi của bạn không có hỗ trợ InnoDB, hãy yêu cầu Nhà cung cấp dịch vụ Internet của bạn xây dựng phiên bản MySQLi có hỗ trợ các loại bảng InnoDB hoặc tải xuống và cài đặt bản phân phối nhị phân MySQL-Max cho Windows hoặc Linux / UNIX và làm việc với loại bảng trong một môi trường phát triển.

Nếu cài đặt MySQLi của bạn hỗ trợ bảng InnoDB, chỉ cần thêm TYPE = InnoDBđịnh nghĩa cho câu lệnh tạo bảng. Ví dụ: đoạn mã sau tạo một bảng InnoDB được gọi là tutorial_innodb -

root@host# mysql -u root -p;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_innodb
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)

Kiểm tra liên kết sau để biết thêm về - InnoDB

Bạn có thể sử dụng các loại bảng khác như GEMINI hoặc là BDB, nhưng nó phụ thuộc vào cài đặt của bạn nếu nó hỗ trợ hai loại này.

MySQLi ALTER lệnh rất hữu ích khi bạn muốn thay đổi tên của bảng, bất kỳ trường nào trong bảng hoặc nếu bạn muốn thêm hoặc xóa một cột hiện có trong bảng.

Hãy bắt đầu với việc tạo một bảng có tên tutorials_alter.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_alter
   -> (
   -> i INT,
   -> c CHAR(1)
   -> );
Query OK, 0 rows affected (0.27 sec)

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | YES  |     | NULL    |       |
| c     | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Bỏ, thêm hoặc định vị lại cột

Giả sử bạn muốn bỏ một cột hiện có i từ bảng MySQLi phía trên thì bạn sẽ sử dụng DROP mệnh đề cùng với ALTER lệnh như sau:

mysql> ALTER TABLE tutorials_alter  DROP i;

A DROP sẽ không hoạt động nếu cột là cột duy nhất còn lại trong bảng.

Để thêm một cột, hãy sử dụng ADD và chỉ định định nghĩa cột. Câu lệnh sau khôi phụci cột của tutorial_alter -

mysql> ALTER TABLE tutorials_alter ADD i INT;

Sau khi phát hành câu lệnh này, testalter sẽ chứa hai cột giống như khi bạn tạo bảng lần đầu tiên, nhưng sẽ không có cấu trúc hoàn toàn giống nhau. Đó là vì các cột mới được thêm vào cuối bảng theo mặc định. Và thậm chí lài ban đầu là cột đầu tiên trong mytbl, bây giờ nó là cột cuối cùng.

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)

Để chỉ ra rằng bạn muốn một cột ở một vị trí cụ thể trong bảng, hãy sử dụng FIRST để làm cho nó trở thành cột đầu tiên hoặc AFTER col_name để chỉ ra rằng cột mới nên được đặt sau col_name. Hãy thử các câu lệnh ALTER TABLE sau, sử dụng SHOW COLUMNS sau mỗi câu để xem mỗi câu có tác dụng gì -

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

Các chỉ định FIRST và SAU chỉ hoạt động với mệnh đề ADD. Điều này có nghĩa là nếu bạn muốn đặt lại vị trí của một cột hiện có trong bảng, trước tiên bạn phải XÓA nó và sau đó THÊM nó ở vị trí mới.

Thay đổi định nghĩa hoặc tên cột

Để thay đổi định nghĩa của cột, hãy sử dụng MODIFY hoặc là CHANGEmệnh đề cùng với lệnh ALTER. Ví dụ: để thay đổi cộtc từ CHAR (1) đến CHAR (10), thực hiện điều này -

mysql> ALTER TABLE tutorials_alter MODIFY c CHAR(10);

Với CHANGE, cú pháp có một chút khác biệt. Sau từ khóa CHANGE, bạn đặt tên cho cột mà bạn muốn thay đổi, sau đó chỉ định định nghĩa mới, bao gồm tên mới. Hãy thử ví dụ sau:

mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;

Nếu bây giờ bạn sử dụng CHANGE để chuyển đổi j từ BIGINT trở lại INT mà không thay đổi tên cột, câu lệnh sẽ như mong đợi -

mysql> ALTER TABLE tutorials_alter CHANGE j j INT;

Ảnh hưởng của ALTER TABLE đối với các thuộc tính giá trị rỗng và giá trị mặc định -

Khi bạn SỬA ĐỔI hoặc THAY ĐỔI một cột, bạn cũng có thể chỉ định xem cột đó có thể chứa giá trị NULL hay không và giá trị mặc định của nó là gì. Trên thực tế, nếu bạn không làm điều này, MySQLi sẽ tự động gán giá trị cho các thuộc tính này.

Đây là ví dụ, trong đó cột NOT NULL sẽ có giá trị 100 theo mặc định.

mysql> ALTER TABLE tutorials_alter 
   -> MODIFY j BIGINT NOT NULL DEFAULT 100;

Nếu bạn không sử dụng lệnh trên, thì MySQLi sẽ điền giá trị NULL vào tất cả các cột.

Thay đổi giá trị mặc định của cột

Bạn có thể thay đổi giá trị mặc định cho bất kỳ cột nào bằng lệnh ALTER. Hãy thử ví dụ sau.

mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | 1000    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Bạn có thể xóa ràng buộc mặc định khỏi bất kỳ cột nào bằng cách sử dụng mệnh đề DROP cùng với lệnh ALTER.

mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Thay đổi loại bảng

Bạn có thể sử dụng một loại bảng bằng cách sử dụng TYPE mệnh đề cùng với lệnh ALTER.

Để tìm ra loại bảng hiện tại, hãy sử dụng câu lệnh SHOW TABLE STATUS.

mysql>  SHOW TABLE STATUS LIKE 'tutorials_alter'\G
*************************** 1. row ***************************
           Name: tutorials_alter
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2017-02-17 11:30:29
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Đổi tên bảng

Để đổi tên bảng, hãy sử dụng RENAMEtùy chọn của câu lệnh ALTER TABLE. Hãy thử ví dụ sau để đổi tên hướng dẫn_alter thành hướng dẫn_bks.

mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;

Bạn có thể sử dụng lệnh ALTER để tạo và thả INDEX trên tệp MySQL. Chúng ta sẽ thấy tính năng này trong chương tiếp theo.

Chỉ mục cơ sở dữ liệu là một cấu trúc dữ liệu cải thiện tốc độ của các hoạt động trong một bảng. Chỉ mục có thể được tạo bằng cách sử dụng một hoặc nhiều cột, cung cấp cơ sở cho cả việc tra cứu ngẫu nhiên nhanh chóng và sắp xếp thứ tự truy cập bản ghi hiệu quả.

Trong khi tạo chỉ mục, cần xem xét các cột sẽ được sử dụng để thực hiện các truy vấn SQL và tạo một hoặc nhiều chỉ mục trên các cột đó là gì.

Trên thực tế, chỉ mục cũng là loại bảng, giữ khóa chính hoặc trường chỉ mục và một con trỏ đến mỗi bản ghi trong bảng thực tế.

Người dùng không thể nhìn thấy các chỉ mục, chúng chỉ được sử dụng để tăng tốc các truy vấn và sẽ được Công cụ Tìm kiếm Cơ sở dữ liệu sử dụng để định vị các bản ghi rất nhanh.

Các câu lệnh INSERT và UPDATE mất nhiều thời gian hơn trên các bảng có chỉ mục khi các câu lệnh SELECT trở nên nhanh chóng trên các bảng đó. Lý do là trong khi thực hiện chèn hoặc cập nhật, cơ sở dữ liệu cũng cần phải chèn hoặc cập nhật các giá trị chỉ mục.

Chỉ mục đơn giản và duy nhất

Bạn có thể tạo một chỉ mục duy nhất trên một bảng. Chỉ mục duy nhất có nghĩa là hai hàng không thể có cùng giá trị chỉ mục. Đây là cú pháp để tạo Chỉ mục trên bảng.

CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);

Bạn có thể sử dụng một hoặc nhiều cột để tạo chỉ mục. Ví dụ: chúng tôi có thể tạo chỉ mục trên tutorial_inf bằng cách sử dụng NAME_INDEX.

CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf(name);

Bạn có thể tạo một chỉ mục đơn giản trên một bảng. Chỉ cần bỏ qua từ khóa UNIQUE khỏi truy vấn để tạo chỉ mục đơn giản. Chỉ mục đơn giản cho phép các giá trị trùng lặp trong một bảng.

Nếu bạn muốn lập chỉ mục các giá trị trong một cột theo thứ tự giảm dần, bạn có thể thêm từ dành riêng DESC sau tên cột.

mysql> CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf (name DESC);

Lệnh ALTER để thêm và thả INDEX

Có bốn loại câu lệnh để thêm chỉ mục vào bảng:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) - Câu lệnh này thêm một PRIMARY KEY, có nghĩa là các giá trị được lập chỉ mục phải là duy nhất và không được NULL.

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) - Câu lệnh này tạo một chỉ mục mà các giá trị phải là duy nhất (ngoại trừ giá trị NULL, có thể xuất hiện nhiều lần).

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list) - Điều này thêm một chỉ mục thông thường trong đó bất kỳ giá trị nào có thể xuất hiện nhiều hơn một lần.

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) - Điều này tạo ra một chỉ mục FULLTEXT đặc biệt được sử dụng cho mục đích tìm kiếm văn bản.

Đây là ví dụ để thêm chỉ mục trong một bảng hiện có.

mysql> ALTER TABLE tutorials_inf ADD INDEX (id);

Bạn có thể bỏ bất kỳ INDEX nào bằng cách sử dụng mệnh đề DROP cùng với lệnh ALTER. Hãy thử ví dụ sau để giảm chỉ mục được tạo ở trên.

mysql> ALTER TABLE tutorials_inf DROP INDEX (c);

Bạn có thể bỏ bất kỳ INDEX nào bằng cách sử dụng mệnh đề DROP cùng với lệnh ALTER. Hãy thử ví dụ sau để giảm chỉ mục được tạo ở trên.

ALTER Lệnh để thêm và thả PRIMARY KEY

Bạn cũng có thể thêm khóa chính theo cách tương tự. Nhưng hãy đảm bảo Khóa chính hoạt động trên các cột KHÔNG ĐẦY ĐỦ.

Đây là ví dụ để thêm khóa chính trong bảng hiện có. Điều này sẽ làm cho một cột KHÔNG ĐẦY ĐỦ trước và sau đó thêm nó làm khóa chính.

mysql>  ALTER TABLE tutorials_inf MODIFY id INT NOT NULL;
mysql> ALTER TABLE tutorials_inf ADD PRIMARY KEY (id);

Bạn có thể sử dụng lệnh ALTER để bỏ khóa chính như sau:

mysql> ALTER TABLE tutorials_inf DROP PRIMARY KEY;

Để bỏ một chỉ mục không phải là TỪ KHÓA CHÍNH, bạn phải chỉ định tên chỉ mục.

Hiển thị thông tin INDEX

Bạn có thể sử dụng lệnh SHOW INDEX để liệt kê tất cả các chỉ mục được liên kết với một bảng. Đầu ra định dạng dọc (được chỉ định bởi \ G) thường hữu ích với câu lệnh này, để tránh dòng dài dòng -

Hãy thử ví dụ sau

mysql> SHOW INDEX FROM table_name\G
........

Các bảng tạm thời có thể rất hữu ích trong một số trường hợp để giữ dữ liệu tạm thời. Điều quan trọng nhất cần biết đối với các bảng tạm thời là chúng sẽ bị xóa khi phiên khách hiện tại kết thúc.

Như đã nêu trước đó, các bảng tạm thời sẽ chỉ tồn tại miễn là phiên còn tồn tại. Nếu bạn chạy mã trong tập lệnh PHP, bảng tạm thời sẽ tự động bị hủy khi tập lệnh kết thúc thực thi. Nếu bạn được kết nối với máy chủ cơ sở dữ liệu MySQL thông qua chương trình khách MySQLi, thì bảng tạm thời sẽ tồn tại cho đến khi bạn đóng máy khách hoặc hủy bảng theo cách thủ công.

Thí dụ

Đây là một ví dụ cho bạn thấy cách sử dụng bảng tạm thời. Mã tương tự có thể được sử dụng trong các tập lệnh PHP bằngmysqli_query() chức năng.

mysql> CREATE TEMPORARY TABLE SalesSummary (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
   -> );
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SalesSummary
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

Khi bạn đưa ra lệnh SHOW TABLES, thì bảng tạm thời của bạn sẽ không được liệt kê trong danh sách. Bây giờ, nếu bạn đăng xuất khỏi phiên MySQLi và sau đó bạn sẽ đưa ra lệnh SELECT, thì bạn sẽ không tìm thấy dữ liệu nào có sẵn trong cơ sở dữ liệu. Ngay cả bảng tạm thời của bạn cũng sẽ không tồn tại.

Bỏ bảng tạm thời

Theo mặc định, tất cả các bảng tạm thời sẽ bị MySQLi xóa khi kết nối cơ sở dữ liệu của bạn bị chấm dứt. Tuy nhiên, nếu bạn muốn xóa chúng ở giữa, thì bạn làm như vậy bằng cách phát lệnh DROP TABLE.

Sau đây là ví dụ về việc bỏ một bảng tạm thời -

mysql> DROP TABLE SalesSummary;
mysql>  SELECT * FROM SalesSummary;
ERROR 1146: Table 'TUTORIALS.SalesSummary' doesn't exist

Có thể có tình huống khi bạn cần một bản sao chính xác của một bảng và TẠO BẢNG ... CHỌN không phù hợp với mục đích của bạn vì bản sao phải bao gồm các chỉ mục, giá trị mặc định, v.v. giống nhau.

Bạn có thể xử lý tình huống này bằng các bước sau:

  • Sử dụng SHOW CREATE TABLE để nhận câu lệnh CREATE TABLE xác định cấu trúc, chỉ mục và tất cả của bảng nguồn.

  • Sửa đổi câu lệnh để thay đổi tên bảng thành tên của bảng sao chép và thực hiện câu lệnh. Bằng cách này, bạn sẽ có bảng sao chép chính xác.

  • Theo tùy chọn, nếu bạn cũng cần sao chép nội dung bảng, hãy phát hành câu lệnh INSERT INTO ... SELECT.

Thí dụ

Hãy thử ví dụ sau để tạo bảng sao chép cho tutorials_inf.

Bước 1

Nhận cấu trúc hoàn chỉnh về bảng.

mysql> SHOW CREATE TABLE tutorials_inf \G;
*************************** 1. row ***************************
       Table: tutorials_inf
Create Table: CREATE TABLE `tutorials_inf` (
   `id` int(11) NOT NULL,
   `name` varchar(20) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `AUTHOR_INDEX` (`name`),
   UNIQUE KEY `NAME_INDEX` (`name`),
   KEY `id` (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
1 row in set (0.05 sec)

ERROR: No query specified

Bước 2

Đổi tên bảng này và tạo một bảng khác.

mysql> CREATE TABLE tutorials_clone(
   -> id int(11) NOT NULL,
   -> name varchar(20) NOT NULL,
   -> PRIMARY KEY (id),
   > UNIQUE KEY AUTHOR_INDEX (name),
   -> UNIQUE KEY NAME_INDEX (name),
   ->  KEY id (id));
Query OK, 0 rows affected (1.80 sec)

Bước 3

Sau khi thực hiện bước 2, bạn sẽ tạo một bảng sao chép trong cơ sở dữ liệu của mình. Nếu bạn muốn sao chép dữ liệu từ bảng cũ thì bạn có thể thực hiện bằng cách sử dụng câu lệnh INSERT INTO ... SELECT.

mysql> INSERT INTO tutorials_clone(id,name) SELECT id,name from tutorials_inf;
Query OK, 4 rows affected (0.19 sec)
Records: 4  Duplicates: 0  Warnings: 0

Cuối cùng, bạn sẽ có bảng sao chép chính xác như bạn muốn.

Có ba thông tin mà bạn muốn có từ MySQLi.

  • Information about the result of queries - Điều này bao gồm số lượng bản ghi bị ảnh hưởng bởi bất kỳ câu lệnh SELECT, UPDATE hoặc DELETE nào.

  • Information about tables and databases - Điều này bao gồm thông tin liên quan đến cấu trúc của bảng và cơ sở dữ liệu.

  • Information about the MySQLi server - Điều này bao gồm trạng thái hiện tại của máy chủ cơ sở dữ liệu, số phiên bản, v.v.

Rất dễ dàng nhận được tất cả những thông tin này tại lời nhắc mysqli, nhưng trong khi sử dụng API PERL hoặc PHP, chúng ta cần gọi các API khác nhau một cách rõ ràng để có được tất cả những thông tin này. Phần sau đây sẽ chỉ cho bạn cách lấy thông tin này.

Lấy số lượng hàng bị ảnh hưởng bởi một truy vấn

Ví dụ về PERL

Trong tập lệnh DBI, số hàng bị ảnh hưởng được trả về bởi do () hoặc bởi execute (), tùy thuộc vào cách bạn thực hiện truy vấn -

# Method 1
# execute $query using do( ) my $count = $dbh->do ($query);
# report 0 rows if an error occurred
printf "%d rows were affected\n", (defined ($count) ? $count : 0);

# Method 2
# execute query using prepare( ) plus execute( )
my $sth = $dbh->prepare ($query); my $count = $sth->execute ( ); printf "%d rows were affected\n", (defined ($count) ? $count : 0);

Ví dụ PHP

Trong PHP, hãy gọi hàm mysqli_affected_rows () để tìm xem truy vấn đã thay đổi bao nhiêu hàng -

$result_id = mysqli_query ($query, $conn_id);
# report 0 rows if the query failed
$count = ($result_id ? mysqli_affected_rows ($conn_id) : 0); print ("$count rows were affected\n");

Bảng liệt kê và Cơ sở dữ liệu

Điều này rất dễ dàng để liệt kê tất cả các cơ sở dữ liệu và bảng có sẵn với máy chủ cơ sở dữ liệu. Kết quả của bạn có thể vô hiệu nếu bạn không có đủ đặc quyền.

Ngoài phương pháp tôi đã đề cập bên dưới, bạn có thể sử dụng truy vấn SHOW TABLES hoặc SHOW DATABASES để nhận danh sách các bảng hoặc cơ sở dữ liệu trong PHP hoặc trong PERL.

Ví dụ về PERL

# Get all the tables available in current database.
my @tables = $dbh->tables ( ); foreach $table (@tables ){
   print "Table Name $table\n";
}

Ví dụ PHP

<?php
   $servername = "localhost:3306";
   $username = "root"; $password = "";
   $dbname = "TUTORIALS"; $conn = new mysqli($servername, $username, $password, $dbname);
   
   if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);
   } 
   echo"Database connected";
   $sql="SHOW DATABASES"; if (!($result = mysqli_query($conn,$sql))) {
      printf("Error: %s\n", mysqli_error($conn)); } while( $row = mysqli_fetch_row( $result ) ){ if (($row[0]!="information_schema") && ($row[0]!="mysql")) { echo $row[0]."\r\n";
      }
   }
   $conn->close();
?>

Nhận siêu dữ liệu máy chủ

Có các lệnh sau trong MySQL có thể được thực thi tại dấu nhắc mysql hoặc sử dụng bất kỳ tập lệnh nào như PHP để nhận các thông tin quan trọng khác nhau về máy chủ cơ sở dữ liệu.

Sr.No. Lệnh & Mô tả
1

SELECT VERSION( )

Chuỗi phiên bản máy chủ

2

SELECT DATABASE( )

Tên cơ sở dữ liệu hiện tại (trống nếu không có)

3

SELECT USER( )

Tên người dùng hiện tại

4

SHOW STATUS

Chỉ báo trạng thái máy chủ

5

SHOW VARIABLES

Biến cấu hình máy chủ

Chuỗi là một tập hợp các số nguyên 1, 2, 3, ... được tạo theo thứ tự theo yêu cầu. Chuỗi thường được sử dụng trong cơ sở dữ liệu vì nhiều ứng dụng yêu cầu mỗi hàng trong bảng phải chứa một giá trị duy nhất và chuỗi cung cấp một cách dễ dàng để tạo chúng. Chương này mô tả cách sử dụng chuỗi trong MySQLi.

Sử dụng cột AUTO_INCREMENT

Cách đơn giản nhất trong MySQLi để sử dụng Chuỗi là xác định một cột là AUTO_INCREMENT và để những thứ còn lại cho MySQLi xử lý.

Thí dụ

Hãy thử ví dụ sau. Thao tác này sẽ tạo bảng và sau đó nó sẽ chèn một vài hàng vào bảng này, nơi không cần cung cấp ID bản ghi vì nó được MySQLi tự động tăng lên.

mysql>CREATE TABLE tutorials_auto(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)

mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | ram  |
+----+------+
2 rows in set (0.05 sec)

Nhận các giá trị AUTO_INCREMENT

LAST_INSERT_ID () là một hàm SQL, vì vậy bạn có thể sử dụng nó từ bên trong bất kỳ ứng dụng khách nào hiểu cách phát hành câu lệnh SQL. Nếu không, các tập lệnh PERL và PHP cung cấp các chức năng độc quyền để truy xuất giá trị tăng tự động của bản ghi cuối cùng.

Ví dụ về PERL

Sử dụng thuộc tính mysql_insertid để nhận giá trị AUTO_INCREMENT do truy vấn tạo ra. Thuộc tính này được truy cập thông qua một điều khiển cơ sở dữ liệu hoặc một điều khiển câu lệnh, tùy thuộc vào cách bạn đưa ra truy vấn. Ví dụ sau tham chiếu nó thông qua xử lý cơ sở dữ liệu:

$dbh->do ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysqli_insertid};

Ví dụ PHP

Sau khi đưa ra một truy vấn tạo ra giá trị AUTO_INCREMENT, hãy truy xuất giá trị bằng cách gọi mysql_insert_id () -

mysql_query ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id); $seq = mysqli_insert_id ($conn_id);

Đánh số lại một chuỗi hiện có

Có thể có một trường hợp khi bạn đã xóa nhiều bản ghi khỏi một bảng và bạn muốn sắp xếp lại tất cả các bản ghi. Điều này có thể được thực hiện bằng cách sử dụng một thủ thuật đơn giản nhưng bạn phải rất cẩn thận làm như vậy nếu bảng của bạn đang kết hợp với bảng khác.

Nếu bạn xác định rằng việc sắp xếp lại một cột AUTO_INCREMENT là không thể tránh khỏi, thì cách thực hiện là bỏ cột khỏi bảng, sau đó thêm lại. Ví dụ sau cho thấy cách đánh số lại các giá trị id trong bảng côn trùng bằng kỹ thuật này:

mysql> ALTER TABLE tutorials_auto DROP id;
mysql> ALTER TABLE tutorials_auto
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

Bắt đầu một trình tự ở một giá trị cụ thể

Theo mặc định, MySQLi sẽ bắt đầu chuỗi từ 1 nhưng bạn cũng có thể chỉ định bất kỳ số nào khác tại thời điểm tạo bảng. Sau đây là ví dụ mà MySQLi sẽ bắt đầu chuỗi từ 100.

mysql> CREATE TABLE tutorials_auto
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, 
   -> );

Ngoài ra, bạn có thể tạo bảng và sau đó đặt giá trị trình tự ban đầu bằng ALTER TABLE.

mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;

Các bảng hoặc tập hợp kết quả đôi khi chứa các bản ghi trùng lặp. Đôi khi, nó được phép nhưng đôi khi nó được yêu cầu để dừng các bản ghi trùng lặp. Đôi khi, yêu cầu xác định các bản ghi trùng lặp và loại bỏ chúng khỏi bảng. Chương này sẽ mô tả cách ngăn các bản ghi trùng lặp xảy ra trong một bảng và cách loại bỏ các bản ghi đã trùng lặp hiện có.

Ngăn trùng lặp xuất hiện trong bảng

Bạn có thể sử dụng một PRIMARY KEY hoặc là UNIQUELập chỉ mục trên bảng với các trường thích hợp để ngăn các bản ghi trùng lặp. Hãy lấy một ví dụ: Bảng sau không chứa chỉ mục hoặc khóa chính như vậy, vì vậy nó sẽ cho phép các bản ghi trùng lặp cho first_name và last_name.

CREATE TABLE person_tbl (
   first_name CHAR(20),
   last_name CHAR(20),
   sex CHAR(10)
);

Để ngăn việc tạo nhiều bản ghi có cùng giá trị họ và tên trong bảng này, hãy thêm một KHÓA CHÍNH vào định nghĩa của nó. Khi bạn làm điều này, cũng cần phải khai báo các cột được lập chỉ mục là KHÔNG ĐẦY ĐỦ, vì KHÓA CHÍNH không cho phép các giá trị NULL -

CREATE TABLE person_tbl (
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

Sự hiện diện của một chỉ mục duy nhất trong bảng thường gây ra lỗi xảy ra nếu bạn chèn bản ghi vào bảng sao chép bản ghi hiện có trong cột hoặc các cột xác định chỉ mục.

Sử dụng INSERT IGNORE hơn là INSERT. Nếu một bản ghi không sao chép một bản ghi hiện có, MySQLi sẽ chèn nó như bình thường. Nếu bản ghi là bản sao, từ khóa BỎ QUA sẽ yêu cầu MySQLi loại bỏ nó một cách âm thầm mà không tạo ra lỗi.

Ví dụ sau không xảy ra lỗi và đồng thời nó sẽ không chèn các bản ghi trùng lặp.

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

Sử dụng REPLACEchứ không phải CHÈN. Nếu bản ghi là mới, nó được chèn giống như với INSERT. Nếu là bản sao, bản ghi mới sẽ thay thế bản cũ -

mysql> REPLACE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Ajay', 'Kumar');
Query OK, 1 row affected (0.00 sec)

mysql> REPLACE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Ajay', 'Kumar');
Query OK, 2 rows affected (0.00 sec)

CHÈN BỎ QUA và THAY THẾ nên được chọn theo hành vi xử lý trùng lặp mà bạn muốn thực hiện. INSERT IGNORE giữ phần đầu tiên của một tập hợp các bản ghi bị trùng lặp và loại bỏ phần còn lại. REPLACE giữ phần cuối cùng của một tập hợp các bản sao và xóa bất kỳ bản sao nào trước đó.

Một cách khác để thực thi tính duy nhất là thêm chỉ mục DUY NHẤT thay vì TỪ KHÓA CHÍNH vào bảng.

CREATE TABLE person_tbl (
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

Đếm và xác định các bản sao

Sau đây là truy vấn để đếm các bản ghi trùng lặp với first_name và last_name trong một bảng.

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
   -> FROM person_tbl
   -> GROUP BY last_name, first_name
   -> HAVING repetitions > 1;

Truy vấn này sẽ trả về danh sách tất cả các bản ghi trùng lặp trong bảng person_tbl. Nói chung, để xác định các bộ giá trị bị trùng lặp, hãy làm như sau:

  • Xác định cột nào chứa các giá trị có thể bị trùng lặp.

  • Liệt kê các cột đó trong danh sách chọn cột, cùng với COUNT (*).

  • Liệt kê các cột trong mệnh đề GROUP BY.

  • Thêm mệnh đề HAVING để loại bỏ các giá trị duy nhất bằng cách yêu cầu số lượng nhóm lớn hơn một.

Loại bỏ trùng lặp khỏi kết quả truy vấn:

Bạn có thể dùng DISTINCT cùng với câu lệnh SELECT để tìm ra các bản ghi duy nhất có sẵn trong một bảng.

mysql> SELECT DISTINCT last_name, first_name
   -> FROM person_tbl
   -> ORDER BY last_name;

Một thay thế cho DISTINCT là thêm mệnh đề GROUP BY đặt tên cho các cột bạn đang chọn. Điều này có tác dụng loại bỏ các bản sao và chỉ chọn các kết hợp giá trị duy nhất trong các cột được chỉ định -

mysql> SELECT last_name, first_name
   -> FROM person_tbl
   -> GROUP BY (last_name, first_name);

Loại bỏ các bản sao bằng cách sử dụng thay thế bảng

Nếu bạn có các bản ghi trùng lặp trong một bảng và bạn muốn xóa tất cả các bản ghi trùng lặp khỏi bảng đó, thì đây là quy trình:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
   -> FROM person_tbl;
   -> GROUP BY (last_name, first_name);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

Một cách dễ dàng để loại bỏ các bản ghi trùng lặp khỏi bảng là thêm một phím INDEX hoặc PRIMAY vào bảng đó. Ngay cả khi bảng này đã có sẵn, bạn có thể sử dụng kỹ thuật này để loại bỏ các bản ghi trùng lặp và bạn cũng sẽ an toàn trong tương lai.

mysql> ALTER IGNORE TABLE person_tbl 
   -> ADD PRIMARY KEY (last_name, first_name);