數據類型
二、MySQL支持的數據類型
數值類型、日期類型、字符串類型
1.數值類型
1)整數類型
tinyint、smallint、mediumint、int和bigint
2)zerofill屬性
配合int(數字)來用,表示顯示的時候一個顯示寬度
3)主鍵
主鍵可以唯一標識某條記錄的一個字段或者多個字段
create table 表名(字段名稱 類型 primary key,....);
create table 表名(字段名稱1 類型,....,primary key(字段名稱1));
刪除:
alter table 表名 drop primary key;
注意:如果字段具有auto_increment屬性必須先刪除auto_increment屬性
4)小數的表示
①浮點數
單精度(float):單精度的浮點數精確到大約7位小數位(整數部分加上小數部分的位數)
雙精度精度(double):雙精度的浮點數精確到大約15位小數位(整數部分加上小數部分的位數)
②定點數
decimal(7,2)
2.日期類型
DATETIME是常用的日期類型
create table t1(dt datetime);
insert into t1 values(now());
3.字符串類型
CHAR(M) M為0~255之間的整數,表示可以存M個字符(不管是中文還是英文字符總共個數是M個就OK)
VARCHAR(M) M為0~65535之間的整數,表示可以存M個字符,具體M最大多大和字符集有密切關系
注意varchar列的最大的存儲空間是65,532字節,如果是英文字符集(一個英文字符占1個字節)就是可以放65532個英文字符
自己在實際開發的過程中M設置的值,應該從自己的實際需求去考慮,而不是最大能存多少個字符,因為超過最大能設定的字符數會自動報錯或者警告!
TINYTEXT 允許長度0~255字符
TEXT 允許長度0~65535字符
MEDIUMTEXT 允許長度0~16,777,215字符
LONGTEXT 允許長度0~4,294,967,295字符
注意點:
char與varchar列的區別
char類型的字符所占的存儲空間是固定,不管你用的時候存了幾個字符,它所占的空間都是你當初設定的字符空間
比如char(255) 哪怕你存的只是1個a,那么它也是站255個字符長度的空間!
varchar列所占的存儲空間是可變的,根據存入的字符長度來確定實際占多少的空間!
varchar(255) 實際所占的空間就是實際字符的長度+1個字節!
varchar(超過255) 實際所占的空間就是實際字符的長度+2個字節!
更節省空間!
在檢索時,char列刪除尾部的空格,而varchar則保留這些空格。
選擇:由於char是固定長度,所以它的處理速度比varchar快,但是缺點是浪費存儲空間。所以對於那些長度變化不大的數據可以選擇此列
enum類型
create table t1(flag enum('a','b','c','d'));
insert into t1 values('a'),('a'),('f');
set類型
里面可以包含0~64個成員
create table t1(flag set('a','b','c','d'));
insert into t1 values('a,b'),('a,d,a');
字段屬性
1.UNSIGNED 無符號
2.auto_increment
自增(默認從1開始),用於整數類型和帶索引的字段,比如:配合主鍵使用(其他類型的索引我們以后再說)
3.主鍵:
主鍵可以唯一標識某條記錄的一個字段或者多個字段
一個字段設為主鍵
多個字段組合設為主鍵
注意點:
1)主鍵最好不要設置在某個與實際信息相關的字段上,主鍵的作用應該明確且單一
2)主鍵最好設置在整數類型的字段上面(處理或查詢起來效率較高)
3)主鍵必須不同,並且不能為null
4)既然主鍵必須不同所以我們會配合 auto_increment屬性
5)一個表只能有一個主鍵,最好只設置在一個字段上
6)根據主鍵的值來查詢記錄時可以獲得極快的速度(因為設置了主鍵的字段已經創建了索引)!
設置方法:
在創建表的時候
primary key(字段)
primary key(字段1,字段2)
也可以直接寫在需要創建主鍵的字段后面
如果忘了設置可以
alter table 表名 add primary key(字段名);
刪除:
alter table 表名 drop primary key;
注意:如果字段具有auto_increment屬性必須先刪除auto_increment屬性
4.規定字段的值是否可以為null not null即不可以為null,該屬性也可用於其他類型的字段
5.設置默認值 default 值,該屬性也可用於其他類型的字段
四、MySQL中的常見運算符
MySQL提供了一些運算符號供我們在SQL語句中使用,比如我們需要對SQL語句中的某個值,或者某個字段做運算操作的時候,就可以使用這些運算符
五、常用函數
函數用於SQL語句中
1.字符串函數
CONCAT(S1,S2,...Sn) 連接S1,S2,...Sn為一個字符串
INSERT(str,x,y,instr) 將字符串str從第x位置開始,y個字符長的字符串換位字符串instr
LOWER(str) 將字符串str中所有字符變為小寫
UPPER(str) 將字符串str中所有字符變為大寫
LEFT(str,x) 返回字符串str最右邊的x個字符
RIGHT(str,x) 返回字符串str最右邊的x個字符
LPAD(str,n,pad) 用字符串pad對str最左邊進行填充,直到長度為n個字符長度
RPAD(str,n,pad) 用字符串pad對str最右邊進行填充,直到長度為n個字符長度
LTRIM(str) 去掉字符串str左側的空格
RTRIM(str) 去掉字符串str行尾的空格
REPEAT(str,x) 返回str重復x次的結果
REPLACE(str,a,b) 用字符串b替換字符串str中所有出現的字符串a
STRCMP(s1,s2) 比較字符串s1和s2
TRIM(str) 去掉字符串行尾和行頭的空格
SUBSTRING(str,x,y) 返回從字符串str x位置起y個字符長度的字符串
LENGTH(str) 返回字符串長度
2.數值函數
ABS(x) 返回x的絕對值
CEIL(x) 返回大於x的最小整數值
FLOOR(x) 返回小於x的最大整數值
MOD(x,y) 返回x/y的模
RAND() 返回0-1內的隨機值
ROUND(x,y) 返回參數x的四舍五入的有y位小數的值
TRUNCATE(x,y) 返回數字x截斷為y位小數的結果
3.日期和時間函數
CURDATE() 返回當前日期
CURTIME() 返回當前時間
NOW() 返回當前的日期和時間
UNIX_TIMESTAMP(date) 返回日期date的UNIX時間戳
FROM_UNIXTIME() 返回UNIX時間戳的日期值
WEEK(date) 返回日期date為一年中的第幾周
YEAR(date) 返回日期date的年份
HOUR(time) 返回time的小時值
MINUTE(time) 返回time的分鍾值
MONTHNAME(date) 返回date的月份名
DATE_FORMAT(date,fmt) 返回按字符串fmt格式化日期date值
DATE_ADD(add,INTERVAL expr type) 返回一個日期或時間值加上一個時間間隔的時間值
DATEDIFF(expr,expr2) 返回起始時間expr和結束時間expr2之間的天數
4.流程函數
1)IF(value,t,f) 如果value是真,返回t,否則返回f
select if(field1>1000,'高薪','低薪');
2)IFNULL(value1,value2) 如果value1不為null,返回value1,否則value1該是什么還是什么
select ifnull(name,'無名');
3)CASE WHEN [value1] THEN [result1]...ELSE[default]END 如果value1是真,返回result1,否則返回default
select case when 100>10 then '真' else '假' end;
和if語句比較像
4)CASE [expr] WHEN [value1] THEN[result1]...ELSE[default]END 如果expr等於value1,返回result1,否則返回default
select case 1 when 1 then '一' when 2 then '二' when 3 then '三' else '未知數字'end;
和switch語句比較像
5.其他常用函數
DATABASE() 返回當前數據庫名
VERSION() 返回當前數據庫版本
USER() 返回當前登錄用戶名
INET_ATON(IP) 返回IP地址的數字表示
INET_NTOA(num) 返回數字代表的IP地址
PASSWORD(str) 返回字符串str的加密版本
MD5() 返回字符串str的MD5值