引擎類型
與其他 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 與以前的版本加密方式不同,需要更改一下加密方法
管理員權(quán)限運行命令提示符,登錄 MySQL。
修改賬戶密碼加密規(guī)則并更新用戶密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
- 刷新權(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/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