1. 程式人生 > 其它 >MySQL基本sql語句,儲存引擎,建立表的語法,嚴格模式

MySQL基本sql語句,儲存引擎,建立表的語法,嚴格模式

基本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...')