国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--mysql基本使用

這篇具有很好參考價值的文章主要介紹了【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--mysql基本使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??一、Mysql5.7 VS Mysql8.0 詳解

【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--mysql基本使用

1.1 ?字符編碼

mysql5.7和之前版本,默認字符集為latin1,插入中文字符會出現(xiàn)亂碼。在使用5.7及之前的版本時候需要將字符編碼修改為utf8字符集,utf8字符集指的是utf8mb3。

從mysql8.0開始,數(shù)據(jù)庫默認字符編碼改為utf8mb4。

1.2 ?用戶的創(chuàng)建與授權(quán)

#### mysql8.0 用戶的創(chuàng)建 #### 授權(quán)時需要分開執(zhí)行,不能用grant 建立用戶

# create user '用戶名'@'主機' identified by '密碼';
mysql> create user 'zyl'@'%' identified by 'Zyl@123456';
Query OK, 0 rows affected (0.07 sec)

#grant all privileges on *.* to '用戶名'@'主機';
mysql> grant all privileges on *.* to 'zyl'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> 
#### Mysql5.7 授權(quán)root用戶命令 ####
# grant all privileges on *.* to '用戶名'@'主機' identified by '密碼';

mysql> grant all privileges on *.* to 'root'@'%' identified by 'Zyl@123456';
mysql> flush privileges;

#### Mysql8.0 授權(quán)root命令 #### 
# grant all privileges on . to '用戶名'@'主機' with grant option;;

mysql> grant all privileges on *.* to 'root'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

#### 修改root用戶密碼 #####
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Zyl@123456';

mysql> flush privileges;

1.3 ? 認證插件

Mysql 5.7 默認身份插件是 mysql_native_password

Mysql 8.0 默認的身份插件是 caching_sha2_password

查看身份認證插件:

mysql> show variables like 'default_authentication_plugin%';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+
1 row in set (0.00 sec)

1.4 ? 隱藏索引

在Mysql 8.0 中, 可以將索引通過命令設(shè)置為 隱藏顯示

對于被隱藏的索引,它不會被查詢優(yōu)化器所使用,我們可以使用這一功能,對相關(guān)的查詢進行性能調(diào)試,通過隱藏或顯示,分析數(shù)據(jù)庫性能差異的原因,同時也可以去除無效的索引。

ALTER TABLE 表名 ALTER INDEX 索引名 INVISIBLE;

例子:
##創(chuàng)建名為idx_row_id的索引
CREATE INDEX idx_row_id ON tab1 ( row_id );

###隱藏索引
ALTER TABLE tab1 ALTER INDEX idx_row_id INVISIBLE;

###恢復(fù)隱藏索引
ALTER TABLE tab1 ALTER INDEX idx_row_id VISIBLE;

1.5 ? 持久化設(shè)置

Mysql 8.0 新增 SET PERSIST 的命令,該命令的配置值保存到數(shù)據(jù)目錄下的mysqld-auto.cnf文件中,下次啟動時會讀取該文件,用其中的配置來覆蓋缺省的配置文件,補充了SET GLOBAL 命令只能臨時生效的不足。

mysql> SET PERSIST max_connections = 500;
Query OK, 0 rows affected (0.00 sec)

mysql> 

1.6 ? 通用表達式(Common Table Expressions)

Mysql 5.7 復(fù)雜的查詢會使用嵌入式表,例如:
SELECT
	t1.*,
	t2.* 
FROM
	( SELECT id FROM tab1 ) t1,
	( SELECT user_id FROM tab2 ) t2;

有了Mysql 8.0 通用表表達式(Common Table Expressions)之后:

WITH 
t1 AS ( SELECT id FROM tab1 ),
t2 AS ( SELECT user_id FROM tab2 )
SELECT t1.*,t2.* 
FROM t1,t2;

【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--mysql基本使用

1.7 ? 性能提升

官方表示Mysql 8.0 的速度要比 Mysql 5.7 快 2 倍。Mysql 8.0 在讀/寫工作負載、IO 密集型工作負載、以及高競爭工作負載時相比Mysql 5.7有更好的性能。
【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--mysql基本使用

1.8 ? 參數(shù)變化

mysql中想要模糊的查看某一個項目的配置,可以使用百分號%進行通配符搜索。

mysql> show variables like 'mysql%';

query_cahe參數(shù)已經(jīng)不存在
binglog過期時間參數(shù)變更為:
| binlog_expire_logs_seconds | 2592000 |

