Trong bài viết này, chúng tôi sẽ hướng dẫn cách tạo cơ sở dữ liệu (còn được gọi là lược đồ), bảng (với kiểu dữ liệu) và giải thích cách thực hiện Ngôn ngữ thao tác dữ liệu ( DML ) hoạt động với dữ liệu trên MySQL / MariaDB máy chủ.
Giả định rằng trước đây bạn đã 1) đã cài đặt các gói cần thiết trên hệ thống Linux của bạn và 2) đã thực thi mysql_secure_installation để cải thiện tính bảo mật của máy chủ cơ sở dữ liệu. Nếu không, hãy làm theo hướng dẫn dưới đây để cài đặt máy chủ MySQL / MariaDB.
- Cài đặt Cơ sở dữ liệu MySQL Mới nhất trong Hệ thống Linux
- Cài đặt Cơ sở dữ liệu MariaDB Mới nhất trong Hệ thống Linux
Để ngắn gọn, chúng tôi sẽ đề cập đến MariaDB độc quyền trong suốt bài viết này, nhưng các khái niệm và lệnh được nêu ở đây áp dụng cho MySQL nữa.
Phần 1 : Tìm hiểu MySQL / MariaDB cho người mới bắt đầu Phần 2 :Tìm hiểu cách sử dụng một số chức năng của MySQL và MariaDBTạo cơ sở dữ liệu, bảng và người dùng được ủy quyền
Như bạn đã biết, một cơ sở dữ liệu có thể được định nghĩa theo các thuật ngữ đơn giản là một tập hợp thông tin có tổ chức. Đặc biệt, MariaDB là một hệ thống quản lý cơ sở dữ liệu quan hệ ( RDBMS ) và sử dụng Ngôn ngữ Truy vấn Cấu trúc để thực hiện các hoạt động trên cơ sở dữ liệu. Ngoài ra, hãy nhớ rằng MariaDB sử dụng cơ sở dữ liệu điều khoản và lược đồ thay thế cho nhau.
Để lưu trữ thông tin liên tục trong cơ sở dữ liệu, chúng tôi sẽ sử dụng bảng lưu trữ các hàng dữ liệu. Thông thường, hai hoặc nhiều bảng sẽ liên quan đến nhau theo một cách nào đó. Đó là một phần của tổ chức đặc trưng cho việc sử dụng cơ sở dữ liệu quan hệ.
Tạo cơ sở dữ liệu mới
Để tạo cơ sở dữ liệu mới có tên BooksDB
, hãy nhập lời nhắc MariaDB bằng lệnh sau (bạn sẽ được nhắc nhập mật khẩu cho người dùng MariaDB gốc):
[[email protected] ~]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE BookstoreDB; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]>
Khi cơ sở dữ liệu đã được tạo, chúng ta cần tạo ít nhất hai bảng trên đó. Nhưng trước tiên, hãy khám phá khái niệm về loại dữ liệu.
Giới thiệu các kiểu dữ liệu MariaDB
Như chúng tôi đã giải thích trước đó, bảng là các đối tượng cơ sở dữ liệu nơi chúng ta sẽ lưu giữ thông tin liên tục. Mỗi bảng bao gồm hai hoặc nhiều trường (còn được gọi là cột ) của một kiểu dữ liệu nhất định (kiểu thông tin) mà trường đó có thể lưu trữ.
Sau đây là các kiểu dữ liệu phổ biến nhất trong MariaDB (bạn có thể tham khảo danh sách đầy đủ trong tài liệu trực tuyến chính thức của MariaDB):
Số:
- BOOLEAN coi 0 là sai và mọi giá trị khác là đúng.
- TINYINT , nếu được sử dụng với SIGNED, phạm vi từ -128 đến 127, trong khi phạm vi UNSIGNED là 0 đến 255.
- SMALLINT , nếu được sử dụng với SIGNED, sẽ bao gồm dải từ -32768 đến 32767. Dải UNSIGNED là 0 đến 65535.
- INT , nếu được sử dụng với UNSIGNED, sẽ bao gồm phạm vi từ 0 đến 4294967295 và -2147483648 đến 2147483647.
Lưu ý :Trong TINYINT, SMALLINT và INT, mặc định là SIGNED.
DOUBLE (M, D) , ở đâu M là tổng số chữ số và D là số chữ số sau dấu thập phân, đại diện cho một số dấu phẩy động có độ chính xác kép. Nếu UNSIGNED được chỉ định, giá trị âm không được phép.
Chuỗi:
- VARCHAR (M) đại diện cho một chuỗi có độ dài thay đổi trong đó M là độ dài cột tối đa được phép tính bằng byte (trên lý thuyết là 65,535). Trong hầu hết các trường hợp, số byte giống với số ký tự, ngoại trừ một số ký tự có thể chiếm tới 3 byte. Ví dụ:chữ cái Tây Ban Nha ñ đại diện cho một ký tự nhưng chiếm 2 byte.
- TEXT (M) đại diện cho một cột có độ dài tối đa là 65.535 ký tự. Tuy nhiên, khi nó xảy ra với VARCHAR (M) , độ dài tối đa thực tế bị giảm nếu các ký tự nhiều byte được lưu trữ. Nếu M được chỉ định, cột được tạo là loại nhỏ nhất có thể lưu trữ số ký tự như vậy.
- MEDIUMTEXT (M) và LONGTEXT (M) tương tự như TEXT (M) , chỉ có điều độ dài tối đa cho phép tương ứng là 16,777,215 và 4,294,967,295 ký tự.
Ngày và giờ:
- DATE đại diện cho ngày trong YYYY-MM-DD định dạng.
- THỜI GIAN đại diện cho thời gian trong HH:MM:SS.sss định dạng (giờ, phút, giây và mili giây).
- DATETIME là sự kết hợp của DATE và TIME trong YYYY-MM-DD HH:MM:SS định dạng.
- TIMESTAMP được dùng để xác định thời điểm một hàng được thêm vào hoặc cập nhật.
Sau khi xem xét các kiểu dữ liệu này, bạn sẽ ở vị trí tốt hơn để xác định loại dữ liệu nào bạn cần chỉ định cho một cột nhất định trong bảng.
Ví dụ:tên của một người có thể dễ dàng phù hợp với VARCHAR (50) , trong khi một bài đăng trên blog sẽ cần TEXT loại (chọn M theo nhu cầu cụ thể của bạn).
Tạo bảng bằng phím chính và khóa ngoài
Trước khi chúng ta đi sâu vào việc tạo bảng, có hai khái niệm cơ bản về cơ sở dữ liệu quan hệ mà chúng ta cần xem lại: chính và nước ngoài chìa khóa.
Một khóa chính chứa một giá trị xác định duy nhất từng hàng hoặc bản ghi trong bảng. Mặt khác, khóa ngoại được sử dụng để tạo liên kết giữa dữ liệu trong hai bảng và kiểm soát dữ liệu có thể được lưu trữ trong bảng nơi đặt khóa ngoại. Cả khóa chính và khóa ngoại đều là INT.
Để minh họa, hãy sử dụng BookstoreDB
và tạo hai bảng có tên AuthorsTBL
và BooksTBL
như sau. KHÔNG ĐẦY ĐỦ ràng buộc chỉ ra rằng trường được liên kết yêu cầu một giá trị khác với NULL .
Ngoài ra, AUTO_INCREMENT được sử dụng để tăng một giá trị của INT các cột khóa chính khi một bản ghi mới được chèn vào bảng.
MariaDB [(none)]> USE BookstoreDB; MariaDB [(none)]> CREATE TABLE AuthorsTBL ( AuthorID INT NOT NULL AUTO_INCREMENT, AuthorName VARCHAR(100), PRIMARY KEY(AuthorID) ); MariaDB [(none)]> CREATE TABLE BooksTBL ( BookID INT NOT NULL AUTO_INCREMENT, BookName VARCHAR(100) NOT NULL, AuthorID INT NOT NULL, BookPrice DECIMAL(6,2) NOT NULL, BookLastUpdated TIMESTAMP, BookIsAvailable BOOLEAN, PRIMARY KEY(BookID), FOREIGN KEY (AuthorID) REFERENCES AuthorsTBL(AuthorID) );Tạo Bảng MySQL với Khóa chính và Khóa ngoại
MariaDB [(none)]> USE BookstoreDB; Database changed MariaDB [BookstoreDB]> CREATE TABLE AuthorsTBL ( -> AuthorID INT NOT NULL AUTO_INCREMENT, -> AuthorName VARCHAR(100), -> PRIMARY KEY(AuthorID) -> ); Query OK, 0 rows affected (0.05 sec) MariaDB [BookstoreDB]> CREATE TABLE BooksTBL ( -> BookID INT NOT NULL AUTO_INCREMENT, -> BookName VARCHAR(100) NOT NULL, -> AuthorID INT NOT NULL, -> BookPrice DECIMAL(6,2) NOT NULL, -> BookLastUpdated TIMESTAMP, -> BookIsAvailable BOOLEAN, -> PRIMARY KEY(BookID), -> FOREIGN KEY (AuthorID) REFERENCES AuthorsTBL(AuthorID) -> ); Query OK, 0 rows affected (0.05 sec) MariaDB [BookstoreDB]>
Bây giờ chúng ta có thể tiếp tục và bắt đầu chèn các bản ghi vào AuthorsTBL
và BooksTBL
.
Chọn, Chèn, Cập nhật và Xóa Hàng
Trước tiên, chúng tôi sẽ điền AuthorsTBL
bàn. Tại sao? Vì chúng ta cần có các giá trị cho AuthorID
trước khi chèn bản ghi vào BooksTBL .
Thực thi truy vấn sau từ lời nhắc MariaDB của bạn:
MariaDB [BookstoreDB]> INSERT INTO AuthorsTBL (AuthorName) VALUES ('Agatha Christie'), ('Stephen King'), ('Paulo Coelho');
Sau đó, chúng tôi sẽ chọn tất cả các bản ghi từ AuthorsTBL . Hãy nhớ rằng chúng tôi sẽ cần ID tác giả cho mỗi bản ghi để tạo INSERT truy vấn cho BooksTBL .
Nếu bạn muốn truy xuất từng bản ghi, bạn có thể sử dụng WHERE mệnh đề để chỉ ra một điều kiện mà một hàng phải đáp ứng để được trả về. Ví dụ:
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie';
Ngoài ra, bạn có thể chọn đồng thời tất cả các bản ghi:
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;Chọn và Truy vấn Bản ghi trong MySQL
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie'; +----------+-----------------+ | AuthorID | AuthorName | +----------+-----------------+ | 1 | Agatha Christie | +----------+-----------------+ 1 row in set (0.00 sec) MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL; +----------+-----------------+ | AuthorID | AuthorName | +----------+-----------------+ | 1 | Agatha Christie | | 2 | Stephen King | | 3 | Paulo Coelho | +----------+-----------------+ 3 rows in set (0.00 sec) MariaDB [BookstoreDB]>
Bây giờ chúng ta hãy tạo CHÈN truy vấn cho BooksTBL , sử dụng ID Tác giả tương ứng để phù hợp với tác giả của từng cuốn sách. Giá trị của 1 trong BookIsAvailable cho biết sách còn hàng, 0 ngược lại:
MariaDB [BookstoreDB]> INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable) VALUES ('And Then There Were None', 1, 14.95, 1), ('The Man in the Brown Suit', 1, 23.99, 1), ('The Stand', 2, 35.99, 1), ('Pet Sematary', 2, 17.95, 0), ('The Green Mile', 2, 29.99, 1), ('The Alchemist', 3, 25, 1), ('By the River Piedra I Sat Down and Wept', 3, 18.95, 0);Chèn Truy vấn trong Bảng MySQL
MariaDB [BookstoreDB]> INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable) -> VALUES ('And Then There Were None', 1, 14.95, 1), -> ('The Man in the Brown Suit', 1, 23.99, 1), -> ('The Stand', 2, 35.99, 1), -> ('Pet Sematary', 2, 17.95, 0), -> ('The Green Mile', 2, 29.99, 1), -> ('The Alchemist', 3, 25, 1), -> ('By the River Piedra I Sat Down and Wept', 3, 18.95, 0); Query OK, 7 rows affected (0.03 sec) Records: 7 Duplicates: 0 Warnings: 0
Tại thời điểm này, chúng tôi sẽ thực hiện CHỌN để xem các bản ghi trong BooksTBL . Sau đó, hãy CẬP NHẬT giá của “ Nhà giả kim ”Của Paulo Coelho và CHỌN bản ghi cụ thể đó một lần nữa.
Lưu ý cách BookLastUpdated hiện trường hiển thị một giá trị khác. Như chúng tôi đã giải thích trước đó, TIMESTAMP trường hiển thị giá trị khi bản ghi được chèn hoặc sửa đổi lần cuối.
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL; MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6; MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;Chèn Truy vấn và cập nhật Bảng trong Cơ sở dữ liệu MySQL
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL; +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ | BookID | BookName | AuthorID | BookPrice | BookLastUpdated | BookIsAvailable | +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ | 1 | And Then There Were None | 1 | 14.95 | 2016-10-01 23:31:41 | 1 | | 2 | The Man in the Brown Suit | 1 | 23.99 | 2016-10-01 23:31:41 | 1 | | 3 | The Stand | 2 | 35.99 | 2016-10-01 23:31:41 | 1 | | 4 | Pet Sematary | 2 | 17.95 | 2016-10-01 23:31:41 | 0 | | 5 | The Green Mile | 2 | 29.99 | 2016-10-01 23:31:41 | 1 | | 6 | The Alchemist | 3 | 25.00 | 2016-10-01 23:31:41 | 1 | | 7 | By the River Piedra I Sat Down and Wept | 3 | 18.95 | 2016-10-01 23:31:41 | 0 | +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ 7 rows in set (0.00 sec) MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6; +--------+---------------+----------+-----------+---------------------+-----------------+ | BookID | BookName | AuthorID | BookPrice | BookLastUpdated | BookIsAvailable | +--------+---------------+----------+-----------+---------------------+-----------------+ | 6 | The Alchemist | 3 | 22.75 | 2016-10-01 23:35:00 | 1 | +--------+---------------+----------+-----------+---------------------+-----------------+ 1 row in set (0.00 sec) MariaDB [BookstoreDB]>
Mặc dù chúng tôi sẽ không làm điều đó ở đây, nhưng bạn cũng có thể xóa bản ghi nếu không sử dụng nữa. Ví dụ:giả sử chúng tôi muốn xóa “ Nhà giả kim ”Từ BooksTBL .
Để làm như vậy, chúng tôi sẽ sử dụng nút XÓA tuyên bố như sau:
MariaDB [BookstoreDB]> DELETE FROM BooksTBL WHERE BookID=6;
Như trong trường hợp CẬP NHẬT , bạn nên thực hiện CHỌN trước tiên để xem (các) bản ghi có thể bị ảnh hưởng bởi XÓA .
Ngoài ra, đừng quên thêm WHERE mệnh đề và một điều kiện (BookID =6) để chọn bản ghi cụ thể cần xóa. Nếu không, bạn có nguy cơ xóa tất cả các hàng trong bảng!
Nếu bạn muốn nối hai (hoặc nhiều) trường, bạn có thể sử dụng CONCAT tuyên bố. Ví dụ:giả sử chúng tôi muốn trả về một tập hợp kết quả bao gồm một trường có tên sách và tác giả ở dạng “ Nhà giả kim (Paulo Coelho) ”Và một cột khác có giá.
Điều này sẽ yêu cầu THAM GIA giữa AuthorsTBL và BooksTBL trên trường chung được cả hai bảng chia sẻ ( AuthorID ):
MariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID;
Như chúng ta có thể thấy, CONCAT cho phép chúng ta nối nhiều biểu thức chuỗi được phân tách bằng dấu phẩy. Bạn cũng sẽ nhận thấy rằng chúng tôi đã chọn bí danh Mô tả đại diện cho tập hợp kết quả của phép nối.
Kết quả của truy vấn trên được hiển thị trong hình ảnh dưới đây:
Truy vấn Nhiều trường trong Bảng MySQLMariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID; +--------------------------------------------------------+-----------+ | Description | BookPrice | +--------------------------------------------------------+-----------+ | And Then There Were None (Agatha Christie) | 14.95 | | The Man in the Brown Suit (Agatha Christie) | 23.99 | | The Stand (Stephen King) | 35.99 | | Pet Sematary (Stephen King) | 17.95 | | The Green Mile (Stephen King) | 29.99 | | The Alchemist (Paulo Coelho) | 25.00 | | By the River Piedra I Sat Down and Wept (Paulo Coelho) | 18.95 | +--------------------------------------------------------+-----------+ 7 rows in set (0.00 sec)
Tạo người dùng để truy cập vào cơ sở dữ liệu của Hiệu sáchDB
Sử dụng root để thực hiện tất cả DML hoạt động trong cơ sở dữ liệu là một ý tưởng tồi. Để tránh điều này, chúng tôi có thể tạo MariaDB mới tài khoản người dùng (chúng tôi sẽ đặt tên là người dùng hiệu sách ) và chỉ định tất cả các quyền cần thiết cho BookstoreDB :
MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'YourPasswordHere'; MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON BookstoreDB.* to [email protected]; MariaDB [BookstoreDB]> FLUSH PRIVILEGES;Tạo người dùng cơ sở dữ liệu mới với các đặc quyền
MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'tecmint'; Query OK, 0 rows affected (0.00 sec) MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON BookstoreDB.* to [email protected]; Query OK, 0 rows affected (0.00 sec) MariaDB [BookstoreDB]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
Việc có một người dùng chuyên dụng, riêng biệt cho từng cơ sở dữ liệu sẽ ngăn ngừa thiệt hại cho toàn bộ cơ sở dữ liệu nếu một tài khoản bị xâm phạm.
Mẹo bổ sung về MySQL
Để xóa MariaDB nhắc, nhập lệnh sau và nhấn Enter :
MariaDB [BookstoreDB]> \! clear
Để kiểm tra cấu hình của một bảng nhất định, hãy thực hiện:
MariaDB [BookstoreDB]> SELECT COLUMNS IN [TABLE NAME HERE ];
Ví dụ:
MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;Liệt kê các Cột trong Bảng Cơ sở dữ liệu
MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL; +-----------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-------------------+-----------------------------+ | BookID | int(11) | NO | PRI | NULL | auto_increment | | BookName | varchar(100) | NO | | NULL | | | AuthorID | int(11) | NO | MUL | NULL | | | BookPrice | decimal(6,2) | NO | | NULL | | | BookLastUpdated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | BookIsAvailable | tinyint(1) | YES | | NULL | | +-----------------+--------------+------+-----+-------------------+-----------------------------+ 6 rows in set (0.02 sec)
Kiểm tra nhanh cho thấy rằng BookIsAvailable trường thừa nhận NULL các giá trị. Vì chúng tôi không muốn cho phép điều đó, chúng tôi sẽ ALTER bảng như sau:
MariaDB [BookstoreDB]> ALTER TABLE BooksTBL MODIFY BookIsAvailable BOOLEAN NOT NULL;
(Vui lòng hiển thị lại các cột - CÓ được đánh dấu trong hình ảnh trên bây giờ phải là KHÔNG ).
Cuối cùng, để xem tất cả cơ sở dữ liệu trên máy chủ của bạn, hãy thực hiện:
MariaDB [BookstoreDB]> SHOW DATABASES; OR MariaDB [BookstoreDB]> SHOW SCHEMAS;Liệt kê tất cả cơ sở dữ liệu MySQL
[[email protected] ~]# mysql -u bookstoreuser -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [BookstoreDB]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | BookstoreDB | | information_schema | +--------------------+ 2 rows in set (0.00 sec) MariaDB [BookstoreDB]> SHOW SCHEMAS; +--------------------+ | Database | +--------------------+ | BookstoreDB | | information_schema | +--------------------+ 2 rows in set (0.00 sec)
Hình ảnh sau đây cho thấy kết quả của lệnh trên sau khi truy cập lời nhắc MariaDB với tư cách là người dùng hiệu sách (lưu ý rằng tài khoản này không thể “nhìn thấy” bất kỳ cơ sở dữ liệu nào ngoài BookstoreDB và information_schema (khả dụng cho tất cả người dùng):
Tóm tắt
Trong bài viết này, chúng tôi đã giải thích cách chạy DML hoạt động và cách tạo cơ sở dữ liệu, bảng và người dùng chuyên dụng trên cơ sở dữ liệu MariaDB. Ngoài ra, chúng tôi đã chia sẻ một số mẹo có thể giúp cuộc sống của bạn với tư cách là quản trị viên hệ thống / cơ sở dữ liệu dễ dàng hơn.
- Phần Quản trị Cơ sở dữ liệu MySQL - 1
- Phần Quản trị Cơ sở dữ liệu MySQL - 2
- Kiểm tra và tối ưu hóa hiệu suất MySQL - Phần 3
Nếu bạn có bất kỳ câu hỏi nào về bài viết này, đừng ngần ngại cho chúng tôi biết! Vui lòng sử dụng mẫu bình luận bên dưới để liên hệ với chúng tôi.