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]