MySQL - 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ác loại lưu trữ dữ liệu khác cũng có thể được sử dụng, 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 đó.
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àForeign Keys.
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 tiến hành giải thích hệ thống cơ sở dữ liệu MySQL, chúng ta hãy xem xét lại một vài đị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 chỉ có thể tìm thấy 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 MySQL
MySQL là một RDBMS nhanh, dễ sử dụng đang được sử dụng cho nhiều doanh nghiệp lớn và nhỏ. MySQL được phát triển, tiếp thị và hỗ trợ bởi MySQL AB, một công ty Thụy Điển. MySQL đang trở nên rất phổ biến vì nhiều lý do chính đáng -
MySQL đượ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ó.
MySQL 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.
MySQL sử dụng một dạng chuẩn của ngôn ngữ dữ liệu SQL nổi tiếng.
MySQL 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.
MySQL 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.
MySQL rất thân thiện với PHP, ngôn ngữ được đánh giá cao nhất để phát triển web.
MySQL 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).
MySQL 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 MySQL 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ấ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 củaMySQL Community Server được yêu cầu cùng với nền tảng bạn sẽ chạy 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 dựa trên SuSE Linux system, 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ờ, bạn sẽ cần phải tuân thủ các bước dưới đây để 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ẽ quản 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.
Hộp mã sau có một 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
Việc 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 tệp 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 đến vị trí củamysqld server 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ề việc 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.
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 mọi thứ đang 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 thông qua máy khách MySQL và bằng cách sử dụ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 là trống.
Bạn chỉ có thể 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ả cá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ư được cung cấp trong khối mã 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 gian 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ủ MySQL
Đầu 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 nó:
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 MySQL
Để thêm người dùng mới vào 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.
Chương trình sau đây là một ví dụ về việc thêm một 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 đặt tên 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 một 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
Trong 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 MySQL quản trị
Đây là danh sách các lệnh MySQL quan trọng mà bạn sẽ sử dụng 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 trong MySQL workarea.
SHOW DATABASES - Liệt kê các cơ sở dữ liệu mà MySQL 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 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ê MySQL DBMS.
Trong chương tiếp theo, chúng ta sẽ thảo luận về cách sử dụng Cú pháp PHP trong MySQL.
MySQL 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 MySQL trong môi trường PHP. Nếu bạn quan tâm đến MySQL với PERL, thì bạn có thể xem xét đọc Hướng dẫn PERL .
PHP cung cấp nhiều chức năng khác nhau để truy cập cơ sở dữ liệu MySQL và thao tác với các bản ghi dữ liệu bên trong cơ sở dữ liệu MySQL. 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 MySQL có định dạng chung sau:
mysql_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 đây cho thấy một cú pháp chung của PHP để gọi bất kỳ hàm MySQL nào.
<html>
<head>
<title>PHP with MySQL</title>
</head>
<body>
<?php
$retval = mysql_function(value, [value,...]);
if( !$retval ) {
die ( "Error: a related error message" );
}
// Otherwise MySQL 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 MySQL cùng với PHP.
Kết nối MySQL bằng MySQL Binary
Bạn có thể thiết lập cơ sở dữ liệu MySQL 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 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:
Khối mã sau đây cho thấy kết quả của đoạn mã 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à một người dùng nhưng bạn cũng 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 cách sử dụng exit lệnh tại dấu nhắc mysql>.
mysql> exit
Bye
Kết nối MySQL bằng PHP Script
PHP cung cấp mysql_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 MySQL khi thành công hoặc FALSE khi thất bại.
Cú pháp
connection mysql_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ủ chạy máy chủ cơ sở dữ liệu. Nếu không được chỉ định, thì giá trị mặc định sẽ 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 sẽ 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 sẽ là một 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 mysql_connect () với cùng các đối số, thì 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 -
|
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 một hàm PHP khác mysql_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ởimysql_connect() chức năng.
Cú pháp
bool mysql_close ( resource $link_identifier );
Nếu một tài nguyên không được chỉ định, thì cơ sở dữ liệu được mở cuối cùng 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 MySQL Server</title>
</head>
<body>
<?php
$dbhost = 'localhost:3306'; $dbuser = 'guest';
$dbpass = 'guest123'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($conn);
?>
</body>
</html>
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 MySQL. Vì vậy, giả sử bạn có quyền truy cập vào người dùng gốc, 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 một cơ sở dữ liệu có tên TUTORIALS -
[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******
Thao tác này sẽ tạo một cơ sở dữ liệu MySQL có tên là TUTORIALS.
Tạo cơ sở dữ liệu bằng PHP Script
Sử dụng PHP mysql_querychức năng tạo hoặc xóa cơ sở dữ liệu MySQL. 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.
Cú pháp
bool mysql_query( sql, connection );
Sr.No. | Mô tả về Thông Số |
---|---|
1 | sql Bắt buộc - Truy vấn SQL để tạo hoặc xóa cơ sở dữ liệu MySQL |
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 mysql_connect sẽ được sử dụng. |
Thí dụ
Ví dụ sau để tạo cơ sở dữ liệu:
<html>
<head>
<title>Creating MySQL 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 TUTORIALS';
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not create database: ' . mysql_error());
}
echo "Database TUTORIALS created successfully\n";
mysql_close($conn);
?>
</body>
</html>
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 MySQL. Vì vậy, giả sử bạn có quyền truy cập vào người dùng gốc, 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 (TUTORIALS) đã 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 mysql_querychức năng tạo hoặc xóa cơ sở dữ liệu MySQL. 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.
Cú pháp
bool mysql_query( sql, connection );
Sr.No | Mô tả về Thông Số |
---|---|
1 | sql Bắt buộc - Truy vấn SQL để tạo hoặc xóa cơ sở dữ liệu MySQL |
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 mysql_connect sẽ được sử dụng. |
Thí dụ
Hãy thử ví dụ sau để xóa cơ sở dữ liệu -
<html>
<head>
<title>Deleting MySQL 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 TUTORIALS';
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not delete database: ' . mysql_error());
}
echo "Database TUTORIALS deleted successfully\n";
mysql_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 trong khi xóa cơ sở dữ liệu MySQL.
Khi bạn được kết nối với máy chủ MySQL, bạn phải chọn một cơ sở dữ liệu để 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ủ MySQL.
Chọn Cơ sở dữ liệu MySQL từ Dấu nhắc Lệnh
Rất đơn giản để chọn một cơ sở dữ liệu từ dấu nhắc mysql>. Bạn có thể sử dụng lệnh SQLuse để chọn một cơ sở dữ liệu.
Thí dụ
Đây là một ví dụ để chọn một cơ sở dữ liệu được gọi là TUTORIALS -
[root@host]# mysql -u root -p
Enter password:******
mysql> use TUTORIALS;
Database changed
mysql>
Bây giờ, bạn đã chọn cơ sở dữ liệu TUTORIALS và tất cả các thao tác tiếp theo sẽ được thực hiện trên cơ sở dữ liệu TUTORIALS.
NOTE- Tất cả các tên cơ sở dữ liệu, tên bảng, tên trường bảng đều phân biệt chữ hoa chữ thường. Vì vậy, bạn sẽ phải sử dụng các tên riêng trong khi đưa ra bất kỳ lệnh SQL nào.
Chọn cơ sở dữ liệu MySQL bằng PHP Script
PHP cung cấp chức năng mysql_select_dbđể chọn một cơ sở dữ liệu. Nó trả về TRUE khi thành công hoặc FALSE khi thất bại.
Cú pháp
bool mysql_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 MySQL đượ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 mysql_connect sẽ được sử dụng. |
Thí dụ
Đây là một ví dụ hướng dẫn bạn cách chọn cơ sở dữ liệu.
<html>
<head>
<title>Selecting MySQL Database</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'guest'; $dbpass = 'guest123';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_select_db( 'TUTORIALS' ); mysql_close($conn);
?>
</body>
</html>
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. Ví dụ: không xác định một trường rộng 10 ký tự, nếu bạn biết bạn sẽ chỉ sử dụng 2 ký tự. 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 đó.
MySQL sử dụng nhiều kiểu dữ liệu khác nhau được chia thành ba loại:
- Numeric
- Ngày và giờ
- Các loại chuỗi.
Bây giờ chúng ta hãy thảo luận chi tiết về chúng.
Các kiểu dữ liệu số
MySQL sử dụng tất cả các kiểu dữ liệu số ANSI SQL tiêu chuẩn, vì vậy nếu bạn đang truy cập MySQL 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 các 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 như sau:
DATE- Ngày ở định dạng YYYY-MM-DD, từ 1000-01-01 đến 9999-12-31. Ví dụ, 30 tháng 12 ngày , 1973 sẽ được lưu trữ như 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 vào buổi chiều trên 30 tháng 12 ngày , 1973 sẽ được lưu trữ như 1973/12/30 15:30:00.
TIMESTAMP- Một dấu thời gian giữa nửa đêm, ngày 01 tháng 1 st , 1970 và đôi khi trong 2037. vẻ này như định dạng DATETIME trước, chỉ có mà không có dấu gạch nối giữa các con số; 03:30 vào buổi chiều trên 30 tháng 12 ngày , 1973 sẽ được lưu trữ như 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ể nằm trong khoảng từ 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 MySQL.
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 cả hai là sự sắp xếp và so sánh trên dữ liệu được lưu trữcase sensitive trên BLOB và not case sensitivetrong 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 đó.
Trong chương tiếp theo, chúng ta sẽ thảo luận về cách tạo bảng trong MySQL.
Để bắt đầu, lệnh tạo bảng yêu cầu các chi tiết sau:
- Tên của bảng
- Tên của 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 MySQL -
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_tbl(
tutorial_id INT NOT NULL AUTO_INCREMENT,
tutorial_title VARCHAR(100) NOT NULL,
tutorial_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( tutorial_id )
);
Ở đây, 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 bản ghi có giá trị NULL, thì MySQL sẽ phát sinh lỗi.
Thuộc tính trường AUTO_INCREMENT yêu cầu MySQL 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
Thật dễ dàng để tạo một bảng MySQL từ dấu 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ụ, sẽ tạo ra tutorials_tbl -
root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> CREATE TABLE tutorials_tbl(
-> tutorial_id INT NOT NULL AUTO_INCREMENT,
-> tutorial_title VARCHAR(100) NOT NULL,
-> tutorial_author VARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY ( tutorial_id )
-> );
Query OK, 0 rows affected (0.16 sec)
mysql>
NOTE - MySQL 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 mysql_query(). Bạn sẽ chuyển đối số thứ hai của nó bằng một lệnh SQL thích hợp để tạo một bảng.
Thí dụ
Chương trình sau đây là một ví dụ để tạo một bảng bằng tập lệnh PHP:
<html>
<head>
<title>Creating MySQL Tables</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 tutorials_tbl( ". "tutorial_id INT NOT NULL AUTO_INCREMENT, ". "tutorial_title VARCHAR(100) NOT NULL, ". "tutorial_author VARCHAR(40) NOT NULL, ". "submission_date DATE, ". "PRIMARY KEY ( tutorial_id )); "; mysql_select_db( 'TUTORIALS' ); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not create table: ' . mysql_error()); } echo "Table created successfully\n"; mysql_close($conn);
?>
</body>
</html>
Rất dễ dàng để bỏ một bảng MySQL hiện có, nhưng bạn cần phải rất cẩn thận trong khi xóa bất kỳ bảng nào hiện có 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à một cú pháp SQL chung để thả một bảng MySQL -
DROP TABLE table_name ;
Bỏ bảng khỏi Command Prompt
Để loại bỏ các bảng từ dấu nhắc lệnh, chúng ta cần thực hiện lệnh DROP TABLE SQL tại dấu nhắc mysql>.
Thí dụ
Chương trình sau đây là một ví dụ xóa tutorials_tbl -
root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> DROP TABLE tutorials_tbl
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 mysql_query(). Bạn sẽ chuyển đối số thứ hai của nó bằng một lệnh SQL thích hợp để thả một bảng.
Thí dụ
<html>
<head>
<title>Creating MySQL Tables</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 tutorials_tbl"; mysql_select_db( 'TUTORIALS' ); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not delete table: ' . mysql_error()); } echo "Table deleted successfully\n"; mysql_close($conn);
?>
</body>
</html>
Để chèn dữ liệu vào bảng MySQL, bạn cần sử dụng SQL INSERT INTOchỉ huy. Bạn có thể chèn dữ liệu vào bảng MySQL 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 MySQL -
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ị trong dấu ngoặc kép hoặc đơn. Ví dụ"value".
Chèn dữ liệu từ Command Prompt
Để chèn dữ liệu từ dấu nhắc lệnh, chúng ta sẽ sử dụng lệnh SQL INSERT INTO để chèn dữ liệu vào bảng hướng dẫn của MySQL.
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_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn PHP", "John Poul", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn MySQL", "Abdul S", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("JAVA Tutorial", "Sanjay", '2007-05-06');
Query OK, 1 row affected (0.01 sec)
mysql>
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 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 lệnh.
Trong ví dụ trên, chúng tôi chưa cung cấp tutorial_id vì tại thời điểm tạo bảng, chúng tôi đã cung cấp tùy chọn AUTO_INCREMENT cho trường này. Vì vậy, MySQL sẽ tự động chèn các ID này. Đây,NOW() là một hàm MySQL, trả về ngày và giờ hiện tại.
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 mysql_query() để chèn dữ liệu vào bảng MySQL.
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 MySQL -
<html>
<head>
<title>Add New Record in MySQL Database</title>
</head>
<body>
<?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() ) { $tutorial_title = addslashes ($_POST['tutorial_title']); $tutorial_author = addslashes ($_POST['tutorial_author']); } else { $tutorial_title = $_POST['tutorial_title']; $tutorial_author = $_POST['tutorial_author']; } $submission_date = $_POST['submission_date']; $sql = "INSERT INTO tutorials_tbl ".
"(tutorial_title,tutorial_author, submission_date) "."VALUES ".
"('$tutorial_title','$tutorial_author','$submission_date')"; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not enter data: ' . mysql_error()); } echo "Entered data successfully\n"; mysql_close($conn);
} else {
?>
<form method = "post" action = "<?php $_PHP_SELF ?>">
<table width = "600" border = "0" cellspacing = "1" cellpadding = "2">
<tr>
<td width = "250">Tutorial Title</td>
<td>
<input name = "tutorial_title" type = "text" id = "tutorial_title">
</td>
</tr>
<tr>
<td width = "250">Tutorial Author</td>
<td>
<input name = "tutorial_author" type = "text" id = "tutorial_author">
</td>
</tr>
<tr>
<td width = "250">Submission Date [ yyyy-mm-dd ]</td>
<td>
<input name = "submission_date" type = "text" id = "submission_date">
</td>
</tr>
<tr>
<td width = "250"> </td>
<td> </td>
</tr>
<tr>
<td width = "250"> </td>
<td>
<input name = "add" type = "submit" id = "add" value = "Add Tutorial">
</td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>
Trong khi thực hiện chèn dữ liệu, cách tốt nhất là sử dụng hàm get_magic_quotes_gpc()để kiểm tra xem cấu hình hiện tại cho báo giá ma thuật đã được thiết lập hay chưa. Nếu hàm này trả về false, thì hãy sử dụng hàmaddslashes() để thêm dấu gạch chéo trước dấu ngoặc kép.
Bạn có thể đặt nhiều xác nhận xung quanh để kiểm tra xem dữ liệu đã nhập có chính xác hay không và có thể thực hiện hành động thích hợp.
SQL SELECTlệnh được sử dụng để tìm nạp dữ liệu từ cơ sở dữ liệu MySQL. 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 MySQL -
SELECT field1, field2,...fieldN
FROM 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, độ lệch bắt đầu bằng 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 MySQL tutorials_tbl.
Thí dụ
Ví dụ sau sẽ trả về tất cả các bản ghi từ tutorials_tbl bàn -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 1 | Learn PHP | John Poul | 2007-05-21 |
| 2 | Learn MySQL | Abdul S | 2007-05-21 |
| 3 | JAVA Tutorial | Sanjay | 2007-05-21 |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.01 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 một hàm PHP mysql_query(). Hàm này được sử dụng để thực thi lệnh SQL và sau đó là một hàm PHP khácmysql_fetch_array()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ảng kết hợp, 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.
Chương trình sau đây là một ví dụ đơn giản sẽ chỉ ra cách tìm nạp / hiển thị các bản ghi từ tutorials_tbl bàn.
Thí dụ
Khối mã sau sẽ hiển thị tất cả các bản ghi từ bảng tutorial_tbl.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl';
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 "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Nội dung của các hàng được gán cho biến $ row và các giá trị trong hàng đó sẽ đượ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.
Trong ví dụ trên, hằng MYSQL_ASSOC được sử dụng làm đối số thứ hai cho hàm PHP mysql_fetch_array(), để nó trả về hàng dưới dạng một mảng kết hợp. Với một mảng kết hợp, bạn có thể truy cập trường bằng cách sử dụng tên của chúng thay vì sử dụng chỉ mục.
PHP cung cấp một hàm khác được gọi là mysql_fetch_assoc(), cũng trả về hàng dưới dạng một mảng kết hợp.
Thí dụ
Ví dụ sau để hiển thị tất cả các bản ghi từ bảng tutorial_tbl bằng cách sử dụng hàm mysql_fetch_assoc ().
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_assoc($retval)) { echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ". "Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>
Bạn cũng có thể sử dụng hằng số MYSQL_NUMlàm đối số thứ hai cho hàm mysql_fetch_array () trong PHP. Điều này sẽ làm cho hàm trả về một mảng có chỉ mục số.
Thí dụ
Hãy thử ví dụ sau để hiển thị tất cả các bản ghi từ bảng tutorial_tbl bằng cách sử dụng đối số MYSQL_NUM.
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; 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_NUM)) { echo "Tutorial ID :{$row[0]} <br> ".
"Title: {$row[1]} <br> ". "Author: {$row[2]} <br> ".
"Submission Date : {$row[3]} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>
Tất cả ba ví dụ trên sẽ tạo ra cùng một kết quả.
Giải phóng bộ nhớ
Một phương pháp hay là giải phóng bộ nhớ con trỏ ở cuối mỗi câu lệnh SELECT. Điều này có thể được thực hiện bằng cách sử dụng hàm PHPmysql_free_result(). Chương trình sau đây là ví dụ để chỉ ra cách nó nên được sử dụng.
Thí dụ
Hãy thử ví dụ sau:
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; 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_NUM)) { echo "Tutorial ID :{$row[0]} <br> ".
"Title: {$row[1]} <br> ". "Author: {$row[2]} <br> ".
"Submission Date : {$row[3]} <br> ". "--------------------------------<br>"; } mysql_free_result($retval);
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Trong khi tìm nạp dữ liệu, bạn có thể viết một đoạn mã phức tạp tùy thích, nhưng quy trình sẽ vẫn giống như đã đề cập ở trên.
Chúng tôi đã thấy SQL SELECTlệnh để tìm nạp dữ liệu từ một bảng MySQL. Chúng ta có thể sử dụng một mệnh đề điều kiện được gọi làWHERE Clauseđể lọc ra kết quả. Sử dụng mệnh đề WHERE này, 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
Khối mã sau có 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 MySQL:
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 WHERE mệnh đề hoạt động giống như một if conditionbằng 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 MySQL. Nếu giá trị đã cho từ bên ngoài bằng với giá trị trường có sẵn trong bảng MySQL, 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 khi bạn sử dụng MySQL 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 các bản ghi bằng cách sử dụng Primary Key để làm cho việc tìm kiếm nhanh hơn.
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 MySQL - tutorials_tbl.
Thí dụ
Ví dụ sau sẽ trả về tất cả các bản ghi từ tutorials_tbl bảng có tên tác giả Sanjay.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl WHERE tutorial_author = 'Sanjay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 3 | JAVA Tutorial | Sanjay | 2007-05-21 |
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 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ằng cách sử dụngBINARY từ khóa như sau -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl \
WHERE BINARY tutorial_author = 'sanjay';
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 trong hàm PHP mysql_query(). Hàm này được sử dụng để thực thi lệnh SQL và sau đó là một hàm PHP khácmysql_fetch_array()có thể được sử dụng để tìm nạp tất cả dữ liệu đã chọn. Hàm này trả về một hàng dưới dạng mảng kết hợp, 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.
Thí dụ
Ví dụ sau sẽ trả về tất cả các bản ghi từ tutorials_tbl bảng có tên tác giả Sanjay -
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl
WHERE tutorial_author = "Sanjay"';
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 "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Có thể có một yêu cầu trong đó dữ liệu hiện có trong bảng MySQL 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 MySQL nào.
Cú pháp
Khối mã sau có cú pháp SQL chung của lệnh UPDATE để sửa đổi dữ liệu trong bảng MySQL:
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
Điều này sẽ sử dụng lệnh SQL UPDATE với mệnh đề WHERE để cập nhật dữ liệu đã chọn trong bảng MySQL tutorials_tbl.
Thí dụ
Ví dụ sau sẽ cập nhật tutorial_title trường cho một bản ghi có tutorial_id là 3.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> UPDATE tutorials_tbl
-> SET tutorial_title = 'Learning JAVA'
-> WHERE tutorial_id = 3;
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 trong hàm PHP - mysql_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ụ
Ví dụ sau để cập nhật tutorial_title trường cho một bản ghi có hướng dẫn_id là 3.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'UPDATE tutorials_tbl
SET tutorial_title="Learning JAVA"
WHERE tutorial_id=3';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
mysql_close($conn);
?>
Nếu bạn muốn xóa bản ghi khỏi bất kỳ bảng MySQL 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
Khối mã sau có cú pháp SQL chung của lệnh DELETE để xóa dữ liệu khỏi bảng MySQL.
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 MySQL đã 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 MySQL - tutorials_tbl.
Thí dụ
Ví dụ sau sẽ xóa một bản ghi khỏi tutorial_tbl có tutorial_id là 3.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> DELETE FROM tutorials_tbl WHERE tutorial_id=3;
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 trong hàm PHP - mysql_query(). Hàm này sẽ thực thi lệnh SQL giống như cách 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_tbl có tutorial_id là 3.
<?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 tutorials_tbl WHERE tutorial_id = 3';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not delete data: ' . mysql_error());
}
echo "Deleted data successfully\n";
mysql_close($conn);
?>
Chúng tôi đã thấy SQL SELECTlệnh để tìm nạp dữ liệu từ bảng MySQL. 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 với' (=) hoạt động tốt khi chúng ta muốn so khớp chính xác. Giống như nếu "tutorial_author = 'Sanjay'". 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ả trong đó tên tutorial_author phải chứa "jay". Điều này có thể được xử lý bằng cách sử dụngSQL LIKE Clause cùng với mệnh đề WHERE.
Nếu mệnh đề SQL LIKE được sử dụng cùng với ký tự%, thì nó sẽ hoạt động giống như một ký tự meta (*) như trong UNIX, đồng thời 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ớiequal to ký cùng với mệnh đề WHERE.
Cú pháp
Khối mã sau có 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 MySQL.
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 equals to ký tên.
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 trong 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 MySQL - tutorials_tbl.
Thí dụ
Ví dụ sau sẽ trả về tất cả các bản ghi từ tutorials_tbl bảng mà tên tác giả kết thúc bằng jay -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl
-> WHERE tutorial_author LIKE '%jay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 3 | JAVA Tutorial | Sanjay | 2007-05-21 |
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 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 - mysql_query(). Hàm này được sử dụng để thực thi lệnh SQL và sau đó là một hàm PHP khác -mysql_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_tbl bảng chứa tên tác giả jay -
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl
WHERE tutorial_author LIKE "%jay%"';
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 "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Chúng tôi đã thấy SQL SELECTlệnh để tìm nạp dữ liệu từ một bảng MySQL. Khi bạn chọn các hàng, máy chủ MySQL 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ả. Tuy nhiên, bạn sắp xếp tập hợp kết quả bằng cách thêmORDER BY mệnh đề đặt tên cho cột hoặc các cột mà bạn muốn sắp xếp.
Cú pháp
Khối mã sau 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, nếu trường đó đang được liệt kê.
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 trong Command Prompt
Điều này sẽ sử dụng lệnh SQL SELECT với ORDER BY mệnh đề tìm nạp dữ liệu từ bảng MySQL - tutorials_tbl.
Thí dụ
Hãy thử ví dụ sau, nó trả về kết quả theo thứ tự tăng dần.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl ORDER BY tutorial_author ASC
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 2 | Learn MySQL | Abdul S | 2007-05-24 |
| 1 | Learn PHP | John Poul | 2007-05-24 |
| 3 | JAVA Tutorial | Sanjay | 2007-05-06 |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.42 sec)
mysql>
Xác minh tất cả các tên tác giả được liệt kê theo thứ tự tăng 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 - mysql_query(). Hàm này được sử dụng để thực thi lệnh SQL và sau đó là một hàm PHP khácmysql_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, ví dụ này trả về kết quả theo thứ tự giảm dần của các tác giả hướng dẫn.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl
ORDER BY tutorial_author DESC';
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 "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Trong các chương trước, chúng ta đang lấy dữ liệu từ một bảng tại một thời điểm. Điều này đủ tốt cho các thao tác đơn giản, nhưng trong hầu hết các cách 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 MySQL đề cập đến việc trộn 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âu lệnh SELECT, UPDATE và DELETE để tham gia các bảng MySQL. Chúng ta sẽ thấy một ví dụ về LEFT JOIN cũng khác với MySQL JOIN đơn giản.
Sử dụng tham gia tại Command Prompt
Giả sử chúng ta có hai bảng tcount_tbl và tutorials_tbl, trong TUTORIALS. Bây giờ hãy xem các ví dụ dưới đây:
Thí dụ
Các ví dụ sau -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| mahnaz | NULL |
| Jen | NULL |
| Gill | 20 |
| John Poul | 1 |
| Sanjay | 1 |
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from tutorials_tbl;
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 1 | Learn PHP | John Poul | 2007-05-24 |
| 2 | Learn MySQL | Abdul S | 2007-05-24 |
| 3 | JAVA Tutorial | Sanjay | 2007-05-06 |
+-------------+----------------+-----------------+-----------------+
3 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ác giả từ bảngtutorials_tbl và sẽ chọn số lượng hướng dẫn tương ứng từ tcount_tbl.
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
-> FROM tutorials_tbl a, tcount_tbl b
-> WHERE a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
| 1 | John Poul | 1 |
| 3 | Sanjay | 1 |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>
Sử dụng tham gia trong tập lệnh PHP
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 PHPmysql_query() và sau đó bạn sẽ tìm nạp kết quả theo cách thông thường.
Thí dụ
Ví dụ sau -
<?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.tutorial_id, a.tutorial_author, b.tutorial_count
FROM tutorials_tbl a, tcount_tbl b
WHERE a.tutorial_author = b.tutorial_author';
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> ".
"Tutorial ID: {$row['tutorial_id']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>
MySQL THAM GIA TRÁI
Một phép nối trái MySQL khác với một phép nối đơn giản. MySQL LEFT JOIN cung cấp thêm một số cân nhắc cho bảng ở bên trái.
Nếu tôi làm một LEFT JOIN, 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 một bản ghi bổ sung 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 AUTHOR đều được đề cập.
Thí dụ
Hãy thử ví dụ sau để hiểu THAM GIA TRÁI.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
-> FROM tutorials_tbl a LEFT JOIN tcount_tbl b
-> ON a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
| 1 | John Poul | 1 |
| 2 | Abdul S | NULL |
| 3 | Sanjay | 1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)
Bạn sẽ cần thực hành nhiều hơn để làm quen với JOINS. Đây là 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ừ một bảng MySQL, 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, MySQL cung cấp ba toán tử:
IS NULL - Toán tử này trả về true, nếu giá trị cột là NULL.
IS NOT NULL - Toán tử này trả về true, nếu giá trị cột không phải là NULL.
<=> - Toán tử này 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 kiếm các giá trị NULL trong các cột. So sánh như vậy luôn luôn thất bại bởi vì không thể nói liệu chúng có đúng hay không. Đôi khi, thậm chí NULL = NULL không thành công.
Để tìm kiếm các cột có hoặc không NULL, hãy sử dụng IS NULL hoặc là IS NOT NULL.
Sử dụng giá trị NULL tại Command Prompt
Giả sử rằng có một bảng được gọi là tcount_tbl trong cơ sở dữ liệu TUTORIALS và nó chứa hai cột cụ thể là tutorial_author và tutorial_count, trong đó NULL tutorial_count 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> create table tcount_tbl
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('mahran', 20);
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('mahnaz', NULL);
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('Jen', NULL);
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('Gill', 20);
mysql> SELECT * from tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| mahnaz | NULL |
| Jen | NULL |
| Gill | 20 |
+-----------------+----------------+
4 rows in set (0.00 sec)
mysql>
Bạn có thể thấy rằng = và != không hoạt động với các giá trị NULL như sau:
mysql> SELECT * FROM tcount_tbl WHERE tutorial_count = NULL;
Empty set (0.00 sec)
mysql> SELECT * FROM tcount_tbl WHERE tutorial_count != NULL;
Empty set (0.01 sec)
Để tìm các bản ghi trong đó cột tutorial_count có hoặc không phải là NULL, các truy vấn phải được viết như trong chương trình sau.
mysql> SELECT * FROM tcount_tbl
-> WHERE tutorial_count IS NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahnaz | NULL |
| Jen | NULL |
+-----------------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT * from tcount_tbl
-> WHERE tutorial_count IS NOT NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| Gill | 20 |
+-----------------+----------------+
2 rows in set (0.00 sec)
Xử lý giá trị NULL trong PHP Script
Bạn có thể dùng if...else điều kiện để chuẩn bị một 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 MySQL khớp với LIKE ...%. MySQL 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ì cách đối sánh này giống như cách viết kịch bản các biểu thức chính quy.
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à person_tbl và nó đang có một trường được gọi là name -
Truy vấn để tìm tất cả các tên bắt đầu bằng 'st' -
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
Truy vấn để tìm tất cả các tên kết thúc bằng 'ok' -
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
Truy vấn để tìm tất cả các tên, có chứa 'mar' -
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
Truy vấn để tìm tất cả các tên bắt đầu bằng một nguyên âm và kết thúc bằng 'ok' -
mysql> SELECT FirstName FROM intque.person_tbl WHERE FirstName REGEXP '^[aeiou].*ok$';
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.
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
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- Điều này đả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 - Điều này đả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 - Điều này cho phép các giao dịch hoạt động độc lập và minh bạch với nhau.
Durability - Điều này đả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 một COMMIT hoặc một ROLLBACKtuyên bố. Các lệnh SQL giữa 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 Commit và Rollback 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 cấp SET AUTOCOMMIT = 0 lệnh, loạt 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 mysql_query() chức năng.
Một 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 mysql_query() chức năng.
Bắt đầu giao dịch bằng cách đưa 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 đưa ra lệnh ROLLBACK, nếu không thì hãy đưa ra lệnh COMMIT.
Các loại bảng an toàn giao dịch trong MySQL
Bạn không thể sử dụng các giao dịch trực tiếp, nhưng đối với một số trường hợp ngoại lệ, bạn có thể. Tuy nhiên, chúng 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 MySQL 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 loại phổ biến nhất làInnoDB.
Hỗ trợ các bảng InnoDB yêu cầu một tham số biên dịch cụ thể khi biên dịch MySQL từ nguồn. Nếu phiên bản MySQL 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 MySQL có hỗ trợ các loại bảng InnoDB hoặc tải xuống và cài đặtMySQL-Max Binary Distribution cho Windows hoặc Linux / UNIX và làm việc với loại bảng trong môi trường phát triển.
Nếu cài đặt MySQL 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à tcount_tbl -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.05 sec)
Để biết thêm chi tiết về InnoDB, bạn có thể nhấp vào liên kết sau - 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ách cài đặt của bạn, nó có hỗ trợ hai loại bảng này hay không.
MySQL 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.
Chúng ta hãy bắt đầu với việc tạo một bảng có tên testalter_tbl.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table testalter_tbl
-> (
-> i INT,
-> c CHAR(1)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
| c | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Bỏ, thêm hoặc định vị lại cột
Nếu bạn muốn bỏ một cột hiện có i khỏi bảng MySQL ở trên, thì bạn sẽ sử dụng DROP mệnh đề cùng với ALTER lệnh như hình dưới đây -
mysql> ALTER TABLE testalter_tbl DROP i;
A DROP mệnh đề 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 testalter_tbl -
mysql> ALTER TABLE testalter_tbl 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ùng cấu trúc. Điều này là do có 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 testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Để cho biết 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 để đặt nó 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ử những điều sau đây ALTER TABLE tuyên bố, sử dụng SHOW COLUMNS sau mỗi cái để xem mỗi cái 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 định vị lại một cột hiện có trong một bảng, trước tiên bạn phảiDROP nó và sau đó ADD nó ở vị trí mới.
Thay đổi (Thay đổi) Định nghĩa Cột hoặc Tên
Để thay đổi định nghĩa của cột, hãy sử dụng MODIFY hoặc là CHANGE cùng với lệnh ALTER.
Ví dụ: để thay đổi cột c từ CHAR (1) đến CHAR (10), bạn có thể sử dụng lệnh sau:
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);
Với CHANGE, cú pháp hơi khác một chú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 testalter_tbl CHANGE i j BIGINT;
Nếu bây giờ bạn sử dụng CHANGE để chuyển đổi j từ BIGINT Quay lại INT mà không cần thay đổi tên cột, câu lệnh sẽ như hình dưới đây:
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
The Effect of ALTER TABLE on Null and Default Value Attributes- Khi bạn SỬA 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, MySQL sẽ tự động gán giá trị cho các thuộc tính này.
Khối mã sau đây là một ví dụ, trong đó NOT NULL cột sẽ có giá trị là 100 theo mặc định.
mysql> ALTER TABLE testalter_tbl
-> MODIFY j BIGINT NOT NULL DEFAULT 100;
Nếu bạn không sử dụng lệnh trên, thì MySQL sẽ điền giá trị NULL vào tất cả các cột.
Thay đổi (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 cách sử dụng ALTER chỉ huy.
Hãy thử ví dụ sau.
mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | 1000 | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 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 ALTER chỉ huy.
mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Thay đổi (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 TYPEcùng với lệnh ALTER. Hãy thử ví dụ sau để thay đổitestalter_tbl đến MYISAM loại bảng.
Để tìm ra loại bảng hiện tại, hãy sử dụng SHOW TABLE STATUS tuyên bố.
mysql> ALTER TABLE testalter_tbl TYPE = MYISAM;
mysql> SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
Name: testalter_tbl
Type: MyISAM
Row_format: Fixed
Rows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 25769803775
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2007-06-03 08:04:36
Update_time: 2007-06-03 08:04:36
Check_time: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
Đổi tên (Thay đổi) Bảng
Để đổi tên bảng, hãy sử dụng RENAME tùy chọn của ALTER TABLE tuyên bố.
Hãy thử ví dụ sau để đổi tên testalter_tbl đến alter_tbl.
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
Bạn có thể sử dụng lệnh ALTER để tạo và thả lệnh INDEX trên tệp MySQL. Chúng ta sẽ thảo luận chi tiết về lệnh 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 tất cả các cột nào 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 đó.
Trên thực tế, chỉ mục cũng là một 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 vào 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 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, trong 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 ta có thể tạo một chỉ mục trên tutorials_tbl sử dụng tutorial_author.
CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author)
Bạn có thể tạo một chỉ mục đơn giản trên một bảng. Chỉ cần bỏ quaUNIQUEtừ khóa từ truy vấn để tạo một 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 AUTHOR_INDEX ON tutorials_tbl (tutorial_author 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) - Tuyên bố này bổ sung 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 chỉ mục mà các giá trị phải là duy nhất (ngoại trừ các 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.
Khối mã sau đây là một ví dụ để thêm chỉ mục trong một bảng hiện có.
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
Bạn có thể giảm INDEX bất kỳ bằng cách sử dụng DROP cùng với lệnh ALTER.
Hãy thử ví dụ sau để loại bỏ chỉ mục được tạo ở trên.
mysql> ALTER TABLE testalter_tbl 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.
Lệnh ALTER để thêm và thả KHÓA CHÍNH
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 rằng Khóa chính hoạt động trên các cột KHÔNG ĐẦY ĐỦ.
Khối mã sau đây là một 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 testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
Bạn có thể sử dụng lệnh ALTER để bỏ khóa chính như sau:
mysql> ALTER TABLE testalter_tbl 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ể dùng SHOW INDEXlệnh 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 một 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.
Bảng tạm thời là gì?
Bảng tạm thời đã được thêm vào MySQL Phiên bản 3.23. Nếu bạn sử dụng phiên bản MySQL cũ hơn 3.23, bạn không thể sử dụng các bảng tạm thời, nhưng bạn có thể sử dụngHeap Tables.
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 MySQL, 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ụ
Chương trình sau đâ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ằng cách sử dụngmysql_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 phát hành một SHOW TABLESthì 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 MySQL và sau đó bạn sẽ phát hànhSELECT, sau đó 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 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ị MySQL 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 hànhDROP TABLE chỉ huy.
Chương trình sau đây là một ví dụ về việc loại bỏ một bảng tạm thời:
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)
mysql> DROP TABLE SalesSummary;
mysql> SELECT * FROM SalesSummary;
ERROR 1146: Table 'TUTORIALS.SalesSummary' doesn't exist
Có thể có một 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à CREATE TABLE ... SELECT 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 giống nhau, v.v.
Bạn có thể xử lý tình huống này bằng cách làm theo các bước dưới đây:
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_tbl.
Step 1 - Nhận cấu trúc hoàn chỉnh về bảng.
mysql> SHOW CREATE TABLE tutorials_tbl \G;
*************************** 1. row ***************************
Table: tutorials_tbl
Create Table: CREATE TABLE `tutorials_tbl` (
`tutorial_id` int(11) NOT NULL auto_increment,
`tutorial_title` varchar(100) NOT NULL default '',
`tutorial_author` varchar(40) NOT NULL default '',
`submission_date` date default NULL,
PRIMARY KEY (`tutorial_id`),
UNIQUE KEY `AUTHOR_INDEX` (`tutorial_author`)
) TYPE = MyISAM
1 row in set (0.00 sec)
ERROR:
No query specified
Step 2 - Đổi tên bảng này và tạo bảng khác.
mysql> CREATE TABLE clone_tbl (
-> tutorial_id int(11) NOT NULL auto_increment,
-> tutorial_title varchar(100) NOT NULL default '',
-> tutorial_author varchar(40) NOT NULL default '',
-> submission_date date default NULL,
-> PRIMARY KEY (tutorial_id),
-> UNIQUE KEY AUTHOR_INDEX (tutorial_author)
-> ) TYPE = MyISAM;
Query OK, 0 rows affected (1.80 sec)
Step 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 clone_tbl (tutorial_id,
-> tutorial_title,
-> tutorial_author,
-> submission_date)
-> SELECT tutorial_id,tutorial_title,
-> tutorial_author,submission_date
-> FROM tutorials_tbl;
Query OK, 3 rows affected (0.07 sec)
Records: 3 Duplicates: 0 Warnings: 0
Cuối cùng, bạn sẽ có một bảng sao chép chính xác như bạn muốn.
Lấy và sử dụng siêu dữ liệu MySQL
Có ba loại thông tin mà bạn muốn có từ MySQL.
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 the 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 MySQL server - Điều này bao gồm trạng thá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ả thông tin này tại dấu nhắc MySQL, 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ả thông tin này.
Lấy số lượng hàng bị ảnh hưởng bởi một truy vấn
Bây giờ chúng ta hãy xem cách lấy thông tin này.
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, gọi mysql_affected_rows( ) để tìm ra bao nhiêu hàng mà một truy vấn đã thay đổi.
$result_id = mysql_query ($query, $conn_id); # report 0 rows if the query failed $count = ($result_id ? mysql_affected_rows ($conn_id) : 0);
print ("$count rows were affected\n");
Bảng liệt kê và Cơ sở dữ liệu
Rất dễ dàng liệt kê tất cả các cơ sở dữ liệu và các bảng có sẵn với một máy chủ cơ sở dữ liệu. Kết quả của bạn có thể lànull nếu bạn không có đủ đặc quyền.
Ngoài phương pháp được hiển thị trong khối mã sau, bạn có thể sử dụng SHOW TABLES hoặc là SHOW DATABASES truy vấn để lấy danh sách các bảng hoặc cơ sở dữ liệu bằng 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
$con = mysql_connect("localhost", "userid", "password"); if (!$con) {
die('Could not connect: ' . mysql_error());
}
$db_list = mysql_list_dbs($con);
while ($db = mysql_fetch_object($db_list)) {
echo $db->Database . "<br />"; } mysql_close($con);
?>
Nhận siêu dữ liệu máy chủ
Có một số lệnh quan trọng trong MySQL có thể được thực thi tại dấu nhắc MySQL hoặc bằng cách 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ủ |
Dãy số là một tập hợp các số nguyên 1, 2, 3, ... được tạo theo thứ tự theo một yêu cầu cụ thể. 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 MySQL.
Sử dụng cột AUTO_INCREMENT
Cách đơn giản nhất trong MySQL để sử dụng Chuỗi là xác định một cột là AUTO_INCREMENT và những việc còn lại để MySQL lo.
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 MySQL tự động tăng lên.
mysql> CREATE TABLE insect
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (id),
-> name VARCHAR(30) NOT NULL, # type of insect
-> date DATE NOT NULL, # date collected
-> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO insect (id,name,date,origin) VALUES
-> (NULL,'housefly','2001-09-10','kitchen'),
-> (NULL,'millipede','2001-09-10','driveway'),
-> (NULL,'grasshopper','2001-09-10','front yard');
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+-------------+------------+------------+
| id | name | date | origin |
+----+-------------+------------+------------+
| 1 | housefly | 2001-09-10 | kitchen |
| 2 | millipede | 2001-09-10 | driveway |
| 3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)
Nhận các giá trị AUTO_INCREMENT
Các 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ỳ máy 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 mysql_insertid thuộc tính để có được AUTO_INCREMENTgiá trị 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 insect (name,date,origin) VALUES('moth','2001-09-14','windowsill')"); my $seq = $dbh->{mysql_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( ) chỉ huy.
mysql_query ("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);
Đánh số lại một chuỗi hiện có
Có thể có 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 đây cho thấy cách đánh số lại id values trong bảng bằng cách sử dụng kỹ thuật này.
mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
-> 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, MySQL sẽ bắt đầu trình tự từ 1, nhưng bạn có thể chỉ định bất kỳ số nào khác tại thời điểm tạo bảng.
Chương trình sau đây là một ví dụ cho thấy cách MySQL sẽ bắt đầu chuỗi từ 100.
mysql> CREATE TABLE insect
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
-> PRIMARY KEY (id),
-> name VARCHAR(30) NOT NULL, # type of insect
-> date DATE NOT NULL, # date collected
-> origin VARCHAR(30) NOT NULL # where collected
);
Ngoài ra, bạn có thể tạo bảng và sau đó đặt giá trị trình tự ban đầu với ALTER TABLE chỉ huy.
mysql> ALTER TABLE t AUTO_INCREMENT = 100;
Nói chung, 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. Hầu hết các trường hợp nó được cho phép nhưng đôi khi nó được yêu cầu dừng các bản ghi trùng lặp. 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 chặn sự xuất hiện của các bản ghi trùng lặp trong một bảng và cách loại bỏ các bản ghi trùng lặp đã tồn tại.
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 một UNIQUE Lậ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 để chúng tôi 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 nhiều bản ghi có cùng giá trị họ và tên được tạo trong bảng này, hãy thêm PRIMARY KEYtheo đị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àNOT NULL, vì một PRIMARY KEY không cho phép NULL giá trị -
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 lệnh hơn là INSERTchỉ huy. Nếu một bản ghi không sao chép một bản ghi hiện có, thì MySQL sẽ chèn nó như bình thường. Nếu bản ghi là một bản sao, thìIGNORE từ khóa cho MySQL biết để loại bỏ nó một cách âm thầm mà không tạo ra lỗi.
Ví dụ sau đây không xảy ra lỗi và đồng thời nó cũng 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 lệnh INSERT. Nếu bản ghi là mới, nó sẽ đượ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)
Các lệnh INSERT IGNORE và REPLACE nên được chọn theo hành vi xử lý trùng lặp mà bạn muốn thực hiện. Lệnh INSERT IGNORE giữ tập đầu tiên của các bản ghi được sao chép và loại bỏ phần còn lại. Lệnh REPLACE giữ tập hợp các bản sao cuối cùng và xóa mọi bản sao trước đó.
Một cách khác để thực thi tính duy nhất là thêm UNIQUE lập chỉ mục chứ không phải là TỪ KHÓA CHÍNH cho một 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 theo các bước dưới đây.
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 GROUP BY cũng như mệnh đề.
Thêm một HAVING mệnh đề 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 lệnh 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ì hãy làm theo quy trình dưới đây.
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 CHỈ SỐ hoặc một KHÓA CHÍNH 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);
Nếu bạn lấy thông tin đầu vào của người dùng thông qua một trang web và chèn nó vào cơ sở dữ liệu MySQL, có khả năng là bạn đã bỏ ngỏ cho mình một vấn đề bảo mật được gọi là SQL Injection. Chương này sẽ dạy bạn cách ngăn điều này xảy ra và giúp bạn bảo mật các tập lệnh và câu lệnh MySQL của mình.
SQL Injection thường xảy ra khi bạn yêu cầu người dùng nhập vào, như tên của họ và thay vì tên họ cung cấp cho bạn một câu lệnh MySQL mà bạn sẽ vô tình chạy trên cơ sở dữ liệu của mình.
Không bao giờ tin tưởng vào dữ liệu do người dùng cung cấp, chỉ xử lý dữ liệu này sau khi xác nhận; như một quy luật, điều này được thực hiện bằng cách đối sánh mẫu. Trong ví dụ sau, tên người dùng được giới hạn ở các ký tự chữ và số cộng với dấu gạch dưới và có độ dài từ 8 đến 20 ký tự - hãy sửa đổi các quy tắc này nếu cần.
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysql_query("SELECT * FROM users WHERE username = $matches[0]");
} else {
echo "username not accepted";
}
Để chứng minh vấn đề này, hãy xem xét đoạn trích sau đây.
// supposed input
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name = '{$name}'");
Lời gọi hàm phải lấy một bản ghi từ bảng người dùng, trong đó cột tên khớp với tên được chỉ định bởi người dùng. Trong trường hợp bình thường, $ name sẽ chỉ chứa các ký tự chữ và số và có thể là khoảng trắng. Nhưng ở đây, bằng cách thêm một truy vấn hoàn toàn mới vào$name, cuộc gọi đến cơ sở dữ liệu biến thành một thảm họa. Truy vấn DELETE được đưa vào sẽ xóa tất cả các bản ghi khỏi người dùng.
May mắn thay, nếu bạn sử dụng MySQL, mysql_query()hàm không cho phép xếp chồng truy vấn hoặc thực hiện nhiều truy vấn trong một lệnh gọi hàm duy nhất. Nếu bạn cố gắng xếp chồng các truy vấn, cuộc gọi không thành công.
Tuy nhiên, các phần mở rộng cơ sở dữ liệu PHP khác, chẳng hạn như SQLite và PostgreSQL, vui vẻ thực hiện các truy vấn xếp chồng lên nhau, thực hiện tất cả các truy vấn được cung cấp trong một chuỗi và tạo ra một vấn đề bảo mật nghiêm trọng.
Ngăn chặn SQL Injection
Bạn có thể xử lý tất cả các ký tự thoát một cách thông minh bằng các ngôn ngữ lập trình như PERL và PHP. Phần mở rộng MySQL cho PHP cung cấp chức năngmysql_real_escape_string() để thoát các ký tự đầu vào đặc biệt đối với MySQL.
if (get_magic_quotes_gpc()) {
$name = stripslashes($name); } $name = mysql_real_escape_string($name); mysql_query("SELECT * FROM users WHERE name = '{$name}'");
Các Quandary THÍCH
Để giải quyết vấn đề LIKE, cơ chế thoát tùy chỉnh phải chuyển đổi các ký tự% và _ do người dùng cung cấp thành các ký tự. Sử dụngaddcslashes(), một hàm cho phép bạn chỉ định một phạm vi ký tự để thoát.
$sub = addcslashes(mysql_real_escape_string("%something_"), "%_"); // $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
Cách đơn giản nhất để xuất dữ liệu bảng thành tệp văn bản là sử dụng SELECT...INTO OUTFILE câu lệnh xuất trực tiếp kết quả truy vấn thành tệp trên máy chủ lưu trữ.
Xuất dữ liệu với câu lệnh SELECT ... INTO OUTFILE
Cú pháp cho câu lệnh này kết hợp một SELECT ra lệnh với INTO OUTFILE filenamecuối cùng. Định dạng đầu ra mặc định giống như đối với lệnh LOAD DATA. Vì vậy, câu lệnh sau xuất khẩututorials_tbl bàn vào /tmp/tutorials.txt dưới dạng tệp được phân tách bằng tab, được kết thúc bằng nguồn cấp dữ liệu.
mysql> SELECT * FROM tutorials_tbl
-> INTO OUTFILE '/tmp/tutorials.txt';
Bạn có thể thay đổi định dạng đầu ra bằng cách sử dụng các tùy chọn khác nhau để chỉ ra cách trích dẫn và phân tách các cột và bản ghi. Để xuất bảng tutorial_tbl ở định dạng CSV với các dòng kết thúc bằng CRLF, hãy sử dụng mã sau.
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
Các SELECT ... INTO OUTFILE có các thuộc tính sau:
Tệp đầu ra được tạo trực tiếp bởi máy chủ MySQL, vì vậy tên tệp phải chỉ ra nơi bạn muốn tệp được ghi trên máy chủ lưu trữ máy chủ. Không có phiên bản LOCAL nào của câu lệnh tương tự nhưLOCAL phiên bản của LOAD DATA.
Bạn phải có MySQL FILE đặc quyền để thực hiện SELECT ... INTO tuyên bố.
Tệp đầu ra không được tồn tại. Điều này ngăn MySQL chặn các tệp có thể quan trọng.
Bạn nên có một tài khoản đăng nhập trên máy chủ lưu trữ hoặc một số cách để lấy tệp từ máy chủ đó. Nếu khôngSELECT ... INTO OUTFILE rất có thể lệnh sẽ không có giá trị đối với bạn.
Dưới UNIX, tệp được tạo world readablevà thuộc sở hữu của máy chủ MySQL. Điều này có nghĩa là mặc dù bạn có thể đọc tệp, nhưng bạn có thể không xóa được.
Xuất bảng dưới dạng dữ liệu thô
Các mysqldumpchương trình được sử dụng để sao chép hoặc sao lưu các bảng và cơ sở dữ liệu. Nó có thể ghi đầu ra bảng dưới dạngRaw Datafile hoặc như một tập hợp của INSERT câu lệnh tạo lại các bản ghi trong bảng.
Để kết xuất bảng dưới dạng tệp dữ liệu, bạn phải chỉ định --tab tùy chọn cho biết thư mục, nơi bạn muốn máy chủ MySQL ghi tệp.
Ví dụ, để kết xuất tutorials_tbl bảng từ TUTORIALS cơ sở dữ liệu vào một tệp trong /tmp thư mục, sử dụng một lệnh như hình dưới đây.
$ mysqldump -u root -p --no-create-info \
--tab=/tmp tutorials tutorials_tbl
password ******
Xuất nội dung bảng hoặc định nghĩa ở định dạng SQL
Để xuất một bảng ở định dạng SQL sang một tệp, hãy sử dụng lệnh hiển thị bên dưới.
$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txt
password ******
Thao tác này sẽ tạo ra một tệp có nội dung như hình dưới đây.
-- MySQL dump 8.23
--
-- Host: localhost Database: TUTORIALS
---------------------------------------------------------
-- Server version 3.23.58
--
-- Table structure for table `tutorials_tbl`
--
CREATE TABLE tutorials_tbl (
tutorial_id int(11) NOT NULL auto_increment,
tutorial_title varchar(100) NOT NULL default '',
tutorial_author varchar(40) NOT NULL default '',
submission_date date default NULL,
PRIMARY KEY (tutorial_id),
UNIQUE KEY AUTHOR_INDEX (tutorial_author)
) TYPE = MyISAM;
--
-- Dumping data for table `tutorials_tbl`
--
INSERT INTO tutorials_tbl
VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO tutorials_tbl
VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO tutorials_tbl
VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');
Để kết xuất nhiều bảng, hãy đặt tên tất cả chúng theo sau là đối số tên cơ sở dữ liệu. Để kết xuất toàn bộ cơ sở dữ liệu, không đặt tên bất kỳ bảng nào sau cơ sở dữ liệu như được hiển thị trong khối mã sau.
$ mysqldump -u root -p TUTORIALS > database_dump.txt
password ******
Để sao lưu tất cả cơ sở dữ liệu có sẵn trên máy chủ của bạn, hãy sử dụng mã sau.
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******
Tùy chọn --all-database có sẵn trong phiên bản MySQL 3.23.12. Phương pháp này có thể được sử dụng để thực hiện chiến lược sao lưu cơ sở dữ liệu.
Sao chép Bảng hoặc Cơ sở dữ liệu sang Máy chủ khác
Nếu bạn muốn sao chép bảng hoặc cơ sở dữ liệu từ máy chủ MySQL này sang máy chủ MySQL khác, hãy sử dụng mysqldump với tên cơ sở dữ liệu và tên bảng.
Chạy lệnh sau tại máy chủ nguồn. Điều này sẽ kết xuất toàn bộ cơ sở dữ liệu vàodump.txt tập tin.
$ mysqldump -u root -p database_name table_name > dump.txt
password *****
Bạn có thể sao chép cơ sở dữ liệu hoàn chỉnh mà không cần sử dụng tên bảng cụ thể như đã giải thích ở trên.
Bây giờ, tập tin ftp dump.txt trên một máy chủ khác và sử dụng lệnh sau. Trước khi chạy lệnh này, hãy đảm bảo rằng bạn đã tạo database_name trên máy chủ đích.
$ mysql -u root -p database_name < dump.txt
password *****
Một cách khác để thực hiện điều này mà không cần sử dụng tệp trung gian là gửi đầu ra của mysqldump trực tiếp qua mạng đến máy chủ MySQL từ xa. Nếu bạn có thể kết nối với cả hai máy chủ từ máy chủ lưu trữ cơ sở dữ liệu nguồn, hãy sử dụng lệnh sau (Đảm bảo rằng bạn có quyền truy cập trên cả hai máy chủ).
$ mysqldump -u root -p database_name \
| mysql -h other-host.com database_name
Trong mysqldump, một nửa lệnh kết nối với máy chủ cục bộ và ghi kết quả kết xuất vào đường ống. Phần còn lại của lệnh kết nối với máy chủ MySQL từ xa trên other-host.com. Nó đọc đường dẫn để nhập và gửi từng câu lệnh đến máy chủ other-host.com.
Có hai cách đơn giản trong MySQL để tải dữ liệu vào cơ sở dữ liệu MySQL từ một tệp đã sao lưu trước đó.
Nhập dữ liệu với TẢI DỮ LIỆU
MySQL cung cấp một câu lệnh LOAD DATA hoạt động như một trình tải dữ liệu hàng loạt. Đây là một câu lệnh ví dụ đọc một tệpdump.txt từ thư mục hiện tại của bạn và tải nó vào bảng mytbl trong cơ sở dữ liệu hiện tại.
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
Nếu LOCAL từ khóa không có, MySQL tìm kiếm tệp dữ liệu trên máy chủ lưu trữ bằng cách sử dụng looking into absolute pathname, chỉ định đầy đủ vị trí của tệp, bắt đầu từ gốc của hệ thống tệp. MySQL đọc tệp từ vị trí đã cho.
Theo mặc định, LOAD DATA giả sử rằng các tệp dữ liệu chứa 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 trong một dòng được phân tách bằng các tab.
Để chỉ định định dạng tệp một cách rõ ràng, hãy sử dụng FIELDS mệnh đề để mô tả các đặc điểm của các trường trong một dòng và LINESmệnh đề để xác định trình tự kết thúc dòng. SauLOAD DATA câu lệnh chỉ định rằng tệp dữ liệu chứa các giá trị được phân tách bằng dấu hai chấm và dòng kết thúc bằng ký tự xuống dòng và ký tự dòng mới.
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
-> FIELDS TERMINATED BY ':'
-> LINES TERMINATED BY '\r\n';
Lệnh LOAD DATA giả sử các cột trong tệp dữ liệu có cùng thứ tự với các cột trong bảng. Nếu điều đó không đúng, bạn có thể chỉ định một danh sách để chỉ ra các cột trong bảng mà các cột tệp dữ liệu sẽ được tải vào. Giả sử bảng của bạn có các cột a, b và c, nhưng các cột liên tiếp trong tệp dữ liệu tương ứng với các cột b, c và a.
Bạn có thể tải tệp như được hiển thị trong khối mã sau.
mysql> LOAD DATA LOCAL INFILE 'dump.txt'
-> INTO TABLE mytbl (b, c, a);
Nhập dữ liệu với mysqlimport
MySQL cũng bao gồm một chương trình tiện ích có tên mysqlimport hoạt động như một trình bao bọc xung quanh TẢI DỮ LIỆU, để bạn có thể tải các tệp đầu vào trực tiếp từ dòng lệnh.
Để tải dữ liệu từ dump.txt thành mytbl, sử dụng lệnh sau tại dấu nhắc UNIX.
$ mysqlimport -u root -p --local database_name dump.txt
password *****
Nếu bạn dùng mysqlimport, các tùy chọn dòng lệnh cung cấp các mã định dạng. Cácmysqlimport các lệnh tương ứng với hai lệnh trước LOAD DATA các câu lệnh trông như được hiển thị trong khối mã sau.
$ mysqlimport -u root -p --local --fields-terminated-by = ":" \
--lines-terminated-by = "\r\n" database_name dump.txt
password *****
Thứ tự mà bạn chỉ định các tùy chọn không quan trọng đối với mysqlimport, ngoại trừ việc tất cả chúng phải đứng trước tên cơ sở dữ liệu.
Các mysqlimport tuyên bố sử dụng --columns tùy chọn để chỉ định thứ tự cột -
$ mysqlimport -u root -p --local --columns=b,c,a \
database_name dump.txt
password *****
Xử lý trích dẫn và ký tự đặc biệt
Mệnh đề FIELDS có thể chỉ định các tùy chọn định dạng khác ngoài TERMINATED BY. Theo mặc định, LOAD DATA giả định rằng các giá trị không được trích dẫn và diễn giải dấu gạch chéo ngược (\) như một ký tự thoát cho các ký tự đặc biệt. Để chỉ rõ ký tự trích dẫn giá trị, hãy sử dụngENCLOSED BYchỉ huy. MySQL sẽ tách ký tự đó khỏi phần cuối của các giá trị dữ liệu trong quá trình xử lý đầu vào. Để thay đổi ký tự thoát mặc định, hãy sử dụngESCAPED BY.
Khi bạn chỉ định ENCLOSED BY để chỉ ra rằng các ký tự trích dẫn nên được loại bỏ khỏi các giá trị dữ liệu, bạn có thể bao gồm ký tự trích dẫn theo nghĩa đen bên trong các giá trị dữ liệu bằng cách nhân đôi nó hoặc đặt trước nó bằng ký tự thoát.
Ví dụ: nếu dấu ngoặc kép và ký tự thoát là "và \, giá trị đầu vào "a""b\"c" sẽ được hiểu là a"b"c.
Đối với mysqlimport, các tùy chọn dòng lệnh tương ứng để chỉ định giá trị trích dẫn và thoát là --fields-enclosed-by và --fields-escaped-by.