我的全部文章整理在此篇,將陸續更新收錄:知無涯,行者之路莫言終(個人編程之路)mysql
開發3306端口(端口號爲你服務器上的MySQL訪問端口)android
這裏貌似不容許鏈接sql
|-- 在服務端進入mysql語句執行: 開放權限-----------------
Grant all privileges on *.* to 'root'@'%' identified by '你的密碼' with grant option;
複製代碼
簡單來講MySQL服務就是向若干個客戶端
提供並操做數據
的軟件數據庫
mysql的結構編程
MySQL服務器中有若干數據庫,數據庫中又有若干表,表中又有若干記錄,記錄又有若干字段
複製代碼
記錄映射實體在應用中使用後端
在Java中有一種數據類型叫List,也就是列表,對數據庫的操做會將一張表經過實體類映射成對象列表
其中一條記錄對於List中的一個對象,對象的屬性和表的字段每每一一對應,
可以遠程獲取數據產生實體類列表,就能夠填充客戶端UI,這便讓數據庫在編程語言中有了價值
這也使得先後端在應用層面實現分離,明確接口後,各端能夠專一各自的業務
複製代碼
將解壓文件bin的路徑配置到環境變量path下,以便在任意地方均可執行命令
緩存
# 安裝MySQL 將會在服務裏出現一個叫MYSQL57的服務
mysqld install MYSQL57
# 啓動MySQL
net start mysql
# 中止MySQL
net stop mysql
# 設置密碼
update mysql.user set authentication_string=password('xxxx') where user='root';
# 數據庫備份
mysqldump -uroot -p mycode > D:\\backupSql\\android.sql
# 數據庫還原
mysql -u root -p mycode < D:\\backupSql\\android.sql
# 進入MySQl 全寫 和 簡寫
mysql --host=toly1994.com --user=root --port=3306 --password
mysql -htoly1994.com -P3306 -uroot -p
# 退出
quit 或 exit 或 \q
# MySQL數據庫版本
mysql -V 或 mysql --version
複製代碼
my.ini 文件bash
[mysql]
default-character-set=utf8 # 設置mysql客戶端默認字符集
[mysqld]
port = 3306 #設置3306端口
basedir=D:B\mysql-5.7.22-winx64 # 設置mysql的安裝目錄
datadir=D:\B\mysql-5.7.22-winx64\data # 設置mysql數據庫的數據的存放目錄
max_connections=200 # 容許最大鏈接數
character-set-server=utf8 # 服務端使用的字符集 默認爲8比特編碼的latin1字符集
default-storage-engine=INNODB # 建立新表時將使用的默認存儲引擎
explicit_defaults_for_timestamp=true # 開啓查詢緩存
# skip-grant-tables # 無需密碼登陸mysql
複製代碼
1. net stop mysql
2. 打開my.ini文件 在[mysqld]下 添加skip-grant-tables
3. net start mysql
4. mysql -u root -p 回車 回車
5. use mysql
6. update user set authentication_string=password("xxxx") where user="root";
6. flush privileges;
7. quit
8. 將my.ini文件的skip-grant-tables註釋掉
9. 重啓服務
複製代碼
|---修改前面符號
並無什麼實際用處,就是將`mysql>` 換一下,適於裝B症患者...
mysql -uroot -p --prompt toly-》
toly-》use zoom
Database changed
toly-》
|--- mysql中有內置函數使用
mysql> SELECT VERSION(), CURRENT_DATE,NOW(),USER();
+-----------+--------------+---------------------+----------------+
| VERSION() | CURRENT_DATE | NOW() | USER() |
+-----------+--------------+---------------------+----------------+
| 5.7.22 | 2019-03-15 | 2019-03-15 18:51:12 | root@localhost |
+-----------+--------------+---------------------+----------------+
|---mysql中支持簡單計算
mysql> SELECT 1+1, (4+1)*5,4/5,5^8;
+-----+---------+--------+-----+
| 1+1 | (4+1)*5 | 4/5 | 5^8 |
+-----+---------+--------+-----+
| 2 | 25 | 0.8000 | 13 |
+-----+---------+--------+-----+
複製代碼
下面的四張表就是下一篇練習MySQL的資源,我真是太聰明瞭...若是有錯歡迎指出,我及時update服務器
|----整型----|
+-----------+-----------+----------------------+-----------------+--------------+
| 類型 | 字節數 | 有符號範圍 | 無符號範圍 | 描述 |
+-----------+-----------+----------------------+-----------------+--------------+
| TINYINT | 1 | -2⁷ ~ 2⁷-1 | 0 ~ 2⁸-1 | 很小整數 |
| SMALLINT | 2 | -2¹⁶ ~ 2¹⁶-1 | 0 ~ 2¹⁶-1 | 小整數 |
| MEDIUMINT | 3 | -2²⁴ ~ 2²⁴-1 | 0 ~ 2²⁴-1 | 中等整數 |
| INT | 4 | -2³² ~ 2³²-1 | 0 ~ 2³²-1 | 標準整數 |
| BIGINT | 8 | -2⁶⁴ ~ 2⁶⁴-1 | 0 ~ 2⁶⁴-1 | 大整數 |
+-----------+-----------+----------------------+-----------------+--------------+
複製代碼
|----小數型----|
+---------+-----------+-------------------------------------------------------+----------------------------+
| 類型 | 字節數 | 取值範圍 | 描述 |
+---------+-----------+-------------------------------------------------------+----------------------------+
| FLOAT | 4 | ±1.175494351E-38 ~ ±3.402823466E+38 | 單精度浮點 |
| DOUBLE | 8 | ±2.2250738585072014E-308 ~ ±1.7976931348623157E+308 | 雙精度浮點 |
| DECIMAL | 不定 | 是M,D而定 | M:總位數,D:小數位數 |
+---------+-----------+-------------------------------------------------------+----------------------------+
複製代碼
|----字符型----|
+------------+-------------------+---------------+-----------------------------------+
| 類型 | 最大字節數 | 最大範圍 | 描述 |
+------------+-------------------+---------------+-----------------------------------+
| CHAR(M) | M | L或M或M×W | 定長字符串,M 0~255 |
| VARCHAR(M) | M | L+1或 L+2 | 變長字符串,L<=M且M[0,65535] |
| TINYTEXT | 2⁸-1 | L+1個字節 | 微型的字符串 |
| TEXT | 2¹⁶-1 | L+2個字節 | 小型的字符串 |
| MEDIUMTEXT | 2²⁴-1 | L+3個字節 | 中型的字符串 |
| LONGTEXT | 2³²-1 | L+4個字節 | 大型的字符串 |
| ENUM | 1或2字節 | 65535 | 枚舉 |
| SET | 一、二、三、4或8 | 64 | 集合 |
+------------+-------------------+---------------+-----------------------------------+
複製代碼
|----時間型----|
+-----------+-----------+---------------------------------------------------------------+------------------------------------+
| 類型 | 字節數 | 取值範圍 | 描述 |
+-----------+-----------+---------------------------------------------------------------+------------------------------------+
| YEAR | 1 | 1901~2155 | 年YYYY |
| DATE | 3 | 1000-01-01 ~ 9999-12-31 | 日期YYYY-MM-DD |
| TIME | 3 | -838:59:59[.000000] ~ 838:59:59[.000000] | 時間HH:MM:SS |
| DATETIME | 8 | 1000-01-01 00:00:00[.000000] ~ 9999-12-31 23:59:59[.999999] | 日期加時間YYYY-MM-DD HH:MM:SS |
| TIMESTAMP | 4 | 1970-01-01 00:00:01[.000000] ~ 2038-01-19 03:14:07[.999999] | 時間戳 |
+-----------+-----------+---------------------------------------------------------------+------------------------------------+
複製代碼
|----二進制型----|
+--------------+-----------------+---------------+--------------------+
| 類型 | 最大字節數 | 最大範圍 | 描述 |
+--------------+-----------------+---------------+--------------------+
| BIT(M) | M | (M+7)/8 | 定長字符串 |
| BINARY(M) | M | M | 定長字符串 |
| VARBINARY(M) | M | L+1 或 L+2 | 變長字符串 |
| TINYBLOB | 2⁸-1 | L+1 | 微型的字符串 |
| BLOB | 2¹⁶-1 | L+2個字節 | 小型的字符串 |
| MEDIUMBLOB | 2²⁴-1 | L+3個字節 | 中型的字符串 |
| LONGBLOB | 2³²-1 | L+4個字節 | 大型的字符串 |
+--------------+-----------------+---------------+--------------------+
複製代碼
這裏只是簡單的列一下,更多的詳情介紹詳見此篇:MySQL入門系列:MySQL數據類型編程語言
; \g \G
; \g
效果同樣,\G
豎直分佈
mysql> SELECT * FROM number;
+-----------+------+----------------------+----------------+--------------+
| type | byte | range_singed | range_unsinged | info |
+-----------+------+----------------------+----------------+--------------+
| TINYINT | 1 | -2⁷ ~ 2⁷-1 | 0 ~ 2⁸-1 | 很小整數 |
| SMALLINT | 2 | -2¹⁶ ~ 2¹⁶-1 | 0 ~ 2¹⁶-1 | 小整數 |
| MEDIUMINT | 3 | -2²⁴ ~ 2²⁴-1 | 0 ~ 2²⁴-1 | 中等整數 |
| INT | 4 | -2³² ~ 2³²-1 | 0 ~ 2³²-1 | 標準整數 |
| BIGINT | 8 | -2⁶⁴ ~ 2⁶⁴-1 | 0 ~ 2⁶⁴-1 | 大整數 |
+-----------+------+----------------------+----------------+--------------+
mysql> SELECT * FROM number\g
+-----------+------+----------------------+----------------+--------------+
| type | byte | range_singed | range_unsinged | info |
+-----------+------+----------------------+----------------+--------------+
| TINYINT | 1 | -2⁷ ~ 2⁷-1 | 0 ~ 2⁸-1 | 很小整數 |
| SMALLINT | 2 | -2¹⁶ ~ 2¹⁶-1 | 0 ~ 2¹⁶-1 | 小整數 |
| MEDIUMINT | 3 | -2²⁴ ~ 2²⁴-1 | 0 ~ 2²⁴-1 | 中等整數 |
| INT | 4 | -2³² ~ 2³²-1 | 0 ~ 2³²-1 | 標準整數 |
| BIGINT | 8 | -2⁶⁴ ~ 2⁶⁴-1 | 0 ~ 2⁶⁴-1 | 大整數 |
+-----------+------+----------------------+----------------+--------------+
mysql> SELECT * FROM number\G
*************************** 1. row ***************************
type: TINYINT
byte: 1
range_singed: -2⁷ ~ 2⁷-1
range_unsinged: 0 ~ 2⁸-1
info: 很小整數
*************************** 2. row ***************************
type: SMALLINT
byte: 2
range_singed: -2¹⁶ ~ 2¹⁶-1
range_unsinged: 0 ~ 2¹⁶-1
info: 小整數
*************************** 3. row ***************************
type: MEDIUMINT
byte: 3
range_singed: -2²⁴ ~ 2²⁴-1
range_unsinged: 0 ~ 2²⁴-1
info: 中等整數
*************************** 4. row ***************************
type: INT
byte: 4
range_singed: -2³² ~ 2³²-1
range_unsinged: 0 ~ 2³²-1
info: 標準整數
*************************** 5. row ***************************
type: BIGINT
byte: 8
range_singed: -2⁶⁴ ~ 2⁶⁴-1
range_unsinged: 0 ~ 2⁶⁴-1
info: 大整數
複製代碼
`\c 或 Ctrl+c`
複製代碼
mysql> SELECT
-> *
-> FROM
-> number;
+-----------+------+----------------------+----------------+--------------+
| type | byte | range_singed | range_unsinged | info |
+-----------+------+----------------------+----------------+--------------+
| TINYINT | 1 | -2⁷ ~ 2⁷-1 | 0 ~ 2⁸-1 | 很小整數 |
| SMALLINT | 2 | -2¹⁶ ~ 2¹⁶-1 | 0 ~ 2¹⁶-1 | 小整數 |
| MEDIUMINT | 3 | -2²⁴ ~ 2²⁴-1 | 0 ~ 2²⁴-1 | 中等整數 |
| INT | 4 | -2³² ~ 2³²-1 | 0 ~ 2³²-1 | 標準整數 |
| BIGINT | 8 | -2⁶⁴ ~ 2⁶⁴-1 | 0 ~ 2⁶⁴-1 | 大整數 |
+-----------+------+----------------------+----------------+--------------+
複製代碼
mysql> SELECT * FROM number;SELECT * FROM number_float;
+-----------+------+----------------------+----------------+--------------+
| type | byte | range_singed | range_unsinged | info |
+-----------+------+----------------------+----------------+--------------+
| TINYINT | 1 | -2⁷ ~ 2⁷-1 | 0 ~ 2⁸-1 | 很小整數 |
| SMALLINT | 2 | -2¹⁶ ~ 2¹⁶-1 | 0 ~ 2¹⁶-1 | 小整數 |
| MEDIUMINT | 3 | -2²⁴ ~ 2²⁴-1 | 0 ~ 2²⁴-1 | 中等整數 |
| INT | 4 | -2³² ~ 2³²-1 | 0 ~ 2³²-1 | 標準整數 |
| BIGINT | 8 | -2⁶⁴ ~ 2⁶⁴-1 | 0 ~ 2⁶⁴-1 | 大整數 |
+-----------+------+----------------------+----------------+--------------+
5 rows in set (0.00 sec)
+---------+------+-------------------------------------------------------+----------------------------+
| type | byte | num_range | info |
+---------+------+-------------------------------------------------------+----------------------------+
| FLOAT | 4 | ±1.175494351E-38 ~ ±3.402823466E+38 | 單精度浮點 |
| DOUBLE | 8 | ±2.2250738585072014E-308 ~ ±1.7976931348623157E+308 | 雙精度浮點 |
| DECIMAL | NULL | 是M,D而定 | M:總位數,D:小數位數 |
+---------+------+-------------------------------------------------------+----------------------------+
複製代碼
mysql> select 'a','b','c','d';
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
複製代碼
關係: 表/若干元組的集合
元組: 一行/一條記錄/一個實體對象
屬性: 一列/字段
份量: 元組中的一個屬性值/一個實體對象的某一字段
域: 屬性實際取值範圍
超鍵:可以惟一標識一條記錄的屬性或屬性集(可含多個屬性)
候選鍵/候選碼:可以惟一標識一條記錄的屬集(不含多餘屬性)
主鍵/主碼:一個[候選鍵]做爲主鍵
主屬性:[候選鍵]中的屬性
非主屬性:[非候選鍵]中的屬性
複製代碼
1NF
在關係模型中,對於添加的一個規範要求,全部的域都應該是原子性的
即數據庫表的每一列(屬性)都是不可分割的原子數據項。
即實體中的某個屬性有多個值時,必須拆分爲不一樣的屬性。
在符合第一範式(1NF)表中的每一個域值只能是實體的一個屬性或一個屬性的一部分
複製代碼
這裏的價格成了二維,不符合第一範式,應該展平
2NF
在第一範式的基礎上:
[非主屬性]對[主屬性]不存在部分函數依賴關係
複製代碼
商品名 | 供應商 | 標準價格 | 價格 | 差價 | 供應商電話 | 分類 |
---|---|---|---|---|---|---|
小刀 | 晨光文具 | 1.00 | 1.00 | 0 | 7654321 | 文具 |
鉛筆 | 得力文具 | 1.00 | 1.50 | 0.5 | 1234567 | 文具 |
卷筆刀 | 晨光文具 | 5.00 | 5.00 | 0 | 7654321 | 文具 |
練字本 | 得力文具 | 2.00 | 2.00 | 0 | 1234567 | 文具 |
小刀 | 得力文具 | 1.00 | 1.20 | 0.2 | 1234567 | 文具 |
插入異常:A實體依賴於B實體,B實體的缺失而使A實體表示異常
|--
更新異常:更新A表的某一屬性,須要多行進行更新
|-- 若是更新[得力文具]的供應商電話,須要更新三條數據
刪除異常:A實體刪除一行,致使B實體信息丟失
|-- 當刪除第1、三行,晨光文具的供應商信息丟失
數據冗餘:相同的數據在多張表中存在,或表的某屬性可經過計算獲得(如平均值、和等)
|-- 得力文具以及電話號碼重複了不少次。標準價格,價格和差價之間有運算關係
複製代碼
商品id | 商品名 | 標準價格 | 分類 |
---|---|---|---|
1 | 小刀 | 1.00 | 文具 |
2 | 鉛筆 | 1.00 | 文具 |
3 | 卷筆刀 | 5.00 | 文具 |
4 | 練字本 | 2.00 | 文具 |
供應id | 供應商 | 供應商電話 |
---|---|---|
1 | 晨光文具 | 7654321 |
2 | 得力文具 | 1234567 |
供應id | 商品id | 差價 |
---|---|---|
1 | 1 | 0 |
1 | 3 | 0 |
2 | 2 | 0.5 |
2 | 4 | 0 |
2 | 1 | 0.2 |
3NF
在第二範式的基礎上:
[非主屬性]對任意[主屬性]不存在傳遞性函數依賴
|--- 好比下面的(書名)-->(做者)-->(年代)
複製代碼
書名 | 做者 | 年代 | 上架建議 | 價格 |
---|---|---|---|---|
海子 | 海子 | 近現代 | 詩集 | 30.6 |
朝花夕拾 | 老舍 | 近現代 | 名著 | 19.9 |
你是人間的四月天 | 林徽因 | 近現代 | 經典文學 | 25.6 |
資治通鑑 | 司馬光 | 北宋 | 古典文學 | 55.6 |
BCNF
在第三範式的基礎上:
[全部屬性]對任意[主屬性]不存在傳遞性依賴
複製代碼
第4、第五範式暫不說起,注意範式並不是嚴格的標準。
能夠根據實際狀況反範式化來用空間換時間
這篇就到這裏,之後想到什麼再加吧。