Định danh trong MySQL

Chúng ta phải sử dụng dấu ngoặc kép với các từ dành riêng để sử dụng chúng làm định danh. Các trích dẫn có thể là đơn hoặc kép tùy thuộc vào chế độ SQL ANSI_QUOTES

Nếu chế độ này bị tắt thì ký tự trích dẫn định danh là dấu gạch ngược (“`”). Xem xét ví dụ sau, trong đó chúng tôi đã tạo một bảng có tên 'select' -

mysql> create table `select`(id int); Query OK, 0 rows affected (0.19 sec)

Nếu chế độ này được bật thì chúng ta có thể sử dụng backtick (“`”) và dấu ngoặc kép (“”) làm ký tự trích dẫn định danh. Xem xét ví dụ sau, trong đó chúng tôi đã tạo một bảng có tên là 'trigger' -

mysql> Create table "trigger" (id int); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"trigger" (id int)' at line 1 mysql> Set sql_mode = 'ANSI_Quotes'; Query OK, 0 rows affected (0.03 sec) mysql> Create table "trigger" (id int); Query OK, 0 rows affected (0.17 sec) mysql> Create table `DESCRIBE`(id int); Query OK, 0 rows affected (0.11 sec)

Các truy vấn ở trên cho thấy rằng chúng ta có thể sử dụng cả dấu ngoặc kép (“`”) và dấu ngoặc kép (“”) làm ký tự trích dẫn định danh sau khi bật chế độ ‘ANSI_QUOTES’

Mã định danh chỉ đơn giản là tên của bí danh, cơ sở dữ liệu, bảng, cột hoặc chỉ mục. Đó là cách bạn xác định duy nhất đối tượng đó. Trước khi bạn có thể bắt đầu tạo cơ sở dữ liệu và bảng của riêng mình, chúng ta nên thảo luận về những mã định danh nào hợp lệ trong MySQL

Nói chung, số nhận dạng có thể chứa bất kỳ ký tự nào , với những ngoại lệ này

  • Chúng không được chứa ký tự trích dẫn, ASCII(0) và ASCII(255)

  • Tên cơ sở dữ liệu có thể chứa bất kỳ ký tự nào được cho phép trong tên thư mục, nhưng không chứa các ký tự có ý nghĩa đặc biệt trong tên thư mục (/, \, và. ) vì lý do rõ ràng

  • Tên bảng có thể chứa bất kỳ ký tự nào được cho phép trong tên tệp, ngoại trừ. và /

Tất cả các số nhận dạng ngoại trừ bí danh có thể dài tối đa 64 ký tự. Tên bí danh (được trình bày trong Chương 7, "Truy vấn nâng cao") có thể dài tối đa 255 ký tự

Một quy tắc kỳ lạ về số nhận dạng trong MySQL là bạn có thể sử dụng các từ dành riêng làm số nhận dạng, miễn là chúng có dấu ngoặc kép xung quanh chúng. Ví dụ: bạn có thể có một bảng tên là TABLE. Tất nhiên, chỉ vì bạn có thể không có nghĩa là bạn nên làm, và đây là cách tốt nhất nên tránh. Ngay cả khi nó không làm bạn bối rối khi làm việc với hệ thống, nó có thể làm bối rối chương trình mysqldump, chương trình này thường được sử dụng để sao lưu

Có một danh sách ngắn các từ dành riêng mà MySQL sẽ cho phép bạn có số nhận dạng mà không cần trích dẫn. Điều này trái với tiêu chuẩn ANSI cho SQL, nhưng nó khá phổ biến trong sử dụng hàng ngày. Các ví dụ phổ biến nhất mà bạn sẽ thấy là NGÀY và DẤU THỜI GIAN được sử dụng làm tên cột

Hầu như mọi câu lệnh SQL đều sử dụng các mã định danh theo một cách nào đó để tham chiếu đến cơ sở dữ liệu hoặc các thành phần cấu thành của nó, chẳng hạn như bảng, dạng xem, cột, chỉ mục, quy trình được lưu trữ, trình kích hoạt hoặc sự kiện. Khi bạn đề cập đến các thành phần của cơ sở dữ liệu, các mã định danh phải tuân theo các quy tắc sau

Ký tự pháp lý trong định danh. Số nhận dạng không được trích dẫn có thể bao gồm các chữ cái Latinh a-z trong bất kỳ chữ cái nào, các chữ số 0-9, đô la, dấu gạch dưới và các ký tự mở rộng Unicode trong phạm vi U+0080 đến U+FFFF. Số nhận dạng có thể bắt đầu bằng bất kỳ ký tự nào hợp pháp trong số nhận dạng, bao gồm cả chữ số. Tuy nhiên, một mã định danh không được trích dẫn không thể bao gồm toàn bộ các chữ số vì điều đó sẽ khiến nó không thể phân biệt được với một số. Sự hỗ trợ của MySQL cho các mã định danh bắt đầu bằng một số hơi bất thường trong các hệ thống cơ sở dữ liệu. Nếu bạn sử dụng số nhận dạng như vậy, hãy đặc biệt cẩn thận nếu nó có chứa chữ 'E' hoặc 'e' vì những ký tự đó có thể dẫn đến các biểu thức không rõ ràng. Ví dụ: biểu thức 23e + 14 (có dấu cách bao quanh dấu '+') có nghĩa là cột 23e cộng với số 14, nhưng còn 23e+14 thì sao?

Các mã định danh có thể được trích dẫn (được phân tách) trong các ký tự backtick (‘`’), cho phép sử dụng bất kỳ ký tự nào ngoại trừ byte NUL hoặc ký tự bổ sung Unicode (U+10000 trở lên)

