【mysql】數據類型、表和約束

Mysql數據類型

 

整型

數據類型

存儲範圍

字節

TINYINT

有符號值:-128 到 127 (-27到27-1)

無符號值:0到255 (0 到 28-1)

1

SMALLINT

有符號值:-32768到32767(-215到215-1)

無符號值:0到65535(0到216-1)

2

MEDIUMINT

有符號值:-8388608 到 8388607(-223到223-1)

無符號值:0到16777215 (0到224-1)

3

INT

有符號值:-2147483648 到2147483647(-231到231-1)

無符號值:0到4294967295(0到232-1)

4

BIGING

有符號值:-9223372036854775808到9223373036854775807(-263到263-1)

無符號值:0到18446744073709551615(0到264-1)

8

浮點型

數據類型

存儲範圍

FLOAT[(M,D)]

-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38

M是數字總位數,D是小數點後面的位數。如果M和D被省略,根據硬件允許的限制來保存值。

精度浮點數精確到大約7位小數位。

DOUBLE[(M,D)]

-1.7976931348623157E+308到-2.2250738585072014E-308 、 0

和 2.2250738585072014E-308 到1.7976931348623157E+308

日期時間型

類型

字節

日期格式

日期範圍

YEAR

1

YYYY

1901 ~2155

TIME

3

HH:MM:SS

-838:59:59 ~ 838:59:59

DATE

3

YYYY-MM-DD

1000-01-01 ~ 9999-12-31

DATETIME

8

YYYY-MM-DD HH:MM:SS

1000-01-01 00:00:00~

9999-12-31 23:59:59

TIMESTAMP

4

YYYY-MM-DD HH:MM:SS

1970-01-01 00:00:01 ~ 2038

字符型(L+1或L+2裏多出來的字節是用來保存數據值的長度的,對長度可變的數據進行處理時,MySQL要把數據的內容和長度都保存起來)

類型

存儲需求

CHAR(M)

M個字節, 0<=M <=255

VARCHAR(M)

L+2個字節,其中L <=M且 0<=M<=65535

TINYTEXT

L+1個字節,其中L<28

TEXT

L+2個字節,其中L<216

MEDIUMTEXT

L+3個字節,其中L<224

LONGTEXT

L+4個字節,其中L<232

ENUM(‘value1’,’value2’,…)

1或2個字節,取決於枚舉值的個數(最多65535個值)

SET(‘value1’,’value2’,…)

1、2、3、4或8個字節,取決於SET

成員的數目(最多64個成員)

創建數據表

打開數據庫  USE db_name

 

創建數據表

CREATE TABLE [IF NOT EXISTS] table_name{

         Column_namedata_type,

         …

}


查看數據表(不但可以查看當前數據庫下的表,還可以查看其它數據庫下的表信息)

SHOW TABLES[FROM db_name]

[LIKE ‘pattern’ | WHERE expr]


查看數據表的結構

SHOW COLUMNS FROM tb_name;


INSERT插入語句

INSERT [INTO] tb_name [(col_name),…] VALUES(val,…)

 

NULL 字段可以爲空

NOT NULL 字段禁止爲空

 

AUTO_INCREMENT

自動編號,默認與主鍵組合使用。

默認情況下,起始值爲1,每次增量爲1


約束

1.      約束保證數據的完整性和一致性。

2.      約束分爲表級約束和列級約束。

3.      約束類型包括

a)        NOT NULL(非空約束)

b)        PRIMARY KEY(主鍵約束)

c)        UNIQUE KEY(唯一約束)

d)        DEFAULT(默認約束)

e)        FOREIGN KEY(外鍵約束)

 

 

PRIMARYKEY

主鍵約束,每張表只能存在一個主鍵

主鍵保證記錄的唯一性

主鍵自動爲NOT NULL

 

UNIQUEKEY

唯一約束,唯一約束可以保證記錄的唯一性。

唯一約束的字段可以爲空值(NULL)

每張數據表可以存在多個唯一約束。


DEFAULT

默認值

默認值

當插入記錄時,如果沒有明確的爲字段賦值,則自動賦予默認值。


FOREIGNKEY

保持數據的一致性,完整性。

實現一對一或一對多的關係。

