2021-7-29 MySql的簡單使用
建立表格
先判斷users表是否存在,然後設定user_id為無符號(UNSIGNED)自動增長(AUTO_INCREMENT)的整型
並通過PRIMARY KEY設定user_id為主鍵
ENGINE是指儲存引擎為INNODB
CHARSET是指編碼格式為utf-8
CREATE TABLE IF NOT EXISTS `users` ( `user_id` INT UNSIGNED AUTO_INCREMENT, `user_password` VARCHAR (100) NOT NULL, PRIMARY KEY (`user_id`) ) ENGINE = INNODB DEFAULTCHARSET = utf8
刪除表格
DROP TABLE `users`
插入資料:由於user_id是自增的,所以給定值是0,給其他值會賦值上去
字串的值必須要加上單引號或者雙引號
INSERT INTO `users`(`user_id`,`user_password`) VALUES(0,'nihao')
查詢資料:條件user_id<20,查詢結果如下圖
SELECT * from `users` where `user_id`<20
BINARY的使用:
查詢時在where後面使用BINARY可以區分字母大小寫,否則不區分
select * from`users` where BINARY `user_password`='Nihao'; select * from `users` where `user_password`='Nihao'
LIMIT的使用:
第一條語句:查詢使用LIMIT 2時相當於獲取兩條資料,
第二條語句:使用LIMIT 1,2時相當於在第一條資料之後開始獲取兩條資料
第三條語句:LIMIT 1 OFFSET 2相當於從第二條資料之後開始獲取一條資料,注意與第二條語句是相反的
select * from `users` where `user_password`='Nihao' LIMIT 2; select* from `users` where `user_password`='Nihao' LIMIT 1,2; SELECT * from `users` LIMIT 1 OFFSET 2
使用LIke查詢:
%指代在這個字元前所有的字元,_指代單個字元
SELECT * from users where user_password LIKE '%明'; SELECT * from users where user_password LIKE '劉%'; SELECT * from users where user_password LIKE '%德%'; SELECT * from users where user_password LIKE '_明';
UNION的使用:
UNION:將不同表的相同列的相同值展示出來(不包含重複資料)
UNION ALL:將不同表的相同列的相同值展示出來(包含重複資料)
distinct:可以去除重複資料
SELECT class_id from users where user_password LIKE '%明' UNION SELECT class_id from classes; SELECT class_id from users where user_password LIKE '%明' UNION all SELECT class_id from classes;
查詢語句排序:根據order by 後面的欄位進行排列,預設asc(升序),而desc是降序
SELECT * from classes ORDER BY class_name desc;
轉碼:
如果字符集採用utf8的編碼格式,想要用拼音排序,先要轉碼
SELECT * from classes ORDER BY CONVERT(class_name using gbk) desc;
GROUP BY:分組查詢
select count(*) from users; select class_id,count(*) from users GROUP BY class_id;
with rollup:可以將group by的值最後再統計一遍
coalesce:如果括號內第一個值為空,後面的值會替代前面的值
select COALESCE(class_id,'總數') as '班級ID',count(*) as '人數' from users GROUP BY class_id WITH ROLLUP;
空值處理:
SELECT * from users where class_id is null; select * from users where class_id is not null; SELECT *,IFNULL(class_id,4) as '其他' from users;下圖是查詢出來的結果class_id和其他是同一個項,不同的處理方式,用4代替空值
正則表示式的使用
SELECT * from users where user_password REGEXP '^武';#^查詢以武開頭的所有資料# SELECT * from users where user_password REGEXP '易$';#$查詢以易結尾的所有資料# SELECT * from users where user_password REGEXP '蘇';#包含蘇的所有資料 SELECT * from users where user_password REGEXP '王.';#放在後面就是匹配前面的字元,放在前面就是匹配後面的字元,如王維,用'.維'或'王.' SELECT * from users where class_id REGEXP '[12]';#包含在[]內的單個字元,中文會出現問題 SELECT * from users where user_password REGEXP '[^蘇軾的]';#[^]查詢不包含在[]裡的字元 SELECT * from users where user_password regexp '武*';#和前面的匹配包含所有資料類似,包括空字元 select * from users where user_password REGEXP '武+';#不包括空字元 select * from users where user_password REGEXP '武?';#*+?類似,後續還待研究 select * from users where user_password REGEXP '白|劉';#匹配多個值
返回值是是否有匹配的,即bool值
SELECT 'asssssas' REGEXP 'as{2}';#正則表示式的{}表示匹配2個s SELECT 'asssssas' REGEXP 'as{2,}';#正則表示式的{}表示匹配2個s到無數個s SELECT 'asssssas' REGEXP 'as{2,4}';#正則表示式的{}表示匹配2個s到4個s SELECT 'asssssas' REGEXP 'a(ss)*';#括號內作為一個整體去匹配
MySql的執行順序
- FROM, including JOINs
- WHERE
- GROUP BY
- HAVING
- WINDOW functions
- SELECT
- DISTINCT
- UNION
- ORDER BY
- LIMIT and OFFSET
更新語句:使用replace可以批量更改資料
UPDATE users SET user_password='李白' where user_id=20; UPDATE users set user_password=REPLACE(user_password,'nihao','劉德華'); SELECT * from users;
刪除語句:
delete是DML支援回滾,
truncate和drop是DDL語言不支援回滾
delete from users where user_id=20;