SQL快速入门
關(guān)系化數(shù)據(jù)庫
保存關(guān)系模式數(shù)據(jù)的容器
關(guān)系模式是對業(yè)務(wù)對象實(shí)體,屬性以及關(guān)系的抽象,提煉需求的名詞是建立實(shí)體關(guān)系模型常用的方法。要了解E-R實(shí)體關(guān)系圖的繪制。
常用關(guān)系數(shù)據(jù)庫
Microsoft SQL Server;微軟公司產(chǎn)品,中等規(guī)模數(shù)據(jù)庫,運(yùn)行在window平臺(tái),一般結(jié)合.net開發(fā)平臺(tái)使用
Oracle;甲骨文公司產(chǎn)品,大型商業(yè)數(shù)據(jù)庫,可以運(yùn)行在任何操作系統(tǒng)上,經(jīng)常與java一起使用。
MySQL;最初是一個(gè)開源免費(fèi)的數(shù)據(jù)庫產(chǎn)品,中小型數(shù)據(jù)庫,輕便,互聯(lián)網(wǎng)行業(yè)主流數(shù)據(jù)庫
SQLITE;嵌入式數(shù)據(jù)庫,安卓內(nèi)部主要數(shù)據(jù)庫。
數(shù)據(jù)庫的連接與組成
連接網(wǎng)絡(luò)上的數(shù)據(jù)庫
mysql -h ip -P port -u root -p 回車 輸入密碼
show databases; 查看所有數(shù)據(jù)庫
安裝mysql后會(huì)自帶兩個(gè)數(shù)據(jù)庫mysql,test
mysql存放一些數(shù)據(jù)庫的核心數(shù)據(jù),用戶權(quán)限密碼等
test用來測試的數(shù)據(jù)庫
在一個(gè)服務(wù)器上,可以使用多個(gè)數(shù)據(jù)庫database,一個(gè)數(shù)據(jù)庫內(nèi)部創(chuàng)建對個(gè)數(shù)據(jù)表table
在數(shù)據(jù)庫中存在多個(gè)用戶,每個(gè)用后都有相應(yīng)的操作權(quán)限,默認(rèn)有個(gè)root用戶,是超級(jí)管理員具有所有權(quán)限
table表的一行稱為一條記錄,一般對應(yīng)著java程序中的一個(gè)對象
SQL語言
結(jié)構(gòu)化查詢語言
特性
1,非過程性語言,每一條SQL語句獨(dú)立執(zhí)行沒有先后的依賴關(guān)系
2,官方提供的數(shù)據(jù)庫標(biāo)準(zhǔn)語言,任何數(shù)據(jù)庫都必須支持SQL語言語法
3,SQL是用來存取關(guān)系型數(shù)據(jù)庫的語言,具有查詢,操縱,定義和控制關(guān)系型數(shù)據(jù)的四方面功能。
為加強(qiáng)SQL的語言能力,各廠商增強(qiáng)了過程性語言的特征,提供SQL語言的擴(kuò)展
SQL語言分類
DDL;數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫的對象,如數(shù)據(jù)表,視圖,索引
DML;數(shù)據(jù)操縱語言,在數(shù)據(jù)庫表中更新,增加和刪除記錄,如update,insert,delete
DCL;數(shù)據(jù)控制語言,用戶設(shè)置用戶權(quán)限和控制事務(wù)語句,如grant,revoke,if else,while,begin transaction
DQL;數(shù)據(jù)查詢語言,數(shù)據(jù)查詢語言,如select
SQL語句的使用
創(chuàng)建數(shù)據(jù)庫
CREAT DATABASE[IF NOT EXISTS] db_name;
character set 編碼表 collate比較方式;//為數(shù)據(jù)庫指定字符集合比較方式,如果不指定使用默認(rèn)的編碼集和比較方式
查看數(shù)據(jù)庫
show creat database db_name;查看當(dāng)前數(shù)據(jù)庫編碼集
select database();查看當(dāng)前使用的數(shù)據(jù)庫
刪除數(shù)據(jù)庫
drop database db_name;
修改數(shù)據(jù)庫編碼
alter database db_name character set 編碼表
切換數(shù)據(jù)庫
use db_name;如果想要對數(shù)據(jù)庫進(jìn)行操作,需要切換到指定的數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)表
create table table_name(列名 類型(長度),列名 類型(長度))character set編碼表
如果沒有指定編碼表會(huì)使用數(shù)據(jù)庫默認(rèn)的
如 create table user(
id int,
name varchar(40),
password varchar(40),
birthday date
);
java數(shù)據(jù)類型與數(shù)據(jù)庫數(shù)據(jù)類型的對應(yīng)關(guān)系,除了字符串類型必須要指定長度之外其他的都可以使用默認(rèn)長度
字符串 VARCHAR,CHAR對應(yīng)string,前者是長度可變經(jīng)常使用,后者是長度固定的性能好些
大數(shù)據(jù)類型 BLOB,TEXT;前者主要存些字節(jié)文件,后者存儲(chǔ)字符文件
數(shù)值型 TINYINT,SMALLINT,INT,BIGINT,FLOAT,DOUBLE分別對應(yīng)byte,short,int,long,float,double
邏輯型 BIT
日期型 DATE,TIME,DATETIME,TIMESTAMP
創(chuàng)建表明之后可以通過desc 表名查看表結(jié)構(gòu)
單表的約束
定義主鍵約束;主鍵約束唯一標(biāo)識(shí)一條記錄,主鍵不能為空不能重復(fù),主鍵如果為數(shù)字類型一般設(shè)置主鍵自動(dòng)增長auto_increment
primary key
唯一約束;該字段內(nèi)容不允許重復(fù)
unique
定義非空約束;值不能為空
not null
如 create table employee(
id int primary key not null auto_increment,
name varchar(40) unique not null
gender varchar(10) not null,
entry_date date not null,
birthday date not null,
job varchar(20) not null,
resume longtext not null
salary double not null,
);
數(shù)據(jù)表修改
alter table使用該語句增加,修改或刪除列的語法
alter table 表名 add 列名 類型(長度) 約束;//增加
alter table 表名 modify 列名 類型(長度) 約束;//修改
alter table 表名 drop 列名 //刪除
修改已有數(shù)據(jù)表一列的名稱
alter table 表明 change 舊列名 新列名 類型(長度) 約束
修改表名 rename table 舊表名 to 新表名
修改表的字符集 alter table 表名 charater set utf8;要注意表的編碼集與數(shù)據(jù)庫的編輯不是同一個(gè)
show tables 查看當(dāng)前數(shù)據(jù)庫中的所有表
alter primary修改主鍵
數(shù)據(jù)庫CRUD語句
Insert語句
Insert into 表名(列名,列名。。。) values(值,值,。。。)
要注意列與值的相互對應(yīng)。
Insert into employee(id,name,gender,entry_date,birthday,job,resume,salary) values(null,'zs','mall','2012-10-10','1990-01-10','hr',3000,'he is a man');
值中除了數(shù)字不用加單引號(hào)之外,其他所有值都要加單引號(hào)
在插入數(shù)據(jù)時(shí),如果有些列存在默認(rèn)值或者可以為null,插入可以省略這些列,只需要關(guān)注不能為空的列就好
另外在插入數(shù)據(jù)的時(shí)候,也可以省略所有列名,但是必須按照表的順序插入所有列的值
要注意SQL的編碼問題。
Update語句
update 表名 set 列名=值,列名=值 where 條件語句
注意如果沒有寫where語句限制條件,則會(huì)將該列的所有數(shù)據(jù)都進(jìn)行更改
update employee set salary=5000;//這句話把所有員工的新水都改為5000
update emploee set salary=5000 where name='zs';將zs的薪水改為5000,要注意此處算是SQL語句的餓一個(gè)bug條件比較時(shí)可能不區(qū)分大小寫,如果ZS的薪水存在也會(huì)更改,需要再name前加入關(guān)鍵字binary使比較更精確
update employee set salary=5000 where binary name='zs';
update employee set salary=salary+1000 where binary name='zs';在原先的擠出上增加
Delete語句
delete from 表名 where 條件語句
刪除不能刪除某一列的值,只能刪除一行記錄,如果不增加where條件語句會(huì)將表中的所有記錄刪除,但是不會(huì)刪除表,
表的刪除使用drop語句
另外truncate 表名 語句也可以刪除所有表記錄,但是不可恢復(fù),
truncate語句原理是將表刪除,然后重新建張表,不可恢復(fù)數(shù)據(jù),而delete語句可以刪除一行記錄,也可以刪除整個(gè)表的所有記錄,他的原理是將所有行的記錄刪除,并不會(huì)將表刪除,在一個(gè)事務(wù)中是可以回滾rollback恢復(fù)的。刪除整表時(shí)truncate語句性能好些,不會(huì)占用資源。
select語句
select *|指定列名 from 表名
select * from employee 查看表中所有的數(shù)據(jù)
select gendet from employee 查看表中的gender列數(shù)據(jù)
select distinct gender from employee 查看表中的gender列數(shù)據(jù),不顯示重復(fù),distinct關(guān)鍵字就是去重的。
該使用什么語句應(yīng)該根據(jù)具體的需求,插入語句insert 刪除語句delete 都是對整行的操作 update,select是對列的操作,update可以對整列也可以加入限制條件對列的一部分操作,select只能對整列進(jìn)行操作。
查詢時(shí)進(jìn)行運(yùn)算
select 列名運(yùn)算表達(dá)式 from 表名
select 列名 as 列別名 from 表名
select name,english+10 from scores;英語成績列都加十分
select name,english +math+chinese as 總分 from scores;注意as可以省略,該語句的作用是查詢并求總分,總分顯示列english +math+chinese更改為別名總分
查詢時(shí)進(jìn)行過濾查詢
使用where語句進(jìn)行過濾查詢
select english+math+chinese as 總分 where name='zs'查詢zs的總分
select * from scores where english >80;查詢英語分?jǐn)?shù)大于80的記錄
select語句中常用的運(yùn)算符
> < <= >= = <>不等于
between...and...
select * from scores where chinese between 70 and 80;注意先寫小的后寫大的
in()在幾個(gè)固定值中取值。
select * from scorse where chinese in(70,80,90);查詢語文成績是70和80,90中的記錄
like 模糊查詢結(jié)合%通配符和_通配符使用,%代表任意長度字符串,_表示單個(gè)字符
select * from scores where name like '老%'查詢名字以老開頭的所有記錄
select * from scores where name like '老_'查詢名字以老開頭的兩字名字額所有記錄
is null ,is not null ,注意不可以寫=null,因?yàn)閚ull本身就是一個(gè)值,代表1/2;0是false 1是true;
當(dāng)and與or同時(shí)使用時(shí),and的優(yōu)先級(jí)大于or
查詢時(shí)進(jìn)行排序order by語句
select * from 表名 where 條件語句 order by 列名 asc|dsc,列名asc|dsc
asc是升序,dsc是降序
分組函數(shù)---結(jié)合查詢分組進(jìn)行數(shù)據(jù)統(tǒng)計(jì)
count(*)返回查詢結(jié)果記錄的條數(shù)
select count(*) from scores where math>90;返回?cái)?shù)據(jù)成績大于90的記錄共有多少條
sum(列名)對一列的數(shù)據(jù)求和
select sum(match) from scores ;求數(shù)學(xué)總成績
select sum(match),sum(chinese) from scores 求語文數(shù)學(xué)各科的成績總和
select sum(match+chinese) from scores 求語文數(shù)學(xué)的總成績
avg對列數(shù)據(jù)求平均值
select avg(math) from scores 求數(shù)學(xué)的平均值,對于null值是不參與運(yùn)算的
select avg(math+chinese) from scores 求總分的平均分,同樣有過有一條記錄有個(gè)null值他的其他成績也補(bǔ)參與運(yùn)算
max,min對一列數(shù)據(jù)求最值。
分組
分組的目的是為了統(tǒng)計(jì),分組的前提是有重復(fù)數(shù)據(jù),按照重復(fù)數(shù)據(jù)進(jìn)行分組歸類
如對不同部門按照部門分組,不同班級(jí)按照班級(jí)分組。
group by語句,要注意where是不能與group by同時(shí)使用的
having關(guān)鍵字,添加分組查詢的條件
select product,sum(price) from oders group by product having sum(price)>100
數(shù)據(jù)庫數(shù)據(jù)的備份和恢復(fù)
備份數(shù)據(jù)庫 mysqldump -u 用戶名 -p 數(shù)據(jù)庫名>備份文件名.sql
數(shù)據(jù)庫恢復(fù)
首先創(chuàng)建一個(gè)空的數(shù)據(jù)庫然后 mysql -u 用戶名 p 數(shù)據(jù)庫名 < 文件名.sql 在cmd中使用
外建約束的使用
多表設(shè)計(jì)
1,建立多張表
2,通過外建約束建立表之間的從屬關(guān)系表,
alter table employee add foreign key(dept_id) references dept(id);對員工表添加外建約束,將部門id列與部門表的id列相關(guān)聯(lián)。
添加了外建約束后,不能隨便取值,取值是引用表存在主鍵值,也不能隨便刪除值。
?
轉(zhuǎn)載于:https://www.cnblogs.com/ss561/p/4620858.html
總結(jié)
- 上一篇: 它能让你甜蜜蜜 也能让你急性中毒
- 下一篇: Code First02---CodeF