MySQL詳解3.DDL語法

一年又一年璧函,字節(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 整型

image.png
整型后面的數(shù)字INT(M)
  1. 整數(shù)型的數(shù)值類型已經(jīng)限制了取值范圍,有符號整型和無符號整型都有闸盔,而M值并不代表可以存儲的數(shù)值字符長度悯辙,它代表的是數(shù)據(jù)在顯示時顯示的最小長度.
  2. 當(dāng)存儲的字符長度超過M值時,沒有任何的影響迎吵,只要不超過數(shù)值類型限制的范圍躲撰;
  3. 當(dāng)存儲的字符長度小于M值時,只有在設(shè)置了ZEROFILL用0來填充击费,ALTER TABLE tb_name MODIFY COLUMN col_name INT(5) ZEROFILL;才能夠看到效果拢蛋。換句話就是說,沒有ZEROFILL蔫巩,M值就是無用的谆棱。
放入數(shù)值超出范圍
  1. 默認(rèn)情況下不會報錯快压,如果插入的超出了范圍,那么會插入最大/最小值础锐。
  2. 如果限制為嚴(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:009999-12-31 23:59:59训桶。
  • TIMESTAMP類型同樣包含日期和時間,范圍從1970-01-01 00:00:01 UTC2038-01-19 03:14:07 UTC酣倾。
DATE

當(dāng)你只需要日期值而不需要時間部分時應(yīng)使用DATE類型舵揭。MySQL用YYYY-MM-DD格式檢索和顯示DATE值。支持的范圍是1000-01-019999-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 字段名 字段類型 [約束條件]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市杠输,隨后出現(xiàn)的幾起案子赎败,更是在濱河造成了極大的恐慌,老刑警劉巖蠢甲,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僵刮,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹦牛,警方通過查閱死者的電腦和手機(jī)搞糕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來能岩,“玉大人寞宫,你說我怎么就攤上這事±椋” “怎么了辈赋?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長膏燕。 經(jīng)常有香客問我钥屈,道長,這世上最難降的妖魔是什么坝辫? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任篷就,我火速辦了婚禮,結(jié)果婚禮上近忙,老公的妹妹穿的比我還像新娘竭业。我一直安慰自己智润,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布未辆。 她就那樣靜靜地躺著窟绷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咐柜。 梳的紋絲不亂的頭發(fā)上兼蜈,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音拙友,去河邊找鬼为狸。 笑死,一個胖子當(dāng)著我的面吹牛遗契,可吹牛的內(nèi)容都是我干的辐棒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼姊途,長吁一口氣:“原來是場噩夢啊……” “哼涉瘾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捷兰,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤立叛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贡茅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秘蛇,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年顶考,在試婚紗的時候發(fā)現(xiàn)自己被綠了赁还。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡驹沿,死狀恐怖艘策,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渊季,我是刑警寧澤朋蔫,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站却汉,受9級特大地震影響驯妄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜合砂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一青扔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦微猖、人聲如沸谈息。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黎茎。三九已至,卻和暖如春当悔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背踢代。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工盲憎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胳挎。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓饼疙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親慕爬。 傳聞我的和親對象是個殘疾皇子窑眯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355