外鍵約束的要求

1.      父表和子表必須使用相同的存儲引擎,而且禁止使用臨時表。

2.      數據表的存儲引擎只能爲InnoDB。

3.      外鍵列和參照列必須具有相似的數據類型。其中數字的長度或是否有符號位必須相同;而字符的長度可以則可以不同。

4.      外鍵列和參照列必須創建索引。如果外鍵列不存在索引的話,MySQL將自動創建索引。

 

編輯數據表的默認的存儲引擎

MySQL配置文件

         Default-storage-engine= INNODB

創建父表


創建子表,pid爲外鍵,參照id


查看索引: SHOW INDEX FROM tb_name;

外鍵約束的參照操作

1. CASCADE:從父表刪除或更新且自動刪除或更新子表中匹配的行。

2. SET NULL : 從父表刪除或更新行,並設置子表中的外鍵列爲NULL。如果使用該項,必須保證子表列沒有指定NOT NULL.

3. RESTRICT: 拒絕對父表的刪除或更新操作。

4. NO ACTION:標準SQL的關鍵字,在MySQL中與RESTRICT 相同。


使用on delete 來操作外鍵約束

 

在外鍵約束當中,在實際的開發過程中,我們很少使用物理的外鍵約束,很多都去使用邏輯的外鍵約束,因爲物理的外鍵約束只有INNODB這種引擎纔會支持,像我們另外的一種引擎MYISAM的引擎則不支持,反過來說,如果我想創建的數據表,假設存儲引擎爲MYISAM,而且又想使用外鍵約束的話,其實是不可能實現的,所以說,我們在實際的項目開發中,我們不去定義物理的外鍵,所謂的邏輯外鍵指的是就是我們在定義兩張表的結構的時候,我們是按照存在的某種結構的方式去定義,但是不去使用FOREIGN KEY這個關鍵詞來定義。

 

查看創表語句:SHOW CREATE TABLE tb_name;


表級約束與列級約束

 

對一個數據列建立的約束,稱爲列級約束。

對多個數據列建立的約束,稱爲表級約束。

列級約束既可以在列定義時聲明,也可以在列定義後聲明。

表級約束只能在列定義後聲明。

 

修改數據表

添加單列

ALTER TABLE tb_name ADD [COLUMN]col_name  column_definition [FIRST |AFTERcol_name]


添加多列(不能指定位置關係)

ALTER TABLE tb_name ADD [COLUMN] (col_namecolumn_definition,…)

 

刪除列

ALTER TABLE tb_name DROP [COLUMN] col_nmae;

 

添加主鍵約束

ALTER TABLE tb_name ADD [CONSTRAINT[symbol]]PRIMARY KEY [index_type] (index_col_name,…)


可以給約束起名字,如上面爲 PK_user3

 

添加唯一約束

ALTER TABLE tb_name ADD[CONSTRAINT [symbol]]UNIQUE [INDEX | KEY] [INDEX_name] [index_type] (index_col_name,…)


添加外鍵約束

ALTER TABLE tb_name ADD[CONSTRAINT[symbol]]

FOREIGN KEY [index_name] (index_col_name,…) reference_definition

 

添加/刪除默認約束

ALTER TABLE tb_name ALTER [COLUMN] col_name{SET DEFAULT literal | DROP DEFAULT}


顯示約束 SHOWINDEX FROM tb_name


刪除主鍵約束

ALTER TABLE tb_name DROP PRIMARY KEY;

 

刪除唯一約束

ALTER TABLE tb_name DROP {INDEX | KEY}index_name

 

刪除外鍵約束

ALTER TABLE tb_name DROP FOREIGN KEYfk_symbol

 

修改列定義

ALTER TABLE tb_name MODIFY [COLUMN]col_name column_definition [FIRST | AFTER col_name]

 

修改列名稱

ALTER TABLE tb_name CHANGE [COLUMN]old_col_name  new_col_namecolumn_definition [FIRST | AFTER col_name]

 

修改表的名字

方法1:ALTER TABLE tb_name RENAME [TO | AS] new_tb_name

方法2:RENAME TABLE tb_name TO new_tb_name [,tb_name2 TO new_tb_name2]

 


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