資料庫 MySQL
資料庫 MySQL
- 健康碼
- 公安系統
- 支付寶微信支付
- 酒店
- 12306 買票
- 網易雲 收藏歌曲
- 手機通話記錄 地鐵卡餘額
- 吃雞 、王者榮耀 皮膚 裝備
Mysql 5.7當前主流資料庫
- mysql 被Oracle 收購
- sqlserver
- oracle
- sqlite3
資料庫語法都差不多
mysql、sqlite 開源免費
安裝資料庫
略
五個基本單位
- 資料庫伺服器 mysql server
- 資料庫
- 資料表
- 資料欄位
- 資料行
娛樂化講解表關係
資料庫的操作
mysql 以;為結束
連線資料庫
mysql -u 使用者名稱 -p密碼
mysql -u 使用者名稱 -p
輸入密碼
mysql -u root -h ip地址 -p
輸入密碼
-u 使用者名稱
-p密碼
-h host ip地址
退出資料庫
exit
建立資料庫
mysql> create database 資料庫名;
Query OK, 1 row affected (0.00 sec)
mysql> create database if not exists 資料庫名;
Query OK, 1 row affected (0.01 sec)
檢視資料庫
show databases;
刪除資料庫
不要刪除 mysql資料庫
drop database 資料庫名;
選中資料庫
mysql> use 資料庫名字;
Database changed
檢視裡邊的資料表
show tables;
資料表操作
use 資料庫名字;
show tables;
檢視錶結構
mysql> desc 表名;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO | | NULL | |
| password | varchar(255) | NO | | NULL | |
| age | tinyint(4) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
Field 欄位名
Type 欄位的型別 int 整數 varchar 字串 tinyint微整型
Null 欄位是否可以為空
Key 主鍵 外來鍵 等
Default 預設值
Extra 額外的 比如自動遞增
檢視建立表的語句
mysql> show create table 表名;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| users | CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`age` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
engine mysql 引擎
charset mysql 編碼
建立資料表
mysql> create table if not exists 表名(欄位名 型別(長度),欄位2 型別(長度),欄位3 型別(長度))engine=innodb default charset=utf8mb4; # mysql 只有 utf8 沒有utf-8
Query OK, 0 rows affected (0.04 sec)
mysql> create table if not exists person(id int(11),username varchar(64),password varchar(128))engine=innodb default charset=utf8mb4;
Query OK, 0 rows affected (0.04 sec)
刪除表
drop table 表名;
資料表欄位操作
alter table 表名
修改表欄位型別
alter table 表名 modify 欄位名 型別(長度);
mysql> alter table 表名 modify 欄位名 型別(長度);
mysql> alter table users modify age bigint(10); #示例
增加表欄位
alter table 表名 add column 欄位名 型別(長度); # column 可寫可不寫
mysql> alter table users add sex tinyint; #預設加到最後面
mysql> alter table users add column tel varchar(11) after password; #指定加到某個欄位的後邊
ysql> alter table users add column height varchar(11) first; #加到第一個位置
刪除表欄位
alter table 表名 drop column 欄位名; #column 可加 可不加
mysql> alter table users drop column sex;
修改表欄位
alter table 表名 change 原表名 新名字 型別(長度);
mysql> alter table users change username user_name varchar(128);
change、add 、 modify 都支援後邊 加 first 、after
mysql> alter table users modify tel char(11) first;
修改表名
alter table 舊錶名 rename 新表名;
資料型別 、引擎、字符集 、索引
資料型別
- 數值型別
- 字串型別
- 日期型別
- 複合型別
- 空間型別 (瞭解 不做講解)
數值型別
型別 | 所佔位元組 | 範圍 |
---|---|---|
tinyint | 1 | -128~127 |
smallint | 2個位元組 | -32768-32767 |
mediumint | 3個位元組 | -8388608~8388607 |
int | 4個位元組 | -2147483648~2147483647 |
bigint | 8個位元組 | |
ps: 性別 要麼 男 要麼 女用 0表示女 1表示男 tinyint就夠了
年齡 要使用無符號整型 年齡沒有負數
在實際開發過程中 為了避免浪費空間 選擇合適的型別
浮點型別
型別 | 位元組 | 範圍 |
---|---|---|
float(m,d) | 4 | 單精度 m 總個數,d 小數位 float(10,2) |
double(m,d) | 8 | 雙精度m 總個數,d 小數位 double(10,2) |
decimal(m,d) | 儲存的是字串的浮點數 |
ps: 浮點型是非精確值 會存在不太準確的情況
decimal 定點數 mysql內部 本質上字串儲存 開發過程中我們 要對 金額等精度要求高的浮點數進行儲存 建議使用decimal
字串
型別 | 位元組 | 範圍 |
---|---|---|
char | 0-255位元組 | 定長 |
varchar | 0-255位元組 | 變長 |
tinyblob | 0-255位元組 | 不超過255位元組的二進位制字串 |
tinytext | 0-255位元組 | 短文字字串 |
blob | 0-65535位元組 | 二進位制形式的長文字 |
text | 0-65535位元組 | 長文字 |
mediumblob | 0-16777215位元組 | 二進位制形式的中等長度文字 |
mediumtext | 0-16777215位元組 | 中等長度文字 |
longblob | 二進位制形式的極大長度文字 | |
longtext | 極大長度文字 | |
varbinary(M) | 允許長度0-M個位元組的定長字串 | 指的長度+1個位元組 |
binary(M) | 允許長度0-M個位元組的定長字串 |
ps: char(100) 如果 字串長度只有10 剩下的90用空格補齊
varchar(100) 如果字串長度只有10 剩下的90不用空格補齊 別的字串可以佔用
text blob : text 普通字串不區分大小寫
blob 二進位制字串 區分大小寫
大小寫修飾符 不適用於 TEXT blob型別
時間型別
型別 | 位元組 | 範圍 |
---|---|---|
date | 3個位元組 | 2021-01-04 |
time | 3個位元組 | 16:08:58 |
datetime | 8個位元組 | 2021-01-04 16:08:58 |
timestamp | 4個位元組 | 自動儲存記錄的修改時間 |
year | 1個位元組 | 年份 |
ps:
1. 網站、app 很多人喜歡用int 來儲存時間 int存的是時間戳 方便計算 哪怕前端語言後端語言不一樣 只需要將時間轉化一下就好
2. 也有人喜歡用datetime 站在資料庫角度 方便檢視
3. 具體根據實際情況選擇
總結
- 論佔據空間的大小 從大到小 字串 日期 數值
- 根據實際情況選擇合適的型別 避免浪費 但是也要考慮到後期的擴充套件情況
複合型別
型別 | 說明 | 舉例 |
---|---|---|
set | 集合 | set(‘num1’,‘num2’) |
enum | 列舉 | enum(‘num1’,‘num2’) |
ps:區別 enum只允許從一個集合中取一個
set 允許從一個集合中取任意多個
欄位其它屬性設定
unsigned 主要適用於 整型 和浮點型 使用無符號 也就說 前面沒有 負號 -
可以是 儲存的位數更長 以tinyint為例子 -128~127 使用無符號 可以儲存 0-255個長度
只需要在建立表的時候 整型或者浮點欄位後邊加上 unsigned
create table user(id int(11) unsigned);
zerofill 0 不是空格 使用它可以阻止裡邊填負數 在建立表的時候 在int 或者浮點 後邊加上 zerofill
default 設定預設值
mysql> alter table test1 add column age tinyint default 18;
not null 不能為空 精確的說法是 無 其中 0 空格 空字串’’ 不代表無
字符集
- 常用字符集
- 資料庫我們用什麼字符集
常用字符集
-
ascii 使用指定的7位或者 8位 二進位制數(只包含 0 1)組合來表示128或者 256種可能的字元
https://www.cnblogs.com/xmxu/archive/2012/07/10/2584032.html 對照表
-
GBK GB2312的升級版 中國定義的 漢字編碼規範 早期 就是gb2312 gbk向下相容 gb2312
-
Unicode(統一碼 萬國碼 單一碼) 國際定義可以容納世界上所有的文字和符號的字元編碼方案,滿足跨語言、跨平臺文書處理方案
-
utf-8(通用轉換格式) 萬國碼 針對 Unicode的可變長度字元編碼 空間比ASCII 大一倍 對ASCII 來說 高位元組 0 沒有任何意義 為了解決這個問題 出現了中間格式字符集 也叫通用轉換格式
中文常用的字符集
- gbk
- utf-8
開發中
字符集 | 說明 | |
---|---|---|
utf8_general_ci | Unicode 多語言 不區分大小寫 | |
gbk_chinese_ci | 簡體中文 不區分大小寫 |
ci 儲存 排序的時候 不區分大小寫
mysql 沒有 utf-8 只有utf8
相關文章
- [資料庫]【MySQL】MySQL資料庫規範總結資料庫MySql
- MYSQL資料庫MySql資料庫
- 資料庫-MySQL資料庫MySql
- 資料庫(MySQL)資料庫MySql
- Mysql資料庫-資料模型MySql資料庫模型
- MySQL資料庫資料管理MySql資料庫
- MySQL預設資料庫之mysql庫MySql資料庫
- MySQL資料庫遷移與MySQL資料庫批量恢復MySql資料庫
- 【MySQL 資料庫】MySQL目錄MySql資料庫
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- Mysql建立資料庫MySql資料庫
- 【6】MySQL資料庫MySql資料庫
- MySQL 資料庫操作MySql資料庫
- MySQL資料庫(二)MySql資料庫
- mysql資料庫-資料結構MySql資料庫資料結構
- DataX將MySql資料庫資料同步到Oracle資料庫MySql資料庫Oracle
- Ibatis批量更新資料(mysql資料庫)BATMySql資料庫
- MiniShopping-mysql資料庫MySql資料庫
- mysql資料庫約束MySql資料庫
- 連線資料庫-mysql資料庫MySql
- Mysql 常用資料庫命令MySql資料庫
- MySQL資料庫知識MySql資料庫
- Mysql資料庫操作命令MySql資料庫
- MySQL資料庫總結MySql資料庫
- mysql資料庫規範MySql資料庫
- PHP操作MySQL資料庫PHPMySql資料庫
- 建立資料mysql庫流程MySql
- MySQL資料庫使用(二)MySql資料庫
- mysql資料庫的索引MySql資料庫索引
- 啟動MySql資料庫MySql資料庫
- mysql 資料庫 備份MySql資料庫
- django 配置mysql資料庫DjangoMySql資料庫
- MySQL資料庫優化MySql資料庫優化
- MySQL資料庫之索引MySql資料庫索引
- MySQL資料庫常用操作MySql資料庫
- mysql database manual(mysql資料庫手冊)MySqlDatabase資料庫
- MySQL(二):快速理解MySQL資料庫索引MySql資料庫索引
- MySQL資料庫初識——初窺MySQLMySql資料庫