Hạn chế tên cột MySQL

Trong khóa học này, chúng tôi mong bạn sử dụng phiên bản MySQL của SQL. Có các quy ước đặt tên khác nhau trong SQL, nhưng để đảm bảo tính nhất quán, chúng tôi yêu cầu bạn tuân theo các nguyên tắc mã hóa dành riêng cho khóa học của chúng tôi

Như với bất kỳ ngôn ngữ nào khác, tên phải mang tính mô tả và dễ phân biệt. Trong SQL, điều này đặc biệt áp dụng cho tên cơ sở dữ liệu, bảng và tên thuộc tính (quy ước bí danh là một ngoại lệ đối với quy tắc này, sẽ được thảo luận sau trong phần này)

Quy ước về vỏ thư

Các lệnh SQL, kiểu dữ liệu và các ràng buộc (e. g. DEFAULT, PRIMARY KEY,

CREATE TABLE DogBreeds(
  breed_id INT,
  breed_name VARCHAR(20),
  PRIMARY KEY (breed_id)
);
 
SELECT breed_name
FROM DogBreeds
WHERE breed_name LIKE 'great%';
0, v.v. ) phải ở dạng ALLCAPS. Viết lệnh bằng chữ thường là hợp pháp, nhưng điều này thường dẫn đến các lỗi tinh vi với tên cột/thuộc tính viết thường, vì vậy chúng tôi mong bạn sử dụng quy ước ALLCAPS cho bất kỳ lệnh hoặc kiểu dữ liệu nào

Tên cơ sở dữ liệu (e. g. c9 hoặc imdb) phải được viết thường (không có số hoặc ký tự đặc biệt nằm trong "_" hoặc "-")

Các quy ước về vỏ chữ cái trong bảng SQL

Đối với tên bảng, bạn có thể sử dụng PascalCasing (camelCasing với chữ cái đầu tiên cũng được viết hoa) hoặc quy ước viết thường, miễn là bạn thống nhất. Trong cả hai trường hợp, tên bảng chỉ nên chứa các ký tự chữ cái (không chứa "_" hoặc "-")

Khi tạo bảng mới, bạn nên sử dụng quy ước gạch dưới chữ thường cho tên cột nhiều từ (không viết hoa)

create table dogBreeds(
  breedID int,
  breedName varchar(20),
  PRIMARY KEY(breedID)
);
       
select breedName
from dogBreeds
where breedName like 'great%';

CREATE TABLE DogBreeds(
  breed_id INT,
  breed_name VARCHAR(20),
  PRIMARY KEY (breed_id)
);
 
SELECT breed_name
FROM DogBreeds
WHERE breed_name LIKE 'great%';

Quy ước sử dụng và đặt tên bí danh

Khi viết truy vấn nhiều bảng, việc sử dụng tên viết tắt thường hữu ích để tránh xung đột giữa hai phiên bản của cùng một bảng. Là một ngôn ngữ khai báo, các câu lệnh SQL có xu hướng tương đối ngắn gọn và dễ hiểu với các tên lệnh giống tiếng Anh. Trong trường hợp này, các tên bí danh ngắn có xu hướng không gây nhầm lẫn nhiều, miễn là chúng tuân theo một quy ước nhất quán

Bạn sẽ thường thấy việc đặt bí danh hữu ích cho các truy vấn tham chiếu đến nhiều phiên bản của cùng một bảng hoặc khi bạn đang làm việc với nhiều phiên bản bảng có chung tên cột (có thể xảy ra trường hợp hai bảng khác nhau có cùng tên cột). Bí danh cũng có thể được sử dụng để cải thiện khả năng đọc ngay cả khi không cần thiết (e. g. không có xung đột tên cột nhưng bạn đang tham chiếu tên bảng dài ở nhiều nơi) nhưng hầu hết các truy vấn ngắn không bao gồm bí danh

Khi đặt tên bí danh bảng của bạn, bạn có thể sử dụng tên có một chữ cái bằng cách sử dụng chữ cái đầu tiên của tên bảng và có thể phân biệt hai bí danh cho cùng một tên bảng bằng cách sử dụng hậu tố số. Nếu hai bảng khác nhau có cùng một chữ cái đầu tiên, bạn có thể ngắt kết nối bằng chữ cái thứ hai hoặc bạn có thể sử dụng một chuỗi con của tên có thể phân biệt được một cách hợp lý