CREATE TABLE `my table` (`my-int-column` INT);

Trích dẫn rất hữu ích khi một mã định danh là một từ dành riêng cho SQL hoặc chứa khoảng trắng hoặc các ký tự đặc biệt khác. Việc trích dẫn một mã định danh cũng cho phép nó hoàn toàn là số, một điều không đúng với các mã định danh không được trích dẫn. Để bao gồm ký tự trích dẫn của mã định danh trong mã định danh được trích dẫn, hãy nhân đôi ký tự đó

Hệ điều hành của bạn có thể áp đặt các ràng buộc bổ sung đối với cơ sở dữ liệu và số nhận dạng bảng. Xem Phần 11. 2. 6, “Các ràng buộc của hệ điều hành đối với tên đối tượng cơ sở dữ liệu. ”

Bí danh cho tên cột và bảng có thể khá tùy ý. Bạn nên trích dẫn một bí danh trong các ký tự trích dẫn mã định danh nếu đó là một từ dành riêng cho SQL, hoàn toàn là số hoặc chứa khoảng trắng hoặc các ký tự đặc biệt khác. Bí danh cột cũng có thể được trích dẫn bằng dấu ngoặc đơn hoặc dấu ngoặc kép

Chế độ máy chủ SQL. Nếu chế độ SQL ANSI_QUOTES được bật, bạn có thể trích dẫn các mã định danh bằng dấu ngoặc kép (mặc dù dấu gạch ngược vẫn được phép)

CREATE TABLE "my table" ("my-int-column" INT);

Kích hoạt ANSI_QUOTES có tác dụng bổ sung là các chuỗi ký tự phải được viết bằng dấu nháy đơn. Nếu bạn sử dụng dấu ngoặc kép, máy chủ sẽ diễn giải giá trị dưới dạng số nhận dạng, không phải dưới dạng chuỗi

Tên của các chức năng tích hợp thường không được đặt trước và có thể được sử dụng làm định danh mà không cần trích dẫn. Tuy nhiên, nếu chế độ SQL IGNORE_SPACE được bật, tên hàm sẽ được bảo lưu và phải được trích dẫn nếu được sử dụng làm định danh

Để biết hướng dẫn về cách đặt chế độ SQL, hãy xem Phần 2. 1, “Chế độ máy chủ SQL. ”

chiều dài định danh. Hầu hết các mã định danh có độ dài tối đa là 64 ký tự. Độ dài tối đa cho bí danh là 256 ký tự

