mysql
當(dāng)一臺電腦安裝了數(shù)據(jù)庫婶芭,那么這臺電腦可以稱為一個數(shù)據(jù)庫服務(wù)器东臀,用戶可以連接這臺電腦上的數(shù)據(jù)庫
一個數(shù)據(jù)庫軟件,可以管理多個數(shù)據(jù)倉庫(簡稱數(shù)據(jù)庫)犀农。
一個數(shù)據(jù)倉庫可以管理多個數(shù)據(jù)表惰赋。
每個數(shù)據(jù)表中可以存儲多行數(shù)據(jù)記錄。
每創(chuàng)建一個數(shù)據(jù)倉庫呵哨,會在數(shù)據(jù)庫的數(shù)據(jù)文件目錄中多一個文件夾
大綱
- sql語句概念
- mysql基礎(chǔ)操作sql
- 單表操作sql
- 表內(nèi)數(shù)據(jù)操作
- 數(shù)據(jù)庫的備份/恢復(fù)
- 總結(jié)
sql語句
1.sql語句定義
2.sql語句分類
DDL (數(shù)據(jù)定義語言)
數(shù)據(jù)定義語言 - Data Definition Language
用來定義數(shù)據(jù)庫的對象赁濒,比如創(chuàng)建數(shù)據(jù)表(對數(shù)據(jù)庫和數(shù)據(jù)表進(jìn)行操作的)
如:create drop alter truncate (table)
DML (數(shù)據(jù)操縱語言)(★★★) 增刪改
數(shù)據(jù)處理語言 - Data Manipulation Language
在數(shù)據(jù)庫表中更新,增加和刪除記錄(對數(shù)據(jù)表中的表數(shù)據(jù)進(jìn)行增刪改)
如:update孟害, insert拒炎, delete
DCL (數(shù)據(jù)控制語言)
數(shù)據(jù)控制語言 – Data Control Language
指用于設(shè)置用戶權(quán)限和控制事務(wù)語句(事務(wù))
如:grant,revoke挨务,if…else击你,while,begin transaction
DQL (數(shù)據(jù)查詢語言)(★★★★★) 查詢
數(shù)據(jù)查詢語言 – Data Query Language
對數(shù)據(jù)表中的表數(shù)據(jù)進(jìn)行查詢
如:select
數(shù)據(jù)庫基礎(chǔ)sql的操作
1.庫的操作sql
創(chuàng)建庫:create database 庫名 character set 編碼表;
刪除庫:drop database 庫名;
查詢庫:show databases;
查看庫的編碼表:show create database 庫名;
更改庫:use 庫名;
查看當(dāng)前正在使用的庫:select database();
修改庫的編碼表:alter database 庫名 character set 編碼表;
2.表本身的操作sql
創(chuàng)建表:create table 表名( 列名 列的類型(長度) 類的約束 ,列名 列的類型(長度) 類的約束...... );
刪除表:drop table 表名;
查詢表:show tables;
查看表的結(jié)構(gòu):desc 表名;
查看表的編碼表:show create table 表名;
修改表:alter table 表名 增/刪/改 列名 列的類型(長度) 約束;
修改表名:rename table 舊表名 to 新表名谎柄;
3.表中數(shù)據(jù)的操作sql
增:insert into 表名(列名) values(值);
刪:delete from 表名 where 條件; truncate
改:update 表名 set 列名=值 丁侄,列名=值 where 條件 ;
查:select 列名 as 別名 ,列名 as 別名… from 表名 where 條件朝巫;
查詢排重:select distinct 列名 from 表名 where 條件;
聚合函數(shù):
count 統(tǒng)計個數(shù)绒障、
sum求和、
avg 平均值捍歪、
max户辱、min
在使用這幾個函數(shù)進(jìn)行數(shù)據(jù)的統(tǒng)計分析時,有時需要對數(shù)據(jù)表中的列進(jìn)行數(shù)據(jù)的分組處理 ---> group by
分組: group by :
排序:order by 列名 asc | desc糙臼;
單表操作
1.單表創(chuàng)建約束
- 主鍵約束:primary key ---> 唯一不為空: 真正意義上唯一標(biāo)識一條數(shù)據(jù)
- 唯一約束 unique 內(nèi)容不允許重復(fù)庐镐,可以為null(null不算重復(fù))--> 一個表里可以添加多個唯一約束。
-
非空約束 not null 变逃。不允許為空必逆。 表示該列的內(nèi)容不允許為空。如圖:
2.數(shù)據(jù)表結(jié)構(gòu)修改
修改數(shù)據(jù)表:
可以對表名、表中的列名名眉、列的類型粟矿、列的約束進(jìn)行增刪改。
語法:alter table 表名 增/刪/改 列名 類型(長度) 約束损拢;
1.增加列
alter table 表名 add 列名 類型(長度) 約束;
2.修改現(xiàn)有列類型陌粹、長度和約束 語法:
alter table 表名 modify 列名 類型(長度) 約束;
**
3、修改現(xiàn)有列名稱 語法:
alter table 表名 change 舊列名 新列名 類型(長度) 約束;
**
4福压、刪除現(xiàn)有列 語法:
alter table 表名 drop 列名 ;
5掏秩、修改表名 語法:
rename table 舊表名 to 新表名;
6、修改表的字符集 語法:
alter table 表名 character set 編碼集;
7.查詢庫編碼和表編碼:
show create table employee
8.修改表編碼:
alter table employee chaeacter ser utf8;
數(shù)據(jù)表刪除
語法:drop table 表名荆姆;
例如:刪除emp表 ---> drop table emp;
表內(nèi)數(shù)據(jù)操作(CRUD )
1.增加:insert 語句
數(shù)據(jù)記錄的增加
方式一:全寫
語法:insert into 表名 (列名蒙幻,列名,列名......) values (值胆筒,值邮破,值......);
方式二:省略部分列
注意:可以省略部分列名。某一列 有默認(rèn)值仆救,或者允許為空抒和,才可以省略。
主鍵是自增長的認(rèn)為是有默認(rèn)值的派桩。也可以省略
常見錯誤如下:
1.姓名重復(fù) ---> 唯一約束字段不能重復(fù)
2.age字段不能為空 --->非空約束字段不能不寫
方式三:省略所有的列
語法 : insert into 表名 values(值,值蚌斩,值铆惑,值);
1.表中有多少列送膳,就有多個值员魏。
2.按照表的結(jié)構(gòu),列和值去對應(yīng)
整理:
1.主鍵:若是自增長,不需要人工賦值(可以給值null)數(shù)據(jù)庫會按照自己的算法叠聋,為主鍵填充值撕阎。
2.通常遇到主鍵自增長,人工賦值的時候碌补,賦值null虏束。mysql會自己把null替換成新的值
2.修改:update 語句
修改表記錄:
update 表名 set 列名=值,列名=值... [ where條件語句 ];
示例:將姓名為李四的人的年齡改為30,地址改為上海
sql:update emp set age = 30,address = '上海' where name = '李四' ;
3.刪除:delete語句
刪除表中數(shù)據(jù):
delete from 表名 [where條件語句]
加上where條件即刪除滿足條件的行的數(shù)據(jù)
注意:
1.如果沒有where厦章,刪除表中的所有的記錄镇匀。
2.delete刪除的是行,delete是刪除行的數(shù)據(jù)。
數(shù)據(jù)庫備份
- mysqldump工具備份
- 將某個數(shù)據(jù)庫備份到指定的路徑進(jìn)行保存
- mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 > 磁盤SQL文件路徑
- 可以指定IP >> mysqldump -u 用戶名 -h host -p 數(shù)據(jù)庫名 > 磁盤SQL文件路徑
- 注意:由于mysqldump命令不是sql命令袜啃,需要在dos窗口下使用
備份整個數(shù)據(jù)庫:
--> mysqldump -u root -p dbname > backdb.sql
--> mysqldump -u root -h host -p dbname > backdb.sql
備份數(shù)據(jù)庫中的某個表
--> mysqldump -u root -p dbname tbname1, tbname2 > backdb.sql
備份多個數(shù)據(jù)庫
--> mysqldump -u root -p --databases dbname1, dbname2 > backdb.sql
備份系統(tǒng)中所有數(shù)據(jù)庫
--> mysqldump -u root -p --all-databases > backdb.sql
示例:備份test數(shù)據(jù)庫到D盤test.sql文件
mysqldump -u root -p test > d:\test.sql
//指定ip汗侵,指定庫中具體的表
mysqldump -u root -h 127.0.0.1 -p test exam > D:\exam.sql
數(shù)據(jù)庫恢復(fù)
- 方式一 (source 備份文件)
1.創(chuàng)建數(shù)據(jù)庫并切換到該數(shù)據(jù)庫:
創(chuàng)建數(shù)據(jù)庫db_name1:create database db_name1;
切換到db_name1:use db_name1;
2.導(dǎo)入數(shù)據(jù)(將備份的數(shù)據(jù)庫導(dǎo)入進(jìn)來)
source d:\test.ql
- 方式二(mysql ... < ...)
1.創(chuàng)建數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫db_name2:create database db_name2;
2.不登錄mysql直接導(dǎo)入(類似備份操作)
mysql -u root -p db_name2 < d:\test.sql
數(shù)據(jù)庫基礎(chǔ)總結(jié)
- 常規(guī)面試問題:delete和truncate以及drop的區(qū)別
delete from 表名:(DML)
原理:逐行刪除;
特點(diǎn):效率低,有可能恢復(fù)
truncate table 表名:(DDL)
原理:先刪除原表晰韵,在建立新的相同事物表发乔;
特點(diǎn):效率高,不可恢復(fù)
drop table 表名:
原理:是直接刪除表雪猪,也不會再創(chuàng)建新表
特點(diǎn):徹底刪除栏尚,不可恢復(fù)