mysql> show variables like 'binlog_%';
+------------------------------------------------+--------------+
| Variable_name                                  | Value        |
+------------------------------------------------+--------------+
| binlog_cache_size                              | 32768        |
| binlog_checksum                                | CRC32        |
| binlog_direct_non_transactional_updates        | OFF          |
| binlog_encryption                              | OFF          |
| binlog_error_action                            | ABORT_SERVER |
| binlog_expire_logs_auto_purge                  | ON           |
| binlog_expire_logs_seconds                     | 2592000      |
| binlog_format                                  | ROW          |
| binlog_group_commit_sync_delay                 | 0            |
| binlog_group_commit_sync_no_delay_count        | 0            |
| binlog_gtid_simple_recovery                    | ON           |
| binlog_max_flush_queue_time                    | 0            |
| binlog_order_commits                           | ON           |
| binlog_rotate_encryption_master_key_at_startup | OFF          |
| binlog_row_event_max_size                      | 8192         |
| binlog_row_image                               | FULL         |
| binlog_row_metadata                            | MINIMAL      |
| binlog_row_value_options                       |              |
| binlog_rows_query_log_events                   | OFF          |
| binlog_stmt_cache_size                         | 32768        |
| binlog_transaction_compression                 | OFF          |
| binlog_transaction_compression_level_zstd      | 3            |
| binlog_transaction_dependency_history_size     | 25000        |
| binlog_transaction_dependency_tracking         | COMMIT_ORDER |
+------------------------------------------------+--------------+
24 rows in set (0.00 sec)

mysql> show variables like 'query_cahe%';
Empty set (0.00 sec)

mysql> 

1.9 ? NoSQL文檔支持

Mysql 從 5.7 版本開始提供 NoSQL 存儲功能,目前在 8.0 版本中這部分功能也得到了更大的改進。該項功能消除了對獨立的 NoSQL 文檔數(shù)據(jù)庫的需求,而 Mysql 文檔存儲也為 schema-less 模式的 JSON 文檔提供了多文檔事務(wù)支持和完整的 ACID 合規(guī)性。

1.10? 窗口函數(shù)

創(chuàng)建了名為 w 的 window,規(guī)定它對表tab1 中 id 字段進行排序,然后在 select 子句中對 w 執(zhí)行 rank() 方法,將結(jié)果輸出為 rank 字段。

mysql> select *, rank() over w as 'rank' from tab1 window w as (order by id);
+------+--------+-------+------+
| id   | name   | class | rank |
+------+--------+-------+------+
| 1001 | 曹操   | 1|    1 |
| 1002 | 張飛   | 1|    2 |
| 1003 | 項羽   | 3|    3 |
| 1004 | 劉備   | 2|    4 |
+------+--------+-------+------+
4 rows in set (0.00 sec)

mysql> 

??二、Mysql數(shù)據(jù)庫安裝與升級

01-mysql安裝篇(rpm方式安裝+二進制方式安裝)

02-mysql升級篇(rpm方式+二進制方式升級)

??三、Mysql數(shù)據(jù)庫基本使用及常規(guī)配置詳解

2.1 ?? Mysql版本查看及連接

####方式一:服務(wù)器終端命令行####
[root@db-server ~]# mysql --version
mysql  Ver 8.0.32 for Linux on x86_64 (MySQL Community Server - GPL)
[root@db-server ~]# 

####方式二:Mysql終端命令行####
[root@db-server ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.32    |
+-----------+
1 row in set (0.00 sec)

####退出Mysql終端命令行####
mysql> exit
Bye
[root@db-server ~]# 

2.2 ?? Mysql進程查看及服務(wù)啟停

?? 進程查看

[root@db-server ~]# ps -ef | grep mysqld

?? 服務(wù)啟停

####服務(wù)啟動####
[root@db-server ~]# systemctl start mysqld

####服務(wù)停止####
[root@db-server ~]# systemctl stop mysqld

####服務(wù)狀態(tài)查看####
[root@db-server ~]# systemctl status mysqld


####設(shè)置開機自啟####
[root@db-server ~]# systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.

####設(shè)置開機不自啟####
[root@db-server ~]# systemctl disable mysqld
Removed symlink /etc/systemd/system/multi-user.target.wants/mysqld.service.

【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--mysql基本使用

2.3 ?? Mysql密碼策略詳解、修改密碼、授權(quán)root用戶遠程登錄

2.3.1 ?? Mysql密碼策略詳解

mysql8.0 密碼策略變量詳解:

?? validate_password.policy:密碼策略,檢查用戶的密碼。

        0(Low)密碼長度最少8個字符

        1(Mediumpolicy)至少包含1個數(shù)字,1個小寫字母,1個大寫字母和1個特殊字符組成(默認值)

        2(Strongpolicy)長度為4或更長的密碼子字符串不得與字典文件中的單詞匹配

?? validate_password.length:需要密碼最小字符數(shù),默認為8

?? validate_password.number_count:需要密碼的最小數(shù)字字符數(shù),默認為1

?? validate_password.mixed_case_count:需要密碼的小寫和大寫的最小字符數(shù),默認為1

?? validate_password.special_char_count:需要密碼的特殊字符的最小字符數(shù),默認為1

?? validate_password.dictionary_file:用于檢查密碼的字典文件的路徑名,默認沒有

2.3.2 ?? 修改root用戶密碼

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.02 sec)

