Hướng dẫn select one column mysql - chọn một cột mysql

13.2.10 & NBSP; Chọn câu lệnh

SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr] ... [into_option] [FROM table_references [PARTITION partition_list]] [WHERE where_condition] [GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]] [HAVING where_condition] [WINDOW window_name AS (window_spec) [, window_name AS (window_spec)] ...] [ORDER BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [into_option] [FOR {UPDATE | SHARE} [OF tbl_name [, tbl_name] ...] [NOWAIT | SKIP LOCKED] | LOCK IN SHARE MODE] [into_option] into_option: { INTO OUTFILE 'file_name' [CHARACTER SET charset_name] export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name] ... }

mysql> SELECT 1 + 1 FROM DUAL; -> 26 được sử dụng để truy xuất các hàng được chọn từ một hoặc nhiều bảng và có thể bao gồm các hoạt động và các nghiên cứu phụ. Bắt đầu với các hoạt động MySQL 8.0.31, mysql> SELECT 1 + 1 FROM DUAL; -> 28 và mysql> SELECT 1 + 1 FROM DUAL; -> 29 cũng được hỗ trợ. Các toán tử mysql> SELECT 1 + 1 FROM DUAL; -> 27, mysql> SELECT 1 + 1 FROM DUAL; -> 28 và mysql> SELECT 1 + 1 FROM DUAL; -> 29 được mô tả chi tiết hơn sau này trong phần này. Xem thêm Phần & NBSP; 13.2.11, Sub Subqueries.

Một câu lệnh mysql> SELECT 1 + 1 FROM DUAL; -> 26 có thể bắt đầu với mệnh đề SELECT * FROM t1 INNER JOIN t2 ...4 để xác định các biểu thức bảng phổ biến có thể truy cập trong mysql> SELECT 1 + 1 FROM DUAL; -> 26. Xem phần & nbsp; 13.2.15, với (biểu thức bảng phổ biến).

