一、連接數據庫
第一步肯定是連接數據庫,與用Navicat操作數據庫類似,連接數據庫需要四個參數
- host(-h):默認是本機IP
- port(-P):默認端口號3306
- user(-u)
- password(-p)
語句:mysql -h (IP) -P (端口) -u root -p
注:①先不用輸入密碼,輸入上條語句之后后續會讓輸密碼
②由於是操作的本機數據庫,IP和端口是默認的,可以不輸入,可以省略寫成mysql -u root -p,如果要操作的是其他的數據庫,就需要輸入對應的IP和端口
二、管理數據庫
1、展示數據庫:show databases;
2、新建數據庫:create database 數據庫名 default charset utf8mb4;
和Navicat創建數據庫一個思想,主要從兩個方面考慮,一個是數據庫名,一個是字符集
3、修改數據庫:alter database 數據庫名 default charset utf8mb4;
和Navicat修改數據庫一樣,不能修改數據庫名,只能對數據庫的字符集進行修改,
4、刪除數據庫:drop database 數據庫名;
5、選擇數據庫:use 數據庫名;
6、退出當前數據庫:quit;
三、管理表
1、展示表:show tables;
2、新建表
create table table_name( id integer primary key, username varchar(20) not null, birthday date );
3、刪除表:drop table 表名;
4、修改表
修改字段名:
alter table + 表名 + change + 列名 + 新列名 + 列類型+[約束];
修改字段屬性:
alter table + 表名 + modify + 列名 + [列類型 +約束];
5、查看表結構:desc 表名;
四、數據操作
1、增:insert into 表名(字段名1,字段名2)values(值1,值2);
注:並不是所有字段都必須加進去,但是必填字段必須寫
2、刪:delete from 表名 where 條件;
3、改:update 表名 set 字段1=新值1,字段2=新值2 where 條件;
4、查
①一覽表:select * from 表名;
②顯示部分字段:select 字段1,字段2 from 表名;
③根據限制條件查詢所有:select * from 表名 where 字段1=值1 and 字段2=值2;(注意:涉及到字符串都必須要加引號,不區分單雙引號)
④排序:(order by):select * from 表名 order by 字段名;
desc:降序排列
asc:升序排列,默認狀態是升序的,默認狀態時可以不寫asc
注:如果SQL語句中有查詢語句,order by 直接寫在查詢語句的后邊,而且不能加and,(and是查詢語句里邊的嘛!)
⑤限制查詢的條件:limit
注:計算機是從0開始數數
limit 3其實就是limit0,3:表示從第零條數據開始查詢,一共顯示3條數據,顯示數據1-3
limit3,5:就表示從第3條數據開始查詢,總共查詢5條數據,顯示數據4-8
例:查詢學生表中性別為女,年齡最大的前4位
例:查詢學生表中年齡大於20且地區不是成都的學生,找出年齡最大的前三位
select * from t_student where age>20 and address !='成都'order by age desc limit 3;
也可以這樣寫: select * from t_student where age>20 and address not in ('成都') order by age desc limit 3;
⑥多表聯查:
多表聯查分為內連接和外連接(外連接又分為左外連接和右外連接),查詢語法是相同的,不同的是取值
- 內連接:join/inner join on:內連接取兩個表的交集部分
- 外連接
左外連接(左連接):left join on:左連接取左邊表的並集部分
右外連接(右連接):right join on:右連接取右表的並集部分
查詢所有:select * from 表1 join 表2 on 表1.字段1=表2.字段2;
查詢選定字段及其值(表名.字段名): select 表1.字段a,表1.字段b,表2.字段c from 表1 join 表2 on 表1.字段1=表2.字段2;
注:表1.字段1=表2.字段2為表關系,可支持多張表聯合查詢
SQL語句后邊還可以接上where條件以及排序等
由於現在是多張表了,表示字段名時就需要在前面添加表名了,表示方法:表名.字段名
例:三張表進行查詢:直接在后邊加 join on
利用Navicat可以更加簡明的看出SQL語句結構:
五、邏輯判斷
1、=
2、!=
3、>=
4、<=
5、in:在…里面,需要寫一個括號,括號里寫值,有括號里的值就查詢出來,沒有的就算了,可取反
6、like:用於字符串的模糊查詢
例如:以張開頭:'張%'
以凡結尾:'%凡'
帶小的都查出:'%小%'
7、between:在兩者之間,只能用來判斷數字,數字才有區間的說法,而且between自帶一個and,可取反
8、is:只能用於判斷是否為空,可取反。(為空=null,注意和空字符串區別,他倆是不一樣的)
六、邏輯語句:case...when...then...end
case和end分別是語句的開始和語句的結束,when:當xx,then:那么xx。
case...when...then...end主要有兩種用法,第一種簡單的使用,如下例子,還有一種是帶搜索功能的,同時可以實現分組的功能。
例:
如果要想實現不直接顯示數據,顯示不同數據范圍對應的不同內容的話,就可以用case...when...then...end結構,注意這個結構中沒有任何一處地方有標點符號
七、SQL語句的分類
主要分為DDL、DQL、DML、DCL
①DDL:影響表的結構的語句,如create、drop、alter等語句
②DQL:查詢相關的語句,如select、from、where等語句
③DML:操作表數據的語句:如insert、delete、update等語句
④DCL:開啟數據庫一些功能的語句,如權限、事務等語句
事務:在每次數據操作前,開啟事務(begin),再對數據進行操作,最后檢查操作的結果,有問題回滾(rollback),沒問題確認(commit)
事務的出現都是成對出現的,即begin-rollback或者begin-commit
例如:現在t_class里邊有兩條數據
我要增加一條數據,在數據操作前,開啟了事務
現在數據已經是顯示三條了,但是第三條數據有誤,此時可以事務回滾,返回到事務剛開啟的樣子
八、數據庫的優化
當數據庫中的數據達到了一定的量級,就需要對數據庫進行優化了,這個過程通常是公司的架構師在做。
優化手段(層層遞進):①添加索引 ②分表 ③分庫 ④增加服務器的配置 ⑤分布式(放到不同的服務器中)
the end:在終端操作數據庫時,帶字符串的必須加引號,不區分單雙引號
語句必須以英文分號結尾
所有的標點符號都是英文的
順序:排序(order by)在查詢(where條件)語句后邊
分組要和聚合函數配合使用,但是聚合函數可以單獨使用
腦圖: