MySQL基本sql語句,儲存引擎,建立表的語法,嚴格模式
阿新 • • 發佈:2021-08-07
基本sql語句
''' ps:大部分程式的業務邏輯其實都是增刪改查 針對庫的增刪改查(資料夾) 增: create database db1; create database db2 charset='gbk'; 查: show databases; # 查所有庫 show create database db1; # 查單個庫 改: alter database db2 charset='utf8'; #修改db2庫的編碼格式 刪: drop database db2; 針對表的增刪改查(檔案) 在操作表(檔案)的時候,需要指定所在的庫(資料夾) # 檢視當前所在的庫的名字 select database(); # 切換庫 use db1; 增: create table t1(id int,name char(10),); # 也可以用絕對路徑的形式操作不同的庫 create table d1.t2(id int,name char(10)); 查: show tables; # 檢視當前庫下面所有的表名 show create table t1; # 查單個表 describe t1; # 支援簡寫 desc t1; 改: alter table t1 modify name char(16); 刪: drop table t1; 針對資料的增刪改查(一行行資料) 一定要先有庫,有表,最後才能操作資料 增: insert into t1 values(1,'jason'); # 單條資料 insert into t1 values(1,'jason'),(2,'mike'),(3,'jack'); # 多條資料 查: select * from t1; # 該命令當資料量特別大的時候不建議使用 select name from t1; 改: update t1 set name='DSB' where id>1; 刪: delete from t1 where id>1; 將表所有的資料清空: delete from t1;'''
儲存引擎
''' 日常生活中檔案格式有很多種,並且針對不同的檔案格式會有對應不同儲存方式和處理機制(txt,pdf,word,mp4...) 針對不同的資料應該有對應的不同的處理機制來儲存 儲存引擎就是不同的處理機制 MySQL主要儲存引擎 innodb 是mysql5.5版本及之後預設的儲存引擎 支援事務 行鎖 外來鍵 儲存資料更加的安全 建立表會生成兩個檔案 表結構檔案 表資料檔案 myisam 是mysql5.5版本之前預設的儲存引擎 速度要比innodb更快,但是我們更加註重的是資料的安全 建立表會生成三個檔案 表結構檔案 表資料檔案 表索引檔案 memory 記憶體引擎(資料全部存放在記憶體中),斷電資料丟失 建立表會生成一個檔案 表結構檔案 blackhole 無論存什麼,都立刻消失(黑洞) 建立表會生成一個檔案 表結構檔案 # 檢視所有的儲存引擎 show engines; # 不同的儲存引擎在儲存表的時候有什麼異同點 create table t1(id int) engine=innodb; create table t2(id int) engine=myisam; create table t3(id int) engine=blackhole; create table t4(id int) engine=memory; # 存資料 insert into t1 values(1); insert into t2 values(1); insert into t3 values(1); insert into t4 values(1); # 儲存與mysql服務端記憶體裡,重新啟動mysql服務,資料就沒有了'''
建立表的語法
''' # 語法 create table 表名( 欄位名1 型別(寬度) 約束條件, 欄位名2 型別(寬度) 約束條件, 欄位名3 型別(寬度) 約束條件 ); # 注意: 1 在同一張表中欄位名不能重複 2 寬度和約束條件是可選的(可寫可不寫),而欄位名和欄位型別是必須的 約束條件寫的話,支援寫多個 欄位名1 型別(寬度) 約束條件1 約束條件2..., create table t5(id); 報錯 3 最後一行不能有逗號 create table t6( in int, name char, ); 報錯 補充: # 寬度 一般情況下指的是對儲存資料的限制 create table t7(name char); 預設寬度是1 insert into t7 values('mike'); insert into t7 values(null); 關鍵字null 針對不同的版本會出現不同的效果 5.6版本預設沒有開啟嚴格模式,規定只能存一個字元,你給了多個字元,那麼會自動幫你擷取 5.7版本及以上或者開啟了嚴格模式,那麼規定只能存幾個就不能超,一旦超過範圍立刻報錯 嚴格模式到底開不開呢? mysql5.7之後的版本預設都是開啟嚴格模式的 使用資料庫的準則: 能儘量少的讓資料庫幹活就儘量少,不要給資料庫增加額外的壓力 約束條件之not null(不能插入null) create table t8(id int,name char not null); insert into t8 values(1,null); 報錯 寬度和約束條件到底是什麼關係? 寬度是用來限制資料的儲存 約束條件是在寬度的基礎之上增加的額外的約束'''
嚴格模式
''' 如何檢視嚴格模式? show variables like '%mode'; variable_name:sql_mode;value:no_engine_substitution 模糊匹配/查詢 關鍵字:like %:匹配任意多個字元 _:匹配任意單個字元 修改嚴格模式 set session 只在當前視窗有效,相當於臨時修改,一旦退出就不行了 set global 全域性有效 set global sql_mode='strict_trans_tables'; 設定完後重新進mysql就可以了 create table t14(name char); desc t14; insert into t14('jason'); 報錯 insert into t14('j'); select * from t14; '''while True: print('studying...')