關系化資料庫
儲存關系模式資料的容器
關系模式是對業務對象實體,屬性以及關系的抽象,提煉需求的名詞是建立實體關系模型常用的方法。要了解E-R實體關系圖的繪制。
常用關系資料庫
Microsoft SQL Server;微軟公司産品,中等規模資料庫,運作在window平台,一般結合.net開發平台使用
Oracle;甲骨文公司産品,大型商業資料庫,可以運作在任何作業系統上,經常與java一起使用。
MySQL;最初是一個開源免費的資料庫産品,中小型資料庫,輕便,網際網路行業主流資料庫
SQLITE;嵌入式資料庫,安卓内部主要資料庫。
資料庫的連接配接與組成
連接配接網絡上的資料庫
mysql -h ip -P port -u root -p 回車 輸入密碼
show databases; 檢視所有資料庫
安裝mysql後會自帶兩個資料庫mysql,test
mysql存放一些資料庫的核心資料,使用者權限密碼等
test用來測試的資料庫
在一個伺服器上,可以使用多個資料庫database,一個資料庫内部建立對個資料表table
在資料庫中存在多個使用者,每個用後都有相應的操作權限,預設有個root使用者,是超級管理者具有所有權限
table表的一行稱為一條記錄,一般對應着java程式中的一個對象
SQL語言
結構化查詢語言
特性
1,非過程性語言,每一條SQL語句獨立執行沒有先後的依賴關系
2,官方提供的資料庫标準語言,任何資料庫都必須支援SQL語言文法
3,SQL是用來存取關系型資料庫的語言,具有查詢,操縱,定義和控制關系型資料的四方面功能。
為加強SQL的語言能力,各廠商增強了過程性語言的特征,提供SQL語言的擴充
SQL語言分類
DDL;資料定義語言,用來定義資料庫的對象,如資料表,視圖,索引
DML;資料操縱語言,在資料庫表中更新,增加和删除記錄,如update,insert,delete
DCL;資料控制語言,使用者設定使用者權限和控制事務語句,如grant,revoke,if else,while,begin transaction
DQL;資料查詢語言,資料查詢語言,如select
SQL語句的使用
建立資料庫
CREAT DATABASE[IF NOT EXISTS] db_name;
character set 編碼表 collate比較方式;//為資料庫指定字元集合比較方式,如果不指定使用預設的編碼集和比較方式
檢視資料庫
show creat database db_name;檢視目前資料庫編碼集
select database();檢視目前使用的資料庫
删除資料庫
drop database db_name;
修改資料庫編碼
alter database db_name character set 編碼表
切換資料庫
use db_name;如果想要對資料庫進行操作,需要切換到指定的資料庫
建立資料表
create table table_name(列名 類型(長度),列名 類型(長度))character set編碼表
如果沒有指定編碼表會使用資料庫預設的
如 create table user(
id int,
name varchar(40),
password varchar(40),
birthday date
);
java資料類型與資料庫資料類型的對應關系,除了字元串類型必須要指定長度之外其他的都可以使用預設長度
字元串 VARCHAR,CHAR對應string,前者是長度可變經常使用,後者是長度固定的性能好些
大資料類型 BLOB,TEXT;前者主要存些位元組檔案,後者存儲字元檔案
數值型 TINYINT,SMALLINT,INT,BIGINT,FLOAT,DOUBLE分别對應byte,short,int,long,float,double
邏輯型 BIT
日期型 DATE,TIME,DATETIME,TIMESTAMP
建立表明之後可以通過desc 表名檢視表結構
單表的限制
定義主鍵限制;主鍵限制唯一辨別一條記錄,主鍵不能為空不能重複,主鍵如果為數字類型一般設定主鍵自動增長auto_increment
primary key
唯一限制;該字段内容不允許重複
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,
);
資料表修改
alter table使用該語句增加,修改或删除列的文法
alter table 表名 add 列名 類型(長度) 限制;//增加
alter table 表名 modify 列名 類型(長度) 限制;//修改
alter table 表名 drop 列名 //删除
修改已有資料表一列的名稱
alter table 表明 change 舊列名 新列名 類型(長度) 限制
修改表名 rename table 舊表名 to 新表名
修改表的字元集 alter table 表名 charater set utf8;要注意表的編碼集與資料庫的編輯不是同一個
show tables 檢視目前資料庫中的所有表
alter primary修改主鍵
資料庫CRUD語句
Insert語句
Insert into 表名(列名,列名。。。) values(值,值,。。。)
要注意列與值的互相對應。
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');
值中除了數字不用加單引号之外,其他所有值都要加單引号
在插入資料時,如果有些列存在預設值或者可以為null,插入可以省略這些列,隻需要關注不能為空的列就好
另外在插入資料的時候,也可以省略所有列名,但是必須按照表的順序插入所有列的值
要注意SQL的編碼問題。
Update語句
update 表名 set 列名=值,列名=值 where 條件語句
注意如果沒有寫where語句限制條件,則會将該列的所有資料都進行更改
update employee set salary=5000;//這句話把所有員工的新水都改為5000
update emploee set salary=5000 where name='zs';将zs的薪水改為5000,要注意此處算是SQL語句的餓一個bug條件比較時可能不區分大小寫,如果ZS的薪水存在也會更改,需要再name前加入關鍵字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條件語句會将表中的所有記錄删除,但是不會删除表,
表的删除使用drop語句
另外truncate 表名 語句也可以删除所有表記錄,但是不可恢複,
truncate語句原理是将表删除,然後重建立張表,不可恢複資料,而delete語句可以删除一行記錄,也可以删除整個表的所有記錄,他的原理是将所有行的記錄删除,并不會将表删除,在一個事務中是可以復原rollback恢複的。删除整表時truncate語句性能好些,不會占用資源。
select語句
select *|指定列名 from 表名
select * from employee 檢視表中所有的資料
select gendet from employee 檢視表中的gender列資料
select distinct gender from employee 檢視表中的gender列資料,不顯示重複,distinct關鍵字就是去重的。
該使用什麼語句應該根據具體的需求,插入語句insert 删除語句delete 都是對整行的操作 update,select是對列的操作,update可以對整列也可以加入限制條件對列的一部分操作,select隻能對整列進行操作。
查詢時進行運算
select 列名運算表達式 from 表名
select 列名 as 列别名 from 表名
select name,english+10 from scores;英語成績列都加十分
select name,english +math+chinese as 總分 from scores;注意as可以省略,該語句的作用是查詢并求總分,總分顯示列english +math+chinese更改為别名總分
查詢時進行過濾查詢
使用where語句進行過濾查詢
select english+math+chinese as 總分 where name='zs'查詢zs的總分
select * from scores where english >80;查詢英語分數大于80的記錄
select語句中常用的運算符
> < <= >= = <>不等于
between...and...
select * from scores where chinese between 70 and 80;注意先寫小的後寫大的
in()在幾個固定值中取值。
select * from scorse where chinese in(70,80,90);查詢國文成績是70和80,90中的記錄
like 模糊查詢結合%通配符和_通配符使用,%代表任意長度字元串,_表示單個字元
select * from scores where name like '老%'查詢名字以老開頭的所有記錄
select * from scores where name like '老_'查詢名字以老開頭的兩字名字額所有記錄
is null ,is not null ,注意不可以寫=null,因為null本身就是一個值,代表1/2;0是false 1是true;
當and與or同時使用時,and的優先級大于or
查詢時進行排序order by語句
select * from 表名 where 條件語句 order by 列名 asc|dsc,列名asc|dsc
asc是升序,dsc是降序
分組函數---結合查詢分組進行資料統計
count(*)傳回查詢結果記錄的條數
select count(*) from scores where math>90;傳回資料成績大于90的記錄共有多少條
sum(列名)對一列的資料求和
select sum(match) from scores ;求數學總成績
select sum(match),sum(chinese) from scores 求國文數學各科的成績總和
select sum(match+chinese) from scores 求國文數學的總成績
avg對列資料求平均值
select avg(math) from scores 求數學的平均值,對于null值是不參與運算的
select avg(math+chinese) from scores 求總分的平均分,同樣有過有一條記錄有個null值他的其他成績也補參與運算
max,min對一列資料求最值。
分組
分組的目的是為了統計,分組的前提是有重複資料,按照重複資料進行分組歸類
如對不同部門按照部門分組,不同班級按照班級分組。
group by語句,要注意where是不能與group by同時使用的
having關鍵字,添加分組查詢的條件
select product,sum(price) from oders group by product having sum(price)>100
資料庫資料的備份和恢複
備份資料庫 mysqldump -u 使用者名 -p 資料庫名>備份檔案名.sql
資料庫恢複
首先建立一個空的資料庫然後 mysql -u 使用者名 p 資料庫名 < 檔案名.sql 在cmd中使用
外建限制的使用
多表設計
1,建立多張表
2,通過外建限制建立表之間的從屬關系表,
alter table employee add foreign key(dept_id) references dept(id);對員工表添加外建限制,将部門id列與部門表的id列相關聯。
添加了外建限制後,不能随便取值,取值是引用表存在主鍵值,也不能随便删除值。