mysql> alter user root@localhost identified by 'Zyl@123456';
Query OK, 0 rows affected (0.01 sec)

2.3.3 ?? 授權(quán)root用戶遠程登錄

mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+
5 rows in set (0.00 sec)

 mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on *.* to 'root'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Zyl@123456';

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> 

授權(quán)遠程登錄與5.7語法有所區(qū)別:

?? mysql 5.7:

mysql> grant all privileges on *.* to 'root'@'%' identified by 'Zyl@123456' with grant option;

?? mysql 8.0,需要分開執(zhí)行, 將創(chuàng)建賬戶和賦予權(quán)限分開了:

mysql> grant all privileges on *.* to 'root'@'%' with grant option;
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Zyl@123456';
mysql> flush privileges;

賦予CRUD權(quán)限:grant select,insert,update,delete on *.* to root'@'%';

賦予超級權(quán)限:grant all privileges on *.* to 'root'@'%' with grant option;

撤銷授權(quán): revoke all privileges on *.* from 'root'@'%';

刷新權(quán)限: flush privileges;

查看權(quán)限: show grants for 'root'@'%';

2.4 ?? Mysql字符集

mysql 8.0之前默認的字符集是latin1,utf8字符集指向的是utf8mb3,從8.0開始默認編碼使用utf8mb4,避免了亂碼產(chǎn)生。

【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--mysql基本使用

Mysql 各級別的字符集:

  • 服務(wù)器級別-----(my.cnf配置)

  • 數(shù)據(jù)庫級別-----自動同步服務(wù)器級別字符集

  • 表級別-----ALTER TABLE 表名 DEFAULT CHARSET=‘字符集名’,或者創(chuàng)建表時,創(chuàng)建語句后面加上"CHARACTER SET"子句,如:CREATE TABLE 表名 (列名1 INT,列名2 CHAR(20)) ENGINE = InnoDB DEFAULT CHARSET=utf8;

  • 列級別-----ALTER TABLE 表名 MODIFY 列名 列類型 CHARACTER SET ‘字符集名’;

mysql> show variables like 'character%';
####或者#####
mysql> show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

mysql> 

? 修改數(shù)據(jù)庫字符

###alter database 數(shù)據(jù)庫名 character set '字符編碼';
mysql> alter database test01 character set 'utf8';
Query OK, 1 row affected, 1 warning (0.05 sec)

mysql>

? 修改表字符


###alter table 表名 convert to character set '字符編碼';
mysql> alter table tab1 convert to character set 'utf8';
Query OK, 4 rows affected, 1 warning (0.10 sec)
Records: 4  Duplicates: 0  Warnings: 1

