數(shù)據(jù)庫:就是存放數(shù)據(jù)的倉庫,是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲(chǔ)和管理數(shù)據(jù)的倉庫,是對(duì)數(shù)據(jù)持久化的工具
使用數(shù)據(jù)庫的優(yōu)點(diǎn)
存儲(chǔ)大量數(shù)據(jù)
保持?jǐn)?shù)據(jù)信息的完整、一致性
數(shù)據(jù)的共享和安全
常用數(shù)據(jù)庫
ORACLE
甲骨文公司的產(chǎn)品
第一個(gè)支持SQL的數(shù)據(jù)庫,在高端數(shù)據(jù)應(yīng)用中分布最廣
SQLServer
微軟公司的產(chǎn)品
將關(guān)系型數(shù)據(jù)庫應(yīng)用推向普及化,在小型機(jī)中很好的適用性
DB2
IBM公司的產(chǎn)品
基于UNIX系統(tǒng),主要應(yīng)用在商務(wù)大型平臺(tái)
MySQL
瑞典MySQLAB公司產(chǎn)品,ORACLE旗下產(chǎn)品
主要應(yīng)用在中小型網(wǎng)站,速度快體積小,成本低,開源
什么是DBMS
(DataBase Management System)數(shù)據(jù)庫管理系統(tǒng),負(fù)責(zé)對(duì)數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和操作,確保數(shù)據(jù)操作的安全性和完整性。用戶通過DBMS訪問數(shù)據(jù)庫中的數(shù)據(jù)
數(shù)據(jù)庫中的信息是如何記錄的?
MySQL以庫為單位存儲(chǔ)數(shù)據(jù),具體的數(shù)據(jù)內(nèi)容存儲(chǔ)在數(shù)據(jù)表中
什么是DBMS
(DataBase Management System)數(shù)據(jù)庫管理系統(tǒng),負(fù)責(zé)對(duì)數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和操作,確保數(shù)據(jù)操作的安全性和完整性。用戶通過DBMS訪問數(shù)據(jù)庫中的數(shù)據(jù)
數(shù)據(jù)庫中使用SQL語句訪問
Java語言智能被JVM識(shí)別運(yùn)行,在數(shù)據(jù)庫中無法識(shí)別。開發(fā)人員需要和數(shù)據(jù)庫交互就需要使用數(shù)據(jù)庫所能識(shí)別的語言
SQL:(Structured Query Language)結(jié)構(gòu)化的查詢語言,是一種數(shù)據(jù)庫查詢和程序設(shè)計(jì)語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)
SQL語言包含4個(gè)部分
1.DDL (Data Definition Language ) 數(shù)據(jù)定義語言 如數(shù)據(jù)表的建立修改刪除等
2.DML (Data Manipulation Language) 數(shù)據(jù)操作語言 如對(duì)數(shù)據(jù)的增刪改
3.DQL (Data Query Language ) 數(shù)據(jù)查詢語言 如對(duì)數(shù)據(jù)的查詢
4.DCL (Data Control Language) 數(shù)據(jù)控制語言 如事務(wù)的提交回滾,權(quán)限控制等
不同的數(shù)據(jù)庫雖然都通用SQL語言,但是還是會(huì)存在一定的差異性,主要體現(xiàn)在以下幾個(gè)方面:
1.SQL中的關(guān)鍵字,如SQLServer中有top關(guān)鍵字,mysql中有l(wèi)imit關(guān)鍵字
2.函數(shù),每個(gè)數(shù)據(jù)庫有著獨(dú)立的函數(shù)庫,函數(shù)可以在SQL中直接調(diào)用
3.SQL編程擴(kuò)展:定義變量、條件結(jié)構(gòu)、循環(huán)結(jié)構(gòu)
數(shù)據(jù)庫的高級(jí)應(yīng)用主要體現(xiàn)在SQL編程上:觸發(fā)器、存儲(chǔ)過程、函數(shù)、游標(biāo)
SQL的注意項(xiàng):
1.SQL語句不區(qū)分大小寫
2.每行SQL語句使用分號(hào)結(jié)束(不寫分號(hào)也可以,但是多條語句同時(shí)執(zhí)行的時(shí)候必須要有分號(hào),所以最好平時(shí)都寫分號(hào))
SQL中的注釋:
單行注釋使用 --
多行注釋使用 /* */
創(chuàng)建數(shù)據(jù)庫:(在Navicat點(diǎn)擊新建查詢,然后在彈出的界面中進(jìn)行編寫)
CREATE DATABASE 數(shù)據(jù)庫名 [CHARACTER SET 字符集](中括號(hào)中的可寫可不寫,只要安裝時(shí)指定了UTF-8字符集就可以不寫)
創(chuàng)建以后查找創(chuàng)建的文檔實(shí)在C——Users——Administrator——文檔——Navicat——MySQL——Servers——localhost_3306——找到指定的數(shù)據(jù)名稱
-- 創(chuàng)建數(shù)據(jù)庫create database geekhome;
刪除和創(chuàng)建可以在同一個(gè)界面,因?yàn)榭梢詥为?dú)運(yùn)行一句代碼,即使寫了刪除語句,但是沒有運(yùn)行,也是刪除不了的
-- 刪除數(shù)據(jù)庫drop database geekhome;
選擇使用的數(shù)據(jù)庫:選擇的是哪個(gè)庫,新建的數(shù)據(jù)就會(huì)保存在哪個(gè)庫
-- 選擇使用的數(shù)據(jù)庫use geekhome;
創(chuàng)建數(shù)據(jù)表
-- 創(chuàng)建數(shù)據(jù)表create table test_table( test_name varchar(20); )
創(chuàng)建表之前要先進(jìn)行設(shè)計(jì)
數(shù)據(jù)表設(shè)計(jì):
良好的數(shù)據(jù)庫設(shè)計(jì)
節(jié)省數(shù)據(jù)存儲(chǔ)空間
保證數(shù)據(jù)的完整性
方便進(jìn)行數(shù)據(jù)庫應(yīng)用程序的開發(fā)
糟糕的數(shù)據(jù)庫設(shè)計(jì):
數(shù)據(jù)冗余,空間浪費(fèi)
數(shù)據(jù)修改或插入造成異常
數(shù)據(jù)表設(shè)計(jì)步驟:
分析需求,實(shí)現(xiàn)數(shù)據(jù)建模
滿足數(shù)據(jù)表的三范式
創(chuàng)建數(shù)據(jù)表
實(shí)施數(shù)據(jù)表的完整性約束
數(shù)據(jù)庫三范式:完成數(shù)據(jù)分析建模后,數(shù)據(jù)表要需要進(jìn)行三范式設(shè)計(jì)
第一范式
確保列的原子性,每個(gè)數(shù)據(jù)列都是不可分割的單元
第二范式
每行數(shù)據(jù)都應(yīng)根據(jù)一個(gè)依賴列被唯一區(qū)分
第三范式
行中的每列都應(yīng)直接關(guān)聯(lián)主鍵,即不能存在其他表主鍵以外的字段
特殊情況:
編號(hào)和字段進(jìn)行與表格間的關(guān)聯(lián)是,編號(hào)占存更少,字段字符串產(chǎn)生的冗余更多
但是如果對(duì)一個(gè)字段有著非常高度的查詢,則可以犧牲內(nèi)存產(chǎn)生冗余使用字段進(jìn)行表格間的關(guān)聯(lián)
所有結(jié)構(gòu)相同的數(shù)據(jù),都應(yīng)存儲(chǔ)在一個(gè)表格中,不同點(diǎn)用一個(gè)屬性進(jìn)行區(qū)分
創(chuàng)建數(shù)據(jù)表:
create table 表名(
字段名 數(shù)據(jù)類型(長度),
字段名 數(shù)據(jù)類型(長度)
)
char是定長字符 如果聲明文本類型為char(10),實(shí)際的值為’tom’,在磁盤中分配的字節(jié)空間還是要占據(jù)10個(gè)字節(jié)
varchar 是變長字符 如果聲明文本類型為varchar(10),實(shí)際的值為’tom’,在磁盤中分配的字節(jié)空間還是要占據(jù)3個(gè)字節(jié)
數(shù)據(jù)表操作
刪除數(shù)據(jù)表:
drop table 表名
添加列:
alter table 表名 add 列名 數(shù)據(jù)類型
修改列類型:表中沒有數(shù)據(jù)的時(shí)候才能修改
alter table 表名 modify 列名 新數(shù)據(jù)類型
修改列名:
alter table 表名 change 原列名 新列名 類型
刪除列:
alter table 表名 drop column 列名
查看數(shù)據(jù)表:
select * from 表名
完整性約束
創(chuàng)建數(shù)據(jù)表后需要添加表的約束條件,確保表數(shù)據(jù)的完整性
完整性=數(shù)據(jù)+可靠+準(zhǔn)確
完整性約束
輸入的類型是否正確?
年齡必須是數(shù)值
輸入的格式是否正確
身份證號(hào)碼為18位
是否在允許的范圍內(nèi)
性別只能為男女
是否存在重復(fù)輸入
同一個(gè)學(xué)生檔案錄入了兩次
域完整性:對(duì)列提出要求
實(shí)體整型:對(duì)行提出要求
引用完整性:關(guān)聯(lián)的值不能隨便寫
實(shí)體完整性約束:主鍵約束和唯一約束
主鍵約束:
一張表中只能擁有一個(gè)主鍵
主鍵應(yīng)具備唯一性和穩(wěn)定性
主鍵值不能為空
主鍵約束的使用
方法一:
create table `user`(
userId int primary key,
)
方法二:
create table `user`(
userId int,
constraint 約束名 primary key(主鍵列名稱)
)
方法三:
alter table 表名 add constraint 約束名 primary key(主鍵列名稱)
刪除主鍵:
alter table 表名 drop primary key
唯一約束:防止重復(fù)數(shù)據(jù)的產(chǎn)生
表中可以擁有多個(gè)唯一約束
唯一約束的使用:
alter table 表名 add constraint 約束名 unique(列名稱)
域完整性約束:
1.非空約束:數(shù)據(jù)列是否必填
在列名后面添加 not null
CREATE TABLE `user`( userId int primary key, userName varchar(20) not null)
2.默認(rèn)約束:數(shù)據(jù)列是否具備默認(rèn)值
在列名設(shè)置后面添加 default ' 默認(rèn)值內(nèi)容’
CREATE TABLE `user`( userId int primary key, userName varchar(20) default '默認(rèn)值’ )
3.檢查約束(MySQL中無效):數(shù)據(jù)列是否有效
如果部門表的經(jīng)理編號(hào)引用自員工表的員工編號(hào),需要通過外鍵約束限制經(jīng)理編號(hào)只能寫入員工表的員工編號(hào)
在該過程中,部門表引用員工表,部門表稱為外表,員工表稱為主表
外表中的經(jīng)理編號(hào)又稱為外鍵,外鍵只能引用主表的主鍵或者是唯一鍵
引用完整性約束:
外鍵約束:
alter table 外表表名[引用表] add constraint 約束名 foreign key(外鍵列) reference 主表名名[被引用表](主表中的主鍵)
alter table score add constraint fk_uid foreign key(uid) references user(userId)
刪除主鍵約束
alter table 表名 drop primary key
刪除唯一約束
alter table 表名 drop index 約束名
刪除外鍵約束
alter table 表名 drop foreign key 外鍵名
實(shí)例一:
-- 創(chuàng)建數(shù)據(jù)庫create database geekhome;-- 刪除數(shù)據(jù)庫drop database geekhome;-- 選擇使用的數(shù)據(jù)庫use geekhome;-- 創(chuàng)建數(shù)據(jù)表create table users ( userid int, userName varchar(20), birthday datetime, email varchar(50), detail text);-- 創(chuàng)建表的時(shí)候添加主鍵約束方式一-- 每張表中只能具備一個(gè)主鍵create table users ( userid int primary key, userName varchar(20), birthday datetime, email varchar(50), detail text);-- 創(chuàng)建表的時(shí)候添加主鍵約束方式二create table users ( userid int, userName varchar(20), birthday datetime, email varchar(50), detail text, constraint pk_userid primary key(userid) );-- 在創(chuàng)建表之后單獨(dú)添加主鍵alter table//修改表 users add constraint pk_userid primary key(userid);-- 添加唯一約束alter table users add constraint uq_username unique(username);-- 刪除主鍵alter table users drop primary key-- 建表時(shí)添加非空約束-- 默認(rèn)約束create table users ( userid int, userName varchar(20) not null, -- 非空約束 birthday datetime, email varchar(50) default 'xxx@geekhome.com', -- 默認(rèn)約束 detail text, constraint pk_userid primary key(userid) );-- 創(chuàng)建部門表create table department ( depId int primary key, depName varchar(50) not null, managerId int -- 部門經(jīng)理的編號(hào)來自于users表的編號(hào))-- 為部門表中的經(jīng)理編號(hào)添加外鍵約束alter table department add constraint fk_managerId foreign key(managerId)references users(userid)-- 刪除數(shù)據(jù)表drop table users;drop table department;-- 添加新的數(shù)據(jù)列alter table users add age int;-- 修改列的數(shù)據(jù)類型alter table users modify email tinytext; -- 修改列的名稱alter table users change email address varchar(100);-- 刪除列alter table users drop column detail;-- 查看數(shù)據(jù)表select * from users;select * from department;
實(shí)例二:
-- 創(chuàng)建數(shù)據(jù)庫 數(shù)據(jù)庫名稱不能重復(fù)create database geekhome;-- 使用數(shù)據(jù)庫use geekhome;-- 刪除數(shù)據(jù)庫drop database geekhome;-- 創(chuàng)建數(shù)據(jù)表create table `user`( -- 添加主鍵 userId int primary key, username varchar(50), birthday date, registDate timestamp, remoke text)create table `user`( -- 添加主鍵 userId int, username varchar(50), birthday date, registDate timestamp, remoke text, -- 添加主鍵 constraint pk_userId primary key(userId) )create table `user`( -- 添加主鍵 userId int, username varchar(50), birthday date, registDate timestamp, remoke text)create table `user`( -- 添加主鍵 userId int primary key, username varchar(50) not null,-- username非空 email varchar(50) default 'xxx@igeekhome.com', birthday date, registDate timestamp, remoke text)-- 創(chuàng)建成績表create table score( uid int, courseName varchar(20) not null, score DECIMAL(4,1) )-- 新建數(shù)據(jù)表后添加主鍵alter table user add constraint pk_userid primary key(userId);-- 添加唯一約束,表中可以有多個(gè)唯一鍵alter table user add constraint uq_username unique(username);-- 添加外鍵約束,被引用的表稱為主表,引用主表的表稱為外表;-- 外表中引用主表的列稱為外鍵列,主表中被引用的列必須是主鍵或者唯一鍵alter table score add constraint fk_uid foreign key(uid) references user(userId)-- 刪除主鍵約束alter table `user` drop primary key;-- 刪除唯一約束alter table user drop index uq_username-- 刪除外鍵alter table score drop foreign key fk_uid-- 添加表列alter table user add sex varchar(1)-- 刪除列alter table user drop column sex-- 修改列的數(shù)據(jù)類型alter table user modify username varchar(50)-- 修改列的名稱alter table user change username uname varchar(50)-- 刪除數(shù)據(jù)表drop table user;drop table score;-- 查看數(shù)據(jù)select * from user;
聯(lián)系客服