資料庫 MySQL

城南孤城發表於2021-01-04

資料庫 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 新表名;

資料型別 、引擎、字符集 、索引

資料型別

  1. 數值型別
  2. 字串型別
  3. 日期型別
  4. 複合型別
  5. 空間型別 (瞭解 不做講解)

數值型別

型別所佔位元組範圍
tinyint1-128~127
smallint2個位元組-32768-32767
mediumint3個位元組-8388608~8388607
int4個位元組-2147483648~2147483647
bigint8個位元組

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

字串

型別位元組範圍
char0-255位元組定長
varchar0-255位元組變長
tinyblob0-255位元組不超過255位元組的二進位制字串
tinytext0-255位元組短文字字串
blob0-65535位元組二進位制形式的長文字
text0-65535位元組長文字
mediumblob0-16777215位元組二進位制形式的中等長度文字
mediumtext0-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型別

時間型別

型別位元組範圍
date3個位元組2021-01-04
time3個位元組16:08:58
datetime8個位元組2021-01-04 16:08:58
timestamp4個位元組自動儲存記錄的修改時間
year1個位元組年份

ps:

1. 網站、app 很多人喜歡用int 來儲存時間  int存的是時間戳 方便計算  哪怕前端語言後端語言不一樣 只需要將時間轉化一下就好   
2.  也有人喜歡用datetime 站在資料庫角度 方便檢視   
3. 具體根據實際情況選擇 

總結

  1. 論佔據空間的大小 從大到小 字串 日期 數值
  2. 根據實際情況選擇合適的型別 避免浪費 但是也要考慮到後期的擴充套件情況

複合型別

型別說明舉例
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 空格 空字串’’ 不代表無

字符集

  • 常用字符集
  • 資料庫我們用什麼字符集

常用字符集

  1. ascii 使用指定的7位或者 8位 二進位制數(只包含 0 1)組合來表示128或者 256種可能的字元

    https://www.cnblogs.com/xmxu/archive/2012/07/10/2584032.html 對照表

  2. GBK GB2312的升級版 中國定義的 漢字編碼規範 早期 就是gb2312 gbk向下相容 gb2312

  3. Unicode(統一碼 萬國碼 單一碼) 國際定義可以容納世界上所有的文字和符號的字元編碼方案,滿足跨語言、跨平臺文書處理方案

  4. utf-8(通用轉換格式) 萬國碼 針對 Unicode的可變長度字元編碼 空間比ASCII 大一倍 對ASCII 來說 高位元組 0 沒有任何意義 為了解決這個問題 出現了中間格式字符集 也叫通用轉換格式

中文常用的字符集

  • gbk
  • utf-8
開發中
字符集說明
utf8_general_ciUnicode 多語言 不區分大小寫
gbk_chinese_ci簡體中文 不區分大小寫

ci 儲存 排序的時候 不區分大小寫

mysql 沒有 utf-8 只有utf8

相關文章