### ALTER TABLE  表名 DEFAULT CHARSET=‘字符集名’`
mysql> alter table tab1 DEFAULT CHARSET='utf8';
Query OK, 0 rows affected, 1 warning (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> 

? utf8 與utf8mb4

?? utf8字符集表示一個字符需要 1 ~4個字節(jié),一般常用字符 1 ~3個字節(jié)就可以表示,而字符集最大長度表示一個字符最大字節(jié)長度,所以會影響存儲和性能,所以產(chǎn)生了utf8mb3 和utf8mb4 兩個概念。

?? utfmb3:閹割版的utf8字符集,只使用 1 ~3個字節(jié)表示字符。
?? utfmb4:正宗的utf8字符集,使用 1 ~4個字節(jié)表示字符,如存儲emoji表情。

2.5 ?? Mysql --sql大小寫規(guī)范與sql_mode

2.5.1 ?? sql大小寫規(guī)范

Mysql 在 Windows 和 Linux 的大小寫規(guī)范不一樣。

在 Windows 下全部都不區(qū)分大小寫。

在 Linux 下:

數(shù)據(jù)庫名、表名、表別名、變量名是嚴格區(qū)分大小寫。
關(guān)鍵字、函數(shù)名稱在 SQL 中不區(qū)分大小寫。
字段名、列別名在所有的情況下都不區(qū)分大小寫。
mysql> SHOW VARIABLES LIKE '%lower_case_table_names%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_table_names | 0     |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> 

lower_case_table_names 默認為0,大小寫敏感。一般情況下不建議修改。

mysql> select * from tab1;
+------+--------+-------+
| id   | name   | class |
+------+--------+-------+
| 1001 | 曹操   | 1|
| 1002 | 張飛   | 1|
| 1003 | 項羽   | 3|
| 1004 | 劉備   | 2|
+------+--------+-------+
4 rows in set (0.00 sec)

mysql> select * from Tab1;
ERROR 1146 (42S02): Table 'test01.Tab1' doesn't exist
mysql> 

2.5.2 ?? sql_mode

sql_mode會影響mysql支持的sql語法及數(shù)據(jù)驗證檢查,通過設(shè)置sql_mode可以完成不同嚴格程度的數(shù)據(jù)校驗,有效保障數(shù)據(jù)準確性。

#### 查詢mysql數(shù)據(jù)庫sql_mode
mysql> select @@session.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@session.sql_mode                                                                                                    |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select @@global.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show variables like 'sql_mode';
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

? 寬松模式 與 嚴格模式

?? 寬松模式:插入數(shù)據(jù)時,即使給了一個錯誤數(shù)據(jù),也可能被接受,并且不報錯。

如:在表中,有字段name屬性,字段類型char(10),如果插入數(shù)據(jù)時候,有一條數(shù)據(jù)name值為’zyl@123456789’,超過了設(shè)定字段長度,那么這條數(shù)據(jù)插入,不會報錯,只會截取前10個字符’‘zyl@123456’,這就是寬松模式。

?? 嚴格模式:出現(xiàn)上面情況,應(yīng)該報錯,插入數(shù)據(jù)出錯,所以在數(shù)據(jù)庫生產(chǎn)、開發(fā)、測試等環(huán)境,必須采用嚴格模式。

? 改為嚴格模式可能存在的問題:

sql_mode設(shè)置了含NO_ZERO_DATE,那么不允許插入0日期,插入0日期會拋出錯誤,如字段TIMESTAMP,在沒聲明為NULL或顯示DEFAULT子句,會自動分配DEFAULT ‘0000-00-00 00:00:00’ 零時間戳。不滿足NO_ZERO_DATE而報錯。

?? 1、通過命令臨時設(shè)置sql_mode,重啟后失效:

### 當前會話 
SET SESSION sql_mode = '';

### 全局設(shè)置 
SET GLOBAL sql_mode = '';

?? 2、修改mysql的配置文件,重啟mysql服務(wù)后生效

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
常用sql_mode各參數(shù) 描述
ONLY_FULL_GROUP_BY 對于GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現(xiàn),那么這個SQL是不合法的,因為列不在GROUP BY從句中
NO_AUTO_VALUE_ON_ZERO 該值影響自增長列的插入。默認設(shè)置下,插入0或NULL代表生成下一個自增長值。如果用戶 希望插入的值為0,而該列又是自增長的,那么這個選項就有用了
STRICT_TRANS_TABLES 在該模式下,如果一個值不能插入到一個事務(wù)表中,則中斷當前的操作,對非事務(wù)表不做限制
STRICT_ALL_TABLES 如果插入數(shù)據(jù)的第一行內(nèi)容與字段類型兼容,但后續(xù)的數(shù)據(jù)行存在不兼容的情況,則兼容的數(shù)據(jù)正常插入,不兼容的數(shù)據(jù)則會報錯并終止insert操作。
NO_ZERO_IN_DATE 在嚴格模式下,不允許日期和月份為零
NO_ZERO_DATE 設(shè)置該值,mysql數(shù)據(jù)庫不允許插入零日期,插入零日期會拋出錯誤而不是警告
ERROR_FOR_DIVISION_BY_ZERO 在INSERT或UPDATE過程中,如果數(shù)據(jù)被零除,則產(chǎn)生錯誤而非警告。如 果未給出該模式,那么數(shù)據(jù)被零除時MySQL返回NULL
NO_AUTO_CREATE_USER 禁止GRANT創(chuàng)建密碼為空的用戶
NO_ENGINE_SUBSTITUTION 如果需要的存儲引擎被禁用或未編譯,那么拋出錯誤。不設(shè)置此值時,用默認的存儲引擎替代,并拋出一個異常
PIPES_AS_CONCAT 將“l(fā)l”作為字符串的鏈接字符操作,而不是作為或運算符,與“concat”相類似。
ANSI_QUOTES 啟用ANSI_QUOTES后,不能用雙引號來引用字符串,因為它被解釋為識別符
IGNORE_SPACE 用于忽略mysql系統(tǒng)函數(shù)與之后的括號之間的空格。

?? 不同版本默認的sql_mode

Mysql 5.5 :空

+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      |      |
+---------------+-----------------------------------------------------------------------------------------------------------------------+

Mysql 5.6:

+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      |  NO_ENGINE_SUBSTITUTION  |
+---------------+-----------------------------------------------------------------------------------------------------------------------+

Mysql 5.7:

+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER,  NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------+

Mysql 8.0:

+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+

??四、Mysql數(shù)據(jù)庫目錄結(jié)構(gòu)詳解–RPM方式安裝

?? 4.1 查看當前系統(tǒng)mysql有關(guān)目錄

[root@db-server mysql]# find / -name mysql
/etc/selinux/targeted/active/modules/100/mysql
/etc/logrotate.d/mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/bin/mysql
/usr/lib64/mysql
[root@db-server mysql]# 

?? 4.2 RPM方式安裝mysql 默認目錄

1、數(shù)據(jù)存儲目錄---存儲mysql運行過程中產(chǎn)生的數(shù)據(jù)
/var/lib/mysql/

mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)

