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