Hướng dẫn what are the rules for naming a table in mysql? - các quy tắc đặt tên bảng trong mysql là gì?

From mysql 8.0 reference manual at https://dev.mysql.com/doc/refman/8.0/en/identifiers.html:

"Identifiers are converted to Unicode internally. They may contain these characters:

Permitted characters in unquoted identifiers:

ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore)

Extended: U+0080 .. U+FFFF

Permitted characters in quoted identifiers include the full Unicode Basic Multilingual Plane (BMP), except U+0000:

ASCII: U+0001 .. U+007F

Extended: U+0080 .. U+FFFF

ASCII NUL (U+0000) and supplementary characters (U+10000 and higher) are not permitted in quoted or unquoted identifiers.

Identifiers may begin with a digit but unless quoted may not consist solely of digits.

Database, table, and column names cannot end with space characters."

Rules culled from this list of allowable characters: (1) ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore) (2) Full Unicode Basic Multilingual Plane (BMP) except U+0000 (3) Identifiers may begin with a digit but unless quoted may not consist solely of digits. (4) Database, table, and column names cannot end with space characters.

Interpretation: Re: ASCII: See ASCII character chart from widipedia article on ASCII (https://en.wikipedia.org/wiki/ASCII#/media/File:USASCII_code_chart.png) shows that between 0000 (null character) and 007F (delete character) is the entire ASCII chart, meaning all 15 cols x 7 rows are legal to use in column names, which clearly contradicts the rules that only punctuation allowed is "$" and "_". For example, "#" is located at _4 (x axis) 2 (y axis) and has identifiers "0023" / "35". But "#" it appears to be excluded by the ascii rules anyway (it's punctuation that's not dollar or underscore), so it's not clear whether ASCII columns can include the "#". (BTW many ASCII charts are labeled differently and you cannot find correlation with any " _ _ _" numerical index so look for variations in table indexing if you can't find anything close to '0000' format.)

Re: UNICODE BMP: is indexed by U+_ _ _ _ so rules are easier to implement. For example, "#" appears in the full BMP as U+0023 so it should be OK to use (U+000 is the "null" character, BTW).

So it also appears that special characters allowed for column names varies based on collation in your database; UTF collations offer more options for special characters to be used in column names, another reason to prefer utf collation in your database, in addition to its ability to include more international characters, something more valuable when constructing a website with international membership.

Hãy xuống và bẩn với MySQL bằng cách tìm hiểu những điều cơ bản của cú pháp SQL và các chức năng hữu ích để duy trì bảng và tính toàn vẹn.

Đoạn trích này là từ phiên bản thứ 2 của "MySQL".

Thích bài viết này? Chúng tôi đề nghị 

Sự lưu loát với SQL là cần thiết để giao tiếp hiệu quả với máy chủ MySQL, bởi vì đó là ngôn ngữ mà nó hiểu. Ví dụ: khi bạn sử dụng một chương trình như máy khách MySQL, nó hoạt động chủ yếu như một phương tiện để bạn gửi các câu lệnh SQL đến máy chủ để được thực thi. Bạn cũng phải biết SQL nếu bạn viết các chương trình sử dụng giao diện MySQL được cung cấp bởi ngôn ngữ lập trình của bạn vì giao diện có chức năng như là phương tiện cho phép bạn giao tiếp với máy chủ bằng cách gửi các câu lệnh SQL cho nó.

Chương 1, "Bắt đầu với MySQL và SQL", đã giới thiệu một giới thiệu hướng dẫn về nhiều khả năng của MySQL. Chương này xây dựng dựa trên tài liệu đó để đi sâu vào chi tiết hơn về một số lĩnh vực của SQL được thực hiện bởi MySQL. Nó thảo luận về cách tham khảo các yếu tố của cơ sở dữ liệu, bao gồm các quy tắc đặt tên và các ràng buộc độ nhạy của trường hợp áp dụng. Nó cũng mô tả nhiều câu lệnh SQL quan trọng hơn được sử dụng cho các loại hoạt động sau:

  • Tạo và phá hủy cơ sở dữ liệu, bảng và chỉ mục

  • Có được thông tin về cơ sở dữ liệu và bảng của bạn

  • Lấy dữ liệu bằng cách sử dụng các kết nối, phân nhóm và công đoàn

  • Sử dụng xóa và cập nhật nhiều bàn

  • Thực hiện các giao dịch cho phép nhiều tuyên bố được coi là một đơn vị

  • Thiết lập các mối quan hệ quan trọng nước ngoài

  • Sử dụng công cụ tìm kiếm FullText

Các câu lệnh SQL của MySQL có thể được nhóm thành một số loại rộng; Bảng 3.1 liệt kê một số câu lệnh đại diện cho mỗi. Trong một số trường hợp, một chương trình tiện ích có sẵn cung cấp giao diện dòng lệnh cho một câu lệnh. Ví dụ: MySQLshow cho phép các hoạt động hiển thị được thực hiện từ dòng lệnh. Chương này chỉ ra những tương đương như vậy khi thích hợp.

Một số tuyên bố trong bảng không được đề cập ở đây vì chúng được thảo luận phù hợp hơn trong các chương khác. Ví dụ, các tuyên bố hành chính cấp và thu hồi để thiết lập các đặc quyền của người dùng được xử lý trong Chương 11, "Quản trị chung MySQL." Chương 12, "Bảo mật", cung cấp thêm chi tiết về những đặc quyền có sẵn và những gì họ cho phép. Cú pháp cho tất cả các câu lệnh SQL được thực hiện bởi MySQL được liệt kê trong Phụ lục D, "Tham chiếu cú ​​pháp SQL." Ngoài ra, bạn nên tham khảo hướng dẫn tham khảo MySQL để biết thêm thông tin, đặc biệt là những thay đổi được thực hiện trong các phiên bản gần đây của MySQL.

Bảng 3.1 Các loại câu lệnh SQL được hỗ trợ bởi MySQL

Chọn, tạo, thả và thay đổi cơ sở dữ liệu

SỬ DỤNG

TẠO NÊN CƠ SỞ DỮ LIỆU

Thả cơ sở dữ liệu

Thay đổi cơ sở dữ liệu

Tạo, thay đổi và thả bảng và chỉ mục

TẠO BẢNG

Bàn thả

Tạo chỉ mục

Chỉ số thả

Thay đổi bảng

Nhận thông tin về cơ sở dữ liệu và bảng

MÔ TẢ

BUỔI BIEU DIỄN

Lấy thông tin từ các bảng

LỰA CHỌN

LIÊN HIỆP

Thực hiện giao dịch

BẮT ĐẦU

LÀM

RELBACK

Đặt AutoCommit

Sửa đổi thông tin trong bảng

XÓA BỎ

CHÈN

TẢI DỮ LIỆU

THAY THẾ

CẬP NHẬT

Tuyên bố hành chính

TUÔN RA

BAN CHO

Thu hồi

Phần cuối cùng của chương mô tả những gì MySQL không bao gồm cả, đó là những tính năng mà nó thiếu. Đây là những khả năng được tìm thấy trong một số cơ sở dữ liệu khác nhưng không phải trong MySQL. Các tính năng như vậy bao gồm kích hoạt, quy trình lưu trữ và chế độ xem. Những thiếu sót này có nghĩa là MySQL không phải là hệ thống cơ sở dữ liệu "thực tế"? Một số người nghĩ như vậy, nhưng để đáp ứng, tôi sẽ đơn giản quan sát rằng việc thiếu các khả năng này trong MySQL đã không ngăn được số lượng lớn người sử dụng nó. Đó có lẽ là do đối với nhiều hoặc hầu hết các ứng dụng, những tính năng đó không quan trọng.

Tôi cũng nên chỉ ra rằng tập hợp các tính năng bị thiếu từ MySQL tiếp tục thu nhỏ theo thời gian. Đối với phiên bản đầu tiên của cuốn sách này, danh sách các tính năng còn thiếu bao gồm các giao dịch, phần phụ, khóa nước ngoài và tính toàn vẹn tham chiếu. Một lượng đáng kể tiến bộ đã được thực hiện trong việc cải thiện MySQL kể từ đó, và tất cả các khả năng đó đã được thêm vào bây giờ. Các kích hoạt, quy trình lưu trữ và quan điểm được lên lịch để thực hiện trong tương lai.

Các quy tắc đặt tên MySQL

Hầu như mọi câu lệnh SQL đều đề cập đến một số cách cho cơ sở dữ liệu hoặc các yếu tố cấu thành của nó. Phần này mô tả các quy tắc cú pháp để tham khảo cơ sở dữ liệu, bảng, cột, chỉ mục và bí danh. Tên phải tuân theo các cân nhắc về độ nhạy của trường hợp, cũng được mô tả.

Đề cập đến các yếu tố của cơ sở dữ liệu

Khi bạn sử dụng tên để chỉ các yếu tố của cơ sở dữ liệu, bạn bị hạn chế bởi các ký tự bạn có thể sử dụng và độ dài mà tên có thể có. Hình thức của tên cũng phụ thuộc vào bối cảnh mà bạn sử dụng chúng. Một yếu tố khác ảnh hưởng đến các quy tắc đặt tên là máy chủ có thể được bắt đầu ở các chế độ đặt tên khác nhau.

  • Nhân vật pháp lý trong tên. Tên chưa được trích xuất có thể bao gồm bất kỳ ký tự chữ và số nào trong bộ ký tự mặc định của máy chủ, cộng với các ký tự '_' và '$'. Tên có thể bắt đầu với bất kỳ nhân vật nào hợp pháp trong một tên, bao gồm một chữ số. Tuy nhiên, một tên không thể bao gồm hoàn toàn các chữ số vì điều đó sẽ khiến nó không thể phân biệt được với một số. Hỗ trợ của MySQL cho các tên bắt đầu bằng một số có phần bất thường giữa các hệ thống cơ sở dữ liệu. Nếu bạn sử dụng một cái tên như vậy, hãy đặc biệt cẩn thận với các tên có chứa 'E' hoặc 'E' vì những ký tự đó có thể dẫn đến các biểu thức mơ hồ. Ví dụ, biểu thức 23E+14 (với các khoảng trống xung quanh dấu '+') có nghĩa là cột 23E cộng với số 14, nhưng còn 23E+14 thì sao? Nó có nghĩa là điều tương tự, hay nó là một con số trong ký hiệu khoa học? Unquoted names can consist of any alphanumeric characters in the server's default character set, plus the characters '_' and '$'. Names can start with any character that is legal in a name, including a digit. However, a name cannot consist entirely of digits because that would make it indistinguishable from a number. MySQL's support for names that begin with a number is somewhat unusual among database systems. If you use such a name, be particularly careful of names containing an 'E' or 'e' because those characters can lead to ambiguous expressions. For example, the expression 23e + 14 (with spaces surrounding the '+' sign) means column 23e plus the number 14, but what about 23e+14? Does it mean the same thing, or is it a number in scientific notation?

    Bí danh có thể khá tùy ý, nhưng bạn nên trích dẫn bí danh trong các trích dẫn đơn hoặc gấp đôi nếu đó là từ khóa 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.

    Kể từ MySQL 3.23.6, tên có thể được trích dẫn trong các ký tự backtick ('ay'), cho phép sử dụng bất kỳ ký tự nào ngoại trừ Backtick, ASCII 0 và ASCII 255. Điều này hữu ích khi một tên có chứa các ký tự đặc biệt hoặc là một từ dành riêng . Trích dẫn một tên cũng cho phép nó hoàn toàn là số, một cái gì đó không đúng với các tên chưa được trích dẫn.

    Ngoài ra còn có hai ràng buộc bổ sung cho tên cơ sở dữ liệu và bảng, ngay cả khi bạn trích dẫn chúng. Đầu tiên, bạn không thể sử dụng '.' ký tự vì nó là dấu phân cách trong db_name.tbl_name và db_name.tbl_name.col_name. Thứ hai, bạn không thể sử dụng các ký tự phân tách tên UNIX hoặc Windows ('/' hoặc '\'). Các ký tự phân cách được không được phép trong các tên cơ sở dữ liệu và bảng vì cơ sở dữ liệu được biểu diễn trên đĩa bởi các thư mục và các bảng được trình bày trên đĩa bằng ít nhất một tệp. Do đó, các loại tên này không được chứa các ký tự bất hợp pháp trong tên thư mục và tên tệp. Bộ phân cách UNIX PathName không được phép trên Windows (và ngược lại) để dễ dàng chuyển cơ sở dữ liệu và bảng giữa các máy chủ chạy trên các nền tảng khác nhau. Ví dụ: giả sử bạn được phép sử dụng dấu gạch chéo trong tên bảng trên Windows. Điều đó sẽ khiến không thể di chuyển bảng sang UNIX, bởi vì tên tệp trên nền tảng đó không thể chứa các dấu gạch chéo.

  • Tên chiều dài. Tên cho cơ sở dữ liệu, bảng, cột và chỉ mục có thể dài tới 64 ký tự. Tên bí danh có thể dài tới 256 ký tự. Names for databases, tables, columns, and indexes can be up to 64 characters long. Alias names can be up to 256 characters long.

  • Tên vòng loại. Tùy thuộc vào ngữ cảnh, một cái tên có thể cần phải đủ điều kiện để làm rõ những gì tên đề cập đến. Để chỉ một cơ sở dữ liệu, chỉ cần chỉ định tên của nó: Depending on context, a name may need to be qualified to make it clear what the name refers to. To refer to a database, just specify its name:

    USE db_name;
    SHOW TABLES FROM db_name;

    Để chỉ một bảng, bạn có hai lựa chọn. Đầu tiên, tên bảng đủ điều kiện bao gồm tên cơ sở dữ liệu và tên bảng:

    SHOW TABLES FROM db_name.tbl_name;
    SELECT * FROM db_name.tbl_name;

    Thứ hai, một tên bảng tự đề 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, việc đặt tên bảng mà không có vòng loại cơ sở dữ liệu là bất hợp pháp vì máy chủ không thể cho biết cơ sở dữ liệu nào mà bảng thuộc về.

    Để chỉ một cột, có ba lựa chọn: đủ điều kiện, đủ điều kiện một phần và không đủ tiêu chuẩn. Một tên đủ điều kiện (được viết là db_name.tbl_name.col_name) được chỉ định hoàn toàn. Một 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. 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 được biểu thị bằng bối cảnh xung quanh. Hai truy vấn sau đây đề cập đến cùng một cặp tên cột, nhưng ngữ cảnh được cung cấp bởi mệnh đề từ mỗi câu lệnh chỉ ra từ bảng để chọn các cột:

    SELECT last_name, first_name FROM president;
    SELECT last_name, first_name FROM members;

    Nó thường không cần thiết phải cung cấp các tên đủ điều kiện, mặc dù luôn luôn hợp pháp để làm như vậy nếu bạn muốn. Nếu bạn chọn một cơ sở dữ liệu có câu lệnh sử dụng, cơ sở dữ liệu đó sẽ trở thành cơ sở dữ liệu mặc định và được ẩn trong mọi tham chiếu bảng không đủ tiêu chuẩn. Nếu bạn đang sử dụng câu lệnh CHỌN chỉ đề cập đến một bảng, bảng đó sẽ ẩn cho mọi tham chiếu cột trong câu lệnh. Chỉ cần đủ điều kiện tên khi một bảng hoặc cơ sở dữ liệu không thể được xác định từ ngữ cảnh. Ví dụ: nếu một truy vấn đề cập đến các bảng từ nhiều cơ sở dữ liệu, bất kỳ bảng nào không có trong cơ sở dữ liệu mặc định phải được tham chiếu bằng mẫu DB_NAME.TBL_NAME để cho MySQL biết cơ sở dữ liệu nào sẽ tìm thấy để tìm 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ó trong nhiều bảng, thì cần phải đủ điều kiện tên với tên bảng để làm rõ bạn có nghĩa là cột nào.

  • Chế độ khởi động máy chủ. Nếu máy chủ đã được bắt đầu với tùy chọn --Sansi hoặc--SQL-mode = ANSI_QUOTES, tên có thể được trích dẫn với dấu ngoặc kép thay vì backticks (mặc dù vẫn có thể sử dụng backticks). If the server has been started with the --ansi or --sql-mode=ANSI_QUOTES option, names can be quoted with double quotes rather than backticks (although backticks can still be used).

Độ nhạy của trường hợp trong các câu lệnh SQL

Các quy tắc độ nhạy của trường hợp trong các câu lệnh SQL khác nhau cho các phần khác nhau của câu lệnh và cũng phụ thuộc vào những gì bạn đề cập và hệ điều hành của máy mà máy chủ đang chạy:

  • Từ khóa SQL và tên chức năng. Từ khóa và tên chức năng không nhạy cảm. Họ có thể được đưa ra trong bất kỳ chữ cái nào. Các câu sau đây là tương đương: Keywords and function names are not case sensitive. They can be given in any lettercase. The following statements are equivalent:

    SELECT NOW();
    select now();
    sElEcT nOw();
  • Cơ sở dữ liệu và tên bảng. Cơ sở dữ liệu và bảng trong MySQL được triển khai bằng các thư mục và tệp trong hệ thống tệp cơ bản trên máy chủ máy chủ. Do đó, độ nhạy trường hợp của cơ sở dữ liệu và tên bảng phụ thuộc vào cách hệ điều hành trên máy chủ xử lý các tên tệp. Tên tệp Windows không nhạy cảm với trường hợp, vì vậy một máy chủ đang chạy trên Windows không coi tên cơ sở dữ liệu và tên bảng là nhạy cảm với trường hợp. Các máy chủ chạy trên UNIX thường coi các tên dữ liệu và bảng là nhạy cảm với trường hợp vì tên tệp unix nhạy cảm. (Một ngoại lệ là các tên trong các hệ thống tệp HFS+ trong Mac OS X không nhạy cảm với trường hợp.) Databases and tables in MySQL are implemented using directories and files in the underlying file system on the server host. As a result, case sensitivity of database and table names depends on the way the operating system on that host treats filenames. Windows filenames are not case sensitive, so a server running on Windows does not treat database and table names as case sensitive. Servers running on UNIX usually treat database and table names as case sensitive because UNIX filenames are case sensitive. (An exception is that names in HFS+ file systems under Mac OS X are not case sensitive.)

    Bạn nên xem xét các vấn đề về Lettercase nếu bạn tạo cơ sở dữ liệu trên máy chủ có tên tệp nhạy cảm trường hợp và một ngày nào đó bạn có thể chuyển cơ sở dữ liệu đến một máy chủ nơi tên tệp không nhạy cảm với trường hợp. Ví dụ: nếu bạn tạo hai bảng có tên ABC và ABC trên máy chủ Unix nơi những tên đó được xử lý khác nhau, bạn sẽ gặp vấn đề khi di chuyển các bảng vào máy Windows; Ở đó, ABC và ABC sẽ không thể phân biệt được vì tên không nhạy cảm với trường hợp. Một cách để tránh có các thuộc tính độ nhạy của trường hợp trở thành một vấn đề là chọn một chữ cái nhất định (ví dụ: chữ thường) và luôn tạo cơ sở dữ liệu và bảng sử dụng tên trong Lettercase đó. Sau đó, trường hợp tên sẽ không phải là vấn đề nếu bạn chuyển cơ sở dữ liệu sang một máy chủ khác. Một cách tiếp cận khác đối với các vấn đề về Lettercase tên là khởi động máy chủ với bộ biến Lower_case_table_names. Biến này được thảo luận thêm trong Chương 10, "Thư mục dữ liệu MySQL."

  • Tên cột và chỉ mục. Tên cột và chỉ mục không nhạy cảm trường hợp trong MySQL. Các truy vấn sau đây tương đương: Column and index names are not case sensitive in MySQL. The following queries are equivalent:

    SELECT name FROM student;
    SELECT NAME FROM student;
    SELECT nAmE FROM student;
  • Tên bí danh. Bí danh là trường hợp nhạy cảm. Bạn có thể chỉ định một bí danh trong bất kỳ Lettercase (trên, dưới hoặc hỗn hợp), nhưng bạn phải tham khảo nó ở nơi khác trong truy vấn bằng cách sử dụng cùng một trường hợp. Aliases are case sensitive. You can specify an alias in any lettercase (upper, lower, or mixed), but you must refer to it elsewhere in the query using the same case.

Bất kể có hay không một cơ sở dữ liệu hay tên bảng có nhạy cảm với hệ thống của bạn hay không, bạn phải tham khảo nó bằng cách sử dụng cùng một chữ cái trong suốt một truy vấn nhất định. Điều đó không đúng với các từ khóa SQL, tên hàm hoặc tên cột và chỉ mục, tất cả đều có thể được đề cập theo kiểu chữ viết nhật ký khác nhau trong suốt một truy vấn. Đương nhiên, truy vấn sẽ dễ đọc hơn nếu bạn sử dụng một chữ cái nhất quán thay vì kiểu "tiền chuộc" (chọn tên từ ...).

Làm thế nào để bạn đặt tên cho một bảng trong mysql?

Các quy tắc chung - Các quy ước đặt tên bằng cách sử dụng chữ thường sẽ giúp gõ tốc độ, tránh sai lầm vì MySQL nhạy cảm. Không gian được thay thế bằng dấu gạch dưới - sử dụng không gian giữa các từ không được khuyến khích. Các số không dành cho tên - trong khi đặt tên, điều cần thiết là nó chỉ chứa bảng chữ cái tiếng Anh alpha.Using lowercase will help speed typing, avoid mistakes as MYSQL is case sensitive. Space replaced with Underscore — Using space between words is not advised. Numbers are not for names — While naming, it is essential that it contains only Alpha English alphabets.

Các quy tắc để đặt tên cho các bảng và cột là gì?

Mỗi tên bảng và tên cột sẽ bắt đầu bằng chữ viết hoa ...
Tên khóa chính sẽ sử dụng cú pháp "PK_" ..
Mỗi tên khóa chính phải có tiền tố PK_ của PK_ ..
Chữ cái đầu tiên của một cái tên bảng phải được viết hoa ..

Quy ước đặt tên cho các bảng là gì?

Khi đặt tên bảng, bạn có hai tùy chọn - để sử dụng số ít cho tên bảng hoặc sử dụng số nhiều.Đề nghị của tôi sẽ là luôn luôn đi với tên trong số ít.Nếu bạn đặt tên các thực thể đại diện cho sự thật trong thế giới thực, bạn nên sử dụng danh từ.Đây là những bảng như nhân viên, khách hàng, thành phố và quốc gia.to use the singular for the table name or to use a plural. My suggestion would be to always go with names in the singular. If you're naming entities that represent real-world facts, you should use nouns. These are tables like employee, customer, city, and country.

Những ký tự nào được phép trong tên cơ sở dữ liệu MySQL?

Cơ sở dữ liệu, bảng, chỉ mục, cột và tên bí danh.