mysql> 


2、配置文件---存放命令及配置文件,
/usr/share/mysql-8.0(mysql.server命令及配置文件)
/etc/my.cnf (mysql服務(wù)配置文件,指定端口、數(shù)據(jù)庫的安裝目錄等參數(shù))

3、相關(guān)命令目錄---存放了控制客服端和服務(wù)端的命令(可執(zhí)行文件)
/usr/bin(mysql、mysqladmin、mysqldump、mysqlcheck、mysqlshow、mysql_upgrade等命令)
/usr/sbin(mysqld命令)

4、啟動腳本---
/etc/rc.d/init.d/(啟動腳本文件mysql的目錄)

??五、Mysql數(shù)據(jù)庫與文件系統(tǒng)關(guān)系詳解

?? 5.1 查看當前有哪些數(shù)據(jù)庫

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test01             |
+--------------------+
5 rows in set (0.00 sec)

mysql> 

? 4個mysql安裝自帶的數(shù)據(jù)庫,1個自定義數(shù)據(jù)庫:

?? information_schema----存儲mysql服務(wù)器維護的數(shù)據(jù)庫信息,有哪些表、視圖、觸發(fā)器、列、索引等,這些信息并不是真實數(shù)據(jù),而是一些描述信息,稱之為元數(shù)據(jù)。還存儲了一些以innodb_sys開頭的表(內(nèi)部系統(tǒng)表)。

?? mysql----mysql自帶核心數(shù)據(jù)庫,存儲用戶賬戶及權(quán)限信息,其他一些存儲過程、事件定義信息,運行過程日志、幫助信息、時區(qū)信息等。

?? performance_schema----保存mysql運行過程中的一些狀態(tài)信息,用來監(jiān)控mysql各項性能指標,如最近執(zhí)行過的語句,內(nèi)存使用情況,執(zhí)行花費時長等。

?? sys----主要通過視圖形式把 performance_schema和 information_schema 連接起來,幫助管理員和開發(fā)人員監(jiān)控mysql的技術(shù)性能。

?? test01----自定義數(shù)據(jù)庫

?? 5.2 Mysql數(shù)據(jù)庫在文件系統(tǒng)中的表示詳解

?? 5.2.1 Mysql 5.7數(shù)據(jù)庫目錄文件

如果存儲引擎是InnoDB, 在data目錄下會看到3類文件(.frm、.ibd、.opt):

?? db.opt----存放數(shù)據(jù)庫使用字符集,字符校驗規(guī)則,show create database時顯示數(shù)據(jù)庫默認字符集即db.opt中字符集。

這個文件丟失不影響數(shù)據(jù)庫運行,該文件丟失之后新建表時,找不到數(shù)據(jù)庫的默認字符集,就把character_set_server當成數(shù)據(jù)庫的默認字符集,show create database時顯示character_set_server字符集。

