一年又一年璧函,字節(jié)跳動 Lark(飛書) 研發(fā)團(tuán)隊(duì)又雙叒叕開始招新生啦项贺!
【內(nèi)推碼】:GTPUVBA
【內(nèi)推鏈接】:https://job.toutiao.com/s/JRupWVj
【招生對象】:20年9月后~21年8月前 畢業(yè)的同學(xué)
【報名時間】:6.16-7.16(提前批簡歷投遞只有一個月抓住機(jī)會哦!)
【畫重點(diǎn)】:提前批和正式秋招不矛盾醋界!面試成功茂翔,提前鎖定Offer凳兵;若有失利,額外獲得一次面試機(jī)會,正式秋招開啟后還可再次投遞矮瘟。
點(diǎn)擊進(jìn)入我的博客
1 數(shù)據(jù)庫
1.1 創(chuàng)建數(shù)據(jù)庫
創(chuàng)建語句
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification]
create_specification:
- 字符集設(shè)置:
[DEFAULT] CHARACTER SET [=] charset_name
或者簡寫為[DEFAULT] CHARSET [=] charset_name
瞳脓。一般為utf8或utf8mb4。 - 排序的規(guī)則:
[default] COLLATE [=] collation_name
澈侠。一般為utf8_unicode_ci
劫侧。對于MySQL中那些字符類型的列,如VARCHAR哨啃,CHAR烧栋,TEXT類型的列,都需要有一個COLLATE類型來告知MySQL如何對該列進(jìn)行排序和比較拳球。簡而言之劲弦,COLLATE會影響到ORDER BY語句的順序,會影響到WHERE條件中大于小于號篩選出來的結(jié)果醇坝,會影響DISTINCT邑跪、GROUP BY、HAVING語句的查詢結(jié)果呼猪。另外画畅,MySQL建索引的時候,如果索引列是字符類型宋距,也會影響索引創(chuàng)建轴踱,只不過這種影響我們感知不到⊙枋辏總之淫僻,凡是涉及到字符類型比較或排序的地方,都會和COLLATE有關(guān)壶唤。
{A|B} 表示選擇其中之一雳灵;[XXX]表示[]中的內(nèi)容是可選的
1.2 刪除數(shù)據(jù)庫
DROP DATABASE 庫名
1.3 選擇數(shù)據(jù)庫
USE 庫名
2 數(shù)據(jù)類型
2.1 整型
整型后面的數(shù)字INT(M)
- 整數(shù)型的數(shù)值類型已經(jīng)限制了取值范圍,有符號整型和無符號整型都有闸盔,而M值并不代表可以存儲的數(shù)值字符長度悯辙,它代表的是數(shù)據(jù)在顯示時顯示的最小長度.
- 當(dāng)存儲的字符長度超過M值時,沒有任何的影響迎吵,只要不超過數(shù)值類型限制的范圍躲撰;
- 當(dāng)存儲的字符長度小于M值時,只有在設(shè)置了ZEROFILL用0來填充击费,
ALTER TABLE tb_name MODIFY COLUMN col_name INT(5) ZEROFILL;
才能夠看到效果拢蛋。換句話就是說,沒有ZEROFILL蔫巩,M值就是無用的谆棱。
放入數(shù)值超出范圍
- 默認(rèn)情況下不會報錯快压,如果插入的超出了范圍,那么會插入最大/最小值础锐。
- 如果限制為嚴(yán)格模式
STRICT_ALL_TABLES
嗓节,插入超出范圍會報錯
2.2 定點(diǎn)數(shù)
DECIMAL和NUMERIC類型在MySQL中視為相同的類型。它們用于保存必須為確切精度的值皆警。
(M,D)的細(xì)節(jié)
- DECIMAL(M,D)拦宣,其中M表示十進(jìn)制數(shù)字總的個數(shù),D表示小數(shù)點(diǎn)后面數(shù)字的位數(shù)信姓。
- M的取值范圍為1~65鸵隧,取0時會被設(shè)為默認(rèn)值,超出范圍會報錯意推。
- D的取值范圍為0~30豆瘫,而且必須<=M,超出范圍會報錯菊值。
- M的默認(rèn)取值為10外驱,D默認(rèn)取值為0。
2.3 浮點(diǎn)數(shù)
浮點(diǎn)數(shù)是用來表示實(shí)數(shù)的一種方法腻窒,它用 M(尾數(shù)) * B( 基數(shù))的E(指數(shù))次方來表示實(shí)數(shù)昵宇,相對于定點(diǎn)數(shù)來說,在長度一定的情況下儿子,具有表示數(shù)據(jù)范圍大的特點(diǎn)瓦哎。
- FLOAT(M,D):占4個字節(jié)(1位符號位 8位表示指數(shù) 23位表示尾數(shù))
- DOUBLE(M,D):占8個字節(jié)(1位符號位 11位表示指數(shù) 52位表示尾數(shù))
(M,D)的細(xì)節(jié)
- (M,D)表示一共顯示M位整數(shù),其中D位位于小數(shù)點(diǎn)后面
- FLOAT和DOUBLE中的M和D的取值默認(rèn)都為0柔逼,即除了最大最小值蒋譬,不限制位數(shù);
- M取值范圍為[0, 255]
- D取值范圍為[0, 30]愉适,同時必須<=M
- FLOAT只保證6位有效數(shù)字的準(zhǔn)確性犯助,所以FLOAT(M,D)中,M<=6時儡毕,數(shù)字通常是準(zhǔn)確的也切。如果M和D都有明確定義,其超出范圍后的處理同DECIMAL腰湾。
- DOUBLE只保證16位有效數(shù)字的準(zhǔn)確性,所以DOUBLE(M,D)中疆股,M<=16時费坊,數(shù)字通常是準(zhǔn)確的。如果M和D都有明確定義旬痹,其超出范圍后的處理同DECIMAL附井。
2.4 CHAR和VARCHAR類型
CHAR類型是定長的讨越,CHAR值會根據(jù)需要采用空格進(jìn)行填充以方便比較。
VARCHAR類型用于存儲可變長字符串永毅,是最常見的字符串?dāng)?shù)據(jù)類型把跨。
VARCHAR的存儲空間
- VARCHAR需要使用1或2個額外字節(jié)記錄字符串的長度
- 如果列的最大長度小于或等于255字節(jié),則只使用1個字節(jié)表示沼死,否則使用2個字節(jié)着逐。
- InnoDB引擎會把過長的VARCHAR存儲為BLOB
字符串末尾的空格
- VARCHAR:在5.0或者更高版本,MySQL在存儲和檢索時會保留末尾空格意蛀。但在之前的版本耸别, MySQL會剔除末尾空格。
- CHAR:會刪除所有的末尾空格县钥。
2.5 BINARY和VARBINARY
BINARY和VARBINARY類型類似于CHAR和VARCHAR類型秀姐,而是二進(jìn)制字符串,所以它們沒有字符集若贮,并且排序和比較基于列值字節(jié)的數(shù)值值省有。二進(jìn)制字符串和常規(guī)字符串非常相似,但它存儲的是字節(jié)碼而不是字符谴麦。
填充與裁剪
- 當(dāng)保存BINARY值時蠢沿,在它們右邊填充0X00(零字節(jié))值以達(dá)到指定長度。取值時不刪除尾部的字節(jié)细移。
- 對于VARBINARY搏予,插入時不填充字符,選擇時不裁剪字節(jié)弧轧。
2.6 BLOB和TEXT
BLOB和TEXT都是為存儲很大的數(shù)據(jù)而設(shè)計的字符串?dāng)?shù)據(jù)類型雪侥,分別采用二進(jìn)制和字符方式存儲。
具體類型
- 它們分別屬于兩組不同的數(shù)據(jù)類型家族精绎,字符類型是TINYTEXT速缨、SMALLTEXT、TEXT,代乃、MEDIUMTEXT旬牲、LONGTEXT;對應(yīng)的二進(jìn)制類型是TINYBLOB搁吓、SMALLBLOB原茅、BLOB、MEDIUMBLOB堕仔、L0NGBLOB
- BLOB是SMALLBLOB的同義詞擂橘,TEXT是SMALLTEXT的同義詞。
BLOB/TEXT與VARBINARY/VARCHAR異同點(diǎn)
- 當(dāng)保存或檢索BLOB和TEXT列的值時不刪除尾部空格摩骨。(這與VARBINARY和VARCHAR列相同)通贞。
- 比較時將用空格對TEXT進(jìn)行擴(kuò)充以適合比較的對象朗若,正如CHAR和VARCHAR。
- 對于BLOB和TEXT列的索引昌罩,必須指定索引前綴的長度哭懈。對于CHAR和VARCHAR,前綴長度是可選的茎用。
- BLOB和TEXT列不能有默認(rèn)值遣总。
2.7 ENUM
MySql中的ENUM是一個字符串對象,其值來自表創(chuàng)建時在列規(guī)定中顯式枚舉的一列值绘搞。ENUM最多可以有65,535個元素彤避。
空字符串和NULL
- 如果你將一個非法值插入ENUM(即允許的值列之外的字符串),將插入空字符串以作為特殊錯誤值夯辖。該字符串與“普通”空字符串不同琉预,該字符串有數(shù)值0。
- 如果將ENUM列聲明為允許NULL蒿褂,NULL值則為該列的一個有效值圆米,并且默認(rèn)值為NULL。如果ENUM列被聲明為NOT NULL啄栓,其默認(rèn)值為允許的值列的第1個元素娄帖。
值的索引規(guī)則
- 來自列規(guī)定的允許的值列中的值從1開始編號。
- 空字符串錯誤值的索引值是0昙楚。
SELECT * FROM tb_name WHERE enum_col=0
- NULL值的索引是NULL近速。
- ENUM值根據(jù)索引編號進(jìn)行排序。例如堪旧,對于ENUM('A'削葱,'B'),'A'排在'B'前面淳梦,但對于ENUM('B'析砸,'A'),'B'排在'A'前面爆袍。
- 空字符串排在非空字符串前面首繁,并且NULL值排在所有其它枚舉值前面。
2.8 位數(shù)據(jù)類型
SET類型
SET是一個字符串對象陨囊,可以有零或多個值弦疮,其值來自表創(chuàng)建時規(guī)定的允許的一列值。SET最多可以設(shè)置64個值蜘醋。
BIT類型
BIT數(shù)據(jù)類型可用來保存位字段值挂捅。BIT(M)類型允許存儲M位值。M范圍為1~64堂湖,默認(rèn)為1闲先。
如果存入一個BIT類型的值,位數(shù)少于M值无蜂,則左補(bǔ)0伺糠。
2.9 日期時間類型
DATETIME和TIMESTAMP
- 當(dāng)你需要同時包含日期和時間信息的值時則使用DATETIME類型。MySQL以
YYYY-MM-DD HH:MM:SS
格式檢索和顯示DATETIME值斥季。支持的范圍為1000-01-01 00:00:00
到9999-12-31 23:59:59
训桶。 - TIMESTAMP類型同樣包含日期和時間,范圍從
1970-01-01 00:00:01 UTC
到2038-01-19 03:14:07 UTC
酣倾。
DATE
當(dāng)你只需要日期值而不需要時間部分時應(yīng)使用DATE類型舵揭。MySQL用YYYY-MM-DD
格式檢索和顯示DATE值。支持的范圍是1000-01-01
到 9999-12-31
躁锡。
TIME
MySQL以HH:MM:SS
格式檢索和顯示TIME值(或?qū)τ诖蟮男r值采用HHH:MM:SS
格式)午绳。
YEAR
YEAR類型是一個單字節(jié)類型用于表示年。MySQL以YYYY格式檢索和顯示YEAR值映之。范圍是1901到2155拦焚。
3 表操作
3.1 創(chuàng)建數(shù)據(jù)表
CREATE TABLE `tb_name` (
`col_name` 字段類型 [字段約束]
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.2 刪除數(shù)據(jù)表
DROP TABLE 表名;
3.3 清空數(shù)據(jù)表
TRUNCATE 表名
4 字段操作
4.1 增加字段
ALTER TABLE 表名 ADD COLUMN 列名 字段類型 [約束條件]
4.2 刪除字段
ALTER TABLE 表名 DROP COLUMN 列名
4.3 修改字段
修改字段名
ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段類型 [約束條件]
修改字段屬性
ALTER TABLE 表名 MODIFY 字段名 字段類型 [約束條件]