主要:
- 基礎
- 字段類型
基礎
基本概念
1) 數據庫分類
層次數據庫,網狀數據庫,關系數據庫
常見:SQL Server, Oracle,infomix,sybase,ibmDB2,Mysql
2)數據庫存儲的本質和表現:
存儲本質: 將 數據值 通過數據管理系統進行有序的存儲
存儲表現:
每個數據庫對應一個文件夾
每個數據表對應一個或多個文件
3)mysql數據庫的各層次關系:
1個數據庫系統包含有多個數據庫
1個數據庫可以有多張數據表
一個數據表可以有多個字段(數據項)和多行數據(記錄)
4)基本概念
sql :是關系數據庫的 語言標准。 Struct Query Language 結構化查詢語言
數據庫database: 存儲各種數據data
數據庫管理系統dbms: Database Management system
數據表table,字段field,列column,行row,記錄record
數據庫操作的基本模式(流程)
step 1: 建立連接:身份認證 step 2: 客戶端發送sql命令 step 3: 服務端執行命令,返回結果 step 4: 客戶端接收結果並顯示 step 5: 斷開連接
mysql系統級操作
安裝與配置 【略】
啟動與停止mysql數據庫服務
命令模式【管理員】: -- 非管理員才做可能發生 提示 “發生系統錯誤 5”
啟動:net start mysql
停止:net stop mysql
服務模式:通過服務來啟動或停止 控制面板》管理工具》服務》mysql 啟動/停止
登錄與退出:
首先設置mysql環境變量
登錄:
形式1: mysql -h 服務器地址 -u 用戶名 -p -P 端口號
形式2: mysql --host=服務器地址 --user=登錄名 --port=端口號 --password
默認端口: 3306
退出:
exit 或 quit
備份與恢復數據
通常是用於數據庫的“遷移”:將某台數據庫服務器中的某個庫,“搬遷”到另一個數據庫服務器中去
也常用於數據的“安全備份”:就是數據庫實際運行中,防止數據庫系統崩潰,防止數據庫被黑客入侵
備份 【管理員身份】:
mysqldump -h 服務器地址 -u 登錄名 -P 端口號 -p 數據庫名>完整路徑的文件名
恢復:
未登錄恢復:
mysql -h 服務器地址 -u 登錄名 -P 端口號 -p 數據庫名<完整路徑的sql文件名
登錄后恢復:
source '備份數據文件的完整路徑'
基礎語法
1) 注釋:
單行注釋:
#注釋內容
-- 注釋內容(-- 與注釋之間有一個空格)
多行注釋
/*注釋內容*/
注(經過測試): 如果是 /*! 語句 */; 這個仍然會執行 如 /*!show tables */;
2)語句行
結束符: 分號(默認)
修改結束符: delimiter 結束符 如: delimiter //
3)大小寫
不區分大小寫
但對於區分大小寫的系統中,生成文件或文件夾的操作是區分大小寫的 如: 創建庫,表會生成對應目錄和文件
文件或目錄在Linux,Unix中嚴格區分大小寫。 windows中不區分大小寫
4) 命名規則
字母和下划線,不用數字開頭。
如果是非常規字符,要使用反引號
數據庫名,表名,視圖名,字段名,函數名,過程名通常使用小寫,並使用下划線分割法
字段類型
1) 形式:
字段名 類型名 [(M)] [unsigned] [zerofill]
M:顯示長度 與zerofil結合使用 不夠長度左側自動補0
設置zerofill, 則表示該字段同時具備unsigned。
2) 主要分3類
數值型,字符型,時間型
數值型
1) 整數型:
類型 所占字節數
tinyint 1字節 smallint 2字節 mediumint 3字節 int 4字節 bigint 8字節
create table tab_int( f1 int unsigned, f2 tinyint zerofill, f3 bigint(10) zerofill ); insert into tab_int (f1,f2,f3) values( 15, 15, 15); select * from tab_int;
2) 小數型
單精度浮點型float: (單精度 4個字節,精度6~7位有效數字)
雙精度double: (雙精度 8個字節,約20個有效數字,別名:real)
定點型: decimal (別名: dec numeric fixed, 整數最大65位,小數最多30位)
如果整數部分超過最大設定的位數,則會自動設置為最大值。 如 decimal(5,2), 插入數據1234.11 則結果為 999.99
decimal(總的位數,小數位數)
create table tab_float( f1 float, f2 double, f3 decimal(10,3) -- 總數10位數, 小數3位 ); insert into tab_float (f1, f2, f3) values (123.456789, 123.456789, 123.456789), (123456789, 123456789, 1234567), (123456789, 123456789, 1234567.11); select * from tab_float;

