mysql資料類型-int
int 的有符号和無符号的差別
- 有符号的int可以插入負值,無符号的int不可以插入負值
整型的每一種都分無符号(unsigned)和有符号(signed)兩種類型(float和double總是帶符号的),在預設情況下聲明的整型變量都是有符号的類型(char有點特别),如果需聲明無符号類型的話就需要在類型前加上unsigned。
無符号版本和有符号版本的差別就是無符号類型能儲存2倍于有符号類型的正整數資料,比如16位系統中一個smallint能存儲的資料的範圍為-32768~32767,而unsigned能存儲的資料範圍則是0~65535。
由于在計算機中,整數是以補碼形式存放的。根據最高位的不同,如果是1,有符号數的話就是負數;如果是無符号數,則都解釋為正數。另外,unsigned若省略後一個關鍵字,大多數編譯器都會認為是unsigned int。
簡而言之就是由于Int型占4位元組,也就是16位,2^16 = 65535,如果有符号位就+ -兩邊均分,如果沒有就全給+。
int 有符号測試
#建立一個有符号的int類型的abc的表create table bcd (a int,b int);#int類型不聲明則預設為有符号
#插入資料insert into bcd values(1,2);
#查詢資料select * from bcd;
#查詢2-1:結果為1select b-a from bcd;
#查詢1-2:結果為-1select a-b from bcd;
測試結果:
int 無符号測試
#建立一個無符号的int類型的abc的表create TABLE abc (a int unsigned,b int unsigned);
#插入資料insert into abc values(1,2);
#查詢資料select * from abc;
#查詢2-1:結果為1select b-a from abc;
#查詢1-2:結果異常select a-b from abc;
測試結果:超出精度異常
int(n):其中的n是什麼意思?
- n 的意思是顯示長度:若結果長度小于 n 則會自動前面加 0 進行補齊,若結果長度不小于 n 則正常顯示
#建立一個int(4)的資料庫表create table test_int_n (a int(4) zerofill);-- Ps:若不加 zerofill 則沒什麼鳥用
#在裡面插入兩條資料(一個值為1;一個值為123456)insert into test_int_n values(1),(123456);
#mysql bin 指令行>查詢結果
Ps:在工具中查詢無效果
mysql中的int自增
- 1.自增隻能建立在主鍵上面
- 2. null 和 0 都可以自自增
- 3. 可以在自增列插入負值
#建立自動增長:會報錯create table test_auto_increment(a int auto_increment);
\
#建立自動增長:建立成功create table test_auto_increment(a int auto_increment primary key);
null 和 0 都可以自增
測試插入 null
#在自增表裡面插入資料insert into test_auto_increment values(null),(10),(null),(100),(null);
#查詢自增表中的資料select * from test_auto_increment;
測試插入0
插入前查詢
#在自增表中插入0:是和null一樣自增的insert into test_auto_increment values(0);
插入後查詢:
Ps : 插入 0 或 插入 null 執行一次後結果為 102 ,若把 102 删除後,再執行插入 0 或 插入 null ,則會在 102 的基礎上自增,無關 102 是否被删除
3.可以在自增列插入負值
#在自增表中插入負值:是可以執行成功的
insert into test_auto_increment values(-1);
mysql資料類型-字元類型
字元(n)中的 n 是字元還是位元組?
char(n) 和varchar(n) 中的 n 是字元還是位元組?
答:字元。
text(n) 中的 n 是字元還是位元組?
答:位元組。
除了 char 和 varchar 中的 n 是字元,其他的都是位元組。
資料庫中有true和false嗎?
資料庫中隻有0和1,沒有true和false;
1:相當于 true;0:相當于false。
#1:相當于trueselect 'a' = 'a';
#0:相當于falseselect 'a' = 'b';
運作結果:
資料庫中排序規則裡面的 bin 和 ci 是什麼意思?
bin:二進制的方式存儲的,大小寫敏感(不會忽略大小寫)。
ci:大小寫不敏感(會忽略大小寫)。
sql測試:
#設定為utf8mb4_binset names utf8mb4 collate utf8mb4_bin;
mysql 擷取varchar類型數字最大值
SELECT MAX(CAST(no AS SIGNED)) FROM sys_user ;
mysql資料類型-時間類型
date、timestamp和datetime的差別是什麼?
- date表示日期,其範圍為1000-01-01到9999-12-31
- datetime表示日期時間,其範圍是1000-01-01 00:00:00到9999-12-31 23:59:59
- timestamp表示時間戳,1970-01-01 00:00:00到2038-01-19 03:14:07,timestamp具有自動初始化和自動更新功能。
timestamp:有時區的概念;datetime:沒有時區的概念
sql測試timestamp和datetime的差別
#建立一個時間類型的表create table test_time (a timestamp,b datetime);
#插入資料insert into test_time values(NOW(),NOW());
#查詢時間的環境變量select @@time_zone;
當時間的環境變量為 SYSTEM 時,看不出差別
#修改時間的環境變量set time_zone='+00:00';