1. 程式人生 > 其它 >[資料庫]MySQL基礎知識

[資料庫]MySQL基礎知識

[資料庫]MySQL基礎知識

目錄

參考:

1. SQL語句

可以把 SQL 分成兩個部分:資料操作語言(DML)和資料定義語言(DDL)

SQL 適用於執行查詢的語法。但是 SQL 語言也包含用於增刪改查的語法。

增刪改查語句構成 SQL 的 DML 部分:

  • **SELECT **- 查詢
  • UPDATE - 更改
  • DELETE - 刪除
  • INSERT INTO - 增加

建立刪除表格,定義索引(鍵),規定表間連結和設定約束的 DDL 語句:

  • CREATE DATABASE - 建立新資料庫
  • ALTER DATABASE - 修改資料庫
  • CREATE TABLE - 建立新表
  • ALTER TABLE - 變更(改變)資料庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 建立索引(搜尋鍵)
  • DROP INDEX - 刪除索引

2. 資料庫簡介

  • 資料庫(DataBase)是按照資料結構來組織、儲存和管理資料的倉庫。

  • 每個資料庫都有一個或多個不同的API用於對資料的增刪改查。

3. 關係型資料庫

RDBMS(Relational DataBase Management System),關係型資料庫。

關係型資料庫的一些術語:

  • 資料庫(DataBase):資料庫是表的集合,可以理解為用來存放資料表的倉庫。
  • 資料表(Table):表是資料的矩陣,看起來就像一個簡單的Excel表格。
  • 列(Column):一列相同型別的資料。
  • 行(Row):一組相關的資料。
  • 主鍵(Primary Key):主鍵是唯一的,一個數據表中只能包含一個主鍵,可以使用主鍵來查詢資料。
  • 外來鍵(Foreign key):外來鍵用於關聯兩個表。
  • 複合鍵(Composite key):複合鍵將多個列作為一個索引鍵,一般用於符合索引。
  • 索引(Index):使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。

4. MySQL 安裝

在 CentOS 7 之後的MySQL被其分支MariaDB代替,在儲存引擎方面採用XtraDB來代替MySQL的InnoDB。

檢視系統中的是否自帶MariaDB:

[root@localhost ~]# rpm -qa | grep mariadb
mariadb-errmsg-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-gssapi-server-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-backup-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-connector-c-config-3.1.11-2.el8_3.noarch
mariadb-server-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-server-utils-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-common-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
mariadb-connector-c-3.1.11-2.el8_3.x86_64

如果有,可以選擇解除安裝(因為系統自帶的版本可能會比較舊,存在相容性問題)

rpm -e mariadb // 普通刪除模式
rpm -e --nodeps mariadb // 強力刪除模式,會刪除依賴檔案

安裝 Mariadb:

yum install -y mariadb mariadb-server

初始化 Mariadb:

mysqld --initialize

設定開機啟動:

systemctl enable mariadb.service
systemctl start mariadb.service

驗證:

[root@localhost ~]# mysqladmin --version
mysqladmin  Ver 9.1 Distrib 10.3.28-MariaDB, for Linux on x86_64

初始化root登入密碼:

mysqladmin -u root password "new_password"

登入資料庫:

mysql -u root -p

5. MySQL 管理

5.1 使用者設定

在MySQL(MariaDB)中,新增使用者有兩種方式:

5.1.1 建立使用者

切換到mysql庫:

MariaDB [(none)]> use mysql;

新增sky使用者,密碼為skybiubiu:

MariaDB [mysql]> create user sky identified by 'skybiubiu';
Query OK, 0 rows affected (0.000 sec)

5.1.2 使用者授權

以skydb庫為例子:

MariaDB [mysql]> CREATE DATABASE skydb;
Query OK, 1 row affected (0.000 sec)

通過GRANT命令進行授權,授予sky使用者SELECT,INSERT,UPDATE操作許可權:

MariaDB [skydb]> GRANT SELECT,INSERT,UPDATE ON skydb.*
    -> TO 'sky'@'localhost'
    -> IDENTIFIED BY 'skybiubiu';
Query OK, 0 rows affected (0.001 sec)