字符型
字符型要使用引號引起來
vachar類型:
概念: 變長字符串,使用時必須設定其長度。
最大長度: 理論最大65535個字符,實際最大只能是65533個字符
原因: 一個表格的一行 的數據存儲最大容量限制: 65535
編碼不同則最大長度也不同:
存儲中文 gbk: 最大長度是 65533/2 個
存儲中文 utf8: 最大長度是 65533/3 個
實際存儲: 存儲長度由存儲內容決定,設置值為最多可存儲的字符個數
char類型
概念: 定長字符串 , 使用時一般需要設置其長度。 不設置長度,則默認是1.
最大長度: 255個
實際存儲: 如果少於設定長度, 會以空格填滿
適用於: 存儲的數據長度是固定長度的字符。 如: 郵編, 手機號碼等
enum 類型
概念: (枚舉)單選項字符串數據類型, 使用時,需要給定 固定的幾個選項。 存儲的時候,只存儲其中一個值
形式: enum("選項1", "選項2",....)
實際存儲: 字符串選項值對應數字: 1,2,3,4,5,.. 最多65535個選項
寫入數據形式: 可以是該選項字符串本身,也可以用對應的數字
適用於: 存儲表單界面中的 “單選項值”
set 類型
概念: 多選項字符串數據類型, 使用時,需要給定 固定的幾個選項。 存儲的時候,存儲其中若干個值
形式: set("選項1", "選項2",....)
實際存儲: 字符串選項值對應數字 1,2,4,8,16... 最多64個選項
寫入數據形式: 可以用選項字符串並用逗號隔開, 也可以使用對應的“數字的和”
適用於: 存儲表單界面中的 “多選項值”
-- enum set 使用Demo create table enum_set( id int unsigned auto_increment primary key, gender enum('男','女'), fav set('籃球','足球','跑步','讀書','寫字') ); insert into enum_set (id, gender, fav) values(null,'男','籃球'),(null,1,1); -- 兩行enum字段一致 insert into enum_set (id, gender, fav) values(null, '男', '籃球,跑步,寫字'),(null,1,19); -- 兩行set字段一致 -- 籃球=1 跑步=2 寫字=16 ==> 對應的和19 select * from enum_set;

text 類型
概念: 長文本字符類型。其中存儲的數據不占表格中的數據容量限制
其他同類型: smalltext tinytext longtext
其他類型
binary類型: 定長二進制字符串類型。 存儲二進制值
varbinary 類型: 變長二進制字符串類型。存儲二進制值
blob 類型:二進制數據類型。 存儲二進制值。 適用於存儲圖片,視頻,其他文件等。
時間型
時間類型: 要用引號引起來
1) datetime 類型: 時間日期類型
2) date類型: 日期類型
3) time 類型:時間類型
4) year 類型:年份類型
5) timestamp 類型: 時間戳類型。 是一個數字。 不需要手動插入數據,系統自動填入
js中獲取事件戳: gettime() ; 單位是毫秒
php中獲取時間戳: time(); 單位是秒
mysql中: 自動獲得時間戳的數據值,既 now()
-- 時間類型數據表 create table tab_time( dt datetime, d date, t time, y year, ts timestamp -- 該字段不需要插入數據,系統自動填入 ); insert into tab_time (dt,d,t,y) values('2018-07-07 24:24:24', '2018-07-07','24:24:24','2018'),(now(),now(),now(),now()); select * from tab_time;

其他類型
1) 位類型 bit
使用形式: bit[(M)] 其中M是1-64的數字。 表示使用多少二進制數字來存儲數據
插入形式: b 'value' 如 b '101'
2) 序列類型 serial
實質是 bigint unsigned not null auto_increment unique 的一個別名
3) 布爾類型 bool
實質是 tinyint(1) 的一個同義詞。 其值為0表示false, 否則表示true


