數據庫是存儲數據庫對象的倉庫,數據庫的基本對象是表,表用來存儲數據。關於數據的操作也就是我們常說的CRUD,C指的是CREATE(插入數據記錄)、R指的是READ(查詢數據記錄)、U指的是UPDATE(更新數據記錄)、D指的是DELETE(刪除數據記錄)。
1、插入數據記錄
1.1完整插入數據記錄
SQL語法:INSET INTO table_name(filed1,filed2…,filedn) VALULES (value1,value2…,valuen),其中filed1,filed2…,filedn為表table_name 中的所有的字段,后面對應的每一個對應的值,valuen和filedn的數據類型必須一致否則會報錯。filedn的順序可以隨意調整,只要保證后面的valuen和filedn一致即可。
例如:INSERT INTO t_dept(deptno,dname,address) VALUES (7,'SUN','Hebei');
當插入所有的數據字段的時候,也可以縮寫。SQL語法:INSET INTO table_name VALULES (value1,value2…,valuen),這種方式使用起來更加簡潔,但是value的值的順序必須和表中字段的順序一致才可以。
1.2、插入部分記錄數據
可以插入指定字段的部分的記錄數據,
例如:INSERT INTO t_dept(deptno,dname) VALUES (8,'SUN');
注意:如果設置類自動增加約束的字段是不需要插入值的,具有默認值約束的字段如果不插入值的時候會插入默認值。
1.3、插入多條數據記錄
SQL語法:INSET INTO table_name(filed1,filed2…,filedn)
VALULES (value11,value12…,value1n),
VALULES (value21,value22…,value2n),
…
VALULES (valuem1,valuem2…,valuemn),
除此還有一種SQL語法:
INSET INTO table_name
VALULES (value11,value12…,value1n),
VALULES (value21,value22…,value2n),
…
VALULES (valuem1,valuem2…,valuemn),
同理類推,也可以插入多條部分數據記錄。
1.4、插入查詢結果
SQL語法:INSET INTO table_name(filed1,filed2…,filedn)
SELECT filed11,filed12…,filed1n FROM table_name2
WHERE CONDITION
在SQLyog軟件界面中也可以插入數據,右鍵表——>打開表,
直接雙擊編輯,或者點擊表格上方的按鈕
,新增數據行按鈕,編輯完成后,點擊保存按鈕。成功保存數據。
刷新數據后,查看數據是否成功增加。
2、更新數據記錄
SQL語法:UPDATE table_name SET filed1=value1,…,fieldn=valuen WHERE CONDITION; 更新滿足條件的數據記錄。
SQL語法:UPDATE table_name SET filed1=value1,…,fieldn=valuen ,更新所有的數據記錄。
通過SQLyog軟件,也可以更新數據記錄,右鍵表——>打開表,
如果已經修改過數據后,在右下角會提示,“數據已修改但沒有存儲”,點擊保存。
3、刪除數據記錄
SQL語法:DELETE FROM table_name WHERE CONDITION,刪除滿足條件的數據記錄。
SQL語法:DELETE FROM table_name ,刪除所有的表數據記錄。
通過SQLyog軟件,刪除數據記錄,右鍵表——>打開表,選中要刪除的行數據,點擊刪除按鈕,確定后,成功刪除數據。
4、MySQL的運算符
4.1、算數運算符
+、-、*、/、(DIV)、%、(MOD)
注意:/和DIV都是除法運算符,/ 結果默認保存四位小數結果,DIV 默認保存整數結果。
4.2、比較運算符
> 大於 < 小於 = <=> 等於 != <> 不等於 >= 大於等於 <= 小於等於 BETWEEN AND 在指定范圍內 IS NULL 為空 IN 在指定的集合 LIKE 通配符匹配 REGEXP 正則表達式匹配
注意:比較運算符=不能操作NULL,而比較運算符<=>可以操作NULL,而!= 和<>都不可以操作NULL,
例如:SELECT 1<=>NULL,NULL<=>NULL,1=NULL,NULL=NULL,1!=NULL,NULL!=NULL,1<>NULL,NULL<>NULL
下面,我們詳細的介紹一下正則表達式,通過模式去匹配一類字符串。
^ 匹配字符串的開始部分
$ 匹配字符串的結束部分
. 匹配字符串中的任意一個字符
[字符集合] 匹配字符集合中的任意一個字符
[^字符集合] 匹配字符集合外的任意一個字符
str1|str2|str3 匹配str1、str2、str3的任意一個字符串
* 匹配字符,包含0個和1個
+ 匹配字符,包含1個
字符串{N} 字符串N次
字符串{M,N} 字符串至少出現M次,最多出現N次
4.2.1、$可以比較是否是以特定的字符或者是字符串結尾的
SELECT 'sun' REGEXP 'n$' ,'sun' REGEXP 'sn$','sun' REGEXP 'un$',第一個判斷是否是以字母n為結尾,第二個判斷是否是以字母sn結尾,第三個判斷是否是以字母un結尾。結果如下,1表示true,0表示false。
4.2.2、^可以比較是否是以特定的字符或者是字符串開頭的
SELECT 'sun' REGEXP '^s' ,'sun' REGEXP '^sn','sun' REGEXP '^su'
4.2.3、. 比較是否包含一個字符
SELECT 'sun' REGEXP '^s.n$' ,'sun' REGEXP '^s..n'
4.2.4、[]、[^]可以實現比較是否包含指定字符串中的任意一個字符或者是指定字符串外的任意一個字符
SELECT 'sunying' REGEXP '[abs]' ,'sunying' REGEXP '[a-z]','sunying' REGEXP '[^abc]','sunying' REGEXP '[^a-z]'
解釋一下,'sunying' REGEXP '[abs]' 表示sunying字符串中是否包含字符串abs中的任意一個,因為包含s返回1;同理a-z表示a到z的所有的字符串,返回1;
'sunying' REGEXP '[^abc]'表示sunying字符串是否包含abc三個以外的字符串,返回1;因為sunying都在a-z之間所以'sunying' REGEXP '[^a-z]'返回0;
4.2.5、*、+比較是否包含多個指定的字符
4.2.6、{m}、{m,n}比較是否包含多個指定的字符串
SELECT 'sunying' REGEXP 's{3}' ,'sunsunying' REGEXP 'sun{1,2}','sunsunying' REGEXP 'sun{3,4}'
4.3、邏輯運算符
&& AND 與、|| OR或、! NOT非、XOR異或
注意:與操作如果有一個操作數為0,則返回結果為0;如果一個操作數為NULL,另一個不為0,則返回NULL;
或操作如果有一個操作數不為0且不為NULL,返回1.如果有NULL值,且另一個操作數為0,返回NULL;
非操作,如果有NULL值返回NULL;
異或操作符,兩個同時為真或者是同時為假的時候,返回0。否則返回1。如果有一個操作數為NULL,則返回為NULL;
4.5、位運算符
& 按位與 | 按位或 ~ 按位取反 ^ 按位異或 << 按位左移 >> 按位右移
SELECT 5&6,5|6,~4,4^5,5<<4,5>>2
5&6,5的二進制101,6的二進制110,5&6運算結果為100,也就是4。
5|6,5的二進制101,6的二進制110,5|6運算結果為111,也就是7。
~4,4的二進制100,按位取反,MySQL中用8個字節也即是64位表示。4的二進制真實是 61個0+100,按位取反的結果就是,61個1+011。
4^5,5的二進制101,4的二進制100,結果001,也即是1.
按位左移,5的二進制101,左移四位,右邊補0,1010000,也就是80.
按位右移,5的二進制101,右移兩位,左邊補0,001,也就是1。
5、MySQL常用函數
MySQL的主要函數包含字符串函數、數值函數、日期時間函數、系統信息函數。
由於不同的數據庫軟件都有自己支持的特有的函數,所以,函數的移植性不強。
5.1、字符串函數
5.1.1、合並函數
CONCAT(s1,s2,…,sn)合並字符串,如果參數中有null,則返回null;
CONCAT_WS(SEP,s1,s2…,sn) 合並字符串,並且按照分隔符串聯起來,如果參數中有NULL值,直接忽略該參數。
5.1.2、比較字符串大小
STRCMP(s1,s2),如果s1>s2,返回1。相等返回0,小於返回-1。
5.1.3、獲取字符串長度
LENGTH() CHAR_LENGTH()
注意:LENGTH表示字符所占的字節長度,CHAR_LENGTH表示字符串的個數。
5.1.4、大小寫轉換函數
UPPER() UCASE() 將字符串轉換成大寫
LOWER() LCASE()將字符串轉換成小寫
5.1.5、截取字符串函數
LEFT(str,num)從左邊截取num個字符,
RIGHT(str,num)從右變截取num個字符,
SUBSTRING(str,num,len)從地num個位置開始的len長度的字符串,MySQL下標是從1開始的。同MID(str,num,len)
5.1.6、去除首尾空格
LTRIM(str) 去除左邊空格
RTRIM(str) 去除右邊空格
TRIM(str) 去除左右兩邊空格
5.1.7、替換字符串
INSERT(str,pos,len,newstr)
REPLACE(str,oldstr,newstr)
5.2、數值函數
5.2.1、獲取隨機數
RAND()、RAND(x),其中RAND()是完全隨機函數,RAND(x)隨機數是相同的。
5.2.2、獲取整數函數
CEIL(x) 返回大於或者等於x的最小整數。
FLOOR(x) 返回小於或者等於x的最大整數。
5.2.3、截取數值函數
TRUNCATE(x,y) 返回數值x的小數點后y位的值。如果y為負數,則表示小數點左邊截取y位。
5.2.4、四舍五入函數
ROUND(x) 數值x經過四舍五入操作后的數值
ROUND(x,y)保留數值x小數點后y位的數值,四舍五入。同樣如果y為負數,表示小數點左邊。
5.3、日期時間函數
5.3.1、獲取當前日期和時間的函數
NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE()
5.3.2、獲取當前日期
CURDATE(),CURRENT_DATE()
這兩個函數只會返回日期部分數據
5.3.3、獲取當前時間
CURTIME(),CURRENT_TIME()
這兩個函數只會返回時間部分數據
5.3.4、不同方式顯示日期和時間
UNIX_TIMESTAMP() 以UNIX格式顯示當前時間
YEAR(), 獲取年
QUARTER(), 季度
MONTH(),月 MONTHNAME() 顯示月份的名字
WEEK(),星期
DAYOFMONTH(),該月第幾天,DAYOFYEAR(),該年的第幾天
HOUR(),小時
MINUTE(),分
SECOND()秒
上述函數還有一個通用的表達方式 EXTRACT(type FROM date)
例如:
SELECT EXTRACT(YEAR FROM NOW()),EXTRACT(QUARTER FROM NOW()),
EXTRACT(MONTH FROM NOW()),EXTRACT(WEEK FROM NOW()),
EXTRACT(HOUR FROM NOW()),EXTRACT(MINUTE FROM NOW()),
EXTRACT(SECOND FROM NOW())
5.3.5、與指定的日期時間操作
ADDDATE(),SUBDATE(),增加減少日期
ADDTIME(),SUBTIME(),增加減少時間
5.4、系統信息函數
VERSION(),獲取數據庫的版本信息
DATABASE(),獲取數據庫名
USER(),獲取用戶名
LAST_INSERT_ID()獲取最后一條自動插入的ID
PASSWORD() 給字符串加密