1.1.1腳本命令操作
sql語句分為兩大類:
1、dml對表的數據內容進行增刪改查
2、ddl除了dml之外
使用命令連接
·命令操作方式,在工作中使用的更多一些,所以要達到熟練的程度
·打開終端,運行命令
mysql -hip -uname -ppassword
mysql -uroot -p
回車后輸入密碼,當前設置的密碼為mysql
·登錄成功后,輸入如下命令查看效果
查看版本:select version();
顯示當前時間:select now();
·注意:在語句結尾要使用分號;
遠程連接
·一般在公司開發中,可能會將數據庫統一搭建在一臺服務器上,所有開發人員共用一個數據庫,而不是在自己的電腦中配置一個數據庫
·運行命令
mysql -hip地址-uroot -p
·-h后面寫要連接的主機ip地址
·-u后面寫連接的用戶名
·-p回車后寫密碼
數據庫操作
·創建數據庫
create database數據庫名charset=utf8;
·刪除數據庫
drop database數據庫名;
·切換數據庫
use數據庫名;
·查看當前選擇的數據庫
select database();
表操作
·查看當前數據庫中所有表
show tables;
·創建表
auto_increment表示自動增長,只能是數字類型
主鍵本身是用來唯一標識這一行,沒有業務邏輯意義,所以是什么值不重要,只要唯一就行,所以如果是主鍵不需要修改
create table表名(列及類型);
如:
create table students(
id int auto_increment primary key,
sname varchar(10) not null
);
·修改表
alter table表名add|modify|drop列名類型;
如:
alter table students add birthday datetime;
·刪除表
drop table表名;
·查看表結構
desc表名;
·更改表名稱
rename table原表名to新表名;
·查看表的創建語句
show create table '表名';
數據操作
·查詢
select * from表名
·增加
全列插入:insert into表名values(...)
缺省插入:insert into表名(列1,...) values(值1,...)
同時插入多條數據:insert into表名values(...),(...)...;
或insert into表名(列1,...) values(值1,...),(值1,...)...;
·主鍵列是自動增長,但是在全列插入時需要占位,通常使用0,插入成功后以實際數據為準
·修改
update表名set列1=值1,... where條件
·刪除
delete from表名where條件
·邏輯刪除,本質就是修改操作update
alter table students add isdelete bit default 0;
如果需要刪除則
update students isdelete=1 where ...;
備份與恢復
?數據備份
·進入超級管理員
sudo -s
·進入mysql庫目錄
cd /var/lib/mysql
·運行mysqldump命令
mysqldump –uroot –p數據庫名> ~/Desktop/備份文件.sql;
按提示輸入mysql的密碼
?數據恢復
·連接mysqk,創建數據庫
·退出連接,執行如下命令
mysql -uroot –p數據庫名< ~/Desktop/備份文件.sql
根據提示輸入mysql密碼
遠程連接
·一般在公司開發中,可能會將數據庫統一搭建在一臺服務器上,所有開發人員共用一個數據庫,而不是在自己的電腦中配置一個數據庫
·運行命令
mysql -hip地址-uroot -p
·-h后面寫要連接的主機ip地址
·-u后面寫連接的用戶名
·-p回車后寫密碼
數據庫操作
·創建數據庫
create database數據庫名charset=utf8;
·刪除數據庫
drop database數據庫名;
·切換數據庫
use數據庫名;
·查看當前選擇的數據庫
select database();
表操作
·查看當前數據庫中所有表
show tables;
·創建表
auto_increment表示自動增長,只能是數字類型
主鍵本身是用來唯一標識這一行,沒有業務邏輯意義,所以是什么值不重要,只要唯一就行,所以如果是主鍵不需要修改
create table表名(列及類型);
如:
create table students(
id int auto_increment primary key,
sname varchar(10) not null
);
·修改表
alter table表名add|modify|drop列名類型;
如:
alter table students add birthday datetime;
·刪除表
drop table表名;
·查看表結構
desc表名;
·更改表名稱
rename table原表名to新表名;
·查看表的創建語句
show create table '表名';
數據操作
·查詢
select * from表名
·增加
全列插入:insert into表名values(...)
缺省插入:insert into表名(列1,...) values(值1,...)
同時插入多條數據:insert into表名values(...),(...)...;
或insert into表名(列1,...) values(值1,...),(值1,...)...;
·主鍵列是自動增長,但是在全列插入時需要占位,通常使用0,插入成功后以實際數據為準
·修改
update表名set列1=值1,... where條件
·刪除
delete from表名where條件
·邏輯刪除,本質就是修改操作update
alter table students add isdelete bit default 0;
如果需要刪除則
update students isdelete=1 where ...;
備份與恢復
?數據備份
·進入超級管理員
sudo -s
·進入mysql庫目錄
cd /var/lib/mysql
·運行mysqldump命令
mysqldump –uroot –p數據庫名> ~/Desktop/備份文件.sql;
按提示輸入mysql的密碼
?數據恢復
·連接mysqk,創建數據庫
·退出連接,執行如下命令
mysql -uroot –p數據庫名< ~/Desktop/備份文件.sql
根據提示輸入mysql密碼
1.1.1總結
·數據庫解決的問題,E-R模型,三范式
·圖形界面操作數據庫、表、數據
·命令行操作數據庫、表、數據
1.1.2作業
·完善學生表、科目表及數據
·設計兩張表,要求是一對多的關系
1.1查詢
內容簡介
·查詢的基本語法
select * from表名;
·from關鍵字后面寫表名,表示數據來源于是這張表
·select后面寫表中的列名,如果是*表示在結果中顯示表中所有列
·在select后面的列名部分,可以使用as為列起別名,這個別名出現在結果集中
·如果要查詢多個列,之間使用逗號分隔
消除重復行
·在select后面列前使用distinct可以消除重復的行
select distinct gender from students;
1.1.1條件
·使用where子句對表中的數據篩選,結果為true的行會出現在結果集中
·語法如下:
select * from表名where條件;
1.1.1.1比較運算符
·等于=
·大于>
·大于等于>=
·小于<
·小于等于<=
·不等于!=或<>
·查詢編號大于3的學生
select * from students where id>3;
·查詢編號不大于4的科目
select * from subjects where id<=4;
·查詢姓名不是“黃蓉”的學生
select * from students where sname!='黃蓉';
·查詢沒被刪除的學生
select * from students where isdelete=0;
1.1.1.2邏輯運算符
·and
·or
·not
·查詢編號大于3的女同學
select * from students where id>3 and gender=0;
·查詢編號小于4或沒被刪除的學生
select * from students where id<4 or isdelete=0;
1.1.1.3模糊查詢
·like
·%表示任意多個任意字符
·_表示一個任意字符
·查詢姓黃的學生
select * from students where sname like '黃%';
·查詢姓黃并且名字是一個字的學生
select * from students where sname like '黃_';
·查詢姓黃或叫靖的學生
select * from students where sname like '黃%' or sname like '%靖%';
1.1.1.4范圍查詢
·in表示在一個非連續的范圍內
·查詢編號是1或3或8的學生
select * from students where id in(1,3,8);
·between ... and ...表示在一個連續的范圍內
·查詢學生是3至8的學生
select * from students where id between 3 and 8;
·查詢學生是3至8的男生
select * from students where id between 3 and 8 and gender=1;
1.1.1.5空判斷
·注意:null與''是不同的
·判空is null
·查詢沒有填寫地址的學生
select * from students where hometown is null;
·判非空is not null
·查詢填寫了地址的學生
select * from students where hometown is not null;
·查詢填寫了地址的女生
select * from students where hometown is not null and gender=0;
1.1.1.6優先級
·小括號,not,比較運算符,邏輯運算符
·and比or先運算,如果同時出現并希望先算or,需要結合()使用
1.1.2聚合
·為了快速得到統計數據,提供了5個聚合函數
·count(*)表示計算總行數,括號中寫星與列名,結果是相同的
·查詢學生總數
select count(*) from students;
·max(列)表示求此列的最大值
·查詢女生的編號最大值
select max(id) from students where gender=0;
·min(列)表示求此列的最小值
·查詢未刪除的學生最小編號
select min(id) from students where isdelete=0;
·sum(列)表示求此列的和
·查詢男生的編號之后
select sum(id) from students where gender=1;
·avg(列)表示求此列的平均值
·查詢未刪除女生的編號平均值
select avg(id) from students where isdelete=0 and gender=0;
1.1.3分組
·按照字段分組,表示此字段相同的數據會被放到一個組中
·分組后,只能查詢出相同的數據列,對于有差異的數據列無法出現在結果集中
·可以對分組后的數據進行統計,做聚合運算
·語法:
select列1,列2,聚合... from表名group by列1,列2,列3...
·查詢男女生總數
select gender as性別,count(*)
from students
group by gender;
·查詢各城市人數
select hometown as家鄉,count(*)
from students
group by hometown;
1.1.3.1分組后的數據篩選
·語法:
select列1,列2,聚合... from表名
group by列1,列2,列3...
having列1,...聚合...
·having后面的條件運算符與where的相同
·查詢男生總人數
方案一
select count(*)
from students
where gender=1;
-----------------------------------
方案二:
select gender as性別,count(*)
from students
group by gender
having gender=1;
1.1.3.2對比where與having
·where是對from后面指定的表進行數據篩選,屬于對原始數據的篩選
·having是對group by的結果進行篩選
1.1.4排序
·為了方便查看數據,可以對數據進行排序
·語法:
select * from表名
order by列1 asc|desc,列2 asc|desc,...
·將行數據按照列1進行排序,如果某些行列1的值相同時,則按照列2排序,以此類推
·默認按照列值從小到大排列
·asc從小到大排列,即升序
·desc從大到小排序,即降序
·查詢未刪除男生學生信息,按學號降序
select * from students
where gender=1 and isdelete=0
order by id desc;
·查詢未刪除科目信息,按名稱升序
select * from subject
where isdelete=0
order by stitle;
1.1.5分頁
·當數據量過大時,在一頁中查看數據是一件非常麻煩的事情
·語法
select * from表名
limit start,count
·從start開始,獲取count條數據
·start索引從0開始
示例:分頁
·已知:每頁顯示m條數據,當前顯示第n頁
·求總頁數:此段邏輯后面會在python中實現
o查詢總條數p1
o使用p1除以m得到p2
o如果整除則p2為總數頁
o如果不整除則p2+1為總頁數
·求第n頁的數據
select * from students
where isdelete=0
limit (n-1)*m,m