MySQL có giao diện SQL rất phức tạp nhưng trực quan và dễ học. Chương này mô tả các lệnh, loại và chức năng khác nhau mà bạn sẽ cần biết để sử dụng MySQL hiệu quả và hiệu quả. Chương này cũng đóng vai trò là tài liệu tham khảo cho tất cả các chức năng có trong MySQL. Để sử dụng chương này một cách hiệu quả, bạn có thể thấy hữu ích khi tham khảo các mục lục khác nhau.
chữ. Cách viết chuỗi và số
Phần này mô tả các cách khác nhau để viết chuỗi và số trong MySQL. Nó cũng bao gồm các sắc thái khác nhau và "các vấn đề" mà bạn có thể gặp phải khi xử lý các kiểu cơ bản này trong MySQL
Chuỗi là một chuỗi các ký tự, được bao quanh bởi các ký tự trích dẫn đơn ['] hoặc trích dẫn kép [“] [chỉ trích dẫn đơn nếu bạn chạy ở chế độ ANSI]. ví dụ
'a string' "another string"
Trong một chuỗi, các chuỗi nhất định có ý nghĩa đặc biệt. Mỗi chuỗi này bắt đầu bằng dấu gạch chéo ngược [
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+2], được gọi là ký tự thoát. MySQL nhận ra các chuỗi thoát sau
\0
Ký tự ASCII 0 [NUL]
\'Một ký tự nháy đơn [']
\"Ký tự trích dẫn kép [
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+3]\ b
Một ký tự xóa lùi
\NMột ký tự dòng mới
\ rMột ký tự xuống dòng
\tMột ký tự tab
\zASCII[26] [Control-Z]. Ký tự này có thể được mã hóa để cho phép bạn khắc phục sự cố ASCII[26] là viết tắt của END-OF-FILE trên Windows. [ASCII[26] sẽ gây ra sự cố nếu bạn cố gắng sử dụng cơ sở dữ liệu mysql < tên tệp. ]
\\Dấu gạch chéo ngược [
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+2] ký tự\%
Một ký tự
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+5. Điều này được sử dụng để tìm kiếm các trường hợp bằng chữ của
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+5 trong ngữ cảnh mà nếu không thì
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+5 sẽ được hiểu là ký tự đại diện. Xem Phần 6. 3. 2. 1\_
Một ký tự
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+8. Điều này được sử dụng để tìm kiếm các trường hợp bằng chữ của
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+8 trong ngữ cảnh mà nếu không thì
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+8 sẽ được hiểu là ký tự đại diện. Xem Phần 6. 3. 2. 1
Lưu ý rằng nếu bạn sử dụng
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+01 hoặc
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+02 trong một số ngữ cảnh chuỗi, chúng sẽ trả về chuỗi
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+01 và
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+02 chứ không phải
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+5 và
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+8
Có một số cách để bao gồm các trích dẫn trong một chuỗi
Một ' bên trong một chuỗi được trích dẫn bằng ' có thể được viết là “
Một " bên trong một chuỗi được trích dẫn bằng " có thể được viết là “”
Bạn có thể đặt trước ký tự trích dẫn bằng một ký tự thoát [
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+
2]Một ' bên trong một chuỗi được trích dẫn bằng " không cần xử lý đặc biệt và không cần nhân đôi hoặc thoát. Theo cách tương tự, " bên trong một chuỗi được trích dẫn bằng ' không cần xử lý đặc biệt
Các câu lệnh CHỌN được hiển thị ở đây minh họa cách hoạt động của trích dẫn và thoát
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+
Nếu bạn muốn chèn dữ liệu nhị phân vào một cột chuỗi [chẳng hạn như BLOB], các ký tự sau phải được biểu thị bằng các chuỗi thoát
NUL
mã ASCII 0. Bạn nên biểu thị điều này bằng
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+08 [dấu gạch chéo ngược và ký tự ASCII
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+09]\
ASCII 92, dấu gạch chéo ngược. Thể hiện điều này bằng
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+00'
ASCII 39, trích dẫn đơn. Đại diện cho điều này bởi
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+2‘"
ASCII 34, trích dẫn kép. Đại diện cho điều này bởi
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+2“
Nếu bạn viết mã C, bạn có thể sử dụng hàm API C mysql_real_escape_string[ ] để thoát các ký tự cho câu lệnh INSERT. Xem Phần 8. 4. 2. Trong Perl, bạn có thể sử dụng phương thức trích dẫn của gói DBI để chuyển đổi các ký tự đặc biệt thành các chuỗi thoát thích hợp. Xem Phần 8. 2. 2
Bạn nên sử dụng hàm thoát trên bất kỳ chuỗi nào có thể chứa bất kỳ ký tự đặc biệt nào được liệt kê trước đó
Ngoài ra, nhiều API MySQL cung cấp một số loại khả năng giữ chỗ cho phép bạn chèn các điểm đánh dấu đặc biệt vào chuỗi truy vấn, sau đó liên kết các giá trị dữ liệu với chúng khi bạn đưa ra truy vấn. Trong trường hợp này, API sẽ tự động thoát các ký tự đặc biệt trong các giá trị cho bạn
Số nguyên được biểu diễn dưới dạng một dãy các chữ số. phao sử dụng. như một dấu tách thập phân. Một trong hai loại số có thể được đặt trước
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+03 để biểu thị giá trị âm
Ví dụ về số nguyên hợp lệ
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+0
Ví dụ về số dấu phẩy động hợp lệ
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+0
Một số nguyên có thể được sử dụng trong ngữ cảnh dấu phẩy động;
MySQL hỗ trợ các giá trị thập lục phân. Trong ngữ cảnh số, chúng hoạt động giống như một số nguyên [độ chính xác 64 bit]. Trong bối cảnh chuỗi, chúng hoạt động giống như một chuỗi nhị phân trong đó mỗi cặp chữ số hex được chuyển đổi thành một ký tự
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+6
Cú pháp x'hexstring' [mới trong 4. 0] dựa trên ANSI SQL và cú pháp 0x dựa trên ODBC. Chuỗi thập lục phân thường được ODBC sử dụng để cung cấp giá trị cho các cột BLOB. Bạn có thể chuyển đổi một chuỗi hoặc một số thành hệ thập lục phân bằng hàm HEX[]
Giá trị NULL có nghĩa là “không có dữ liệu” và khác với các giá trị như 0 đối với kiểu số hoặc chuỗi rỗng đối với kiểu chuỗi. Xem Phần A. 5. 3
NULL có thể được đại diện bởi \N khi sử dụng định dạng nhập hoặc xuất tệp văn bản [LOAD DATA INFILE, SELECT. INTO OUTFILE]. Xem Phần 6. 4. 9
Cơ sở dữ liệu, bảng, chỉ mục, cột và tên bí danh
Tên cơ sở dữ liệu, bảng, chỉ mục, cột và bí danh đều tuân theo cùng một quy tắc trong MySQL. Bảng sau đây cho biết độ dài và ký tự được phép
Lưu ý rằng các quy tắc đã thay đổi bắt đầu từ MySQL Phiên bản 3. 23. 6 khi chúng tôi giới thiệu trích dẫn số nhận dạng [cơ sở dữ liệu, bảng và tên cột] với '. " cũng sẽ hoạt động để trích dẫn số nhận dạng nếu bạn chạy ở chế độ ANSI. Xem Phần 1. 7. 2
định danh
chiều dài tối đa
Ký tự được phép
cơ sở dữ liệu
64
Bất kỳ ký tự nào được cho phép trong tên thư mục ngoại trừ
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+04 hoặc
Cái bàn
64
Bất kỳ ký tự nào được cho phép trong tên tệp, ngoại trừ
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+04 hoặc
Cột
64
Tất cả nhân vật
bí danh
255
Tất cả nhân vật
Lưu ý rằng ngoài điều này, bạn không thể có ASCII[0] hoặc ASCII[255] hoặc ký tự trích dẫn trong mã định danh
Lưu ý rằng nếu mã định danh là một từ bị hạn chế hoặc chứa các ký tự đặc biệt, bạn phải luôn trích dẫn từ đó bằng ' khi sử dụng
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+9
Trong các phiên bản trước của MySQL, quy tắc đặt tên như sau
Tên có thể bao gồm các ký tự chữ và số từ bộ ký tự hiện tại cũng như
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+
8 vàmysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+
07. Bộ ký tự mặc định là ISO-8859-1 Latin1; . Xem Phần 4. 6. 1Tên có thể bắt đầu bằng bất kỳ ký tự nào hợp pháp trong tên. Đặc biệt, một tên có thể bắt đầu bằng một chữ số [điều này khác với nhiều hệ thống cơ sở dữ liệu khác. ]. Tuy nhiên, một tên không thể chỉ bao gồm các chữ số
Bạn không thể sử dụng. ký tự trong tên vì nó được sử dụng để mở rộng định dạng mà bạn có thể tham chiếu đến các cột
Bạn không nên sử dụng các tên như 1e vì biểu thức như 1e+1 không rõ ràng. Nó có thể được hiểu là biểu thức 1e + 1 hoặc là số 1e+1
Trong MySQL, bạn có thể tham chiếu đến một cột bằng bất kỳ biểu mẫu nào sau đây
Tham chiếu cột
Nghĩa
col_name
Cột col_name từ bất kỳ bảng nào được sử dụng trong truy vấn đều chứa cột có tên đó
tbl_name. col_name
Cột col_name từ bảng tbl_name của cơ sở dữ liệu hiện tại
db_name. tbl_name. col_name
Cột col_name từ bảng tbl_name của cơ sở dữ liệu db_name. Biểu mẫu này có sẵn trong Phiên bản MySQL 3. 22 hoặc muộn hơn
`tên_cột`
Một cột là một từ khóa hoặc chứa các ký tự đặc biệt
Bạn không cần chỉ định tbl_name hoặc db_name. tbl_name tiền tố cho tham chiếu cột trong câu lệnh trừ khi tham chiếu đó không rõ ràng. Ví dụ: giả sử mỗi bảng t1 và t2 chứa một cột c và bạn truy xuất c trong câu lệnh SELECT sử dụng cả t1 và t2. Trong trường hợp này, c không rõ ràng vì nó không phải là duy nhất trong số các bảng được sử dụng trong câu lệnh, vì vậy bạn phải cho biết bạn muốn nói đến bảng nào bằng cách viết t1. c hoặc t2. c. Tương tự, nếu bạn đang truy xuất từ một bảng t trong cơ sở dữ liệu db1 và từ một bảng t trong cơ sở dữ liệu db2, bạn phải gọi các cột trong các bảng đó là db1. t. col_name và db2. t. col_name
cú pháp. tbl_name có nghĩa là bảng tbl_name trong cơ sở dữ liệu hiện tại. Cú pháp này được chấp nhận để tương thích với ODBC vì một số chương trình ODBC có tiền tố tên bảng với một. nhân vật
Phân biệt chữ hoa chữ thường trong tên
Trong MySQL, cơ sở dữ liệu và bảng tương ứng với các thư mục và tệp trong các thư mục đó. Do đó, phân biệt chữ hoa chữ thường của hệ điều hành cơ bản xác định phân biệt chữ hoa chữ thường của tên cơ sở dữ liệu và bảng. Điều này có nghĩa là tên bảng và cơ sở dữ liệu không phân biệt chữ hoa chữ thường trong Windows và phân biệt chữ hoa chữ thường trong hầu hết các loại Unix [Mac OS X là một ngoại lệ]. Xem Phần 1. 7. 3
Ghi chú. mặc dù tên bảng và cơ sở dữ liệu không phân biệt chữ hoa chữ thường đối với Windows, nhưng bạn không nên tham chiếu đến một cơ sở dữ liệu hoặc bảng nhất định bằng cách sử dụng các chữ hoa chữ thường khác nhau trong cùng một truy vấn. Truy vấn sau đây sẽ không hoạt động vì nó đề cập đến một bảng dưới dạng my_table và MY_TABLE
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+2
Tên cột và bí danh cột không phân biệt chữ hoa chữ thường trong mọi trường hợp
Bí danh trên bảng phân biệt chữ hoa chữ thường. Truy vấn sau đây sẽ không hoạt động vì nó đề cập đến bí danh vừa là a vừa là A
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+3
Nếu bạn gặp khó khăn trong việc ghi nhớ chữ cái cho tên bảng và cơ sở dữ liệu, hãy áp dụng quy ước nhất quán, chẳng hạn như luôn tạo cơ sở dữ liệu và bảng bằng cách sử dụng tên chữ thường
Một cách để tránh vấn đề này là bắt đầu mysqld với -O Lower_case_table_names=1. Theo mặc định, tùy chọn này là 1 trên Windows và 0 trên Unix
Nếu Lower_case_table_names là 1, MySQL sẽ chuyển đổi tất cả các tên bảng thành chữ thường khi lưu trữ và tra cứu. Lưu ý rằng nếu bạn thay đổi tùy chọn này, trước tiên bạn cần chuyển đổi tên bảng cũ thành chữ thường trước khi bắt đầu mysqld
MySQL hỗ trợ các biến cụ thể theo luồng với cú pháp @variablename. Tên biến có thể bao gồm các ký tự chữ và số từ bộ ký tự hiện tại và cả
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+8,
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+07 và. . Bộ ký tự mặc định là ISO-8859-1 Latin1; . Xem Phần 4. 6. 1
Các biến không cần phải được khởi tạo. Chúng chứa NULL theo mặc định và có thể lưu trữ giá trị số nguyên, thực hoặc chuỗi. Tất cả các biến cho một luồng sẽ tự động được giải phóng khi luồng thoát
Bạn có thể đặt một biến bằng cú pháp SET
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+6
Bạn cũng có thể gán giá trị cho một biến trong các câu lệnh khác với SET. Tuy nhiên, trong trường hợp này toán tử gán là. = chứ không phải = vì = được dành riêng để so sánh trong các câu lệnh không phải SET
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+7
Biến người dùng có thể được sử dụng khi biểu thức được phép. Lưu ý rằng điều này hiện không bao gồm các ngữ cảnh trong đó một số được yêu cầu rõ ràng, chẳng hạn như trong mệnh đề GIỚI HẠN của câu lệnh CHỌN hoặc mệnh đề BỎ QUA số LINES của câu lệnh LOAD DATA
Ghi chú. trong câu lệnh CHỌN, mỗi biểu thức chỉ được đánh giá khi nó được gửi tới máy khách. Điều này có nghĩa là trong mệnh đề HAVING, GROUP BY hoặc ORDER BY, bạn không thể tham chiếu đến một biểu thức liên quan đến các biến được đặt trong phần SELECT. Ví dụ: câu lệnh sau sẽ không hoạt động như mong đợi
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+0
Lý do là @aa sẽ không chứa giá trị của hàng hiện tại, nhưng giá trị của id cho hàng được chấp nhận trước đó
Máy chủ MySQL hỗ trợ các kiểu nhận xét # đến cuối dòng, -- đến cuối dòng và /* trong dòng hoặc nhiều dòng */
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+1
Lưu ý rằng kiểu nhận xét -- [dấu gạch ngang kép] yêu cầu bạn phải có ít nhất một khoảng trắng sau dấu gạch ngang thứ hai
Mặc dù máy chủ hiểu cú pháp nhận xét vừa được mô tả, nhưng có một số hạn chế về cách máy khách mysql phân tích cú pháp /*. */ bình luận
Các ký tự trích dẫn đơn và trích dẫn kép được sử dụng để biểu thị phần đầu của chuỗi được trích dẫn, ngay cả trong một nhận xét. Nếu trích dẫn không khớp với trích dẫn thứ hai trong nhận xét, trình phân tích cú pháp không nhận ra nhận xét đã kết thúc. Nếu bạn đang chạy mysql một cách tương tác, bạn có thể biết rằng nó đã bị nhầm lẫn như thế này vì lời nhắc thay đổi từ mysql> thành '> hoặc ">
Dấu chấm phẩy được sử dụng để biểu thị phần cuối của câu lệnh SQL hiện tại và bất cứ thứ gì theo sau nó để biểu thị phần đầu của câu lệnh tiếp theo
Những hạn chế này áp dụng cả khi bạn chạy mysql một cách tương tác và khi bạn đặt các lệnh trong một tệp và yêu cầu mysql đọc đầu vào của nó từ tệp đó với mysql < some-file
MySQL chỉ hỗ trợ kiểu nhận xét SQL
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+60 ANSI nếu dấu gạch ngang thứ hai được theo sau bởi khoảng trắng. Xem Phần 1. 7. 4. 7
MySQL có kén chọn các từ dành riêng không?
Một vấn đề phổ biến bắt nguồn từ việc cố gắng tạo một bảng có tên cột sử dụng tên của kiểu dữ liệu hoặc hàm được tích hợp trong MySQL, chẳng hạn như DẤU THỜI GIAN hoặc NHÓM. Bạn được phép làm điều đó [ví dụ: ABS là tên cột được phép], nhưng khoảng trắng không được phép giữa tên hàm và phần tiếp theo sau
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+61 khi sử dụng các hàm có tên cũng là tên cột
Các từ sau đây được dành riêng rõ ràng trong MySQL. Hầu hết chúng đều bị ANSI SQL92 cấm dưới dạng tên cột và/hoặc tên bảng [ví dụ: NHÓM]. Một số được dành riêng vì MySQL cần chúng và [hiện tại] đang sử dụng trình phân tích cú pháp yacc
Từ
Từ
Từ
CỘNG
TẤT CẢ CÁC
THAY ĐỔI
PHÂN TÍCH
VÀ
BẰNG
TĂNG DẦN
AUTO_INCREMENT
BDB
BERKELEYDB
Ở GIỮA
LỚN
nhị phân
BÃI
CẢ HAI
QUA
THÁC
TRƯỜNG HỢP
BIẾN ĐỔI
CHAR
NHÂN VẬT
CỘT
CỘT
HẠN CHẾ
TẠO RA
THÁNH GIÁ
NGAY HIỆN TẠI
THỜI ĐIỂM HIỆN TẠI
DẤU THỜI GIAN HIỆN TẠI
CƠ SỞ DỮ LIỆU
CƠ SỞ DỮ LIỆU
DAY_HOUR
DAY_MINUTE
DAY_SECOND
THÁNG MƯỜI HAI
SỐ THẬP PHÂN
MẶC ĐỊNH
TRÌ HOÃN
XÓA BỎ
DESC
MÔ TẢ
RIÊNG BIỆT
KHÁC BIỆT
GẤP ĐÔI
RƠI VÃI
KHÁC
GỬI KÈM
THOÁT KHỎI
TỒN TẠI
GIẢI THÍCH
LĨNH VỰC
TRÔI NỔI
VÌ
NGOẠI QUỐC
TỪ
TOÀN VĂN
CHỨC NĂNG
KHOẢN TRỢ CẤP
TẬP ĐOÀN
ĐANG CÓ
ƯU TIÊN CAO
GIỜ_PHÚT
HOUR_SECOND
NẾU
PHỚT LỜ
TRONG
MỤC LỤC
TRONG TẬP TIN
BÊN TRONG
INNODB
CHÈN
INSERT_ID
INT
số nguyên
THỜI GIAN
VÀO TRONG
LÀ
THAM GIA
CHÌA KHÓA
phím
GIẾT CHẾT
LAST_INSERT_ID
LÃNH ĐẠO
TRÁI
THÍCH
GIỚI HẠN
DÒNG
TRỌNG TẢI
KHÓA
DÀI
LONGBLOB
VĂN BẢN DÀI
ƯU TIÊN THẤP
MASTER_SERVER_ID
TRẬN ĐẤU
VỪABLOB
TRUNG BÌNH
TRUNG BÌNH
MIỀN TRUNG
PHÚT_SECOND
MRG_MYISAM
TỰ NHIÊN
KHÔNG PHẢI
VÔ GIÁ TRỊ
SỐ
TRÊN
TỐI ƯU HÓA
TÙY CHỌN
TÙY CHỌN
HOẶC
TRẬT TỰ
BÊN NGOÀI
NGOẠI TỆ
MỘT PHẦN
ĐỘ CHÍNH XÁC
SƠ CẤP
ĐẶC QUYỀN
THỦ TỤC
thanh lọc
ĐỌC
THỰC
NGƯỜI GIỚI THIỆU
ĐĂNG KÝ
ĐỔI TÊN
THAY THẾ
YÊU CẦU
HẠN CHẾ
TRẢ LẠI
THU HỒI
ĐÚNG
THÍCH
LỰA CHỌN
BỘ
TRÌNH DIỄN
NHỎ
SONAME
SQL_AUTO_IS_NULL
SQL_BIG_RESULT
SQL_BIG_SELECTS
SQL_BIG_TABLES
SQL_BUFFER_RESULT
SQL_CALC_FOUND_ROWS
SQL_LOG_BIN
SQL_LOG_OFF
SQL_LOG_UPDATE
SQL_LOW_PRIORITY_UPDATES
SQL_MAX_JOIN_SIZE
SQL_QUOTE_SHOW_CREATE
SQL_SAFE_UPDATES
SQL_SELECT_LIMIT
SQL_SLAVE_SKIP_COUNTER
SQL_SMALL_RESULT
SQL_WARNINGS
SSL
BẮT ĐẦU
STRAIGHT_JOIN
SỌC
CÁI BÀN
NHỮNG CÁI BÀN
CHẤM DỨT
SAU ĐÓ
TINYBLOB
TINYINT
TINYTEXT
ĐẾN
THEO DÕI
LIÊN HIỆP
DUY NHẤT
MỞ KHÓA
CHƯA KÝ
CẬP NHẬT
CÁCH SỬ DỤNG
SỬ DỤNG
SỬ DỤNG
GIÁ TRỊ
BIẾN THÂN
VARCHAR
THAY ĐỔI
KHI NÀO
Ở ĐÂU
VỚI
VIẾT
NĂM THÁNG
ZEROFILL
Các ký hiệu sau [từ bảng trước] không được ANSI SQL cho phép nhưng được MySQL cho phép dưới dạng tên cột/bảng. Điều này là do một số tên này là tên rất tự nhiên và rất nhiều người đã sử dụng chúng