九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
SQL基礎(chǔ)入門:第3課:創(chuàng)建表及常見(jiàn)的數(shù)據(jù)類型

本節(jié)要點(diǎn)

再次從EXCEL表格說(shuō)起
創(chuàng)建表
常見(jiàn)的數(shù)據(jù)類型

再次從EXCEL表格說(shuō)起

因?yàn)閯?chuàng)建表相關(guān)的知識(shí)點(diǎn)還是比較多的,所以關(guān)于創(chuàng)建表,我打算分兩節(jié)課來(lái)講。本節(jié)課主要講解創(chuàng)建表的基本語(yǔ)法以及表中字段的常見(jiàn)數(shù)據(jù)類型。

在講解創(chuàng)建表的語(yǔ)法之前,我們先再次從上節(jié)課的EXCEL表格說(shuō)起。不知大家還記不記得上節(jié)課講到的深圳市第一中學(xué)的EXCEL,里面有三個(gè)SHEET頁(yè),分別是學(xué)校、老師、學(xué)生。

在EXCEL文件與數(shù)據(jù)庫(kù)的對(duì)比中,EXCEL就相當(dāng)于一個(gè)數(shù)據(jù)庫(kù),而一個(gè)SHEET頁(yè),就相當(dāng)于一個(gè)數(shù)據(jù)庫(kù)表,SHEET頁(yè)里的表頭就對(duì)應(yīng)于數(shù)據(jù)庫(kù)表的列。

在上節(jié)課中,我們使用MySQL-Front客戶端工具創(chuàng)建了一個(gè)mysqlstudy的數(shù)據(jù)庫(kù),并且在數(shù)據(jù)庫(kù)里創(chuàng)建了一張老師表(teacher)。這是創(chuàng)建數(shù)據(jù)庫(kù)和表的一種方式。

還有另外一種方式來(lái)創(chuàng)建表,就是我們本節(jié)課要講解的SQL語(yǔ)句。

創(chuàng)建表

使用SQL語(yǔ)句創(chuàng)建表,需要使用數(shù)據(jù)庫(kù)的關(guān)鍵字CREATE TABLE。關(guān)鍵字也叫保留字,是不能隨意使用的,不能作為對(duì)象名,比如不能作為表名、字段名等。

創(chuàng)建一個(gè)SHEET頁(yè)時(shí),我們需要指定SHEET頁(yè)的名稱、SHEET頁(yè)里表格的表頭,以及每一列需要存儲(chǔ)的數(shù)字格式。

創(chuàng)建一張表也是類似的,我們需要指定表名、字段名、字段的數(shù)據(jù)類型。比如下面這個(gè)語(yǔ)句創(chuàng)建了一張老師表(表名為teacher),它包含三個(gè)字段,分別是teacher_id、teacher_name、gender,字段類型分別為varchar(20)、varchar(50)、varchar(10)。

  1. CREATE TABLE teacher

  2. (

  3. teacher_id VARCHAR(20),

  4. teacher_name VARCHAR(50),

  5. gender VARCHAR(10)

  6. );

這里面有一些需要注意的地方,大家一定要記住。

表名和字段名不能使用中文(標(biāo)點(diǎn)符號(hào)也不能使用中文的);(一般為字母開(kāi)頭,字母、數(shù)字、下劃線組成的字符串)
CREATE TABLE關(guān)鍵字后跟上表名,字段名在括號(hào)中列出且以逗號(hào)分隔;
語(yǔ)句最后以分號(hào)結(jié)尾;
不區(qū)分大小寫(xiě),但最好關(guān)鍵字都大寫(xiě);按一定的規(guī)則縮進(jìn);
每個(gè)字段都需要設(shè)置數(shù)據(jù)類型;

對(duì)于第1條,常見(jiàn)的表名命名方式有:t_teacher、T_Teacher、tech。千萬(wàn)不要使用一些稀奇古怪的字符作為表名。

上面有講到,每個(gè)字段都需要設(shè)置數(shù)據(jù)類型。那什么是數(shù)據(jù)類型呢?他有什么作用呢?

常見(jiàn)的數(shù)據(jù)類型