?? .frm----存放數(shù)據(jù)庫的表結(jié)構(gòu)。

?? .ibd----(獨立表空間)存放表數(shù)據(jù)和索引的文件。該表的索引(B+樹)的每個非葉子節(jié)點存儲索引,葉子節(jié)點存儲索引和索引對應(yīng)的數(shù)據(jù)。

如果存儲引擎是myisam, 在data目錄下會看到3類文件(.frm、.myi、.myd):

?? .frm----表定義,是描述表結(jié)構(gòu)的文件。
?? .MYD----(MYData)數(shù)據(jù)信息文件,是表的數(shù)據(jù)文件。
?? .MYI----(MYIndex)索引信息文件,是表數(shù)據(jù)文件中任何索引的數(shù)據(jù)樹。

.MYD與.MYI合在一起相當于.ibd。

?? 5.2.2 Mysql 8.0 數(shù)據(jù)庫目錄文件

如果存儲引擎是InnoDB, 在data目錄下只會看到1類文件(.ibd),沒有.frm、 db.opt文件:

?? ibdata1----系統(tǒng)表空間,默認大小12M。

?? .ibd----獨立表空間(存放表數(shù)據(jù)和索引的文件、數(shù)據(jù)庫的表結(jié)構(gòu)、數(shù)據(jù)庫使用字符集,字符校驗規(guī)則)。

【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--mysql基本使用

如果存儲引擎是myisam, 在data目錄下會看到3類文件(.sdi、.myi、.myd):

?? .sdi----表定義,是描述表結(jié)構(gòu)的文件(相當于mysql5.7中的.frm)。
?? .MYD----(MYData)數(shù)據(jù)信息文件,是表的數(shù)據(jù)文件。
?? .MYI----(MYIndex)索引信息文件,是表數(shù)據(jù)文件中任何索引的數(shù)據(jù)樹。

?? 注:

1、在一個MySQL服務(wù)器中,系統(tǒng)表空間只有一份。從MySOL5.5.7到MySOL5.6.6之間的各個版本中,我們表中的數(shù)據(jù)都會被默認存儲到這個系統(tǒng)表空間。

2、在MySQL5.6.6以及之后的版本中,InnoDB并不會默認的把各個表的數(shù)據(jù)存儲到系統(tǒng)表空間中,而是為每一個表建立一個獨立表空間,也就是說我們創(chuàng)建了多少個表,就有多少個獨立表空間。使用 獨立表空間來存儲表數(shù)據(jù)的話,會在該表所屬數(shù)據(jù)庫對應(yīng)的子目錄下創(chuàng)建一個表示該獨立表空間的文件,文件名和表名相同。

[root@db-server mysql]# cd test01/
[root@db-server test01]# ll
total 224
-rw-r----- 1 mysql mysql 114688 Jun  3 15:53 tab1.ibd
-rw-r----- 1 mysql mysql 114688 Jun  3 15:28 tab2.ibd
[root@db-server test01]# pwd
/var/lib/mysql/test01
[root@db-server test01]# 

? .frm文件在Mysql8.0中不存在了

0racle 官方將frm文件的信息及更多信息移動到叫做序列化字典信息 (Serialized DictionaryInformation,SDI)中,SDI被寫在ibd文件內(nèi)部。

Mysql8.0屬于Oradie旗下,同理為了從IBD文件中提取SDI信息,Oracle提供了一個應(yīng)用程序ibd2sdi。Mysql8.0自帶。

到存儲ibd文件的目錄下,執(zhí)行下面的命令,解析.ibd 文件:

[root@db-server test01]# ibd2sdi --dump-file=tab1.txt tab1.ibd
[root@db-server test01]# ll
total 236
-rw-r----- 1 mysql mysql 114688 Jun  3 15:53 tab1.ibd
-rw------- 1 root  root   11142 Jun  3 21:59 tab1.txt
-rw-r----- 1 mysql mysql 114688 Jun  3 15:28 tab2.ibd
[root@db-server test01]# cat tab1.txt 
#####可以發(fā)現(xiàn)解析后的tab1.txt文件有表結(jié)構(gòu)信息、字符編碼等信息。

【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--mysql基本使用

?? 5.2.3 系統(tǒng)表空間與獨立表空間設(shè)置

我們可以自己指定使用系統(tǒng)表空間還是獨立表空間來存儲數(shù)據(jù),這個功能由啟動參數(shù) innodb_file_per_table控制,比如說我們想刻意將表數(shù)據(jù)都存儲到系統(tǒng)表空間時,可以在啟動MySOL服務(wù)器的時候這樣配置:

