---
title: MYSQL
description: 基本概念
img:
alt:
author:
name: Jack.hu
bio:
img:
tags:
- SQL
---
# 關聯式資料庫
### 一、3大基本概念
#### DDL(定義)
1. CREATE
2. DROP
3. ALTER
#### DML(操作)
1. insert into values\(C\)
2. select from\(R\)
3. update set from\(U\)
4. delete from\(D\)
\* 補充:replace into 行為為先檢查是否有同一筆資料(PK),如有則去取代裡面的值,如沒有則創建新的資料。
#### DCL(授權及程序)
1. grant on to
2. revoke on from
### 二、transaction
1. lock
2. isolate
### 三、drop vs truncate vs delete
### 四、指令差異比較
#### 4.1. distinct vs group by
#### 4.2. between vs >=, <=
#### 4.3. where ... in () vs where ... or ...
#### 4.4. where vs having
### 五、內建函數差異比較
#### 5.1. char_length() vs length()
### 六、JOIN
1. inner join
2. left join
3. right join
4. full join
* mysql沒有full join,可用union模擬。
### 七、union
### 、正規三大步
1.
2.
3.
### 八、環境問題QA
### Q1
> 1.OS: MacOS M1-chip
> 2.MYSQL VERSION: 8+
> 3.FRAMEWORK: ExpressJS
>
> 4.Question:
> npm中mysql套件並未完全支援MYSQL 8+的加密方式,故需調整密碼及加密方式。
```bash=
Unable to connect to the database: ConnectionError [SequelizeConnectionError]: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at /Users/jackhu/Desktop/kenkone_backup/server/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:149:19
at tryCatcher (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/bluebird/js/release/promise.js:547:31)
at Promise._settlePromise (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/bluebird/js/release/promise.js:604:18)
at Promise._settlePromise0 (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/bluebird/js/release/promise.js:649:10)
at Promise._settlePromises (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/bluebird/js/release/promise.js:725:18)
at _drainQueueStep (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/bluebird/js/release/async.js:93:12)
at _drainQueue (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/bluebird/js/release/async.js:86:9)
at Async._drainQueues (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/bluebird/js/release/async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/bluebird/js/release/async.js:15:14)
at processImmediate (internal/timers.js:456:21) {
parent: Error: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at Packet.asError (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/mysql2/lib/packets/packet.js:708:17)
at ClientHandshake.execute (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/mysql2/lib/commands/command.js:28:26)
at Connection.handlePacket (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/mysql2/lib/connection.js:408:32)
at PacketParser.onPacket (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/mysql2/lib/connection.js:70:12)
at PacketParser.executeStart (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/mysql2/lib/packet_parser.js:75:16)
at Socket.<anonymous> (/Users/jackhu/Desktop/kenkone_backup/server/node_modules/mysql2/lib/connection.js:77:25)
at Socket.emit (events.js:310:20)
at addChunk (_stream_readable.js:286:12)
at readableAddChunk (_stream_readable.js:268:9)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onStreamRead (internal/stream_base_commons.js:186:23) {
code: 'ER_NOT_SUPPORTED_AUTH_MODE',
errno: 1251,
sqlState: '08004',
sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client'
},
```
> Answer
第一步,登入root並輸入密碼。
```
$ mysql -u root -p
```
第二步,更改密碼及加密方式。
```sql=
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your new password';
```
第三部,離開mysql,開始運行您的應用,理論上應該就可以連接上MYSQL。
---
###### tags: `SQL`