Bí danh trường hợp MySQL

Bạn không thể tham chiếu một cột được xác định trong mệnh đề CHỌN [FINAL_DATE33 trong trường hợp của bạn] trong mệnh đề WHERE trong cùng một CHỌN. Đó là bởi vì WHERE được thực hiện trước CHỌN nên FINAL_DATE33 không tồn tại khi tính toán WHERE. Cách giải quyết là sử dụng CTE. Cho nên

;WITH cte AS
[SELECT id,
  CASE WHEN ITEM IN[10,20,30] THEN FINAL_DATE END AS FINAL_DATE33,
  NAME
FROM EMP]
SELECT id, 
  FINAL_DATE33, 
  NAME
FROM cte
WHERE FINAL_DATE33 > '01/01/2012'

Cũng lưu ý rằng chữ ngày phải được đặt trong dấu nháy đơn

tom

Tên cơ sở dữ liệu, bảng, chỉ mục, cột và bí danh là các định danh. Phần này mô tả cú pháp cho phép đối với mã định danh trong MySQL

Bảng sau đây mô tả độ dài tối đa và các ký tự được phép cho từng loại mã định danh

Mã định danhĐộ dài tối đa [byte]Ký tự được phépDatabase64Bất kỳ ký tự nào được phép trong tên thư mục, ngoại trừ '/', '\' hoặc '. ’Table64Bất kỳ ký tự nào được cho phép trong tên tệp, ngoại trừ ‘/’, ‘\’ hoặc ‘. ’Cột64Tất cả ký tự Index64Tất cả ký tựBí danh255Tất cả ký tự

Ngoài các hạn chế được lưu ý trong bảng, không mã định danh nào có thể chứa ASCII 0 hoặc byte có giá trị 255. Tên cơ sở dữ liệu, bảng và cột không được kết thúc bằng ký tự khoảng trắng. Trước MySQL 4. 1, các ký tự trích dẫn định danh không được sử dụng trong định danh

Bắt đầu với MySQL 4. 1, số nhận dạng được lưu trữ bằng Unicode [UTF8]. Điều này áp dụng cho các mã định danh trong định nghĩa bảng được lưu trữ trong. frm và các mã định danh được lưu trữ trong các bảng cấp trong cơ sở dữ liệu mysql. Mặc dù mã định danh Unicode có thể bao gồm các ký tự nhiều byte, lưu ý rằng độ dài tối đa được hiển thị trong bảng là số byte. Nếu một mã định danh chứa các ký tự nhiều byte, thì số lượng ký tự được phép trong mã định danh sẽ ít hơn giá trị được hiển thị trong bảng

Một định danh có thể được trích dẫn hoặc không được trích dẫn. Nếu một mã định danh là một từ dành riêng hoặc chứa các ký tự đặc biệt, bạn phải trích dẫn từ đó bất cứ khi nào bạn đề cập đến nó. Để biết danh sách các từ dành riêng, hãy xem phần “Xử lý các từ dành riêng trong MySQL”. Các ký tự đặc biệt là những ký tự bên ngoài bộ ký tự chữ và số từ bộ ký tự hiện tại, ‘_’ và ‘$’