Các mệnh đề được sử dụng phổ biến nhất của các câu lệnh mysql> SELECT 1 + 1 FROM DUAL; -> 26 là sau:

  • Mỗi SELECT * FROM t1 INNER JOIN t2 ...7 chỉ ra một cột mà bạn muốn truy xuất. Phải có ít nhất một SELECT * FROM t1 INNER JOIN t2 ...7.

  • SELECT * FROM t1 INNER JOIN t2 ...9 chỉ ra bảng hoặc bảng để lấy lại hàng. Cú pháp của nó được mô tả trong Phần & NBSP; 13.2.10.2, Điều khoản tham gia.

  • mysql> SELECT 1 + 1 FROM DUAL; -> 26 hỗ trợ lựa chọn phân vùng rõ ràng bằng mệnh đề SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...1 với danh sách các phân vùng hoặc phân vùng (hoặc cả hai) theo tên của bảng trong một SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...2 (xem Phần & NBSP; 13.2.10.2, Điều khoản tham gia. Trong trường hợp này, các hàng chỉ được chọn từ các phân vùng được liệt kê và bất kỳ phân vùng nào khác của bảng đều bị bỏ qua. Để biết thêm thông tin và ví dụ, xem Phần & NBSP; 24.5, Lựa chọn phân vùng.

  • Điều khoản SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...3, nếu được đưa ra, chỉ ra điều kiện hoặc điều kiện các hàng phải thỏa mãn để được chọn. SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...4 là một biểu thức đánh giá đúng cho mỗi hàng được chọn. Tuyên bố chọn tất cả các hàng nếu không có mệnh đề SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...3.

    Trong biểu thức SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...3, bạn có thể sử dụng bất kỳ chức năng và toán tử nào mà MySQL hỗ trợ, ngoại trừ các hàm tổng hợp (nhóm). Xem Phần & NBSP; 9.5, Biểu thức, và Chương & NBSP; 12, các chức năng và toán tử.

mysql> SELECT 1 + 1 FROM DUAL; -> 26 cũng có thể được sử dụng để truy xuất các hàng được tính toán mà không cần tham chiếu đến bất kỳ bảng nào.

Ví dụ:

mysql> SELECT 1 + 1; -> 2

Bạn được phép chỉ định SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...8 dưới dạng tên bảng giả trong các tình huống không có bảng nào được tham chiếu:

mysql> SELECT 1 + 1 FROM DUAL; -> 2

SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...8 hoàn toàn là để thuận tiện cho những người yêu cầu tất cả các tuyên bố mysql> SELECT 1 + 1 FROM DUAL; -> 26 nên có SELECT id, * FROM t11 và có thể các điều khoản khác. MySQL có thể bỏ qua các điều khoản. MySQL không yêu cầu SELECT id, * FROM t12 nếu không có bảng nào được tham chiếu.

Nói chung, các mệnh đề được sử dụng phải được đưa ra theo chính xác thứ tự được hiển thị trong mô tả cú pháp. Ví dụ, mệnh đề SELECT id, * FROM t13 phải đến sau bất kỳ mệnh đề SELECT id, * FROM t14 nào và trước bất kỳ mệnh đề SELECT id, * FROM t15 nào. Điều khoản SELECT id, * FROM t16, nếu có, có thể xuất hiện ở bất kỳ vị trí nào được chỉ định bởi mô tả cú pháp, nhưng trong một câu lệnh nhất định chỉ có thể xuất hiện một lần, không phải ở nhiều vị trí. Để biết thêm thông tin về SELECT id, * FROM t16, xem Phần & NBSP; 13.2.10.1, Chọn Chọn ... vào câu lệnh.

Danh sách các điều khoản SELECT * FROM t1 INNER JOIN t2 ...7 bao gồm danh sách chọn cho biết cột nào cần truy xuất. Điều khoản chỉ định một cột hoặc biểu thức hoặc có thể sử dụng ____ 59-Shorthand:

  • Một danh sách chọn chỉ có thể sử dụng một danh sách không đủ tiêu chuẩn SELECT id, * FROM t19 làm tốc ký để chọn tất cả các cột từ tất cả các bảng:

    SELECT * FROM t1 INNER JOIN t2 ...
  • ________ 61.* Có thể được sử dụng làm tốc ký đủ điều kiện để chọn tất cả các cột từ bảng được đặt tên:

    SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...
  • Nếu một bảng có các cột vô hình, SELECT id, * FROM t19 và ________ 61.* Không bao gồm chúng. Để được bao gồm, các cột vô hình phải được tham chiếu rõ ràng.

  • Việc sử dụng SELECT id, * FROM t19 không đủ tiêu chuẩn với các mục khác trong danh sách chọn có thể tạo ra lỗi phân tích cú pháp. Ví dụ:

    SELECT id, * FROM t1

    Để tránh vấn đề này, hãy sử dụng ________ 61.* Tham khảo đủ điều kiện:

    SELECT id, t1.* FROM t1

    Sử dụng đủ điều kiện ________ 61.* Tài liệu tham khảo cho mỗi bảng trong danh sách chọn:

    SELECT AVG(score), t1.* FROM t1 ...

Danh sách sau đây cung cấp thông tin bổ sung về các điều khoản mysql> SELECT 1 + 1 FROM DUAL; -> 26 khác:

  • Một SELECT * FROM t1 INNER JOIN t2 ...7 có thể được đưa ra một bí danh bằng cách sử dụng SELECT id, t1.* FROM t19. Bí danh được sử dụng làm tên cột của biểu thức và có thể được sử dụng trong các mệnh đề SELECT id, * FROM t14, SELECT AVG(score), t1.* FROM t1 ...1 hoặc SELECT id, * FROM t13. Ví dụ:

    SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;

    Từ khóa SELECT AVG(score), t1.* FROM t1 ...3 là tùy chọn khi răng cưa SELECT * FROM t1 INNER JOIN t2 ...7 với một định danh. Ví dụ trước có thể đã được viết như thế này:

    SELECT CONCAT(last_name,', ',first_name) full_name FROM mytable ORDER BY full_name;

    Tuy nhiên, vì SELECT AVG(score), t1.* FROM t1 ...3 là tùy chọn, một vấn đề tinh tế có thể xảy ra nếu bạn quên dấu phẩy giữa hai biểu thức SELECT * FROM t1 INNER JOIN t2 ...7: MySQL diễn giải cái thứ hai là tên bí danh. Ví dụ: trong tuyên bố sau, SELECT AVG(score), t1.* FROM t1 ...7 được coi là một tên bí danh:

    mysql> SELECT 1 + 1; -> 20

    Vì lý do này, việc sử dụng SELECT AVG(score), t1.* FROM t1 ...3 là tốt khi chỉ định các bí danh cột.

    Không được phép tham khảo một bí danh cột trong mệnh đề SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...3, vì giá trị cột có thể chưa được xác định khi mệnh đề SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...3 được thực thi. Xem phần & nbsp; B.3.4.4, Các vấn đề về các bí danh cột.

  • Điều khoản từ SELECT * FROM t1 INNER JOIN t2 ...9 chỉ ra bảng hoặc bảng để lấy lại hàng. Nếu bạn đặt tên nhiều hơn một bảng, bạn đang thực hiện tham gia. Để biết thông tin về Cú pháp tham gia, xem Phần & NBSP; 13.2.10.2, Lệnh tham gia. Đối với mỗi bảng được chỉ định, bạn có thể chỉ định một bí danh.FROM SELECT * FROM t1 INNER JOIN t2 ...9 clause indicates the table or tables from which to retrieve rows. If you name more than one table, you are performing a join. For information on join syntax, see Section 13.2.10.2, “JOIN Clause”. For each table specified, you can optionally specify an alias.

    mysql> SELECT 1 + 1; -> 21

    Việc sử dụng các gợi ý chỉ mục cung cấp cho trình tối ưu hóa thông tin về cách chọn các chỉ mục trong quá trình xử lý truy vấn. Để biết mô tả về cú pháp để chỉ định các gợi ý này, xem Phần & NBSP; 8.9.4, Gợi ý chỉ số.

    Bạn có thể sử dụng SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;2 như một cách khác để buộc MySQL thích quét chính thay vì quét bảng. Xem Phần & NBSP; 5.1.8, Biến hệ thống máy chủ của Cameron.

  • Bạn có thể tham khảo một bảng trong cơ sở dữ liệu mặc định là SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;3 hoặc là ________ 84 .________ 83 để chỉ định cơ sở dữ liệu một cách rõ ràng. Bạn có thể tham khảo một cột là SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;6, ________ 83 .________ 86 hoặc ________ 84 .________ 83 .________ 86. Bạn không cần chỉ định một tiền tố SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;3 hoặc ____ 84 .____ 83 cho một tham chiếu cột trừ khi tham chiếu sẽ không rõ ràng. Xem Phần & NBSP; 9.2.2, Vòng loại định danh của Hồi giáo, để biết các ví dụ về sự mơ hồ yêu cầu các biểu mẫu tham chiếu cột rõ ràng hơn.

  • Một tham chiếu bảng có thể được đặt bí danh bằng cách sử dụng SELECT id, t1.* FROM t11 là SELECT CONCAT(last_name,', ',first_name) full_name FROM mytable ORDER BY full_name;6 hoặc SELECT CONCAT(last_name,', ',first_name) full_name FROM mytable ORDER BY full_name;7. Những tuyên bố này tương đương:

    mysql> SELECT 1 + 1; -> 22
  • Các cột được chọn cho đầu ra có thể được đề cập trong các mệnh đề SELECT AVG(score), t1.* FROM t1 ...1 và SELECT id, * FROM t14 bằng tên cột, bí danh cột hoặc vị trí cột. Vị trí cột là số nguyên và bắt đầu với 1:

    mysql> SELECT 1 + 1; -> 23

    Để sắp xếp theo thứ tự ngược lại, hãy thêm từ khóa mysql> SELECT 1 + 1; -> 200 (giảm dần) vào tên của cột trong mệnh đề SELECT AVG(score), t1.* FROM t1 ...1 mà bạn đang sắp xếp. Mặc định là thứ tự tăng dần; Điều này có thể được chỉ định rõ ràng bằng cách sử dụng từ khóa mysql> SELECT 1 + 1; -> 202.

    Nếu SELECT AVG(score), t1.* FROM t1 ...1 xảy ra trong biểu thức truy vấn được đặt dấu ngoặc đơn và cũng được áp dụng trong truy vấn bên ngoài, kết quả không được xác định và có thể thay đổi trong phiên bản tương lai của MySQL.

    Việc sử dụng các vị trí cột được không dùng nữa vì cú pháp đã bị xóa khỏi tiêu chuẩn SQL.

  • Trước MySQL 8.0.13, MySQL đã hỗ trợ tiện ích mở rộng cú pháp không tiêu chuẩn cho phép các nhà thiết kế rõ ràng mysql> SELECT 1 + 1; -> 202 hoặc mysql> SELECT 1 + 1; -> 200 cho các cột mysql> SELECT 1 + 1; -> 206. MySQL 8.0.12 và sau đó hỗ trợ SELECT AVG(score), t1.* FROM t1 ...1 với các chức năng nhóm để việc sử dụng tiện ích mở rộng này không còn cần thiết nữa. .

    mysql> SELECT 1 + 1; -> 24

    Kể từ MySQL 8.0.13, tiện ích mở rộng SELECT id, * FROM t14 không còn được hỗ trợ: mysql> SELECT 1 + 1; -> 202 hoặc mysql> SELECT 1 + 1; -> 200 Người chỉ định cho các cột mysql> SELECT 1 + 1; -> 206 không được phép.

  • Khi bạn sử dụng SELECT AVG(score), t1.* FROM t1 ...1 hoặc mysql> SELECT 1 + 1; -> 206 để sắp xếp một cột theo mysql> SELECT 1 + 1 FROM DUAL; -> 26, máy chủ sẽ sắp xếp các giá trị chỉ sử dụng số byte ban đầu được biểu thị bởi biến hệ thống mysql> SELECT 1 + 1; -> 216.

  • MySQL mở rộng việc sử dụng SELECT id, * FROM t14 để cho phép chọn các trường không được đề cập trong Điều khoản mysql> SELECT 1 + 1; -> 206. Nếu bạn không nhận được kết quả mà bạn mong đợi từ truy vấn của mình, vui lòng đọc mô tả của SELECT id, * FROM t14 được tìm thấy trong Phần & NBSP; 12.20, các chức năng tổng hợp.

  • SELECT id, * FROM t14 cho phép một công cụ sửa đổi mysql> SELECT 1 + 1; -> 221. Xem Phần & NBSP; 12.20.2, Nhóm của các công cụ sửa đổi.

    Trước đây, nó không được phép sử dụng mysql> SELECT 1 + 1; -> 222 trong một truy vấn có công cụ sửa đổi mysql> SELECT 1 + 1; -> 221. Hạn chế này được dỡ bỏ kể từ MySQL 8.0.12. Xem Phần & NBSP; 12.20.2, Nhóm của các công cụ sửa đổi.

  • Điều khoản SELECT id, * FROM t13, giống như mệnh đề SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...3, chỉ định các điều kiện lựa chọn. Điều khoản SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...3 chỉ định các điều kiện trên các cột trong danh sách chọn, nhưng không thể tham khảo các hàm tổng hợp. Điều khoản SELECT id, * FROM t13 chỉ định các điều kiện trên các nhóm, thường được hình thành bởi mệnh đề SELECT id, * FROM t14. Kết quả truy vấn chỉ bao gồm các nhóm thỏa mãn các điều kiện SELECT id, * FROM t13. (Nếu không có SELECT id, * FROM t14, tất cả các hàng hoàn toàn tạo thành một nhóm tổng hợp duy nhất.)

    Điều khoản SELECT id, * FROM t13 được áp dụng gần như cuối cùng, ngay trước khi các mục được gửi đến máy khách, không có tối ưu hóa. (mysql> SELECT 1 + 1; -> 232 được áp dụng sau SELECT id, * FROM t13.)

    Tiêu chuẩn SQL yêu cầu SELECT id, * FROM t13 chỉ phải tham chiếu các cột trong mệnh đề SELECT id, * FROM t14 hoặc các cột được sử dụng trong các hàm tổng hợp. Tuy nhiên, MySQL hỗ trợ một phần mở rộng cho hành vi này và cho phép SELECT id, * FROM t13 tham khảo các cột trong danh sách mysql> SELECT 1 + 1 FROM DUAL; -> 26 và các cột ở các nhóm phụ bên ngoài.

    Nếu mệnh đề SELECT id, * FROM t13 đề cập đến một cột mơ hồ, một cảnh báo xảy ra. Trong tuyên bố sau, mysql> SELECT 1 + 1; -> 239 không rõ ràng vì nó được sử dụng như cả bí danh và tên cột:

    mysql> SELECT 1 + 1; -> 25

    Ưu tiên được đưa ra cho hành vi SQL tiêu chuẩn, vì vậy nếu tên cột SELECT id, * FROM t13 được sử dụng cả trong SELECT id, * FROM t14 và làm cột bí danh trong danh sách cột Chọn, ưu tiên được đưa ra cho cột trong cột SELECT id, * FROM t14.

  • Không sử dụng SELECT id, * FROM t13 cho các mục nên nằm trong mệnh đề SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...3. Ví dụ: không viết như sau:

    mysql> SELECT 1 + 1; -> 26

    Viết cái này thay thế:

    mysql> SELECT 1 + 1; -> 27
  • Điều khoản SELECT id, * FROM t13 có thể đề cập đến các hàm tổng hợp, mà mệnh đề SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...3 không thể:

    mysql> SELECT 1 + 1; -> 28

    (Điều này không hoạt động trong một số phiên bản cũ của MySQL.)

  • MySQL cho phép tên cột trùng lặp. Đó là, có thể có nhiều hơn một SELECT * FROM t1 INNER JOIN t2 ...7 với cùng tên. Đây là một phần mở rộng cho SQL tiêu chuẩn. Bởi vì MySQL cũng cho phép SELECT id, * FROM t14 và SELECT id, * FROM t13 tham khảo các giá trị SELECT * FROM t1 INNER JOIN t2 ...7, điều này có thể dẫn đến sự mơ hồ:

    mysql> SELECT 1 + 1; -> 29

    Trong tuyên bố đó, cả hai cột đều có tên mysql> SELECT 1 + 1; -> 251. Để đảm bảo rằng cột chính xác được sử dụng để nhóm, hãy sử dụng các tên khác nhau cho mỗi SELECT * FROM t1 INNER JOIN t2 ...7.

  • Điều khoản mysql> SELECT 1 + 1; -> 253, nếu có, định nghĩa các cửa sổ có tên có thể được đề cập bởi các chức năng cửa sổ. Để biết chi tiết, xem Phần & NBSP; 12.21.4, có tên Windows Windows.

  • MySQL giải quyết các tham chiếu cột hoặc bí danh không đủ tiêu chuẩn trong các mệnh đề SELECT AVG(score), t1.* FROM t1 ...1 bằng cách tìm kiếm trong các giá trị SELECT * FROM t1 INNER JOIN t2 ...7, sau đó trong các cột của các bảng trong mệnh đề SELECT id, * FROM t11. Đối với các điều khoản SELECT id, * FROM t14 hoặc SELECT id, * FROM t13, nó tìm kiếm mệnh đề SELECT id, * FROM t11 trước khi tìm kiếm trong các giá trị SELECT * FROM t1 INNER JOIN t2 ...7. .

  • Điều khoản mysql> SELECT 1 + 1; -> 232 có thể được sử dụng để hạn chế số lượng hàng được trả về bởi câu lệnh mysql> SELECT 1 + 1 FROM DUAL; -> 26. mysql> SELECT 1 + 1; -> 232 có một hoặc hai đối số số, cả hai phải là hằng số nguyên không âm, với các ngoại lệ này:

    • Trong các câu lệnh đã chuẩn bị, các tham số mysql> SELECT 1 + 1; -> 232 có thể được chỉ định bằng cách sử dụng các dấu hiệu giữ chỗ mysql> SELECT 1 + 1; -> 268.

    • Trong các chương trình được lưu trữ, các tham số mysql> SELECT 1 + 1; -> 232 có thể được chỉ định bằng cách sử dụng các tham số thường quy có giá trị nguyên hoặc các biến cục bộ.

    Với hai đối số, đối số đầu tiên chỉ định độ lệch của hàng đầu tiên để quay lại và thứ hai chỉ định số lượng hàng tối đa để trả về. Phần bù của hàng ban đầu là 0 (không phải 1):

    mysql> SELECT 1 + 1 FROM DUAL; -> 20

    Để lấy tất cả các hàng từ một phần bù nhất định cho đến cuối tập kết quả, bạn có thể sử dụng một số số lớn cho tham số thứ hai. Tuyên bố này lấy tất cả các hàng từ hàng thứ 96 đến cuối cùng:

    mysql> SELECT 1 + 1 FROM DUAL; -> 21

    Với một đối số, giá trị chỉ định số lượng hàng để trả về từ đầu tập kết quả:

    mysql> SELECT 1 + 1 FROM DUAL; -> 22

    Nói cách khác, mysql> SELECT 1 + 1; -> 270 tương đương với mysql> SELECT 1 + 1; -> 271.

    Đối với các tuyên bố đã chuẩn bị, bạn có thể sử dụng trình giữ chỗ. Các câu sau đây trả về một hàng từ bảng mysql> SELECT 1 + 1; -> 272:

    mysql> SELECT 1 + 1 FROM DUAL; -> 23

    Các câu sau đây trả lại các hàng thứ hai đến thứ sáu từ bảng mysql> SELECT 1 + 1; -> 272:

    mysql> SELECT 1 + 1 FROM DUAL; -> 24

    Để tương thích với PostgreSQL, MySQL cũng hỗ trợ cú pháp bù mysql> SELECT 1 + 1; -> 274 mysql> SELECT 1 + 1; -> 275.

    Nếu mysql> SELECT 1 + 1; -> 232 xảy ra trong biểu thức truy vấn được đặt dấu ngoặc đơn và cũng được áp dụng trong truy vấn bên ngoài, kết quả không được xác định và có thể thay đổi trong phiên bản tương lai của MySQL.

  • Mẫu mysql> SELECT 1 + 1; -> 277 của mysql> SELECT 1 + 1 FROM DUAL; -> 26 cho phép kết quả truy vấn được ghi vào tệp hoặc được lưu trữ trong các biến. Để biết thêm thông tin, xem Phần & NBSP; 13.2.10.1, Chọn chọn ... vào câu lệnh.

  • Nếu bạn sử dụng mysql> SELECT 1 + 1; -> 279 với công cụ lưu trữ sử dụng khóa trang hoặc hàng, các hàng được kiểm tra bởi truy vấn được ghi lại cho đến khi kết thúc giao dịch hiện tại.

    Bạn không thể sử dụng mysql> SELECT 1 + 1; -> 279 như một phần của mysql> SELECT 1 + 1 FROM DUAL; -> 26 trong một tuyên bố như mysql> SELECT 1 + 1; -> 282 Chọn ... từ mysql> SELECT 1 + 1; -> 283 .... (Nếu bạn cố gắng làm như vậy, câu lệnh bị từ chối với lỗi không thể cập nhật bảng 'mysql> SELECT 1 + 1; -> 283' trong khi ' mysql> SELECT 1 + 1; -> 285 'đang được tạo.)Can't update table 'mysql> SELECT 1 + 1; -> 283' while 'mysql> SELECT 1 + 1; -> 285' is being created.)

    mysql> SELECT 1 + 1; -> 286 và mysql> SELECT 1 + 1; -> 287 Đặt các khóa được chia sẻ cho phép các giao dịch khác đọc các hàng được kiểm tra nhưng không cập nhật hoặc xóa chúng. mysql> SELECT 1 + 1; -> 286 và mysql> SELECT 1 + 1; -> 287 tương đương. Tuy nhiên, mysql> SELECT 1 + 1; -> 290, như mysql> SELECT 1 + 1; -> 279, hỗ trợ mysql> SELECT 1 + 1; -> 292, mysql> SELECT 1 + 1; -> 293 và của các tùy chọn SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;3. mysql> SELECT 1 + 1; -> 286 là một sự thay thế cho mysql> SELECT 1 + 1; -> 296, nhưng mysql> SELECT 1 + 1; -> 297 vẫn có sẵn để tương thích ngược.OF SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;3 options. mysql> SELECT 1 + 1; -> 286 is a replacement for mysql> SELECT 1 + 1; -> 296, but mysql> SELECT 1 + 1; -> 297 remains available for backward compatibility.

    mysql> SELECT 1 + 1; -> 292 gây ra truy vấn mysql> SELECT 1 + 1; -> 299 hoặc mysql> SELECT 1 + 1; -> 286 để thực thi ngay lập tức, trả lại lỗi nếu không thể có được khóa hàng do khóa được giữ bởi một giao dịch khác.

    mysql> SELECT 1 + 1; -> 293 gây ra truy vấn mysql> SELECT 1 + 1; -> 299 hoặc mysql> SELECT 1 + 1; -> 286 để thực thi ngay lập tức, không bao gồm các hàng từ tập kết quả bị khóa bởi một giao dịch khác.

    Các tùy chọn mysql> SELECT 1 + 1; -> 292 và mysql> SELECT 1 + 1; -> 293 không an toàn cho sao chép dựa trên tuyên bố.

    Ghi chú

    Các truy vấn bỏ qua các hàng bị khóa trả về một cái nhìn không nhất quán của dữ liệu. mysql> SELECT 1 + 1; -> 293 do đó không phù hợp cho công việc giao dịch nói chung. Tuy nhiên, nó có thể được sử dụng để tránh sự tranh chấp khóa khi nhiều phiên truy cập vào cùng một bảng giống như hàng đợi.

    Của SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;3 áp dụng các truy vấn mysql> SELECT 1 + 1; -> 279 và mysql> SELECT 1 + 1; -> 290 cho các bảng được đặt tên. Ví dụ: applies mysql> SELECT 1 + 1; -> 279 and mysql> SELECT 1 + 1; -> 290 queries to named tables. For example:

    mysql> SELECT 1 + 1 FROM DUAL; -> 25

    Tất cả các bảng được tham chiếu bởi khối truy vấn đều bị khóa khi SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;3 bị bỏ qua. Do đó, sử dụng mệnh đề khóa mà không có SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;3 kết hợp với một mệnh đề khóa khác trả về một lỗi. Chỉ định cùng một bảng trong nhiều điều khoản khóa trả về một lỗi. Nếu bí danh được chỉ định là tên bảng trong câu lệnh mysql> SELECT 1 + 1 FROM DUAL; -> 26, mệnh đề khóa chỉ có thể sử dụng bí danh. Nếu câu lệnh mysql> SELECT 1 + 1 FROM DUAL; -> 26 không chỉ định bí danh một cách rõ ràng, mệnh đề khóa chỉ có thể chỉ định tên bảng thực tế.OF SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;3 is omitted. Consequently, using a locking clause without OF SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;3 in combination with another locking clause returns an error. Specifying the same table in multiple locking clauses returns an error. If an alias is specified as the table name in the mysql> SELECT 1 + 1 FROM DUAL; -> 26 statement, a locking clause may only use the alias. If the mysql> SELECT 1 + 1 FROM DUAL; -> 26 statement does not specify an alias explicitly, the locking clause may only specify the actual table name.

    Để biết thêm thông tin về mysql> SELECT 1 + 1; -> 279 và mysql> SELECT 1 + 1; -> 286, xem Phần & NBSP; 15.7.2.4, Khóa khóa đọc. Để biết thêm thông tin về các tùy chọn mysql> SELECT 1 + 1; -> 292 và mysql> SELECT 1 + 1 FROM DUAL; -> 217, hãy xem khóa đọc đồng thời với Nowait và Bỏ qua bị khóa.

Theo từ khóa mysql> SELECT 1 + 1 FROM DUAL; -> 26, bạn có thể sử dụng một số công cụ sửa đổi ảnh hưởng đến hoạt động của câu lệnh. mysql> SELECT 1 + 1 FROM DUAL; -> 219, mysql> SELECT 1 + 1 FROM DUAL; -> 220 và các công cụ sửa đổi bắt đầu bằng mysql> SELECT 1 + 1 FROM DUAL; -> 221 là các phần mở rộng MySQL cho SQL tiêu chuẩn.

  • Bộ điều chỉnh mysql> SELECT 1 + 1 FROM DUAL; -> 222 và mysql> SELECT 1 + 1 FROM DUAL; -> 223 chỉ định xem các hàng trùng lặp có nên được trả về hay không. mysql> SELECT 1 + 1 FROM DUAL; -> 222 (mặc định) chỉ định rằng tất cả các hàng phù hợp phải được trả về, bao gồm cả các bản sao. mysql> SELECT 1 + 1 FROM DUAL; -> 223 Chỉ định loại bỏ các hàng trùng lặp khỏi tập kết quả. Đó là một lỗi để chỉ định cả hai công cụ sửa đổi. mysql> SELECT 1 + 1 FROM DUAL; -> 226 là một từ đồng nghĩa với mysql> SELECT 1 + 1 FROM DUAL; -> 223.

    Trong MySQL 8.0.12 trở lên, mysql> SELECT 1 + 1 FROM DUAL; -> 223 có thể được sử dụng với một truy vấn cũng sử dụng mysql> SELECT 1 + 1; -> 221. (Lỗi #87450, lỗi #26640100)

  • mysql> SELECT 1 + 1 FROM DUAL; -> 219 dành ưu tiên cao hơn mysql> SELECT 1 + 1 FROM DUAL; -> 26 so với câu lệnh cập nhật bảng. Bạn chỉ nên sử dụng điều này cho các truy vấn rất nhanh và phải được thực hiện cùng một lúc. Truy vấn mysql> SELECT 1 + 1 FROM DUAL; -> 232 được phát hành trong khi bảng bị khóa để đọc các lần chạy ngay cả khi có một câu lệnh cập nhật đang chờ bảng miễn phí. Điều này chỉ ảnh hưởng đến các công cụ lưu trữ chỉ sử dụng khóa cấp bảng (chẳng hạn như mysql> SELECT 1 + 1 FROM DUAL; -> 233, mysql> SELECT 1 + 1 FROM DUAL; -> 234 và mysql> SELECT 1 + 1 FROM DUAL; -> 235).

    mysql> SELECT 1 + 1 FROM DUAL; -> 219 không thể được sử dụng với các câu lệnh mysql> SELECT 1 + 1 FROM DUAL; -> 26 là một phần của mysql> SELECT 1 + 1 FROM DUAL; -> 27.

  • mysql> SELECT 1 + 1 FROM DUAL; -> 220 buộc trình tối ưu hóa tham gia các bảng theo thứ tự chúng được liệt kê trong Điều khoản SELECT id, * FROM t11. Bạn có thể sử dụng điều này để tăng tốc một truy vấn nếu trình tối ưu hóa tham gia các bảng theo thứ tự không tối ưu. mysql> SELECT 1 + 1 FROM DUAL; -> 220 cũng có thể được sử dụng trong danh sách SELECT * FROM t1 INNER JOIN t2 ...9. Xem Phần & NBSP; 13.2.10.2, Lệnh tham gia mệnh đề.

    mysql> SELECT 1 + 1 FROM DUAL; -> 220 không áp dụng cho bất kỳ bảng nào mà trình tối ưu hóa coi là bảng mysql> SELECT 1 + 1 FROM DUAL; -> 244 hoặc mysql> SELECT 1 + 1 FROM DUAL; -> 245. Một bảng như vậy tạo ra một hàng duy nhất, được đọc trong giai đoạn tối ưu hóa thực thi truy vấn và các tham chiếu đến các cột của nó được thay thế bằng các giá trị cột thích hợp trước khi tiến hành thực thi truy vấn. Các bảng này xuất hiện đầu tiên trong gói truy vấn được hiển thị bởi mysql> SELECT 1 + 1 FROM DUAL; -> 246. Xem Phần & NBSP; 8.8.1, Tối ưu hóa các truy vấn với giải thích. Ngoại lệ này có thể không áp dụng cho các bảng mysql> SELECT 1 + 1 FROM DUAL; -> 244 hoặc mysql> SELECT 1 + 1 FROM DUAL; -> 245 được sử dụng ở phía ________ 249 được bổ sung của một tham gia bên ngoài (nghĩa là bảng bên phải của mysql> SELECT 1 + 1 FROM DUAL; -> 250 hoặc bảng bên trái của mysql> SELECT 1 + 1 FROM DUAL; -> 251.

  • mysql> SELECT 1 + 1 FROM DUAL; -> 252 hoặc mysql> SELECT 1 + 1 FROM DUAL; -> 253 có thể được sử dụng với SELECT id, * FROM t14 hoặc mysql> SELECT 1 + 1 FROM DUAL; -> 223 để nói với trình tối ưu hóa rằng tập kết quả có nhiều hàng hoặc nhỏ, tương ứng. Đối với mysql> SELECT 1 + 1 FROM DUAL; -> 252, MySQL trực tiếp sử dụng các bảng tạm thời dựa trên đĩa nếu chúng được tạo và thích sắp xếp để sử dụng bảng tạm thời có khóa trên các phần tử SELECT id, * FROM t14. Đối với mysql> SELECT 1 + 1 FROM DUAL; -> 253, MySQL sử dụng các bảng tạm thời trong bộ nhớ để lưu trữ bảng kết quả thay vì sử dụng sắp xếp. Điều này thường không cần thiết.

  • mysql> SELECT 1 + 1 FROM DUAL; -> 259 buộc kết quả sẽ được đưa vào một bảng tạm thời. Điều này giúp MySQL giải phóng các khóa bàn sớm và giúp trong trường hợp mất nhiều thời gian để gửi kết quả được đặt cho máy khách. Công cụ sửa đổi này chỉ có thể được sử dụng cho các câu lệnh mysql> SELECT 1 + 1 FROM DUAL; -> 26 cấp cao nhất, không phải cho các mục tiêu phụ hoặc theo sau mysql> SELECT 1 + 1 FROM DUAL; -> 27.

  • mysql> SELECT 1 + 1 FROM DUAL; -> 262 bảo MySQL tính toán có bao nhiêu hàng trong tập hợp kết quả, coi thường bất kỳ mệnh đề mysql> SELECT 1 + 1; -> 232 nào. Số lượng hàng sau đó có thể được lấy bằng mysql> SELECT 1 + 1 FROM DUAL; -> 264. Xem Phần & NBSP; 12.16, Chức năng thông tin của Google.

    Ghi chú

    Công cụ sửa đổi truy vấn mysql> SELECT 1 + 1 FROM DUAL; -> 262 và hàm mysql> SELECT 1 + 1 FROM DUAL; -> 266 đi kèm được không dùng nữa kể từ MySQL 8.0.17; Hy vọng chúng sẽ bị xóa trong một phiên bản tương lai của MySQL. Xem mô tả mysql> SELECT 1 + 1 FROM DUAL; -> 266 để biết thông tin về một chiến lược thay thế.

  • Bộ điều chỉnh mysql> SELECT 1 + 1 FROM DUAL; -> 268 và mysql> SELECT 1 + 1 FROM DUAL; -> 269 đã được sử dụng với bộ đệm truy vấn trước MySQL 8.0. Bộ đệm truy vấn đã được xóa trong MySQL 8.0. Công cụ sửa đổi mysql> SELECT 1 + 1 FROM DUAL; -> 268 cũng đã được gỡ bỏ. mysql> SELECT 1 + 1 FROM DUAL; -> 269 không được chấp nhận và không có tác dụng; Hy vọng nó sẽ được loại bỏ trong một bản phát hành MySQL trong tương lai.

Chủ đề