[server]
innodb_file_per_table=0   # 0: 代表使用系統(tǒng)表空間; 1: 代表使用獨立表空間

默認使用獨立表空間:文章來源地址http://www.zghlxwxcb.cn/news/detail-470570.html

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.01 sec)

mysql> 

??六、總結(jié)—溫故知新

? Mysql5.7 與 Mysql8.0 區(qū)別
? Mysql數(shù)據(jù)庫基本使用及常規(guī)參數(shù)配置
? Mysql數(shù)據(jù)庫目錄結(jié)構(gòu)了解
? Mysql數(shù)據(jù)庫與文件系統(tǒng)關(guān)系

??【上一篇】
??The End?? 點點關(guān)注,收藏不迷路??
【下一篇】??

到了這里,關(guān)于【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--mysql基本使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 關(guān)于初識MySQL數(shù)據(jù)庫以及MySQL的基本使用

    關(guān)于初識MySQL數(shù)據(jù)庫以及MySQL的基本使用

    數(shù)據(jù)庫一般是指: 在磁盤或者內(nèi)存中存儲的特定結(jié)構(gòu)組織的數(shù)據(jù) 。 其本質(zhì)可以理解為: 對數(shù)據(jù)內(nèi)容存儲的一套解決方案,對數(shù)據(jù)庫提供要求或字段,它會給用戶返回結(jié)果 MySQL是 一套給用戶提供數(shù)據(jù)存取的服務(wù),是一種網(wǎng)絡(luò)程序 那么在系統(tǒng)中會存在mysql和mysqld,如何區(qū)分兩

    2024年02月16日
    瀏覽(19)
  • MySQL入門指南:數(shù)據(jù)庫操作的基礎(chǔ)知識

    MySQL入門指南:數(shù)據(jù)庫操作的基礎(chǔ)知識

    當談到關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)時,MySQL無疑是最常見和廣泛使用的一個。它是一個強大的工具,用于存儲、管理和檢索數(shù)據(jù)。在這篇博客中,我們將介紹MySQL的基本知識,包括數(shù)據(jù)庫的操作、數(shù)據(jù)表的操作以及數(shù)據(jù)的增刪改查~~ 目錄 1. 數(shù)據(jù)庫的操作 1.1 創(chuàng)建數(shù)據(jù)庫 1.2 刪除

    2024年02月07日
    瀏覽(39)
  • Navicat (連接mysql數(shù)據(jù)庫)的基本使用

    Navicat (連接mysql數(shù)據(jù)庫)的基本使用

    目錄 前言 一、navicat-15的下載安裝 二、navicat連接數(shù)據(jù)庫 1、登錄 2、連接數(shù)據(jù)庫失敗情況 3、登錄數(shù)據(jù)庫需要授權(quán) 三、navicat的基礎(chǔ)操作? ☆ 1、數(shù)據(jù)庫的基本操作 2、對表進行操作 3、sql 語句管理數(shù)據(jù)庫? 4、用戶管理 5、?視圖的創(chuàng)建 6、表的導(dǎo)入與導(dǎo)出? 7、數(shù)據(jù)庫的備份?

    2024年02月04日
    瀏覽(23)
  • 【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--用戶與權(quán)限管理

    【Mysql數(shù)據(jù)庫從0到1】-入門基礎(chǔ)篇--用戶與權(quán)限管理

    Mysql 用戶分為root用戶和普通用戶,其中root用戶是數(shù)據(jù)庫超級管理員,擁有所有權(quán)限(創(chuàng)建、刪除、修改密碼、授權(quán)等管理權(quán)限),普通用戶只擁有被授予的權(quán)限。 Mysql數(shù)據(jù)庫的安全性通過賬戶管理來保障。 1.1 ?? Mysql服務(wù)器登錄 ?? 簡單使用 ?? 復(fù)雜使用 1.2 ?? 用戶創(chuàng)建

    2024年02月07日
    瀏覽(27)
  • 【Mysql】萬字長文帶你快速掌握數(shù)據(jù)庫基礎(chǔ)概念及SQL基本操作

    【Mysql】萬字長文帶你快速掌握數(shù)據(jù)庫基礎(chǔ)概念及SQL基本操作

    為了鞏固所學(xué)的知識,作者嘗試著開始發(fā)布一些學(xué)習(xí)筆記類的博客,方便日后回顧。當然,如果能幫到一些萌新進行新技術(shù)的學(xué)習(xí)那也是極好的。作者菜菜一枚,文章中如果有記錄錯誤,歡迎讀者朋友們批評指正。 (博客的參考源碼可以在我主頁的資源里找到,如果在學(xué)習(xí)的

    2024年02月15日
    瀏覽(54)
  • MySQL數(shù)據(jù)庫精選(從入門使用到底層結(jié)構(gòu))

    MySQL數(shù)據(jù)庫精選(從入門使用到底層結(jié)構(gòu))

    DDL: 數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫對象(數(shù)據(jù)庫、表、字段) DML: 數(shù)據(jù)操作語言,用來對數(shù)據(jù)庫表中的數(shù)據(jù)進行增刪改 DQL: 數(shù)據(jù)查詢語言,用來查詢數(shù)據(jù)庫中表的記錄 DCL: 數(shù)據(jù)控制語言,用來創(chuàng)建數(shù)據(jù)庫用戶、控制數(shù)據(jù)庫的控制權(quán)限 數(shù)據(jù)定義語言 數(shù)據(jù)庫操作 查詢所有數(shù)據(jù)

    2024年02月19日
    瀏覽(25)
  • 完全從零Java自學(xué)系列【入門篇】(第四課:Mysql服務(wù)端安裝&使用客戶端操作數(shù)據(jù)庫&初識SQL基礎(chǔ)操作&Java中使用第三方包&Java數(shù)據(jù)庫操作&初步理解面相對象真正的意義之橋接設(shè)計模式)

    完全從零Java自學(xué)系列【入門篇】(第四課:Mysql服務(wù)端安裝&使用客戶端操作數(shù)據(jù)庫&初識SQL基礎(chǔ)操作&Java中使用第三方包&Java數(shù)據(jù)庫操作&初步理解面相對象真正的意義之橋接設(shè)計模式)

    ??數(shù)據(jù)庫是專門用來存儲一系列集合數(shù)據(jù)的地方。所有的文件都可以被稱之為庫,當應(yīng)用場景沒那么復(fù)雜的時候,簡單的應(yīng)用程序用文本就可以了。數(shù)據(jù)庫的意義是為了設(shè)計更好的保障數(shù)據(jù)安全(如多線程操作)、數(shù)據(jù)一致、索引(如何在龐大的數(shù)據(jù)中快速查找)等等一系

    2024年02月21日
    瀏覽(29)
  • 【MySQL】1、MySQL數(shù)據(jù)庫的基本概念

    【MySQL】1、MySQL數(shù)據(jù)庫的基本概念

    數(shù)據(jù)庫的基本概念 1.數(shù)據(jù) 2.表 ????????將不同的記錄組織在一起;用來存儲具體數(shù)據(jù) 3.數(shù)據(jù)庫 ????????表的集合,是存儲數(shù)據(jù)的倉庫;以一定的組織方式存儲的相互有關(guān)的數(shù)據(jù)集合 4.數(shù)據(jù)庫管理系統(tǒng) ????????是實現(xiàn)對數(shù)據(jù)庫資源有效組織、管理和存取的系統(tǒng)軟件

    2024年02月11日
    瀏覽(24)
  • 【100天精通python】Day44:python網(wǎng)絡(luò)爬蟲開發(fā)_爬蟲基礎(chǔ)(爬蟲數(shù)據(jù)存儲:基本文件存儲,MySQL,NoSQL:MongDB,Redis 數(shù)據(jù)庫存儲+實戰(zhàn)代碼)

    目錄 1 數(shù)據(jù)存儲 1.1 爬蟲存儲:基本文件存儲 1.2 爬蟲存儲:使用MySQL 數(shù)據(jù)庫 1.3 爬蟲 NoSQL 數(shù)據(jù)庫使用 1.3.1 MongoDB 簡介

    2024年02月11日
    瀏覽(24)
  • mysql 數(shù)據(jù)庫 基本介紹

    mysql 數(shù)據(jù)庫 基本介紹

    描述事物的符號記錄 包括數(shù)字,文字、圖形、圖像、聲音、檔案記錄氣 以“記錄”形式按統(tǒng)一的格式進行存儲 1,結(jié)構(gòu)化的數(shù)據(jù) 即有固定格式和有限長度的數(shù)據(jù)。例如填的表格就是結(jié)構(gòu)化的數(shù)據(jù),國籍:中華人民共和國,民族:漢,性別:男,這都叫結(jié)構(gòu)化數(shù)據(jù) 2,非結(jié)構(gòu)化

    2024年03月23日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包