5.2 管理命令

  • USE 資料庫名 - 選擇要操作的資料庫
  • SHOW DATABASES - 檢視所有資料庫
  • SHOW TABLES - 檢視指定庫的所有表
  • SHOW COLUMNS FROM 資料表 - 顯示資料表的屬性,屬性型別,主鍵資訊,NULL,預設值等資訊
  • SHOW INDEX FROM 資料表 - 顯示資料表的詳細索引資訊,包括主鍵。
  • SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern'] - 查看錶狀態

6. MySQL 資料結構

有三種主要的型別:Text(文字)、Number(數字)和 Date/Time(日期/時間)型別。

6.1 Text 型別

資料型別 描述
CHAR(size) 儲存固定長度的字串(可包含字母、數字以及特殊字元)。在括號中指定字串的長度。最多 255 個字元。
VARCHAR(size) 儲存可變長度的字串(可包含字母、數字以及特殊字元)。在括號中指定字串的最大長度。最多 255 個字元。註釋:如果值的長度大於 255,則被轉換為 TEXT 型別。
TINYTEXT 存放最大長度為 255 個字元的字串。
TEXT 存放最大長度為 65,535 個字元的字串。
BLOB 用於 BLOBs(Binary Large OBjects)。存放最多 65,535 位元組的資料。
MEDIUMTEXT 存放最大長度為 16,777,215 個字元的字串。
MEDIUMBLOB 用於 BLOBs(Binary Large OBjects)。存放最多 16,777,215 位元組的資料。
LONGTEXT 存放最大長度為 4,294,967,295 個字元的字串。
LONGBLOB 用於 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 位元組的資料。
ENUM(x,y,z,etc.) 允許您輸入可能值的列表。可以在 ENUM 列表中列出最大 65535 個值。如果列表中不存在插入的值,則插入空值。註釋:這些值是按照您輸入的順序排序的。可以按照此格式輸入可能的值: ENUM('X','Y','Z')
SET 與 ENUM 類似,不同的是,SET 最多隻能包含 64 個列表項且 SET 可儲存一個以上的選擇。

6.2 Number 型別

資料型別 描述
TINYINT(size) -128 到 127 常規。0 到 255 無符號*。在括號中規定最大位數。
SMALLINT(size) -32768 到 32767 常規。0 到 65535 無符號*。在括號中規定最大位數。
MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 無符號*。在括號中規定最大位數。
INT(size) -2147483648 到 2147483647 常規。0 到 4294967295 無符號*。在括號中規定最大位數。
BIGINT(size) -9223372036854775808 到 9223372036854775807 常規。0 到 18446744073709551615 無符號*。在括號中規定最大位數。
FLOAT(size,d) 帶有浮動小數點的小數字。在 size 引數中規定最大位數。在 d 引數中規定小數點右側的最大位數。
DOUBLE(size,d) 帶有浮動小數點的大數字。在 size 引數中規定最大位數。在 d 引數中規定小數點右側的最大位數。
DECIMAL(size,d) 作為字串儲存的 DOUBLE 型別,允許固定的小數點。在 size 引數中規定最大位數。在 d 引數中規定小數點右側的最大位數。

這些整數型別擁有額外的選項 UNSIGNED。通常,整數可以是負數或正數。如果新增 UNSIGNED 屬性,那麼範圍將從 0 開始,而不是某個負數。

6.3 Date 型別

資料型別 描述
DATE() 日期。格式:YYYY-MM-DD註釋:支援的範圍是從 '1000-01-01' 到 '9999-12-31'
DATETIME() *日期和時間的組合。格式:YYYY-MM-DD HH:MM:SS註釋:支援的範圍是從 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
TIMESTAMP() *時間戳。TIMESTAMP 值使用 Unix 紀元('1970-01-01 00:00:00' UTC) 至今的秒數來儲存。格式:YYYY-MM-DD HH:MM:SS註釋:支援的範圍是從 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME() 時間。格式:HH:MM:SS註釋:支援的範圍是從 '-838:59:59' 到 '838:59:59'
YEAR() 2 位或 4 位格式的年。註釋:4 位格式所允許的值:1901 到 2155。2 位格式所允許的值:70 到 69,表示從 1970 到 2069。

7. MySQL 庫&表操作