"Ví dụ xấu" bên dưới không phân biệt rõ ràng giữa các bảng quốc gia và thành phố khi nó đặt tên tất cả theo quy ước C# (# là số được thêm vào mỗi bảng). "Ví dụ điển hình" đầu tiên là một giải pháp thay thế được chấp nhận vì rõ ràng hơn rằng

CREATE TABLE DogBreeds(
  breed_id INT,
  breed_name VARCHAR(20),
  PRIMARY KEY (breed_id)
);
 
SELECT breed_name
FROM DogBreeds
WHERE breed_name LIKE 'great%';
1 và
CREATE TABLE DogBreeds(
  breed_id INT,
  breed_name VARCHAR(20),
  PRIMARY KEY (breed_id)
);
 
SELECT breed_name
FROM DogBreeds
WHERE breed_name LIKE 'great%';
2 là các bảng khác nhau (lưu ý rằng việc theo dõi "ví dụ điển hình" đang chọn sẽ dễ dàng hơn một chút). Ngoài ra, bạn có thể bỏ bí danh cho bảng quốc gia vì nó chỉ được sử dụng một lần, nhưng vì cả quốc gia và thành phố đều dùng chung một cột gọi là "tên" (e. g. "Ý" là tên của một quốc gia và "Milan" là tên của một thành phố), bạn cần chỉ định bảng nào bạn đang tham chiếu trong dòng đầu tiên để bảng đó là SQL hợp lệ. "Ví dụ tốt" thứ hai thể hiện việc sử dụng tốt quy ước này

Làm quen với mySQL bằng cách tìm hiểu những điều cơ bản về 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ừ Ấn bản thứ 2 của "MySQL"

Thông thạo SQL là cần thiết để giao tiếp hiệu quả với máy chủ MySQL, vì đó là ngôn ngữ mà nó hiểu được. Ví dụ, khi bạn sử dụng một chương trình như mysql client, nó chủ yếu hoạt động như một phương tiện để bạn gửi các câu lệnh SQL đến máy chủ để 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 do ngôn ngữ lập trình của bạn cung cấp vì giao diện này hoạt động như một 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 tới nó.

Chương 1, "Bắt đầu với MySQL và SQL," trình bày hướng dẫn giới thiệu về nhiều khả năng của MySQL. Chương này dựa trên tài liệu đó để đi vào chi tiết hơn về một số lĩnh vực của SQL do MySQL triển khai. Nó thảo luận về cách tham chiếu đến các thành phần 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 phân biệt chữ hoa chữ thường được á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à hủy cơ sở dữ liệu, bảng và chỉ mục

  • Lấy thông tin về cơ sở dữ liệu và bảng của bạn

  • Truy xuất dữ liệu bằng cách sử dụng liên kết, chọn phụ và liên kết

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

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

  • Thiết lập mối quan hệ khóa 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 nhiều loại lớn; . 1 liệt kê một số tuyên bố đại diện cho mỗi. Trong một số trường hợp, có sẵn một chương trình tiện ích cung cấp giao diện dòng lệnh cho một câu lệnh. Ví dụ: mysqlshow cho phép SHOW hoạt động được thực hiện từ dòng lệnh. Chương này chỉ ra những sự tương đương như vậy khi thích hợp

Một số phát biểu trong bảng không được đề cập ở đây vì chúng sẽ được thảo luận phù hợp hơn trong các chương khác. Ví dụ: các câu lệnh quản trị GRANT và REVOKE để thiết lập đặc quyền người dùng được xử lý trong Chương 11, "Quản trị MySQL tổng quát. " Chương 12, "Bảo mật", cung cấp thêm thông tin chi tiết về những đặc quyền có sẵn và những gì chúng cho phép. Cú pháp cho tất cả các câu lệnh SQL do MySQL triển khai được liệt kê trong Phụ lục D, "Tài liệu tham khảo 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à đối với những thay đổi được thực hiện trong các phiên bản MySQL gần đây

bàn số 3. 1 Các loại câu lệnh SQL được hỗ trợ bởi MySQL

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

SỬ DỤNG

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

CƠ SỞ DỮ LIỆU THẢ

THAY ĐỔI CƠ SỞ DỮ LIỆU

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

TẠO BẢNG

THẢ BÀN

TẠO CHỈ SỐ

CHỈ SỐ THẢ

THAY ĐỔI BẢNG

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

MÔ TẢ

TRÌNH DIỄN

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

LỰA CHỌN

LIÊN HIỆP

Thực hiện giao dịch

BẮT ĐẦU

LÀM

QUAY LẠI

THIẾT LẬP CAM KẾT TỰ ĐỘNG

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

báo cáo hành chính

TUÔN RA