數(shù)據(jù)類型,其實(shí)就是數(shù)據(jù)在數(shù)據(jù)庫(kù)里保存的格式,它決定了對(duì)應(yīng)的字段可以存儲(chǔ)什么格式的數(shù)據(jù),以及如何存儲(chǔ)這些數(shù)據(jù)。

常見(jiàn)的數(shù)據(jù)類型有以下幾類:

字符串類
數(shù)值類
日期和時(shí)間類
二進(jìn)制類

字符串類

字符串類,是最常見(jiàn)的數(shù)據(jù)類型?;究梢哉f(shuō)所有我們看到的符號(hào),都是字符串。所以,如果說(shuō)沒(méi)有特殊要求,所有字段都設(shè)置為字符串,也是沒(méi)問(wèn)題的。

舉一些例子,比如常見(jiàn)的學(xué)生的姓名、身份證、家庭地址、電話號(hào)碼,使用的電腦型號(hào),以及購(gòu)買的書(shū)名等。這些都是字符串。

而字符串,一般來(lái)說(shuō),又分為兩種。一種是定長(zhǎng)字符串,另一種是不定長(zhǎng)字符串。

定長(zhǎng)字符串:長(zhǎng)度固定的字符串類型,其長(zhǎng)度是在創(chuàng)建表時(shí)指定的。定義時(shí)使用關(guān)鍵字CHAR。

比如郵政編碼‘510623’,是6位的字符。如果向一個(gè)6位的定長(zhǎng)字符串類型的字段,只插入2位字符,則數(shù)據(jù)庫(kù)默認(rèn)會(huì)在2個(gè)字符末尾補(bǔ)4個(gè)空格,以補(bǔ)足6位。

不定長(zhǎng)字符串:長(zhǎng)度不固定的字符串類型,創(chuàng)建表時(shí)指定一個(gè)最大長(zhǎng)度,或不指定長(zhǎng)度。定義時(shí)使用關(guān)鍵字VARCHAR。

比如姓名,有2位、3位、4位甚至更長(zhǎng)的。比如:‘馮鞏’、‘周杰倫’、‘倉(cāng)央嘉措’、‘庫(kù)爾班-熱合曼’。

關(guān)于定長(zhǎng)字符串和不定長(zhǎng)字符串的區(qū)別,看下下面兩張圖,可能會(huì)更直觀一些。

  

定長(zhǎng)字符串就像左邊的膠全板一樣,每一張的大小尺寸都一樣(不一樣的話,會(huì)使用木屑等補(bǔ)足),搬運(yùn)起來(lái)也比較方便。而不定長(zhǎng)字符串,就像右邊的樹(shù)桿原木,長(zhǎng)度粗細(xì)比較隨意,堆疊在一起來(lái),就會(huì)產(chǎn)生很多縫隙,也不太好搬運(yùn)。

所以,定長(zhǎng)字符串具有處理性能高、產(chǎn)生較少的磁盤存儲(chǔ)碎片的優(yōu)點(diǎn),但占用的存儲(chǔ)可能會(huì)多些。而不定長(zhǎng)字符串,占用的存儲(chǔ)較少,但處理性能低,會(huì)產(chǎn)生較多的存儲(chǔ)碎片。

在創(chuàng)建表時(shí),具體使用哪種類型,還要看具體場(chǎng)景而定。不過(guò)隨著數(shù)據(jù)庫(kù)發(fā)展,存儲(chǔ)碎片的產(chǎn)生,對(duì)數(shù)據(jù)庫(kù)的性能影響也越來(lái)越小,所以使用VARCHAR也影響不大。

數(shù)值類

數(shù)值類數(shù)據(jù)類型也是一種非常常見(jiàn)的數(shù)據(jù)類型。在生活中也非常常見(jiàn),基本可以說(shuō),所有能夠度量的數(shù)值,都可以使用數(shù)值類數(shù)據(jù)類型來(lái)儲(chǔ)存。比如說(shuō),像年齡、身高、厚度、速度、利率、人數(shù)等,都可以理解為數(shù)值。

而數(shù)值數(shù)據(jù)類型又分為兩種。

整數(shù)數(shù)值:不帶小數(shù)點(diǎn)的數(shù)值。比如說(shuō),中國(guó)有4個(gè)直轄市;2016年深圳市常住人口有11988400人;或者說(shuō)某人今年的年齡是80歲等待。常見(jiàn)的保存整數(shù)數(shù)值的字段類型有SMALLINT、INT、BIGINT、DECIMAL(m)。

