- 注意每條命令后面都要加";"
- 注意:日期要加單引號’’,eg:'2019-01 01 10:30:00’
- 判空:is null;—>不能用=
- 判非空:is not null;—>不能用!=
一、資料庫基本操作
1、顯示資料庫資訊
show databases;
2、創建資料庫:
create database 資料庫名稱;
3、選中(使用)資料庫:
use 資料庫名稱;
4、洗掉資料庫(最好不要洗掉):
drop database 資料庫名稱;
二、資料表操作
1、創建表(注意創建表之前要先選中資料庫)
create table 表名 (表的結構); //表的結構即表的屬性和該屬性型別
**注意:**表名最好不要和資料庫關鍵字重復
2、 查看資料表名稱
show tables; //該命令只能查看表名
3、查看表的具體結構
desc 表名; //該命令可查看到表中的具體資訊
4、洗掉資料表(最好不要使用)
drop table 表名;
三、MySQL表的增刪改查—“初階”
1、新增
- 基礎插入(插入一條記錄的所有列)
insert into 表名 values(記錄); //一條記錄包含了若干個列,即具體資訊
- 一次插入多條記錄(括號間要用逗號隔開)
insert into 表名 values
(記錄),
(記錄),
(記錄),
...;
- 一次插入一條記錄的某幾個列(顯示指定要插入那些列)
insert into 表名(顯示指定要插入的列名) values(被指定屬性的具體資訊)
2、查看表的資訊
- 查看所有列的資訊
select * from 表名;
- 查看指定列的資訊
select 列名 from 表名;
- 將查找結果放到一個運算式中(即通過運算式修改表中內容)
select 列名+10 from 表名; //比如將某個列的內容+10
select 列名1+列名2+... from 表名; //計算某些屬性總和
select 列名1+列名2+... as 別名 from 表名; //給總和起個別名
- 去重
select distinct 列名 from 表名
指定多列去重(都加在distinct之后)時,要保證兩列都是重復的時才能去重 - 排序
order by(默認升序排序)—>使用asc也是升序
order by 列名desc 顯示加上desc—>降序
select 列名 from表名 order by列名
order by 列名1desc, 列名1desc 按照多列來排序
null在order by 中被當作最小值,如果不加order by ,對于查詢結果的記錄之間的順序,不能有任何預期~~~
注意:null不參與±*/運算
多列排序是在第一列分不出大小時,再按照第二列排,如果分不出大小,不管第二列
- 條件查詢(SQL中的=時等號,不是賦值符)
select 列名 from表名 where 條件(NuLL會被當成false,不顯示)
where多個條件之間用連接符鏈接
注意:不能針對列的別名進行where比較
and和or優先級(不加括號時):and>or
=和<=>的區別:第一種不能被篩選出來,第二種可以 - 范圍查詢
a)between and----->等價于and
b)in—>篩選—>等價于or - 使用like進行模糊查找---->根據部分條件找所有—>對字符、字串、數字都適用
eg:where 列名 like ’ ’
通配符:%(可代表多個字符),_(每個下劃線只代表一個字符)
a)以t開頭:‘t%’
a)以t結尾:‘%t’
a)包含t:‘%t%’
注意:模糊匹配效率較低,實際不常用 - 分頁查詢(將多條記錄分頁展示)
limit
select * from 表名 limit 展示資料行數 offset N
N 表示從第N條資料開始查找
3、修改 update
指定修改某些行、某些列
update 表名 set 修改資料 where 條件(針對什么樣的行進行修改)
例如:將Tom的語文成績修改為99
update set chinese=90 where name=‘tom’
注意:不加where,就是修改了該列所有資料
set 多個列時,用逗號隔開
decimal(3,1)–>共三位有效數字,小數點之后有一位
4、洗掉
只要指定洗掉復合條件的行就行
delete from 表名 where 洗掉條件
如果沒有where條件,洗掉所有資料,變成一個空表,與直接洗掉表不一樣
四、資料庫備份:
1、MySQL支持bin log
2、備份 mysqldump工具
3、基于磁盤檔案進行還原
五、資料庫約束
1、約束型別(針對列)
1)*not null :*指定某一列不能存盤null值
2)*unique :*規定某一列的某行必須有唯一值
3)*default :*規定沒有給列賦值時的默認值
default 指定的默認值,會在按列插入時生效(按列插入但是未被指定的列,就是按照默認值來插入)
如果手動給某一列設為null,不會觸發默認值效果
4)primary key :—>"主鍵 " not null和unique 的結合,確保某列(或兩個列或多列的結合)有唯一標識,即不能為空,也不能重復
設計表的時候,一般都需要指定一個主鍵**(只能指定一個)**,主鍵就是一條記錄的唯一標實
自增主鍵:primary key auto_increment-–每次插入主鍵的值都會自動加1(應用于給一組資料生成一個唯一的id ),洗掉掉某條記錄再加入,主鍵還是自增一次
5)foreign key :—>“外鍵” 保證一個表中資料匹配另一個表中的值的參照完整性
語法:foreign key (欄位名) references 主表(列)
注意:外鍵要對主表的主鍵進行約束
create table class(id int primary key ,name varchar(50));
create table student(id int primary key auto_increment,name varchar(50),classid int, foreign key (classid) references class(id));
外鍵約束,就是要求當前表里的classid欄位的值,必須在class表中的id中出現過才可以
**注意:**如果class表中的id已經被student中的classid用到了,那么就不能洗掉class表中的對應記錄,更不能洗掉整個class表
六、資料庫的設計
1、定義:“資料庫設計”,其實就是設計表,根據當前問題的場景,分析需要創建出哪些問題的場景,需要創建出那些表,表中應該都有那些欄位,以及這些欄位中的約束是怎樣的
2、基本思路:從具體問題的場景中,先提取出"物體"(即物件),然后再找出多個"物體"之間的關聯關系(一對一/一對多/多對多/無關)
3、舉例:
問題場景:描述學生的考試成績
分析:
1)物體:學生、課程、成績
2)三者之間的關聯關系
學生和課程:多對多
學生和成績:一對多(不考慮同分)
課程和成績:沒關系 (兩者之間沒有直接的關系,而是靠學生為媒介關聯起來的)
3)設計表
學生表:(id,name)
課程表:(id,name)
成績表:(student_id,course_id,score)—>通過成績表將學生表和課程表聯系起來
六、MySQL表的增刪改查—“進階”
1、新增—>將查詢結果作為新增的內容(插入和查找的結合)
insert into 表二名稱 select 表一列名 from 表一;
2、聚合查詢—>“聚合”指的是**“行”**之間的聚合,和“列”無關
1)聚合函式
count(),sum(),avg(),max(),min()
注意:除count之外,其他四個對于不是數字的沒有意義
a) count—求行數
select count(*) from 表名 ; //先執行select * from 表名,再數一數結果中有多少行
**注意:**當select count(某一列)時,如果當前列里的值為null,則不會被計數到其中
b)sum—求和
舉例:查詢所有學生語文的總成績
select sum(chinese) from student;
擴展:查看警告資訊
show warnings;
c)avg—求平均值
舉例:查詢所有學生語文成績的平均值
select avg(chinese) from student;
d)max—求最大值
舉例:
select max(chinese) from student;
e)min—求最小值
舉例:
select min(chinese) from student;
2)group by 子句
針對某一列,按照列里面的內容,將這些記錄中值相同的分在一組
舉例:
select 要被分組的列,所求值 from 表名 group by要被分組的列;
//舉例:求公司中不同崗位薪資的平均值
select role,avg(salary) from 表名 group by role;
**注意:**group by 往往要搭配聚合函式來使用(先分組,再聚合),如果不是用聚合函式,此時嘗試查詢一些不重復的類,可能結果就不太科學
3)條件篩選—having—>要和group by搭配使用
- 使用group by分組之前,按條件篩選記錄,使用where
- 使用group by分組之后,按條件篩選,就要使用having
舉例:
select 要被分組的列,所求值 from 表名 group by要被分組的列 having 條件;
//舉例:求公司中不同崗位薪資的平均值,并篩選出平均薪資低于1500的崗位
select role,avg(salary) from 表名 group by role having avg(salary)<1500;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/274793.html
標籤:其他