KHOẢN TRỢ CẤP

THU HỒI

Phần cuối cùng của chương mô tả những gì MySQL không bao gồm—nghĩa 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 có trong MySQL. Các tính năng như vậy bao gồm trình kích hoạt, thủ tục được 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"? . Đó có thể 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 còn thiếu trong MySQL tiếp tục bị thu hẹp theo thời gian. Đối với ấ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 giao dịch, lựa chọn phụ, khóa ngoại và tính toàn vẹn tham chiếu. Kể từ đó, một lượng lớn tiến bộ đã được thực hiện trong việc cải thiện MySQL và tất cả những khả năng đó đã được thêm vào ngay bây giờ. Trình kích hoạt, thủ tục được lưu trữ và chế độ xem được lên lịch để triển khai trong tương lai

Hầu như mọi câu lệnh SQL đều đề cập đến một cơ sở dữ liệu hoặc các thành phần cấu thành của nó theo một cách nào đó. Phần này mô tả các quy tắc cú pháp để tham chiếu đến cơ sở dữ liệu, bảng, cột, chỉ mục và bí danh. Các tên có thể được cân nhắc về độ phân biệt chữ hoa chữ thường, 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 thành phần 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 của tên đó. Hình thức tên cũng phụ thuộc vào ngữ cảnh mà bạn sử dụng chúng. Một yếu tố khác ảnh hưởng đến quy tắc đặt tên là máy chủ có thể được khởi động ở các chế độ đặt tên khác nhau

  • Ký tự pháp lý trong tên. Tên không được trích dẫn 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 bằng bất kỳ ký tự nào hợp pháp trong tên, bao gồm cả chữ số. Tuy nhiên, một tê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 đối với các tên 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 tên như vậy, hãy đặc biệt cẩn thận với những tên có chứa chữ 'E' hoặc 'e' vì những ký tự đó có thể dẫn đến cách diễn đạt mơ hồ. 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?

    Bí danh có thể khá tùy ý, nhưng bạn nên trích dẫn bí danh trong dấu ngoặc đơn hoặc dấu ngoặc kép nếu đó là từ khóa SQL, hoàn toàn là số hoặc chứa dấu cách 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 ('´'), 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 tên 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 điều không đúng với các tên không được trích dẫn

    Ngoài ra còn có hai ràng buộc bổ sung cho tên bảng và cơ sở dữ liệu, 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. ký hiệu col_name. Thứ hai, bạn không thể sử dụng các ký tự phân tách tên đường dẫn UNIX hoặc Windows ('/' hoặc '\'). Các ký tự phân cách không được phép trong cơ sở dữ liệu và tên bảng vì cơ sở dữ liệu được biểu diễn trên đĩa theo thư mục và bảng được biểu diễn 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ự không hợp lệ trong tên thư mục và tên tệp. Dấu tách tên đường dẫn UNIX không được phép trên Windows (và ngược lại) để giúp 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 dễ dàng hơn. 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, vì tên tệp trên nền tảng đó không thể chứa dấu gạch chéo

  • độ dài tên. Tên cho cơ sở dữ liệu, bảng, cột và chỉ mục có thể dài tối đa 64 ký tự. Tên bí danh có thể dài tối đa 256 ký tự

  • hạn định tên. 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õ tên đó đề cập đến điều gì. Để 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. Đầ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, bản thân tên 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, việc đặt tên bảng mà không có bộ định danh cơ sở dữ liệu là bất hợp pháp vì máy chủ không thể biết bảng thuộc về cơ sở dữ liệu nào

    Để 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 đủ điều kiện. Một tên đầy đủ (được viết là db_name. tbl_name. col_name) được chỉ định hoàn toà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. 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 chỉ định bởi ngữ 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Ừ của mỗi câu lệnh cho biết bảng nào sẽ chọn các cột

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

    Thông thường, bạn không cần cung cấp tên đủ điều kiện, mặc dù việc làm như vậy luôn hợp pháp nếu bạn muốn. Nếu bạn chọn một cơ sở dữ liệu có câu lệnh USE, cơ sở dữ liệu đó sẽ trở thành cơ sở dữ liệu mặc định và ẩ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, 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 tê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 truy vấn đề cập đến các bảng từ nhiều cơ sở dữ liệu, thì 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 db_name. biểu mẫu tbl_name để cho MySQL biết cơ sở dữ liệu nào cần xem để 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 định tính tên đó bằng một tên bảng để làm rõ cột mà bạn muốn nói

  • Chế độ khởi động máy chủ. Nếu máy chủ đã được khởi động với tùy chọn --ansi hoặc --sql-mode=ANSI_QUOTES, tên có thể được trích dẫn bằng dấu ngoặc kép thay vì dấu gạch ngược (mặc dù dấu gạch ngược vẫn có thể được sử dụng)

Phân biệt chữ hoa chữ thường trong câu lệnh SQL

Quy tắc phân biệt chữ hoa chữ thường trong các câu lệnh SQL khác nhau đối với 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 đến và hệ điều hành của máy mà máy chủ đang chạy

  • Từ khóa SQL và tên hàm. Từ khóa và tên hàm không phân biệt chữ hoa chữ thường. Chúng có thể được đưa ra trong bất kỳ hộp thư nào. Các câu sau đây là tương đương

    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ách sử dụng các thư mục và tệp trong hệ thống tệp cơ bản trên máy chủ lưu trữ. Do đó, độ phân biệt chữ hoa chữ thường của tên cơ sở dữ liệu và bảng phụ thuộc vào cách hệ điều hành trên máy chủ đó xử lý tên tệp. Tên tệp Windows không phân biệt chữ hoa chữ thường, vì vậy máy chủ chạy trên Windows không coi tên cơ sở dữ liệu và bảng là phân biệt chữ hoa chữ thường. Các máy chủ chạy trên UNIX thường coi tên bảng và cơ sở dữ liệu là phân biệt chữ hoa chữ thường vì tên tệp UNIX phân biệt chữ hoa chữ thường. (Một ngoại lệ là các tên trong hệ thống tệp HFS+ trong Mac OS X không phân biệt chữ hoa chữ thường. )

    Bạn nên xem xét các vấn đề về chữ cái nếu bạn tạo cơ sở dữ liệu trên máy chủ có tên tệp phân biệt chữ hoa chữ thường và một ngày nào đó bạn có thể chuyển cơ sở dữ liệu sang máy chủ nơi tên tệp không phân biệt chữ hoa chữ thường. 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 các tên đó được xử lý khác nhau, bạn sẽ gặp sự cố khi di chuyển các bảng sang máy Windows; . Một cách để tránh các thuộc tính phân biệt chữ hoa chữ thường 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 chữ cái đó. Sau đó, trường hợp tên sẽ không thành vấn đề nếu bạn di 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ề chữ hoa 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 phân biệt chữ hoa chữ thường trong MySQL. Các truy vấn sau đây là tương đương

    SELECT name FROM student;
    SELECT NAME FROM student;
    SELECT nAmE FROM student;
  • tên bí danh. Bí danh có 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 (viết hoa, viết thường hoặc hỗn hợp), nhưng bạn phải tham chiếu bí danh đó ở nơi khác trong truy vấn bằng cách sử dụng cùng một trường hợp

Bất kể cơ sở dữ liệu hoặc tên bảng có phân biệt chữ hoa chữ thường trên hệ thống của bạn hay không, bạn phải tham chiếu 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 tham chiếu theo kiểu chữ cái khác nhau trong suốt truy vấn. Đương nhiên, truy vấn sẽ dễ đọc hơn nếu bạn sử dụng kiểu chữ nhất quán thay vì kiểu "ghi chú tiền chuộc" (SelECt NamE FrOm. )

Chúng ta có thể đổi tên cột trong MySQL không?

MySQL cung cấp một cú pháp hữu ích có thể đổi tên một hoặc nhiều cột trong bảng. Một vài đặc quyền là cần thiết trước khi đổi tên cột, chẳng hạn như đặc quyền câu lệnh ALTER và DROP. MySQL có thể đổi tên tên cột theo hai cách. Sử dụng câu lệnh CHANGE .

Cái nào sau đây không phải là tên hợp lệ cho một cột trong MySQL?

"ASC" hoặc "DESC" là từ khóa dành riêng trong MySQL. bạn không thể sử dụng nó cho tên cột.

Ký tự nào không được phép trong MySQL?

ASCII NUL (U+0000) và các ký tự bổ sung (U+10000 trở lên) không được phép trong số nhận dạng được trích dẫn hoặc không được trích dẫn. Số nhận dạng có thể bắt đầu bằng một chữ số nhưng trừ khi được trích dẫn có thể không chỉ bao gồm các chữ số. 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.

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

Tên cơ sở dữ liệu có thể sử dụng bất kỳ ký tự nào được phép trong tên thư mục ngoại trừ dấu chấm, dấu gạch chéo ngược (\) hoặc dấu gạch chéo tiến (/). By default, MySQL encloses column names and table names in quotation marks.