vòng loại định danh. Tùy thuộc vào ngữ cảnh, một số nhận dạng có thể cần phải đủ điều kiện để làm rõ những gì nó đề cập đến. Để tham khảo một cơ sở dữ liệu, chỉ cần chỉ định tên của nó

USE db_name; SHOW TABLES FROM db_name;

Để tham khảo một bảng, bạn có hai lựa chọn

  • Tên bảng đủ điều kiện bao gồm mã định danh cơ sở dữ liệu và mã định danh bảng. SHOW COLUMNS FROM db_name.tbl_name; SELECT * FROM db_name.tbl_name;
  • Bản thân mã định danh bảng đề cập đến một bảng trong cơ sở dữ liệu mặc định (hiện tại). Nếu sampdb là cơ sở dữ liệu mặc định, các câu lệnh sau là tương đương. SELECT * FROM member; SELECT * FROM sampdb.member;

Nếu không có cơ sở dữ liệu nào được chọn, sẽ xảy ra lỗi khi tham chiếu đến một bảng không có bộ định tính cơ sở dữ liệu vì cơ sở dữ liệu mà bảng thuộc về không xác định

Những cân nhắc tương tự về tên bảng đủ điều kiện áp dụng cho tên của chế độ xem (là bảng “ảo”) và chương trình được lưu trữ

Để tham chiếu đến một cột trong bảng, bạn có ba lựa chọn

  • Tên được viết là db_name. tbl_name. col_name hoàn toàn đủ điều kiện
  • Tên đủ điều kiện một phần được viết là tbl_name. col_name đề cập đến một cột trong bảng được đặt tên trong cơ sở dữ liệu mặc định
  • Một tên không đủ tiêu chuẩn được viết đơn giản là col_name đề cập đến bất kỳ bảng nào mà ngữ cảnh xung quanh chỉ ra. Hai truy vấn sau đây sử dụng các tên cột giống nhau, nhưng ngữ cảnh được cung cấp bởi mệnh đề TỪ của mỗi câu lệnh cho biết bảng để chọn các cột từ đó. SELECT last_name, first_name FROM president; SELECT last_name, first_name FROM member;

Thông thường, không cần thiết phải cung cấp tên đủ điều kiện, mặc dù làm như vậy luôn hợp pháp. Nếu bạn chọn cơ sở dữ liệu có câu lệnh USE, thì cơ sở dữ liệu đó sẽ trở thành cơ sở dữ liệu mặc định cho các câu lệnh tiếp theo và ẩn trong mọi tham chiếu bảng không đủ tiêu chuẩn. Nếu bạn viết một câu lệnh SELECT chỉ đề cập đến một bảng, thì bảng đó là ẩn đối với mọi tham chiếu cột trong câu lệnh. Chỉ cần xác định số nhận dạng đủ điều kiện khi không thể xác định bảng hoặc cơ sở dữ liệu từ ngữ cảnh. Ví dụ: nếu một câu lệnh đề cập đến các bảng từ nhiều cơ sở dữ liệu, bạn phải tham chiếu bất kỳ bảng nào không có trong cơ sở dữ liệu mặc định bằng cách sử dụng db_name. cú pháp tbl_name để cho MySQL biết cơ sở dữ liệu nào chứa bảng. Tương tự, nếu một truy vấn sử dụng nhiều bảng và đề cập đến một tên cột được sử dụng trong nhiều bảng, hãy định tính mã định danh cột bằng một mã định danh bảng để làm rõ cột mà bạn muốn nói

Nếu bạn sử dụng dấu ngoặc kép khi đề cập đến một tên đủ điều kiện, hãy trích dẫn các số nhận dạng riêng lẻ trong tên đó. Ví dụ

________số 8_______

Đừng trích dẫn tên như một toàn bộ. tuyên bố này là không chính xác

SELECT * FROM `sampdb.member` WHERE `sampdb.member.member_id` > 100;

Yêu cầu một từ dành riêng được trích dẫn nếu được sử dụng làm định danh sẽ được miễn nếu từ đó tuân theo khoảng thời gian hạn định vì khi đó ngữ cảnh quy định rằng từ dành riêng là một định danh

Chủ đề