mysql初级数据库_MYSQL初级数据库操作
MYSQL是個好東西啊,只是比較會折騰人,所以我先記錄一下MySQL 數據備份的基礎知識,省得以后又去東找西找
Windows文件名、目錄名不區(qū)分大小寫,Linux區(qū)分大小寫
查看MySQL中的數據庫
這里有一個shop的數據庫,
information_schema(系統(tǒng)數據庫定義了所有數據庫對象的元數據信息)、
mysql(記錄MySQL賬號信息以及賬戶的訪問權限)、
performance_schema(收集MySQL服務器的性能數據)、
sys(這個庫是通過視圖的形式把information_schema 和performance_schema結合起來,查詢出更加令人容易理解的數據存儲過程可以可以執(zhí)行一些性能方面的配置,也可以得到一些性能診斷報告內容存儲函數可以查詢一些性能信息)
查看數據庫放置路徑
路徑下的shop文件夾中的db.opt記錄著當前數據庫默認字符集及字符序等信息,可直接對其修改,或者 MySQL命令行:alter database shop character set gbk;
查看shop數據庫信息
刪除shop,再來創(chuàng)建一個shop
創(chuàng)建表(記得先指明數據庫:use shop;)
執(zhí)行sql腳本,使用的資料可以去這里下載
查看表
指明要查看表的結構
查看存儲引擎
可以看到InnoDB是默認的存儲引擎,如果想臨時修改會話的引擎可以使用
如果想要更改表的存儲引擎可以使用
以shop數據庫,shohin表為例
MyISAM的文件結構
shop文件夾中
shohin.frm 記錄了表的結構
shohin.MYD 表數據文件
shohin.MYI 表索引文件
工作原理
MyIASM
記錄首先在MySQL服務器內存上產生,然后寫入到外存中的MYD中,最后將索引信息寫入到MYI中,產生時間延遲主要是緩存的原因
MyIASM備份很簡單,直接復制shop文件夾即可
InnoDB的文件結構
shop文件夾中
shohin.frm 記錄了表的結構
db.opt 數據庫的字符集和字符序等信息
table_name.ibd 獨享表空間存放另一個表的數據文件
shop文件同級目錄下
ibdata1 表空間文件存放數據(共享的)后面還有獨享的
ib_logfile0、ib_logfile1 重做日志文件信息
不知道重做日志,故百度內容如下:
重做日志redo log file是LGWR進程從Oracle實例中的redo log buffer寫入的,是循環(huán)利用的。就是說一個redo log file(group) 寫滿后,才寫下一個。
歸檔日志archive log是當數據庫運行在歸檔模式下時,一個redo log file(group)寫滿后,由ARCn進程將重做日志的內容備份到歸檔日志文件下,然后這個redo log file(group)才能被下一次使用。
不管數據庫是否是歸檔模式,重做日志是肯定要寫的。而只有數據庫在歸檔模式下,重做日志才會備份,形成歸檔日志。
一般來說,歸檔日志結合全備份,用于數據庫出現問題后的恢復使用。
重做日志是循環(huán)使用的。比如說,有三個重做日志組A、B、C。那么,當A寫滿后,系統(tǒng)就調用ARCn進程,將A備份為歸檔日志,同時B已經開始使用了。
工作原理
InnoDB
記錄首先在MySQL服務器內存上產生,然后寫入到外存中的ibdata1中,最后將重做日志信息寫入到ib_logfile0、ib_logfile1中,基本沒有時間延遲
InnoDB備份,首先復制shop文件夾,然后復制ibdata1、ib_logfile0、ib_logfile1文件
值得注意的是ibdata1是InnoDB的共享表空間,
InnoDB的表空間
共享表空間
存放了所有InnoDB表的數據信息、索引信息、各種元數據信息以及事務回滾信息,默認情況下存放在data根目錄下的ibdata1中
獨享表空間
存放的是該表的信息,一般命名為table_name.ibd,路徑是:本文在shop數據庫中
默認是關閉獨享表空間,可使用set @@global.innodb_file_per_table=ON;開啟
但操作獨享表空間依然會影響到ibdata1、ib_logfile0、ib_logfile1文件,
變量
分為系統(tǒng)變量(全局變量、會話變量)、用戶自定義變量(以后有時間再說)
查看系統(tǒng)變量
全局變量(393個): show global variables;
會話變量(393+12):show session variables;
@@能標記會話系統(tǒng)變量,若會話系統(tǒng)變量不存在則標記全局變量,查看會話變量不存在時,返回全局變量
備份時:
flush tables with read lock; 可以禁止更新,但無法禁止查詢
unlock tables; 可以解鎖前面的禁止
表結構
先來看看MySQL的數據類型
好家伙,還挺多。。。
日期時間型的datetime和timestamp區(qū)別
每次啟動前記得. E:\mysql\init.sql設置一下字符集,如有不懂可參照MYSQL之字符問題探究
創(chuàng)建一個表實驗一下
插入數據(數據只能一行一行的插入):
timestamp是記錄當前服務器的時間,所以即使插入null,它也是會記錄當前時間的,事實上日期時間型屬于數值類型可進行簡單加減運算
通過show variables like ‘time_zone%’;可查看當前MySQL的時間設置
MySQL復合類型(set、enum)
enum只能從集合中取一個值,set可以取多個值
例子:
創(chuàng)建一個含set、和enum集合的表
插入數據(報錯:ERROR 1265 (01000): Data truncated for column ‘interest’ at row 1)
解決: MySQL默認strict mode,即嚴格sql語句模式,可以臨時修改為”ansi”模式,語句:set sql_mode=’ansi’;
修改成功
選擇
因為只能選擇set集合里面的東西,所以上面的音樂就忽略掉了。
MySQL約束(6種)
1、主鍵約束
字段名 數據類型[其他約束條件] primary key
若為復合主鍵:primary key(字段名1,字段名2)
2、非空約束
字段名 數據類型 not null
3、檢查約束
MySQL事實上不支持檢查約束
若為字符串類型,則可用enum或set實現檢查約束
若為數值類型,則用觸發(fā)器實現
若為其他類型,最好用觸發(fā)器實現
4、默認值約束
字段名 數據類型[其他約束條件] default 默認值
5、唯一性約束
字段名 數據類型 unique
6、外鍵約束
外鍵約束只要用于定義表與表之間的關系,表A外鍵字段要么是NULL,要么函數依賴于表B主鍵字段的值,(此時將表A稱為表B的子表,表B稱為表A的父表)
constraint 約束名 foreign key (表A字段名或者字段名列表) references 表B (字段名或字段名列表)[on delete級聯選項][on update級聯選項]
級聯選項4種取值如下:
cascade:父表記錄的刪除或者更新操作會自動刪除或更新子表中與之對應的記錄
set null:父表記錄的刪除(delete)或者更新會將子表中與之對應記錄的外鍵值自動設置為null值
no action:父表記錄的刪除或更新操作如果子表存在與之對應的記錄那么刪除或更新操作將失敗
restrict :與no action功能相同,且為級聯選項的默認值
注意: 如果某個字段存在多種約束條件,則約束條件的順序是任意的。
自增型字段
字段名 數據類型 auto_increment
注意 自增型字段的數據類型必須為整數,若向自增型字段插入一個NULL值或0,字段值會被自動設置為比前一個值大1,即字段值總是比前一個字段值大,最好將自增型字段設置為主鍵,否則可能將出現一些錯誤
創(chuàng)建表時,可以在表的括號外面設置engine=存儲引擎類型 default charset=字符集類型 (若省略則將沿用character_set_database的默認值)
ps: 僅對MyISAM存儲引擎有用的選項
pack_keys=壓縮類型
0 取消所以索引中所以關鍵字的壓縮
1 將壓縮索引中所有關鍵字的存儲空間
default 表示只壓縮索引中字符串類型的關鍵字,但不壓縮數值類型的關鍵字
復制一個表結構
法一:
create table new_table like old_table;
法二:
create table new_table select * from old_table
小結
MySQL確實很實在,對我而言命令行操作也確實十分的帶勁,各種炫酷的語句,很快,好使,不錯,加油!
總結
以上是生活随笔為你收集整理的mysql初级数据库_MYSQL初级数据库操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wether.html5.qq.com,
- 下一篇: 机器学习矩阵求导