mysql **式
語法:create table 表名(
欄位名1 型別[(寬度) 約束條件],
欄位名2 型別[(寬度) 約束條件],
欄位名3 型別[(寬度) 約束條件]
注意:1. 在同一張表中,欄位名是不能相同
2. 寬度和約束條件可選
3. 欄位名和型別是必須的
表的資料型別
整數型別:tinyint smallint mediumint int bigint
為該型別指定寬度時,僅僅只是指定查詢結果的顯示寬度,與儲存範圍無關,儲存範圍如下其實我們完全沒必要為整數型別指定顯示寬度,使用預設的就可以了預設的顯示寬度,都是在最大值的基礎上加1
浮點型別:float double
型別大小範圍(有符號)範圍(無符號)用途
tinyint
1 位元組
(-128,127)
(0,255)
小整數值
smallint
2 位元組
(-32 768,32 767)
(0,65 535)
大整數值
mediumint
3 位元組
(-8 388 608,8 388 607)
(0,16 777 215)
大整數值
int或integer
4 位元組
(-2 147 483 648,2 147 483 647)
(0,4 294 967 295)
大整數值
bigint
8 位元組
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)
(0,18 446 744 073 709 551 615)
極大整數值
float
4 位元組
(-3.402 823 466 e+38,-1.175 494 351 e-38),0,(1.175 494 351 e-38,3.402 823 466 351 e+38)
0,(1.175 494 351 e-38,3.402 823 466 e+38)
單精度浮點數值
double
8 位元組
(-1.797 693 134 862 315 7 e+308,-2.225 073 858 507 201 4 e-308),0,(2.225 073 858 507 201 4 e-308,1.797 693 134 862 315 7 e+308)
0,(2.225 073 858 507 201 4 e-308,1.797 693 134 862 315 7 e+308)
雙精度浮點數值
decimal
對decimal(m,d) ,如果m>d,為m+2否則為d+2
依賴於m和d的值
依賴於m和d的值
小數值日期型別
表示時間值的日期和時間型別為datetime、date、timestamp、time和year。
型別大小
(位元組)範圍格式用途
date
1000-01-01/9999-12-31
yyyy-mm-dd
日期值time
'-838:59:59'/'838:59:59'
hh:mm:ss
時間值或持續時間
year
1901/2155
yyyy
年份值datetime
1000-01-01 00:00:00/9999-12-31 23:59:59
yyyy-mm-dd hh:mm:ss
混合日期和時間值
timestamp
1970-01-01 00:00:00/2038
結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2023年1月19日 凌晨 03:14:07
yyyymmdd hhmmss
混合日期和時間值,時間戳
字串型別
指char、varchar
注意:char和varchar括號內的引數指的都是字元的長度
char型別:定長,簡單粗暴,浪費空間,訪問速度快
字元長度範圍:0-255(乙個中文是乙個字元,是utf8編碼的3個位元組)
儲存:儲存char型別的值時,會往右填充空格來滿足長度
例如:指定長度為10,存》10個字元則報錯,存<10個字元則用空格填充直到湊夠10個字元儲存
檢索:在檢索或者說查詢時,查出的結果會自動刪除尾部的空格,除非我們開啟pad_char_to_full_length sql模式
varchar型別:變長,精準,節省空間,訪問速度慢
字元長度範圍:0-65535(如果大於21845會提示用其他型別 。mysql行最大限制為65535位元組,字元編碼為utf-8
儲存:varchar型別儲存資料的真實內容,不會用空格填充,如果'ab ',尾部的空格也會被存起來
強調:varchar型別會在真實資料前加1-2bytes的字首,該字首用來表示真實資料的bytes位元組數(1-2bytes最大表示65535個數字,正好符合mysql對
row的最大位元組限制,即已經足夠使用)
如果真實的資料<255bytes則需要1bytes的字首(1bytes=8bit 2**8最大表示的數字為255)
如果真實的資料》255bytes則需要2bytes的字首(2bytes=16bit 2**16最大表示的數字為65535)
檢索:尾部有空格會儲存下來,在檢索或者說查詢時,也會正常顯示包含空格在內的內容
列舉型別與集合型別
欄位的值只能在給定範圍中選擇,如單選框,多選框
enum 單選只能在給定的範圍內選乙個值,如性別 *** 男male/女female
set 多選 在給定的範圍內可以選擇乙個或乙個以上的值(愛好1,愛好2,愛好3...)
完整性約束
not null - 不可空 de****t 預設值為
unqiue 唯一性
聯合唯一:create table service(id int primary key auto_increment,name varchar(20),host varchar(15) not null,port int not null,unique(host,port));
primary key:單單從約束角度去看,primary key就等同於not null unique
強調(******)
1、一張表中必須有,並且只能有乙個主鍵
2、一張表中都應該有乙個id欄位,而且應該把id欄位做成主鍵
聯合主鍵 create table t19(ip char(15),port int,primary key(ip,port));
MySQL MySQL資料庫表的join操作
1.引入 我們的開發需求中,會經常使用到倆張資料庫表的關聯操作,根據我們不同的需求,需要對這倆張表進行不同的操作。無論我們怎麼樣操作,其結果都是這倆張表裡面的內容。我們通過join的操作,可以獲取資料庫表裡面的任何內容。下面,我們根據倆張資料庫表進行理解。2.建立測試資料庫表 1 建立員工表 emp...
雜湊表mysql MySQL中雜湊表
也稱為雜湊表 由直接定址表改進而來.先看直接定址表 當關鍵字的全域u比較小時,直接定址是一種簡單而有效的技術。加入某應用要用到乙個動態集合,其中每個元素都有乙個取自全域u 的關鍵字。同時假設沒有兩個元素具有相同的關鍵字 用乙個陣列 即直接定址表 t 0.m 1 表示動態集合,其中每個位置 或稱槽或桶...
mysql mysql分表和表分割槽詳解
為什麼要分表和分割槽?日常開發中我們經常會遇到大表的情況,所謂的大表是指儲存了百萬級乃至千萬級條記錄的表。這樣的表過於龐大,導致資料庫在查詢和插入的時候耗時太長,效能低下,如果涉及聯合查詢的情況,效能會更加糟糕。分表和表分割槽的目的就是減少資料庫的負擔,提高資料庫的效率,通常點來講就是提高表的增刪改...