更新時間:2018-10-19 來源:黑馬程序員技術(shù)社區(qū) 瀏覽量:
數(shù)據(jù)庫(DataBase) 簡稱 DB
概念: 用于存儲和管理數(shù)據(jù)的倉庫。
特點(diǎn):
1.持久化存儲數(shù)據(jù).
2.方便存儲和管理數(shù)據(jù)
3.使用了統(tǒng)一的方式操作數(shù)據(jù)庫 --SQL
數(shù)據(jù)庫軟件與數(shù)據(jù)庫的區(qū)別:
數(shù)據(jù)庫:大的范圍,泛指所有存儲和管理數(shù)據(jù)的數(shù)據(jù)庫(數(shù)據(jù)庫軟件)
數(shù)據(jù)庫軟件: 管理和存儲數(shù)據(jù)
常見的數(shù)據(jù)庫軟件:
MySQL Oracle SQL Server(微軟公司) DB2(IBM公司)
2.mysql數(shù)據(jù)庫
安裝:
若安裝報1006(1007),沒有管理員權(quán)限
則以管理員身份打開DOS命令
輸入:msiexec /package mysql軟件所在的路徑+安裝包名稱.msi
刪除:
1.卸載MySQL
2.刪除C:/ProgramData目錄下的MySQL文件夾。
若刪除完安裝不成功,則再刪除mysql相關(guān)的注冊表
配置:
MySQL服務(wù)啟動
1.手動
2.cmd--> services.msc 打開服務(wù)的窗口
3.使用管理員打開DOS
net start mysql : 啟動mysql的服務(wù)
net stop mysql:關(guān)閉mysql服務(wù)
MySQL登錄
1.mysql -uroot -proot
2.mysql -hip -uroot -p連接目標(biāo)的密碼
3.mysql --host=ip --user=root --p=連接目標(biāo)的密碼
MySQL退出
1.exit
2.quit
了解一下文件目錄:
bin:binary(二進(jìn)制)比如:exe,batMySQL目錄結(jié)構(gòu):
1.MySQL安裝目錄:
my.ini為配置文件
2.MySQL數(shù)據(jù)目錄
數(shù)據(jù)庫:文件夾
數(shù)據(jù)表:文件
mysql數(shù)據(jù)庫軟件,數(shù)據(jù)庫,表,數(shù)據(jù)(標(biāo)記了)的關(guān)系:
1.先有mysql數(shù)據(jù)庫軟件
2.在數(shù)據(jù)庫軟件上面,創(chuàng)建多個數(shù)據(jù)庫(對應(yīng)文件夾)
比如:mysql,performance_schema,test
3.在數(shù)據(jù)庫里面,創(chuàng)建多張表(對于文件)
4.在表(二維表格)里,管理表記錄(數(shù)據(jù))
3.sql指令(重點(diǎn)掌握)sql概述
Structured Query Language:結(jié)構(gòu)化查詢語言
sql不僅能查詢操作,還能進(jìn)行增刪改(crud)操作.
其實就是定義了操作所有關(guān)系型數(shù)據(jù)庫的規(guī)則.
每一種數(shù)據(jù)庫操作的方式存在不一樣的地方,稱為"方言"
SQL通用語法:
1.SQL語句可以單行或多行書寫,以分號結(jié)尾
2.可以使用空格或縮進(jìn)來增強(qiáng)語句的可讀性
3.MySQL數(shù)據(jù)庫的SQL語句不區(qū)分大小寫,關(guān)鍵字建議使用大寫
4.3種注釋
單行注釋: -- 注釋內(nèi)容 或 # 注釋內(nèi)容(mysql 特有) 多行注釋: /* 注釋 */
sql常見的分類--四類1.DDL:數(shù)據(jù)庫定義語言,作用創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表以及修改數(shù)據(jù)庫和數(shù)據(jù)表(表結(jié)構(gòu))
2.DCL數(shù)據(jù)庫控制語言,作用 給數(shù)據(jù)庫和數(shù)據(jù)表進(jìn)行授權(quán)操作(了解)
3.DML:數(shù)據(jù)庫操作語言,作用 對表中的數(shù)據(jù)(記錄)進(jìn)行 添加,修改,刪除操作
4.DQL:數(shù)據(jù)庫查詢語言,作用 對表中的數(shù)據(jù)(記錄)進(jìn)行查詢操作
sql操作數(shù)據(jù)庫和表DDL 創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表 以及修改等操作.關(guān)鍵詞:create drop alter等
操作數(shù)據(jù)庫:CRUDC:Create 創(chuàng)建
R:Retrieve 查詢
U:Update 修改
D:Delete 刪除
使用數(shù)據(jù)庫
R:
C:
U:
D:
使用數(shù)據(jù)庫:
區(qū)分別結(jié)構(gòu)和表記錄:
表結(jié)構(gòu): 表頭(表的字段)和字段對應(yīng)的類型(數(shù)據(jù)類型)
表記錄:表頭(字段)對應(yīng)的值
C:創(chuàng)建
語法:R:查詢
U:修改
D:刪除
添加數(shù)據(jù):insert into
修改數(shù)據(jù):update
刪除數(shù)據(jù):delete
1.添加數(shù)據(jù):去除重復(fù):(distinct)
select distinct address from student;
注意:
1.字段,列名稱,表頭,都表示一個意思,都是表的Field(字段)
2.字符集,編碼格式,編碼表,都表示一個意思,都是編碼
常見的編碼:
utf-8:萬能的碼表,支持所有的字符.
gbk,gb2312,gb18030:中文的碼表,支持中文,還支持其他字符,但不包含日文,韓文等字符.
iso-8859-1:西歐的碼表,支持西歐的字符,但不支持日文,韓文,中文等字符.
條件查詢:
模糊條件查詢
分組條件查詢
排序條件查詢
子查詢
聚合函數(shù)查詢
day02
1.單表查詢(重點(diǎn))1.0 模糊查詢約束概述:一種規(guī)范(限制),數(shù)據(jù)庫約束就是對表中的數(shù)據(jù)進(jìn)行規(guī)范,讓數(shù)據(jù)具有某種特點(diǎn).
數(shù)據(jù)庫的約束:1.主鍵約束:primary key1.多表之間的關(guān)系
*一對一(了解)
eg:人和身份證
主表和子表可以是任意一方
*一對多
eg:一個部門有多個員工
主表就是一方表,這里指部門表
子表就是多方表,這里指員工表
外鍵設(shè)計在子表
*多對多(強(qiáng)化版 的 一對一)
eg:學(xué)生和課程
一個學(xué)生可以選擇多門課程,一個課程也能被多個學(xué)生選擇
主表(子表)可以是任意一方(不推薦這樣區(qū)分和設(shè)計外鍵)
外鍵設(shè)計原則:提供一張中間表,來完成外鍵的關(guān)聯(lián)
2.數(shù)據(jù)庫設(shè)計范式
4.數(shù)據(jù)庫的設(shè)計范式(了解)概念:設(shè)計數(shù)據(jù)庫時,需要遵循的一些規(guī)范。要遵循后邊的范式要求,必須先遵循前邊的所有范式要求
目前關(guān)系數(shù)據(jù)庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。
5.數(shù)據(jù)庫的備份和還原
命令行:
語法:
備份: mysqldump -u用戶名 -p密碼 數(shù)據(jù)庫名稱 > 保存的路徑
還原:
1.登錄數(shù)據(jù)庫
2.創(chuàng)建數(shù)據(jù)庫
3.使用數(shù)據(jù)庫
4.執(zhí)行文件 source 文件路徑
圖形化工具:
day03
1.多表的查詢(掌握)查詢語法:
多個表放在一起查詢
出現(xiàn)問題:笛卡爾積
笛卡爾積:一個外鍵值對應(yīng)多個主鍵值
解決方法:消除沒有用的數(shù)據(jù)
笛卡爾積: * 有兩個集合A,B .取這兩個集合的所有組成情況。
要完成多表查詢,需要消除無用的數(shù)據(jù)
通過主鍵和外鍵關(guān)聯(lián).(因為外鍵的值引用于主鍵的值)
使用where條件消除無用數(shù)據(jù)
顯式內(nèi)連接:語法:select 字段列表 from 表名1 [inner] join 表2 on 條件;
內(nèi)連接查詢的邏輯:
1.從哪些表中查數(shù)據(jù)
2.條件是什么
3.查詢哪些字段
2.外連接查詢1.左外鏈接:select 字段列表 from 表1 left [outer] join 表2 on 條件;
查詢的是左表所有數(shù)據(jù)以及其交集部分。
2.右外連接:語法:select 字段列表 from 表1 right [outer] join 表2 on 條件; 查詢的是右表所有數(shù)據(jù)以及其交集部分。
3.子查詢概念:查詢中嵌套查詢.
子查詢不同情況:1. 子查詢的結(jié)果是單行單列的:
子查詢可以作為條件,使用運(yùn)算符去判斷。 運(yùn)算符: > >= < <= =
2.子查詢的結(jié)果是多行單列的:
子查詢可以作為條件,使用運(yùn)算符in來判斷
3.子查詢的結(jié)果是多行多列的:
子查詢可以作為一張?zhí)摂M表參與查詢
2.事務(wù)(了解)1.事務(wù)的基本介紹概念:
是一組操作,這組操作要么同時成功,要么同時失敗。
2.操作:1.開啟事務(wù): start transaction;
2.回滾:rollback;
3.提交:commit;
3.在MySQL數(shù)據(jù)庫中事務(wù)自動提交事務(wù)提交的兩種方式:
1.自動提交:
mysql就是自動提交的
一條DML(增刪改)語句會自動提交一次事務(wù)。
2.手動提交:
Oracle 數(shù)據(jù)庫默認(rèn)是手動提交事務(wù)
需要先開啟事務(wù),再提交
修改事務(wù)的默認(rèn)提交方式:
查看事務(wù)的默認(rèn)提交方式:SELECT @@autocommit; -- 1 代表自動提交 0 代表手動提交
修改默認(rèn)提交方式: set @@autocommit = 0;
1.原子性:是不可分割的最小操作單位,要么同時成功,要么同時失敗。
2.持久性:當(dāng)事務(wù)提交或回滾后,數(shù)據(jù)庫會持久化的保存數(shù)據(jù)。
3.隔離性:多個事務(wù)之間。相互獨(dú)立。
4.一致性:事務(wù)操作前后,數(shù)據(jù)總量不變
5.事務(wù)的隔離級別(了解)概念:多個事務(wù)之間隔離的,相互獨(dú)立的。但是如果多個事務(wù)操作同一批數(shù)據(jù),則會引發(fā)一些問題,設(shè)置不同的隔離級別就可以解決這些問題。
存在問題:1. 臟讀:一個事務(wù),讀取到另一個事務(wù)中沒有提交的數(shù)據(jù) 2.不可重復(fù)讀(虛讀):在同一個事務(wù)中,兩次讀取到的數(shù)據(jù)不一樣。
3.幻讀:一個事務(wù)操作(DML)數(shù)據(jù)表中所有記錄,另一個事務(wù)添加了一條數(shù)據(jù),則第一個事務(wù)查詢不到自己的修改。
隔離級別:1. read uncommitted:讀未提交 產(chǎn)生的問題:臟讀、不可重復(fù)讀、幻讀 2. read committed:讀已提交 (Oracle) 產(chǎn)生的問題:不可重復(fù)讀、幻讀 3. repeatable read:可重復(fù)讀 (MySQL默認(rèn)) 產(chǎn)生的問題:幻讀 4. serializable:串行化 可以解決所有的問題
注意:隔離級別從小到大安全性越來越高,但是效率越來越低
數(shù)據(jù)庫查詢隔離級別:
select @@tx_isolation;
數(shù)據(jù)庫設(shè)置隔離級別: set global transaction isolation level 級別字符串;
3.SQL分類:DCL(了解 或 不了解)DCL:管理用戶,授權(quán)
1. 管理用戶添加用戶:* 語法:CREATE USER '用戶名'@'主機(jī)名' IDENTIFIED BY '密碼';
刪除用戶:* 語法:DROP USER '用戶名'@'主機(jī)名';
修改用戶密碼:-- 1. 切換到mysql數(shù)據(jù)庫 USE myql; -- 2. 查詢user表 SELECT * FROM USER;
SHOW GRANTS FOR '用戶名'@'主機(jī)名'; SHOW GRANTS FOR 'lisi'@'%';
2.授予權(quán)限:grant 權(quán)限列表 on 數(shù)據(jù)庫名.表名 to '用戶名'@'主機(jī)名'; eg:給張三用戶授予所有權(quán)限,在任意數(shù)據(jù)庫任意表上
GRANT ALL ON . TO 'zhangsan'@'localhost';
3.撤銷權(quán)限:revoke 權(quán)限列表 on 數(shù)據(jù)庫名.表名 from '用戶名'@'主機(jī)名'; eg:REVOKE UPDATE ON db3.account FROM 'lisi'@'%';
day04
JDBC概述概述:Java DataBase Connectivity Java 數(shù)據(jù)庫連接, Java語言操作數(shù)據(jù)庫
JDBC本質(zhì):其實是官方(sun公司)定義的一套操作所有關(guān)系型數(shù)據(jù)庫的規(guī)則,即接口,各個數(shù)據(jù)庫廠商去實現(xiàn)這套接口,提供數(shù)據(jù)庫驅(qū)動jar包。我們可以使用這套接口(JDBC)編程,真正執(zhí)行的代碼是驅(qū)動jar包中的實現(xiàn)類。
快速入門:步驟:1.導(dǎo)入驅(qū)動jar包 mysql-connector-java-5.1.37-bin.jar 1.1復(fù)制mysql-connector-java-5.1.37-bin.jar到項目的libs目錄下 1.2.右鍵-->Add As Library 2. 注冊驅(qū)動 3. 獲取數(shù)據(jù)庫連接對象 Connection 4. 定義sql 5. 獲取執(zhí)行sql語句的對象 Statement 6. 執(zhí)行sql,接收返回結(jié)果 7. 處理結(jié)果 8. 釋放資源
常見異常:
java.sql.Exception: Access denied for user'root@localhost'(use passworld yes):提示數(shù)據(jù)庫用戶名或者密碼錯誤.
l MySQLSyntaxErrorException: Table 'day04_mysql_moretab.tab_user' doesn't exist
提示 數(shù)據(jù)庫下面不存在這個表
原因:數(shù)據(jù)庫寫錯了或者表名寫錯了
l MySQLSyntaxErrorException: Unknown column 'id' in 'where clause'
原因: 未知的列字段名稱是id
l MySQLIntegrityConstraintViolationException: Duplicate entry '100' for key 'PRIMARY'
原因: uid這個主鍵值 重復(fù)添加了
l Parameter index out of range (1 > number of parameters, which is 0).
原因:sql語句的表名寫錯了或者 ?占位符 可能是中文的?
l MySQLSyntaxErrorException: You have an error in your SQL syntax
your MySQL server version for the right syntax to use near 'form tab_user' at line 1
原因: sql語句的編寫有問題。
JDBC常用的API1.java.sql.DriverManager(類)
2.java.sal.Connection(接口)
3.java.sql.Statement(接口)
4.java.sql.PerparedStatement(接口)
5.java.sql.ResultSet(接口)
本文版權(quán)歸黑馬程序員JavaEE培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:黑馬程序員JavaEE培訓(xùn)學(xué)院
首發(fā):http://java.itcast.cn/?skc