標籤:必須 tab 精度 有符號 速度 年齡 額外 sign 模糊比對
一、表介紹
表相當於檔案,表中的一條記錄就相當於檔案的一行內容,不同的是,表中的一條記錄有對應的標題,稱為表的欄位
二 、建立表
1、基本文法
# 文法:create table 表名(欄位名1 類型[(寬度) 約束條件],欄位名2 類型[(寬度) 約束條件],欄位名3 類型[(寬度) 約束條件]);
# 解釋:
類型:使用限制欄位必須以什麼樣的資料類型傳值
約束條件:約束條件是在類型之外添加一種額外的限制
# 注意:1. 在同一張表中,欄位名是不能相同2. 寬度和約束條件可選3. 欄位名和類型是必須的
4. 表中的最後一個欄位不能加逗號 ’,‘
2、資料表操作
查看錶之前先選擇資料庫use db1;查看當前庫下所有的表show tables;單獨查看一個表的資訊show create tables t1;查看錶的結構desc t1;建立表create table t1 (欄位名 資料類型 [完整性條件約束條件]);修改表名alter table t1 rename t2;刪除表drop table t1;
3、查看錶結構
mysql> desc t2
三、資料類型
1、整形類型(一般常用 int )
1、作用:id號,各種號碼,年齡,等級2、分類:tinyint----tinyint[(m)] [unsigned] [zerofill]
有符號:-128 ~ 127
無符號:0 ~ 255
int--------int[(m)][unsigned][zerofill]
有符號:-2147483648 ~ 2147483647
無符號: 0 ~ 4294967295
bigint-----[(m)][unsigned][zerofill]
有符號:-9223372036854775808 ~ 9223372036854775807
無符號:0 ~ 184467440737095516153、測試:預設整型都是有符號的create table t1(x tinyint);insert into t1 values(128),(-129);create table t2(x tinyint unsigned);insert into t2 values(-1),(256);create table t3(x int unsigned);#4294967295insert into t3 values(4294967296);create table t4(x int(12) unsigned);insert into t4 values(4294967296123);4、強調:對於整型來說,資料類型後的寬度並不是儲存限制,而是顯示限制 所以在建立表示,如果欄位採用的是整數型別,完全無需指定顯示寬度, 預設的顯示寬度,足夠顯示完整當初存放的資料# 顯示時,不夠8位用0填充,如果超出8位則正常顯示create table t5(x int(8) unsigned zerofill);insert into t5 values(4294967296123);insert into t5 values(1);
2、浮點型(一般常用 float )
作用:儲存身高、體重、薪資分類:float (*****)double (**)decimal (**)測試:#相同點#1、對於三者來說,都能存放30位小數,#不同點:1、精度的排序從低到高:float,double,decimal2、float與double類型能存放的整數位比decimal更多create table t9(x float(255,30));create table t10(x double(255,30));create table t11(x decimal(65,30));insert into t9 values(1.111111111111111111111111111111);insert into t10 values(1.111111111111111111111111111111);insert into t11 values(1.111111111111111111111111111111);mysql> select * from t9;+----------------------------------+| x |+----------------------------------+| 1.111111164093017600000000000000 |+----------------------------------+1 row in set (0.00 sec)mysql> select * from t10;+----------------------------------+| x |+----------------------------------+| 1.111111111111111200000000000000 |+----------------------------------+1 row in set (0.00 sec)mysql> select * from t11;+----------------------------------+| x |+----------------------------------+| 1.111111111111111111111111111111 |+----------------------------------+1 row in set (0.00 sec)
3、字元類型
1、作用:姓名,地址,描述類的資訊2、分類:char 定長varchar 變長char# 缺點:浪費空間# 優點:存取速度都快varchar# 缺點:存取速度都慢# 優點:節省空間的
3、測試:字元的寬度限制單位是字元個數create table t12(x char(4)); # 超出4個字元則報錯,不夠4個字元則用空格補全成4個字元create table t13(y varchar(4));# 超出4個字元則報錯,不夠4個字元那麼字元有幾個就存幾個insert into t12 values(‘hello‘);insert into t13 values(‘hello‘);insert into t12 values(‘a‘); #‘a ‘insert into t13 values(‘a‘); #‘a‘set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";select char_length(x) from t12; #4select char_length(y) from t13; #1# 注意:針對char類型,mysql在儲存時會將資料用空格補全存放到硬碟中但會在讀出結果時自動去掉末尾的空格,因為末尾的空格在以下情境中是無用mysql> select * from t14 where name="lxx"; # name欄位明確地等於一個值,該值後填充空格是沒有用mysql> select * from t14 where name like "lxx"; # name欄位模糊比對一個值,該值後填充空格是有用的
4、日期類型
1、作用:時間相關2、分類:date:1999-01-27time: 11:11:11datetime:1999-01-27 11:11:11year:19993、測試create table student( id int, name char(16), born_year year, birth date, class_time time, reg_time datetime);insert into student values(1,‘egon‘,‘2000‘,‘2000-01-27‘,‘08:30:00‘,‘2013-11-11 11:11:11‘);
5、枚舉和集合類型
作用與分類:枚舉enum,多選一個集合set,多選多測試create table teacher( id int, name char(16), sex enum(‘male‘,‘female‘,‘others‘), hobbies set(‘play‘,‘read‘,‘music‘,‘piao‘));
mysql 表操作