MySQL 總結(jié)

引擎類型

與其他 DBMS 一樣,MySQL 有一個具體管理和處理數(shù)據(jù)的內(nèi)部引擎。在你使用CREATE TABLE 語句時,該引擎具體創(chuàng)建表,而在你使用 SELECT 語句或進行其他數(shù)據(jù)庫處理時,該引擎在內(nèi)部處理你的請求。多數(shù)時候,此引擎都隱藏在 DBMS 內(nèi),不需要過多關(guān)注它。但 MySQL 與其他 DBMS 不一樣,它具有多種引擎。它打包多個引擎,這些引擎都隱藏在MySQL服務器內(nèi),全都能執(zhí)行 CREATE TABLE 和 SELECT 等命令。為什么要發(fā)行多種引擎呢?因為它們具有各自不同的功能和特性,為不同的任務選擇正確的引擎能獲得良好的功能和靈活性。

以下是幾個需要知道的引擎:
? InnoDB是一個可靠的事務處理引擎,它不支持全文本搜索;
? MEMORY在功能等同于MyISAM,但由于數(shù)據(jù)存儲在內(nèi)存中,速度很快(特別適合于臨時表);
? MyISAM 是一個性能極高的引擎,它支持全文本搜索,但不支持事務處理。

外鍵不能跨引擎 混用引擎類型有一個大缺陷。外鍵(用于強制實施引用完整性,如第1章所述)不能跨引擎,即使用一個引擎的表不能引用具有使用不同引擎的表的外鍵。

復雜的表結(jié)構(gòu)更改一般需要手動刪除過程

它涉及以下步驟:
? 用新的列布局創(chuàng)建一個新表;
? 使用INSERT SELECT語句(關(guān)于這條語句的詳細介紹,請參閱第19章)從舊表復制數(shù)據(jù)到新表。如果有必要,可使用轉(zhuǎn)換函數(shù)和計算字段;
? 檢驗包含所需數(shù)據(jù)的新表;
? 重命名舊表(如果確定,可以刪除它);
? 用舊表原來的名字重命名新表;
? 根據(jù)需要,重新創(chuàng)建觸發(fā)器、存儲過程、索引和外鍵。

亂碼解決辦法

default-character-client 客戶端發(fā)送什么編碼的數(shù)據(jù)
default-character-result 數(shù)據(jù)采用什么編碼發(fā)給客戶端

在總配置文件 my.ini 中進行配置,可實現(xiàn)一勞永逸

[mysql]
default-character-set=gbk

MySQL 處理重復數(shù)據(jù)

你可以在 MySQL 數(shù)據(jù)表中設置指定的字段為 PRIMARY KEY(主鍵) 或者 UNIQUE(唯一) 索引來保證數(shù)據(jù)的唯一性。

案例 / 技巧

從 t_user表中,取出 user_name字段相同的記錄中,id最大的那一行數(shù)據(jù)

select  id,user_name from t_user 
where  id in (select max(id) from t_user group by user_name ) 

sql server 中查詢一個表中某個數(shù)據(jù)重復條數(shù)大于1的所有信息

select * from (
select count(A) as num , A from table1 group by A
) bb
where num >1

使用 jdbc 連接數(shù)據(jù)庫語法

jdbc.url=jdbc:mysql:///test?characterEncoding=utf-8&serverTimezone=Asia/Shanghai

如果使用高版本 mysql-conn 包,則需要配置 serverTimezone。

MySQL 報錯記錄

使用 navicat 連接Mysql 8.0 數(shù)據(jù)庫 出現(xiàn)2095- Authentication plugin 'caching_sha2_password' cannot be loaded

原因:因為 MySQL8.0 與以前的版本加密方式不同,需要更改一下加密方法

  1. 管理員權(quán)限運行命令提示符,登錄 MySQL。

  2. 修改賬戶密碼加密規(guī)則并更新用戶密碼

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;   

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';  
  1. 刷新權(quán)限并重置密碼
# 刷新權(quán)限 
FLUSH PRIVILEGES; 

再重置下密碼:

alter user 'root'@'localhost' identified by '123456';

java.sql.SQLException: Field 'id' doesn't have a default value

在 mysql 數(shù)據(jù)庫中,如果自增長 id 沒有設為Auto Increment,在java程序中就會報java.sql.SQLException: Field 'id' doesn't have a default value錯誤。

Mysql is not allowed to connect to this mysql server 報錯解決辦法

現(xiàn)象

第一次在服務器上安裝mysql后,使用客戶端連接服務器的mysql,報錯“host xxx is not allowed to connect to this mysql server”。

解決方式一

如果希望使用用戶名為”username”,使用密碼”password”從任何主機連接到mysql服務器的話:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

如果希望使用用戶名為”username”,使用密碼 ”password” 從IP地址為 192.168.0.100 的主機連接到mysql服務器的話:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'192.168.0.100' IDENTIFIED BY 'password' WITH GRANT OPTION;

FLUSH PRIVILEGES;

如果希望使用用戶名為 ”username”,使用密碼 ”password” 從IP地址為192.168.0.100 的主機連接 mysql 服務器的名字叫 ”mydatabase” 的數(shù)據(jù)庫話:

GRANT ALL PRIVILEGES ON mydatabase.* TO 'username'@'192.168.0.100' IDENTIFIED BY 'password' WITH GRANT OPTION;

 FLUSH PRIVILEGES;

注意,執(zhí)行完賦權(quán)后,一定要執(zhí)行 ”FLUSH PRIVILEGES;”,否則不會生效。

解決方式二

報"Host ‘169.254.213.3’ is not allowed to connect to this MySQL server主要的意思是這個host主機不能訪問本機的mysql服務,原因需要連接非本機的mysql的時候,默認host是localhost,我們需要將這個mysql連接權(quán)限設置成%,更改方法直接通過軟件更改和命令行更改:選擇mysql這個數(shù)據(jù)庫,里面有一個user表,進入表中有一個host字段將localhost值更改為%這個保存后,刷新或者重啟MySQL服務都行。 刷新的命令是
flush privileges; 注意這里需要有;號否則不執(zhí)行。

sql 優(yōu)化

https://www.eversql.com/

https://www.eversql.com/sql-order-of-operations-sql-query-order-of-execution/

參考

Mysql is not allowed to connect to this mysql server報錯解決辦法_wtopps的專欄-CSDN博客
https://blog.csdn.net/wtopps/article/details/81626656

Host 'ip地址' is not allowed to connect to this MySQL server報錯解決方法_CXRS_LIU的博客-CSDN博客
https://blog.csdn.net/CXRS_LIU/article/details/90478519

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容