mysql數據類型 和 約束

一、整形

1、分類:tinyint    smallint    mediumint   int   bigint

(1)有符號:有正負數

(2)無符號:沒有負數     類型後面使用unsigned 和zerofill修飾符

存儲數據大小範圍:

1個字節         2個字節     3個字節     4個字節     8個字節
8bit                        16               24                 32             64

11111111         2^16-1

無符號:範圍運算公式  0到2^n-1

           比如:

                        tinyint:0到255

                        bigint:0到2^64-1

有符號:範圍運算公式-2^(n-1)到2^(n-1)-1

        比如:

                tinyint:-128到127

(3)顯示寬度

            類型後的小括號內的數字是顯示寬度,不能限制插入數值的大小

            比如:bigint(2)       2是顯示寬度

(4)定義無符號整型:

          unsigned:

            mysql>create  table  t1(id  bigint(2)  unsigned);

          zerofill:

             mysql>create  table  t2( id1  int  zerofill, id2  int(6) zerofill);

             mysql>insert  into  t2  values(2,2);

            mysql>select * from t2;

    +------------+--------+
    | id1 | id2 |
    +------------+--------+
    | 0000000002 | 000002 |
    +------------+--------+

    1 row in set (0.00 sec)

二、浮點型

   1. 單精度:float(5.3)     5寬度(總共長度)    3精度(小數點後三位)

    mysql>create  table  t3(id  float(6,2));

   2.雙精度:double(5.3)

    mysql>create table  t4(id  double(5,3));

   3.定點型

     定點數在Mysql內部以字符串形式存儲,比浮點數更精確,適合用來表示貨幣等精度高的數據。

    decimal(5,3)

   4.位類型BIT(M)

           M範圍從1—64,如果不寫默認爲0

        bit( )  顯示爲二進制

       mysql>create  table  t3(id  bit(4));   4bit 能存儲的最大值是15

三、字符串類型

1.字符類型     char    varchar

(1)char(10)   根據小括號中的10,佔10個。

                            列的長度固定爲創建表時的聲明的長度:0~255

(2)varchar(10)  根據實際字符串長度佔空間,最多10個

                                列中的值爲可變長字符串,長度:0~65535

2.總結字符類型使用:

(1)經常變化的字段用varchar

(2)知道固定長度的用char

(3)儘量用varchar

(4)超過255字符的只能用varchar或者text

(5)能用varchar的地方不用text(text是i當varchar長度不夠時再使用text)


3.枚舉類型  enum (enumerate[ɪˈnju:məreɪt])

作用:在給的固定範圍內多選一

mysql>create  table t3(name  enum('wing','tom'));

mysql>insert  into t3  values('wing');

只能從給的wing和tom兩個中2選1

4.集合類型  set 

作用:在給的固定範圍內可選多個

mysql>create  table t3(name  set('wing','tom','haha'));

mysql>insert  into t3  set  anme="wing,haha";

四、時間類型

時間和日期類型:year       date    time    datetime    timestamp(時間戳)

作用:用於存儲用戶的註冊時間、文件的發佈時間、文章的更新時間、員工的入職時間deng

(1)date

06/04

06-04

(2)year

00到69   爲21世紀

70到99    爲20世紀

(3)time

050510

(4)datetime  不給默認值爲null

180509221810

(5)timestamp 默認把當前時間自動加上

180509221810

和datetime不同的是:當插入值爲null時,顯示值也會是當前的時間。

例題1:mysql>create  table  t(date  timestamp);

            mysql>insert  into  t  values(null);

            mysql>select  *  from  t;

            +---------------------+
            | id |
            +---------------------+
            | 2013-12-18 00:08:41 |
            +---------------------+

            1 row in set (0.00 sec)   


2.   mysql>create  table  t6(d date,t time,dt datetime);

      mysql>insert  into  t6  values(now(),nwo(),nwo());   -----引用now( )函數

       mysql> select * from t6;
+------------+----------+---------------------+
| d | t | dt |
+------------+----------+---------------------+
| 2018-01-11 | 10:59:57 | 2018-01-11 10:59:57 |

+------------+----------+---------------------+


五、約束(修飾符)

1.當一個字段被設置不能爲空(not null)但是又沒有給它設置值的時候,系統會按照不同的類型給予默認值

(1)數值   0

(2)字符串   空

(3)枚舉類型enum      第一個預定義值

(4)時間戳timestamp     當前時間

2.設置系統默認值default

mysql>alter  table  t2  modify  id int  not null  default  8;      修改表t2的id字段的默認值爲8

3.unique (key)唯一 

(唯一性不能重複:如果id=1已經被設置則不能再設置爲id=1)

mysql>alter  table  t2  modify  id  int  unique;

4.auto_increment   自增    (額外的屬性)

mysql>create table t2(id int unique  auto_increment,name  varchar(10));

刪除時先modify修改屬性再drop刪除掉

5.primary  key  (key)  主鍵     ----->not  null + unique(key)     類似身份證ID

每張表中只能有一個主鍵

主鍵不能爲空,而且唯一

方法一:mysql>create  table  t4(hostname char(20) primary  key,ip char(150));

方法二:mysql>create  table  t3(hostname  char(20),ip  char(150),primary  key(hostname));

6.聯合主鍵(把多列設置爲一個主鍵)

(1)設置主鍵:mysql>create  table  t4(hostname  char(10),ip  char(150),primary  key(hostname,ip));

(2)刪除主鍵:mysql>alter  table  t3  drop  primary  key;

7.index(key) 把某一個字段(列)設置成index

索引   優化查詢速度,便於查詢

(1)創建索引的三種方法:

mysql> create table t4(hostname char(20) primary key,ip char(150),index (ip));

mysql> create table t3(hostname char(20) primary key,ip char(150),index dazhi(ip));

mysql> create index  index_name on t3(ip);

  語法:CREATE INDEX index_name ON table_name (column_list)

      不設置index_name默認把該字段(列)的名字作爲索引名

(2)刪除索引

mysql>alter table t3  drop  index  index_name;

(3)查看索引

mysql> SHOW INDEX FROM table_name\G

· Key_name

索引的名稱。

· Column_name

列名稱。


8.查看key

查看:mysql>desc  t2\G
PRI主鍵約束;
UNI唯一約束;
MUL非唯一的索引。

9.外鍵foreign key (key)

mysql> create table t1(id int,manager char(10) primary key) engine = innodb;
mysql> create table t2(id int,admin char(10),foreign key (admin) references t1 (manager)) engine = innodb ;

帶關聯刪除的外鍵:on delete cascade
mysql> create table xingzheng(id int,admin char(10),foreign key (admin) references t4(manager) on delete cascade) engine = innodb;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章