7.1 庫操作

7.1.1 建立庫

方法一:登入MySQL中,通過SQL語句建立。

CREATE DATABASE IF NOT EXISTS <資料庫名>;
  • IF NOT EXISTS - 如果不存在該資料庫則建立。

方法二:在bash中,利用mysqladmin命令建立。

mysqladmin -u root -p create <資料庫名>

7.1.2 刪除庫

同上兩種刪除庫的方法:

登入MySQL中,通過SQL語句刪除:

DROP DATABASE <資料庫名>;

在Bash,通過mysqladmin命令刪除:

mysqladmin -u root -p drop <資料庫名>

7.1.3 選擇庫

進入mysql,使用SQL語句選擇庫:

USE <資料庫名>;

7.2 表操作

7.2.1 建立表

登入MySQL中,通過SQL語句建立:

CREATE TABLE <表名> (column_name column_type);

示例:

CREATE TABLE IF NOT EXISTS books (
  BookID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
  Title VARCHAR(100) NOT NULL, 
  SeriesID INT, AuthorID INT)CHARSET UTF8;

注意:`是反單引號,ESC下面那個,可加可不加。

  • NOT NULL - 該欄位不能為空。
  • AUTO_INCREMENT - 自增,常用於主鍵,數值會自動加1。
  • PRIMARY KEY - 定義主鍵,可使用多列來定義主鍵,列間以逗號分隔。
  • ENGINE - 設定儲存引擎。
  • CHARSET - 設定編碼。

7.2.2 刪除表

登入MySQL中,通過SQL語句建立:

DROP TABLE <表名>;

示例:

MariaDB [skydb]> show tables;
+-----------------+
| Tables_in_skydb |
+-----------------+
| books           |
| sky_table       |
+-----------------+
2 rows in set (0.000 sec)

MariaDB [skydb]> DROP TABLE sky_table;
Query OK, 0 rows affected (0.002 sec)

MariaDB [skydb]> show tables;
+-----------------+
| Tables_in_skydb |
+-----------------+
| books           |
+-----------------+
1 row in set (0.000 sec)

7.2.3 查詢表

檢視庫中所有表:

MariaDB [skydb]> SHOW TABLES;
+-----------------+
| Tables_in_skydb |
+-----------------+
| books           |
+-----------------+
1 row in set (0.000 sec)

檢視一個某個表頭的詳情:

MariaDB [skydb]> DESCRIBE books;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| BookID   | int(11)      | NO   | PRI | NULL    | auto_increment |
| Title    | varchar(100) | NO   |     | NULL    |                |
| SeriesID | int(11)      | YES  |     | NULL    |                |
| AuthorID | int(11)      | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.001 sec)

DESCRIBE 可以簡寫為 DESC。

7.3 資料操作

7.3.1 插入資料

INSERT INTO books (Title, SeriesID, AuthorID)
VALUES ("Lair of Bones", 2, 2);

7.3.2 查詢資料

語法:

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

Clause - 從哪個表裡找。

LIMIT N - 設定返回的記錄數。

OFFSET M - 查詢資料的偏移量,預設為0。

效果:

MariaDB [skydb]> SELECT * FROM books;
+--------+---------------+----------+----------+
| BookID | Title         | SeriesID | AuthorID |
+--------+---------------+----------+----------+
|      1 | Lair of Bones |        2 |        2 |
|      2 | Lair of Bones |        2 |        2 |
+--------+---------------+----------+----------+
2 rows in set (0.000 sec)

因為我插入了兩次資料,所以有兩條一樣的,留著下面更改的時候用。

7.3.3 更改資料

將7.3.2中BookID為2的Title改為 I'm SkyBiuBiu

SQL語法:

UPDATE books 
SET Title = "I'm SkyBiuBiu" 
WHERE BookID = 2;

效果:

MariaDB [skydb]> SELECT * FROM books;
+--------+---------------+----------+----------+
| BookID | Title         | SeriesID | AuthorID |
+--------+---------------+----------+----------+
|      1 | Lair of Bones |        2 |        2 |
|      2 | I'm SkyBiuBiu |        2 |        2 |
+--------+---------------+----------+----------+
2 rows in set (0.000 sec)