小數(shù)數(shù)值:帶小數(shù)點(diǎn)的數(shù)值。比如說(shuō),珠穆朗瑪峰的高度為8844.43米;銀行一年期定期存款利率為2.75%等。常見(jiàn)的保存小數(shù)數(shù)值的字段類型有FLOAT、DOUBLE、DECIMAL(m,d)。

日期和時(shí)間類

第三種是日期和時(shí)間類型,比如學(xué)校要開(kāi)學(xué)了,規(guī)定的報(bào)名日期9月1日;我們國(guó)家的國(guó)慶節(jié)10月1日;公司的下班時(shí)間17點(diǎn)30分;沿著操場(chǎng)跑一圈,使用秒表記錄的時(shí)間4分13秒;爬山時(shí),從開(kāi)始上山到最后下山中間經(jīng)過(guò)的時(shí)間間隔5小時(shí)25分鐘等,

而日期和時(shí)間類的數(shù)據(jù)類型,分為三種。

日期類型:只包含年、月、日的日期;比如,某人的出生日期為1990年1月3日;定義時(shí)使用關(guān)鍵字DATE。

時(shí)間類型:包含時(shí)、分、秒、毫秒的時(shí)間。比如,上班時(shí)間為08:30:00。定義時(shí)使用關(guān)鍵字TIME。

日期 時(shí)間類型:包含年、月、日、時(shí)、分、秒、毫秒的時(shí)間戳類型。比如,某人從銀行ATM機(jī)上取出1000元現(xiàn)金的時(shí)間是2017年9月2日12時(shí)35分11秒734毫秒。定義時(shí)使用關(guān)鍵字DATETIME、TIMESTAMP。

二進(jìn)制數(shù)據(jù)類型

最后簡(jiǎn)單說(shuō)一下二進(jìn)制數(shù)據(jù)類型。二進(jìn)制我們都知道,是0和1組成的一串?dāng)?shù)字。像我們常見(jiàn)的圖片、視頻、音頻、文檔等,底層都是使用二進(jìn)制保存的。所以打開(kāi)這類文件時(shí),才需要圖片瀏覽軟件、播放器、OFFICE軟件等。

有時(shí)候,我們也想把這類數(shù)據(jù)存入數(shù)據(jù)庫(kù),這時(shí)就需要使用到二進(jìn)制數(shù)據(jù)類型。在MySQL數(shù)據(jù)庫(kù),一般使用BLOB和TEXT類型來(lái)定義二進(jìn)制數(shù)據(jù)類型的字段。

但因?yàn)閿?shù)據(jù)庫(kù)處理這類數(shù)據(jù)效率并不高,而且數(shù)據(jù)量一大,會(huì)極大的影響數(shù)據(jù)庫(kù)的處理效率,所以一般都不建議在數(shù)據(jù)庫(kù)中使用這類數(shù)據(jù)類型。

設(shè)置字段默認(rèn)值

上面我們講了,在創(chuàng)建一張表時(shí),需要為表中的字段定義數(shù)據(jù)類型。這樣在向表中插入數(shù)據(jù)時(shí),就需要插入與對(duì)應(yīng)位置字段的字段類型一致的數(shù)據(jù),否則是會(huì)報(bào)錯(cuò)的。

但當(dāng)我們插入數(shù)據(jù)的時(shí)候,并不想或并不需要對(duì)某個(gè)字段賦值時(shí),如果字段有設(shè)置默認(rèn)值,則會(huì)以默認(rèn)值來(lái)填充該字段的值而不會(huì)導(dǎo)致錯(cuò)誤;比如,在網(wǎng)上下訂單時(shí),對(duì)于下訂單的日期字段,可以使用數(shù)據(jù)庫(kù)的系統(tǒng)變量“當(dāng)前日期”來(lái)默認(rèn)賦值,這樣就不需要在向訂單表插入訂單數(shù)據(jù)時(shí),單獨(dú)再對(duì)下訂單的日期字段進(jìn)行賦值。

