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. ]