插入數(shù)據(jù)?就是向表中添加數(shù)據(jù)的時候吧??我總結(jié)了三種方法來添加數(shù)據(jù)呢??!你看看
創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站建設(shè)、成都做網(wǎng)站,集網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文平臺等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計(jì),讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計(jì)制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。
1. 添加:
Insert [into] table_name
Column_list
Values
( Expression ) [單引號]
2. 省略字段清單的insert 語句
Use [into] table_name
Values
(Experssion)
3. 省略values 清單的 insert 語句
Use [into] table_name1 (column_name1,column_name2,…)
[表名.列名]
Select (column_name1,column_name2,…)[表名.列名]
From table_name2
Where search_conditions
注:insert 表 和 select 表 的結(jié)果集的列數(shù)、列序、數(shù)據(jù)類型必須一致
按你說的,只要用第一種方法,不填寫可以填空值的那一項(xiàng)(即“Column_list”里)就可以了。
alter table 表名 modify 列名 not null;
你在建表時使用not null即可做到限制‘’這種空串的插入了。
‘’和null雖然本質(zhì)上不一樣,但‘’讀到數(shù)據(jù)庫時是被當(dāng)做null處理的。
將AND (`ziduan1` = ''OR `ziduan2` = '' OR `ziduan3` = '')
替換為
"" in(`ziduan1` , `ziduan2`, `ziduan3`)
空值是一種特殊的狀態(tài), 表示某一個字段"沒有被處理過"
幾乎在所有的數(shù)據(jù)庫中甚至是編程語言中, 空與非空都有其存在的意義, 舉個例子, 一個人員表中, 有一個年齡字段, 這個年齡字段如果為非 空, 則在不知道人員年齡的情況下, 數(shù)據(jù)無法入庫, 否則會顯示個奇怪的年齡(比如0歲, 或者-1歲等)
而有些情況澤不可以為空, 最常見的就是"主鍵", 比如身份證號之類的
"空值"是對null值的中文叫法,兩者同指一個東西。
我想樓主是想弄清楚null(空值)與零長度字符串''(或稱為空字符串)之間的區(qū)別。
在代碼里"零長度字符串"用一對沒有間隔的英文引號''表示,它的數(shù)據(jù)類型是明確的即屬于字符型,存儲"零長度字符串"是要占用物理磁盤空間的;
而null值其數(shù)據(jù)類型是未知的,它不會占用物理磁盤空間。
在不存在約束限制的情況我們可以將Null值插入任何數(shù)據(jù)類型的字段里,而零長度字符串''只能插入到字符型數(shù)據(jù)類型字段中,插入其它類型字段會報(bào)錯。
我們通過實(shí)測看看null(空值)與零長度字符串''(或稱為空字符長)之間的區(qū)別:
1)輸出所有的記錄
select * from students;
注意:此例輸出源表中的全部記錄,含null(空值)和零長度字符串''.
2)輸出電話為Null(空值)的記錄
select * from students where phone is null;
注意:此例只輸出含Null(空值)的記錄
3)輸出電話為零長度字符串的記錄
select * from students where phone='';
注意:此例只輸出含零長度字符串的記錄。
4)輸出電話不是零長度字符串的記錄
select * from students where phone'';
注意:此例MySQL的處理方式有些特別,連含Null值得記錄也排除掉了,這與MSSQL的處理方式有點(diǎn)不一致。
5)輸出電話不為空的記錄
select * from students where phone is not null;
注意:此例只要不含Null值的記錄都予以輸出
MySQL中的模式匹配(標(biāo)準(zhǔn)SQL匹配和正則表達(dá)式匹配)
1. 使用LIKE和NOT LIKE比較操作符(注意不能使用=或!=);
2. 模式默認(rèn)是忽略大小寫的;
3. 允許使用”_”匹配任何單個字符,”%”匹配任意數(shù)目字符(包括零字符);
MySQL還提供象UNIX實(shí)用程序的擴(kuò)展正則表達(dá)式模式匹配的格式:
1. 使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,他們是同義詞);
2. REGEXP模式匹配與被匹配字符的任何地方匹配,則匹配成功(即只要被匹配字符包含或者可以等于所定義的模式,就匹配成功);
不同于LIKE模式匹配,只有和整個值匹配,才匹配成功(即只有被匹配字符完全和所定義的模式匹配,才匹配成功)
3. REGEXP默認(rèn)也是不區(qū)分大小寫,可以使用BINARY關(guān)鍵詞強(qiáng)制區(qū)分大小寫;
如:SELECT * FROM pet WHERE name REGEXP BINARY ‘^B’;
4. 正則表達(dá)式為一個表達(dá)式,它能夠描述一組字符串。REGEXP操作符完成MySQL的擴(kuò)展正則表達(dá)式匹配。REGEXP實(shí)現(xiàn)的功能是如果被匹配字符中部分或完全符合所定義的表達(dá)式描述的字符,則表示匹配成功。
1)最簡單的正則表達(dá)式是不含任何特殊字符的正則表達(dá)式,如hello。
SELECT * FROM pet WHERE name REGEXP ‘hello’;表示的意思是如果name這列的某一行包含hello這個單詞,則匹配就成功了。(注意和LIKE的區(qū)別,LIKE要求name這列的某一行必須完全等于hello,才匹配成功)。
2)非平凡的正則表達(dá)式,除了含有最簡單表達(dá)式那些東西,還需要采用特殊的特殊結(jié)構(gòu),用到的字符,往下看。(因此,通常的正則表達(dá)式是普通單詞和這些正則表達(dá)式字符構(gòu)成的表達(dá)式)
5. 擴(kuò)展正則表達(dá)式的一些字符:
1) ‘.’匹配任何單個字符;
2) […]匹配在方括號內(nèi)的任何字符,可以使用’-’表示范圍,如[a-z],[0-9],而且可以混合[a-dXYZ]表示匹配a,b,c,d,X,Y,Z中的任何一個;(注意使用括號以及’|’的方法也可以達(dá)到相同的效果,如(a|b|c)匹配a,b,c中的任何一個);此外可以使用’^’表示否定,如[^a-z]表示不含有a-z中間的任何一個字符;
3) ‘*’表示匹配0個或多個在它前面的字符。如x*表示0個或多個x字符,.*表示匹配任何數(shù)量的任何字符;
4) 可以將模式定位必須匹配被匹配字符的開始或結(jié)尾,在匹配模式前加”^”:表示匹配從被匹配字符的最開頭開始,在匹配模式后加”$”:表示匹配要進(jìn)行到被匹配字符的最末尾。
5) ‘+’表示匹配1個或多個在它前面的字符。如a+表示1個或多個a字符。
6) ‘?’表示匹配0個或1個在它前面的字符。如a?表示0個或1個a字符。
7) ‘|’如de|abc表示匹配序列de或者abc。注意雖然[…]也可以表示匹配中的某一個,但是每次僅僅能表示單個字符及[a-bXYZ]實(shí)際每一次只代表了一個字符。
8) ()括號可以應(yīng)用在表達(dá)式中,使得更容易理解。
9) a{5}表示匹配共5個a,a{2,8}表示匹配2~8個a。
a*可以寫成a{0, } 第二個參數(shù)省略表示沒有上界;a+可以寫成a{1,};a?可以寫成a{0,1}
更準(zhǔn)確地講,a{n}與a的n個實(shí)例準(zhǔn)確匹配。a{n,}匹配a的n個或更多實(shí)例。a{m,n}匹配a的m~n個實(shí)例,包含m和n
m和n必須位于0~RE_DUP_MAX(默認(rèn)為255)的范圍內(nèi),包含0和RE_DUP_MAX。如果同時給定了m和n,m必須小于或等于n。
!--[if !supportLineBreakNewLine]--
!--[endif]--
10) 標(biāo)準(zhǔn)類別[:character_class:]:
常用的一些標(biāo)準(zhǔn)類別,一般在[]中使用,由于用在[]中故和[a-z]類似,每一次只能頂替一個字符。(這個有點(diǎn)類似perl里面定義的常用的一些標(biāo)準(zhǔn)類別:\w表示一個單詞字符即[a-zA-Z0-9];\W一個非單詞字符與\w相反; \d一個數(shù)字即[0-9];\D一個非數(shù)字;\s一個白空間字符即[\t\f\r\n];\f為換頁符;\S一個非白空間字符)
標(biāo)準(zhǔn)的類別名稱:
alnum
文字?jǐn)?shù)字字符
alpha
文字字符
blank
空白字符
cntrl
控制字符
digit
數(shù)字字符
graph
圖形字符
lower
小寫文字字符
圖形或空格字符
punct
標(biāo)點(diǎn)字符
space
空格、制表符、新行、和回車
upper
大寫文字字符
xdigit
十六進(jìn)制數(shù)字字符
使用實(shí)例:
SELECT 'justalnums' REGEXP '[[:alnum:]]+';解釋其中[[:alnum:]]由于[:alnum:]表示文字?jǐn)?shù)字字符,它又用在[]中,故[[:alnum:]]代表一個字符它為一個文字或者數(shù)字。后面的+號表示1個或多個這樣的文字或數(shù)字。
上述語句返回1.那是因?yàn)閖ustalnums中是由字母組成的。
11)字邊界:[[::]]表示開始,[[::]]表示結(jié)束:
其定義了一個單詞的開始和結(jié)束邊界,這個單詞為字字符,這樣[[::]]代表這個字字符前面的部分,[[::]]代表這個字字符后面的部分。字字符為alnum類的字母數(shù)字字符或下劃線(_);因此[[::]], [[::]]均代表不是字字符的字符,即只要不是字母數(shù)字字符以及下劃線(_)即可。因此其可以為什么都不是。因此[[::]]word[[::]]能夠匹配如下的所有情況:
即word單詞本身,word*** 解釋***代表不是字母數(shù)字以及_的任何字符(如,word-net);***word(如,micorsoft word);***word***(如,this is a word program.)
舉例:[[::]]word[[::]]:
SELECT 'a word a' REGEXP '[[::]]word[[::]]'; 結(jié)果為真SELECT 'a xword a' REGEXP '[[::]]word[[::]]'; 結(jié)果為假 最后注意的注意:要在正則表達(dá)式中使用特殊字符,需要在這些字符前面添加2個反斜杠’\’,舉例:SELECT '1+2' REGEXP '1+2'; 結(jié)果為0SELECT '1+2' REGEXP '1\+2'; 結(jié)果為0SELECT '1+2' REGEXP '1\\+2'; 結(jié)果為1解釋:這是因?yàn)镸ySQL解析程序解析該SQL語句時:首先將字符串’1\\+2’解析為1\+2;然后把1\+2當(dāng)作正則表達(dá)式,由正則表達(dá)式庫來解析,它代表1+2。因此需要加上2個反斜杠。 不要經(jīng)常犯加一個反斜杠的錯誤,加一個反斜杠會莫名其妙:如SELECT '1t2' REGEXP '1\t2';結(jié)果會返回1本來的意思是匹配1制表符\t以及2,但是由于只添加了一個\所以,解析以后編程了1t2,所以匹配成功。12)[.characters.]和[=character_class=] 參考資料:
MySQL的模式匹配
MySQL的正則表達(dá)式匹配
=========================================================================================================
正則表達(dá)式:
正則表達(dá)式是為復(fù)雜搜索指定模式的強(qiáng)大方式。
^
所匹配的字符串以后面的字符串開頭
mysql select "fonfo" REGEXP "^fo$"; - 0(表示不匹配)
mysql select "fofo" REGEXP "^fo"; - 1(表示匹配)
$
所匹配的字符串以前面的字符串結(jié)尾
mysql select "fono" REGEXP "^fono$"; - 1(表示匹配)
mysql select "fono" REGEXP "^fo$"; - 0(表示不匹配)
.
匹配任何字符(包括新行)
mysql select "fofo" REGEXP "^f.*"; - 1(表示匹配)
mysql select "fonfo" REGEXP "^f.*"; - 1(表示匹配)
a*
匹配任意多個a(包括空串)
mysql select "Ban" REGEXP "^Ba*n"; - 1(表示匹配)
mysql select "Baaan" REGEXP "^Ba*n"; - 1(表示匹配)
mysql select "Bn" REGEXP "^Ba*n"; - 1(表示匹配)
a+
匹配1個或多個a字符的任何序列。
mysql select "Ban" REGEXP "^Ba+n"; - 1(表示匹配)
mysql select "Bn" REGEXP "^Ba+n"; - 0(表示不匹配)
a?
匹配一個或零個a
mysql select "Bn" REGEXP "^Ba?n"; - 1(表示匹配)
mysql select "Ban" REGEXP "^Ba?n"; - 1(表示匹配)
mysql select "Baan" REGEXP "^Ba?n"; - 0(表示不匹配)
de|abc
匹配de或abc
mysql select "pi" REGEXP "pi|apa"; - 1(表示匹配)
mysql select "axe" REGEXP "pi|apa"; - 0(表示不匹配)
mysql select "apa" REGEXP "pi|apa"; - 1(表示匹配)
mysql select "apa" REGEXP "^(pi|apa)$"; - 1(表示匹配)
mysql select "pi" REGEXP "^(pi|apa)$"; - 1(表示匹配)
mysql select "pix" REGEXP "^(pi|apa)$"; - 0(表示不匹配)
(abc)*
匹配任意多個abc(包括空串)
mysql select "pi" REGEXP "^(pi)*$"; - 1(表示匹配)
mysql select "pip" REGEXP "^(pi)*$"; - 0(表示不匹配)
mysql select "pipi" REGEXP "^(pi)*$"; - 1(表示匹配)
{1} {2,3}
這是一個更全面的方法,它可以實(shí)現(xiàn)前面好幾種保留字的功能
a*
可以寫成a{0,}
a
可以寫成a{1,}
a?
可以寫成a{0,1}
在{}內(nèi)只有一個整型參數(shù)i,表示字符只能出現(xiàn)i次;在{}內(nèi)有一個整型參數(shù)i,
后面跟一個“,”,表示字符可以出現(xiàn)i次或i次以上;在{}內(nèi)只有一個整型參數(shù)i,
后面跟一個“,”,再跟一個整型參數(shù)j,表示字符只能出現(xiàn)i次以上,j次以下
(包括i次和j次)。其中的整型參數(shù)必須大于等于0,小于等于 RE_DUP_MAX(默認(rèn)是25
5)。 如果同時給定了m和n,m必須小于或等于n.
[a-dX], [^a-dX]
匹配任何是(或不是,如果使用^的話)a、b、c、d或X的字符。兩個其他字符之間的“-”字符構(gòu)成一個范圍,與從第1個字符開始到第2個字符之間的所有字符匹配。例如,[0-9]匹配任何十進(jìn)制數(shù)字 。要想包含文字字符“]”,它必須緊跟在開括號“[”之后。要想包含文字字符“-”,它必須首先或最后寫入。對于[]對內(nèi)未定義任何特殊含義的任何字符,僅與其本身匹配。
mysql select "aXbc" REGEXP "[a-dXYZ]"; - 1(表示匹配)
mysql select "aXbc" REGEXP "^[a-dXYZ]$"; - 0(表示不匹配)
mysql select "aXbc" REGEXP "^[a-dXYZ] $"; - 1(表示匹配)
mysql select "aXbc" REGEXP "^[^a-dXYZ] $"; - 0(表示不匹配)
mysql select "gheis" REGEXP "^[^a-dXYZ] $"; - 1(表示匹配)
mysql select "gheisa" REGEXP "^[^a-dXYZ] $"; - 0(表示不匹配)
[[.characters.]]
表示比較元素的順序。在括號內(nèi)的字符順序是唯一的。但是括號中可以包含通配符,
所以他能匹配更多的字符。舉例來說:正則表達(dá)式[[.ch.]]*c匹配chchcc的前五個字符
。
[=character_class=]
表示相等的類,可以代替類中其他相等的元素,包括它自己。例如,如果o和( )是
一個相等的類的成員,那么[[=o=]]、[[=( )=]]和[o( )]是完全等價(jià)的。
[:character_class:]
在括號里面,在[:和:]中間是字符類的名字,可以代表屬于這個類的所有字符。
字符類的名字有: alnum、digit、punct、alpha、graph、space、blank、lower、uppe
r、cntrl、print和xdigit
mysql select "justalnums" REGEXP "[[:alnum:]] "; - 1(表示匹配)
mysql select "!!" REGEXP "[[:alnum:]] "; - 0(表示不匹配)
[[::]]
[[::]]
分別匹配一個單詞開頭和結(jié)尾的空的字符串,這個單詞開頭和結(jié)尾都不是包含在alnum中
的字符也不能是下劃線。
mysql select "a word a" REGEXP "[[::]]word[[::]]"; - 1(表示匹配)
mysql select "a xword a" REGEXP "[[::]]word[[::]]"; - 0(表示不匹配)
mysql select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; - 1(表示
匹配)
要想在正則表達(dá)式中使用特殊字符的文字實(shí)例,應(yīng)在其前面加上2個反斜杠“\”字符。MySQL解析程序負(fù)責(zé)解釋其中一個,正則表達(dá)式庫負(fù)責(zé)解釋另一個。例如,要想與包含特殊字符“+”的字符串“1+2”匹配,在下面的正則表達(dá)式中,只有最后一個是正確的:
mysql SELECT '1+2' REGEXP '1+2'; - 0
mysql SELECT '1+2' REGEXP '1\+2'; - 0
mysql SELECT '1+2' REGEXP '1\\+2'; - 1
全文檢索:
====================================================================================================
在括號里面,在[:和:]中間是字符類的名字,可以代表屬于這個類的所有字符。字符類的名字有: alnum、digit、punct、alpha、graph、space、blank、lower、upper、cntrl、print和xdigit
mysql select "justalnums" REGEXP "[[:alnum:]]+"; - 1(表示匹配)
mysql select "!!" REGEXP "[[:alnum:]]+"; - 0(表示不匹配)
[[::]]
[[::]]
分別匹配一個單詞開頭和結(jié)尾的空的字符串,這個單詞開頭和結(jié)尾都不是包含在alnum中的字符也不能是下劃線。
mysql select "a word a" REGEXP "[[::]]word[[::]]"; - 1(表示匹配)
mysql select "a xword a" REGEXP "[[::]]word[[::]]"; - 0(表示不匹配)
mysql select "weeknights" REGEXP "^(weeweek)(knightsnights)$"; - 1(表示匹配)