python學習----9.12-----數據存儲引擎、建立表的完整語句、數據類型

1、數據存儲引擎mysql

  什麼是引擎?sql

    一個功能的核心成分數據庫

  引擎能夠被分類、爲何要分類?ide

    需求場景不一樣催生了不一樣的引擎類別函數

 

  對於mysql測試

    核心功能是存儲數據   涉及到存儲數據的代碼  就稱之爲存儲引擎編碼

    根據不一樣的需求  也有着不一樣的引擎分類spa

   不一樣的引擎測試3d

   建立表時在最後指定引擎名稱  engine = xxx
code

  

      create table t1(id int)engine=innodb
      create table t1(id int not null)engine=csv
      create table t1(id int)engine=memory
      create table t1(id int)engine=blackhole
      insert into t1 value(1);
      insert into t2 value(1);
      insert into t3 value(1);
      insert into t4 value(1);

    innodb是默認引擎  由於 它是永久存儲 而且支持事務,行鎖,外鍵

 

2、建立表的完整語句

  create table 表名(字段名稱 數據類型[(長度) 約束條件],字段名稱 數據類型[(長度) 約束條件])

  必須的:字段名  數據類型  表名

  可選的:長度  約束條件

  長度用於設置數據的長度

  數據類型也是一種約束

  約束指的是除了數據類型外的額外的規範

  若是添加的數據超過了指定的長度範圍,超出範圍的就丟棄

  注意:字段名 和 表名 庫名 都不能是Mysql的關鍵字好比select from not....

 

3、數據類型

枚舉  **
    用於描述 一個已知範圍的數據 例如性別: 只有男 女 或其餘
    enum("man","woman","other")

    總結: 枚舉中只能是字符串類型
          添加的數據只能是已經出如今枚舉中的值
          你的值只能是其中的一個
          你也可使用枚舉值的序號來插入值 從1開始
           多選1
集合 **
    用於描述一堆數據  好比你的興趣愛好
    set("watch movie","listen music","play game")

    總結:集合中的數據 只能是字符串
         添加的數據只能是已經出如今集合中的值
         你的值能夠是其中的任意幾個
         你也可使用枚舉值的序號來插入值 從1開始   可是隻能給一個序號
           多選多
集合和枚舉

 

 

 

               ***      ***     ***    *****   ***
            tinyint smallint mediumint  int   bigint
         字節數:1       2         3      4     8
        默認狀況下整型是有符號的 須要用一個二進制位存儲符號
        給整型加上 約束 unsigned來表示無符號
        若是數據超出範圍就儘量保存最大的 例如 在無符號下 保存256  其實存的255
        若是有符號  例如 tinyint  保存-1280 其實存的是-128  是最小值

        修改嚴格模式:
        以上特性的出現是由於 mysql處於非嚴格模式
            查看當前模式  show variables like "sql_mode";
            修改成嚴格模式  set global sql_mode = "STRICT_TRANS_TABLES";
        嚴格模式下 若是值超出範圍就直接報錯,在一些版本中默認就是嚴格模式!
            在咱們的正常開發中,咱們應該先判斷數據的正確性,沒有問題在發給數據庫

        怎麼選擇: 得根據實際狀況來判斷,可以保存你的數據的最小類型

        長度限制對於整型的意義:
            create table t10(id int(1));
            insert into t10 value(454555);
            select *from t10;
            發現這個數也存儲成功
            說明 這裏長度指的不是存儲容量限制
            而是顯示的寬度
            若是你的數據超過了顯示寬度 有幾個顯示幾個
            若是不足 則補全到指定長度  得告訴它用什麼來補全
            create table t13(id int(10) zerofill);
           總結 不是容量限制 而是 顯示寬度
                要限制顯示寬度
                 1.建立表時 給整型加上寬度
                 2.加上zerofill約束
整型
分類: float *****  double **** decimal  *****
字節數:     4          8        不肯定(手動指定)

給浮點設置寬度限制
float(m,d)
double(m,d)
decimal(m,d)

長度說明 *****
m表示 這個浮點數總體的長度
d表示 小數部分的長度
例如: float(5,3)  最大值: 99.999


區別 *****
相同點: 小數部分最大長度都是30
        float和double的最大長度爲255
不一樣點: decimal的總體最大長度65
        精度不一樣
        doublefloat 精度高
        decimal 是準確的 不會丟失精度

如何選擇:你對精確度要求高你就使用 decimal
float 小數型
分類
char  定長字符
varchar 變長字符

char類型的長度是固定 不管你存儲的數據有多長 佔用的容量都同樣
char(3)  存儲的數據爲 "a"   在硬盤保存的數據仍是佔3字符長度  實際保存的是"a  "
varchar 長度是可變的 存儲的數據有多長就佔用多長
varchar(3)  存儲的數據爲 "a" 在硬盤保存的數據仍是佔1字符長度  實際保存的是"a"
yxx exx lxx zxx cx wxx   char(3)
(1bytes+yx)(1bytes+exx)(1bytes+lx)(1bytes+zxx)  varchar(3)
若是是可變長度 則有問題 不知道數據從哪裏開始到哪裏結束  因此須要有一個位置保存數據的長度
vharchar 能支持的最大長度是65535  用於保存數據長度的數據最長兩個bytes


若是是char類型  若是你的數據不足指定長度 就在後面用空格補全

驗證:
    使用一個 char_length的函數 能夠查看字符的長度
    create table t18(a char(4),b varchar(4));
    insert into t18 value("x","x");
    select char_length(a),char_length(b) from t18;
    兩個字段的長度都爲1

    結論:
    這是由於 mysql在存儲時 自動加上的空格 對使用者而言是沒有意義的 因此mysql自動幫你處理掉空格了
    咱們能夠設置sql模式 來讓它現出原形
    set global sql_mode = "PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES"
    設置完成後重啓msyql 再次查詢長度

    注意:
    當你在執行這樣的查詢語句時  mysql會自動將參數末尾的空格去除
    select *from t19 where  name = "yh"
    當你在使用模糊搜索時 要注意 定長字符 後面可能會有空格 因此最好在後面加上百分號 %
    select *from t19 where  name like "yh";
        % 任意個數的任意字符
        _ 1個任意字符

如何選擇
    char
        存取效率高
        浪費存儲空間
    varchar
        存取效率低於char
        節省存儲空間
    使用起來感覺不到區別 一般用的是char



char和varchar 長度都比較小 最大就是65535

    大文本類型:
    TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT     文本是帶有編碼
    BLOB 系列    TINYBLOB BLOB MEDIUMBLOB LONGBLOB 也是字符數據 可是不帶編碼

    二進制類型: 用於存儲多媒體數據 好比視頻   可是咱們通常不會將多媒體數據存到數據 而是存儲文件路徑地址
    BINARY系列 BINARY VARBINARY    存儲二進制數據
字符型
分類
time   時分秒   HH:MM:SS   ***
year   年份     ***
date   日期  年月日   ***
datetime 日期加時間 年月日 時分秒     年份最大是9999    *****
timestamp 時間戳  從1970-1-1開始算    年份最大是2037    *****


共同點: 時間的存取經過字符串類型
        均可以使用now()函數來插入當前時間


datetime 和 時間戳都可以表示日期和時間
不一樣之處是: 年份最大範圍不一樣
            時間戳能夠爲空 表明當前時間
            時間戳在你更新記錄時 會自動更新爲當前時間
時間和日期
相關文章
相關標籤/搜索