1. 程式人生 > 其它 >2021-7-29 MySql的簡單使用

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 DEFAULT
CHARSET = 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的執行順序

  1. FROM, including JOINs
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. WINDOW functions
  6. SELECT
  7. DISTINCT
  8. UNION
  9. ORDER BY
  10. 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;