腳本命令操作、查詢

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容