Ký tự trích dẫn định danh là backtick [‘`’]

mysql> SELECT * FROM `select` WHERE `select`.id > 100;

Nếu chế độ SQL của máy chủ bao gồm tùy chọn chế độ ANSI_QUOTES, thì cũng có thể trích dẫn các mã định danh bằng dấu ngoặc kép

mysql> CREATE TABLE "test" [col INT];
ERROR 1064: You have an error in your SQL syntax. [...]
mysql> SET sql_mode='ANSI_QUOTES';
mysql> CREATE TABLE "test" [col INT];
Query OK, 0 rows affected [0.00 sec]

Xem phần có tên là Chế độ máy chủ SQL

Kể từ MySQL 4. 1, các ký tự trích dẫn của mã định danh có thể được bao gồm trong mã định danh nếu bạn trích dẫn mã định danh. Nếu ký tự được bao gồm trong mã định danh giống với ký tự được sử dụng để trích dẫn mã định danh, hãy nhân đôi ký tự. Câu lệnh sau đây tạo một bảng có tên a`b chứa một cột có tên c"d

mysql> CREATE TABLE `a``b` [`c"d` INT];

Trích dẫn định danh đã được giới thiệu trong MySQL 3. 23. 6 để cho phép sử dụng các mã định danh là các từ dành riêng hoặc có chứa các ký tự đặc biệt. trước 3. 23. 6, bạn không thể sử dụng số nhận dạng yêu cầu dấu ngoặc kép, vì vậy các quy tắc cho số nhận dạng hợp pháp sẽ hạn chế hơn

  • Tên có thể bao gồm các ký tự chữ và số từ bộ ký tự hiện tại, '_' và '$'. Bộ ký tự mặc định là ISO-8859-1 [Latin1]. Điều này có thể được thay đổi bằng tùy chọn --default-character-set thành mysqld. Xem phần có tên “Bộ ký tự được sử dụng cho dữ liệu và sắp xếp”

  • Tê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, tên có thể bắt đầu bằng một chữ số; . Tuy nhiên, một tên không được trích dẫn không thể chỉ bao gồm các chữ số

  • Bạn không thể sử dụng '. ’ 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 [xem phần có tên là “Bộ định danh hạn định”]

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 số 1e+1, tùy thuộc vào ngữ cảnh

MySQL cho phép các tên bao gồm một mã định danh hoặc nhiều mã định danh. Các thành phần của tên nhiều phần nên được phân tách bằng dấu chấm [‘. '] nhân vật. Các phần đầu tiên của tên nhiều phần đóng vai trò là từ hạn định ảnh hưởng đến ngữ cảnh trong đó định danh cuối cùng được diễn giải

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ộtMeaningcol_nameCột col_name từ bất kỳ bảng nào được sử dụng trong truy vấn chứa một cột có tên đó. tbl_name. col_nameCột col_name từ bảng tbl_name của cơ sở dữ liệu mặc định. db_name. tbl_name. col_nameCột col_name từ bảng tbl_name của cơ sở dữ liệu db_name. Cú pháp này không khả dụng trước MySQL 3. 22

Nếu bất kỳ thành phần nào của tên có nhiều phần cần trích dẫn, hãy trích dẫn chúng riêng lẻ thay vì trích dẫn toàn bộ tên. Ví dụ: `bảng của tôi`. `my-column` là hợp pháp, trong khi `my-table. my-colum` không phải là

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. Giả sử rằng 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. Bạn phải đủ điều kiện với tên bảng là t1. c hoặc t2. c để cho biết bạn muốn nói đến bảng nào. Tương tự, để truy xuất từ ​​bảng t trong cơ sở dữ liệu db1 và từ bảng t trong cơ sở dữ liệu db2 trong cùng một câu lệnh, 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 là '. ' nhân vật

Phân biệt chữ hoa chữ thường

Trong MySQL, cơ sở dữ liệu tương ứng với các thư mục trong thư mục dữ liệu. Các bảng trong cơ sở dữ liệu tương ứng với ít nhất một tệp trong thư mục cơ sở dữ liệu [và có thể nhiều hơn, tùy thuộc vào công cụ lưu trữ]. 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. Một ngoại lệ đáng chú ý là Mac OS X, dựa trên Unix nhưng sử dụng loại hệ thống tệp mặc định [HFS+] không phân biệt chữ hoa chữ thường. Tuy nhiên, Mac OS X cũng hỗ trợ các ổ đĩa UFS, phân biệt chữ hoa chữ thường giống như trên bất kỳ Unix nào. Xem phần có tên “Phần mở rộng MySQL cho SQL chuẩn”

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 trên một số nền tảng, 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 trường hợp 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 * FROM my_table WHERE MY_TABLE.col=1;

Tên cột, tên chỉ mục và bí danh cột không phân biệt chữ hoa chữ thường trên bất kỳ nền tảng nào

Bí danh bảng có phân biệt chữ hoa chữ thường trước MySQL 4. 1. 1. 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 col_name FROM tbl_name AS a
    -> WHERE a.col_name = 1 OR A.col_name = 2;

Nếu bạn gặp khó khăn trong việc nhớ chữ cái được phép cho tên bảng và cơ sở dữ liệu, hãy áp dụng một 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

Cách tên bảng và cơ sở dữ liệu được lưu trữ trên đĩa và được sử dụng trong MySQL được xác định bởi biến hệ thống Lower_case_table_names mà bạn có thể đặt khi khởi động mysqld. Lower_case_table_names có thể nhận một trong các giá trị sau

ValueMeaning0Table và tên cơ sở dữ liệu được lưu trữ trên đĩa bằng cách sử dụng chữ cái được chỉ định trong câu lệnh CREATE TABLE hoặc CREATE DATABASE. So sánh tên có phân biệt chữ hoa chữ thường. Đây là mặc định trên các hệ thống Unix. Lưu ý rằng nếu bạn buộc giá trị này thành 0 với --lower-case-table-names=0 trên hệ thống tệp phân biệt chữ hoa chữ thường và truy cập tên bảng MyISAM bằng cách sử dụng các chữ cái khác nhau, điều này có thể dẫn đến hỏng chỉ mục. 1Tên bảng được lưu bằng chữ thường trên đĩa và so sánh tên không phân biệt chữ hoa chữ thường. MySQL 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. Hành vi này cũng áp dụng cho tên cơ sở dữ liệu kể từ MySQL 4. 0. 2 và bí danh bảng kể từ 4. 1. 1. Giá trị này là giá trị mặc định trên hệ thống Windows và Mac OS X. 2Tên bảng và cơ sở dữ liệu được lưu trữ trên đĩa bằng cách sử dụng chữ cái được chỉ định trong câu lệnh CREATE TABLE hoặc CREATE DATABASE, nhưng MySQL chuyển đổi chúng thành chữ thường khi tra cứu. So sánh tên không phân biệt chữ hoa chữ thường. Ghi chú. Điều này chỉ hoạt động trên các hệ thống tệp không phân biệt chữ hoa chữ thường. Tên bảng InnoDB được lưu trữ bằng chữ thường, như đối với Lower_case_table_names=1. Đặt Lower_case_table_names thành 2 có thể được thực hiện kể từ MySQL 4. 0. 18

Nếu bạn chỉ sử dụng MySQL trên một nền tảng, thông thường bạn không phải thay đổi biến Lower_case_table_names. Tuy nhiên, bạn có thể gặp khó khăn nếu muốn chuyển bảng giữa các nền tảng khác nhau về phân biệt chữ hoa chữ thường của hệ thống tệp. Ví dụ: trên Unix, bạn có thể có hai bảng khác nhau có tên my_table và MY_TABLE, nhưng trên Windows, các tên đó được coi là giống nhau. Để tránh các sự cố truyền dữ liệu bắt nguồn từ cơ sở dữ liệu hoặc chữ cái tên bảng, bạn có hai tùy chọn

  • Sử dụng Lower_case_table_names=1 trên tất cả các hệ thống. Điều bất lợi chính với điều này là khi bạn sử dụng SHOW TABLES hoặc SHOW DATABASES, bạn sẽ không thấy tên trong chữ cái gốc của chúng

  • Sử dụng Lower_case_table_names=0 trên Unix và Lower_case_table_names=2 trên Windows. Điều này bảo tồn chữ cái của cơ sở dữ liệu và tên bảng. Điều bất lợi của điều này là bạn phải đảm bảo rằng các truy vấn của bạn luôn tham chiếu đến tên bảng và cơ sở dữ liệu của bạn với ký tự chính xác trên Windows. Nếu bạn chuyển các truy vấn của mình sang Unix, trong đó chữ hoa là quan trọng, chúng sẽ không hoạt động nếu chữ hoa không chính xác

Lưu ý rằng trước khi đặt Lower_case_table_names thành 1 trên Unix, trước tiên bạn phải chuyển đổi tên bảng và cơ sở dữ liệu cũ thành chữ thường trước khi khởi động lại mysqld

Các bí danh SQL có phân biệt chữ hoa chữ thường không?

Tên bí danh. Theo mặc định, bí danh bảng phân biệt chữ hoa chữ thường . Bạn có thể chỉ định bí danh trong bất kỳ chữ cái nào [chữ hoa, chữ thường hoặc hỗn hợp], nhưng nếu bạn sử dụng bí danh đó nhiều lần trong một câu lệnh, bạn phải sử dụng cùng một chữ cái cho mỗi lần. Nếu biến hệ thống Lower_case_table_names khác 0, bí danh bảng không phân biệt chữ hoa chữ thường.

Làm cách nào để sử dụng bí danh trong MySQL?

Trong MySQL, bạn có thể sử dụng bí danh cột trong mệnh đề ORDER BY , GROUP BY và HAVING để chỉ cột . Câu lệnh sau chọn các lệnh có tổng số tiền lớn hơn 60000. Nó sử dụng bí danh cột trong mệnh đề GROUP BY và HAVING. Lưu ý rằng bạn không thể sử dụng bí danh cột trong mệnh đề WHERE.

Bí danh có nghĩa là gì trong MySQL?

Bí danh SQL được dùng để đặt tên tạm thời cho bảng hoặc cột trong bảng . Bí danh thường được sử dụng để làm cho tên cột dễ đọc hơn. Bí danh chỉ tồn tại trong khoảng thời gian truy vấn đó. Bí danh được tạo bằng từ khóa AS.

Bạn có thể đặt hàng bằng bí danh trong MySQL không?

Có, bạn chắc chắn có thể sử dụng bí danh cột trong mệnh đề "đặt hàng theo" . Bạn có thể xác minh nó hoạt động với bảng "người dùng" mySql tích hợp. chọn Người dùng làm tên, Máy chủ từ thứ tự người dùng theo tên; .

Chủ Đề