另外,在向表中插入數(shù)據(jù)的時(shí)候,如果某個(gè)字段并沒(méi)有指定賦值為多少,而此時(shí)該字段也沒(méi)有賦默認(rèn)值,那么就會(huì)向該字段插入NULL值。而NULL值的使用效率并不高,并且使用起來(lái)也比較麻煩。

所以,為避免字段的值被插入NULL值,一般在表創(chuàng)建時(shí),都會(huì)為字段指定默認(rèn)值。

為字段指定默認(rèn)值時(shí),使用關(guān)鍵字DEFAULT。如下所示:

  1. CREATE TABLE teacher

  2. (

  3. teacher_id VARCHAR(20) DEFAULT '',

  4. teacher_name VARCHAR(50) DEFAULT '',

  5. gender VARCHAR(10) DEFAULT ''

  6. );

設(shè)置默認(rèn)值時(shí),有以下幾點(diǎn)需要注意:

表中所有的字段都可以設(shè)置默認(rèn)值;
默認(rèn)值的數(shù)據(jù)類型必須與字段保持一致;(不一致時(shí),數(shù)據(jù)庫(kù)雖然有時(shí)也會(huì)默認(rèn)做隱式類型轉(zhuǎn)換,但并不推薦這樣做。一方面是這樣做并不規(guī)范,另一方面是這樣做可能會(huì)導(dǎo)致未知的錯(cuò)誤)
除主鍵字段外,建議其他所有字段都設(shè)置默認(rèn)值;

那一般根據(jù)什么來(lái)決定字段應(yīng)該賦什么默認(rèn)值呢?

對(duì)于字符型字段來(lái)說(shuō),一般賦值為空字符串(也就是’’),或者具有某種業(yè)務(wù)含義的值。比如,對(duì)于性別字段,有三個(gè)取值,F(xiàn)-女,M-男,N-未知,當(dāng)向這個(gè)性別字段插入數(shù)據(jù)時(shí),可能并不知道性別是男還是女,那這時(shí),就可以定義默認(rèn)值為N-未知,代表我們并不知道這條數(shù)據(jù)記錄的值到底是多少。

對(duì)于數(shù)值型字段來(lái)說(shuō),一般賦值為0,或者具有某種業(yè)務(wù)含義的值,或者該字段所表示的業(yè)務(wù)含義的最大值或極大值。

對(duì)于日期和時(shí)間型呢,常見(jiàn)的賦值有系統(tǒng)當(dāng)前日期CURRENT_DATE、系統(tǒng)當(dāng)前時(shí)間CURRENT_TIME、系統(tǒng)當(dāng)前時(shí)間戳CURRENT_TIMESTAMP及NOW()等。

總的來(lái)說(shuō),我們都可以根據(jù)字段的業(yè)務(wù)含義來(lái)為字段賦默認(rèn)值。

下面是創(chuàng)建老師表、班級(jí)表、學(xué)生表的示例語(yǔ)句:

  1. CREATE TABLE teacher

  2. (

  3. teacher_id varchar(50) not null,

  4. teacher_name varchar(100) not null default '' ,

  5. gender varchar(10) not null default 'F',

  6. );

  7. CREATE TABLE class

  8. (

  9. class_id varchar(50) not null,

  10. class_name varchar(100) not null default ''

  11. );

  12. CREATE TABLE student

  13. (

  14. student_id varchar(50) not null,

  15. student_name varchar(100) not null default '',

  16. gender varchar(10) not null default '',

  17. age integer not null default 0 ,

  18. class_id varchar(50) not null default ''

  19. );

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MySQL數(shù)據(jù)類型和常用字段屬性總結(jié)
PHP教程(9)校對(duì)集+mysql數(shù)據(jù)類型+數(shù)據(jù)長(zhǎng)度限制+列屬性(null+默認(rèn)值+主鍵+自增長(zhǎng))
[MySQL]關(guān)于MySQL表設(shè)計(jì)應(yīng)該注意的問(wèn)題
MySQL數(shù)據(jù)庫(kù)基礎(chǔ)教程
MySQL數(shù)據(jù)庫(kù)基礎(chǔ):數(shù)據(jù)類型及列類型
第三部分:SQL數(shù)據(jù)類型與三值邏輯 - MS-SQL Server / 基礎(chǔ)類
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服