標籤:檔案 ini 思維導圖 第一個 今日學習 資料 thinkpad 用戶端 設定
今天晨讀單詞:
order:訂單
constraint:(強制)約束
foreign key:外鍵
references:指向
orderitem:訂單項
join:加入
resourceBundle:資源捆綁
classLoader:類載入器
properties:屬性
inputstream:輸入資料流
今日學習目標:
1、能夠描述表與表的關係
2、能獨立編寫一對多的表關係SQL語句
3、能獨立編寫多對多的表關係SQL語句
4、能使用SQL進行多表查詢
5、能使用JDBC完成單表增刪改查操作
通過MySQL思維導圖進行回顧,再進入今天的筆記內容
01_一對多建表原則
02_多對多建表原則
03_一對一建表原則
04_商城的實體抽取和表關係分析
05_內串連和外串連區別
使用properties設定檔:
方法一:
方法二:
MySQL多表操作說明:
問題說明:一、主從表資料更新問題
當兩張表沒有建立任何關係的時候,那麼可以隨意刪除其中任何一張表中的任何記錄,但是一旦把兩張表建立了關係(主外鍵約束)之後,那麼不能刪除主表中的資料(這些資料內容在從表中有關聯關係的資料),只想執行刪除(更新操作),那麼就會出現中的錯誤。
要想刪除主表中與從表有關聯關係的資料,可以這麼做:
- 解除主從表的約束關係
- 先刪除從表中與主表有關係的資料[ThinkPad1] ,再刪除主表中的資料。
另外,從表也不能添加主表中不存在的資料!
[ThinkPad1]先把p003和P004的資料刪除了,再刪除分類表中c002的資料。
二、關於子查詢問題
一般子查詢會存在於兩張關聯的表中,那麼我們可以先把帶有條件的那張表與另外一張表的關聯關係欄位查出來,並作為另外一張表查詢的條件值,然後再次進行查詢。
例子:查詢“化妝品”分類上架商品詳情。
先查主表的主鍵(根據指定的條件<化妝品,cname[ThinkPad1] >)
select cid from category where panme=’化妝品’
查詢所有商品的詳細資料(根據分類id查詢):
select * from product where category_id=cid[ThinkPad2]
select * from product where category_id=( select cid from category where cname=’化妝品’);
三、分頁查詢問題
分頁查詢使用的是limit關鍵字進行查詢。它後面有兩個參數。第一個參數[ThinkPad3] 是起始的位置,第二個參數是每頁需要顯示的條目數。
舉例:商品表中有10條記錄,現在需要進行分頁顯示,每頁顯示3條資料。現在需要查看第二頁的資料。那麼應該使用的sql語句是:
select * from product limit 3[ThinkPad4] ,3;
[ThinkPad1]屬於主表category表中的內容,那麼先查出主表的主鍵cid.然後將查出的內容作為條件。
[ThinkPad2]需要先從主表category中查詢出來。
[ThinkPad3]取值為:(需要查看第幾頁-1)乘以第二個參數
[ThinkPad4](2-1)*3
執行分頁查詢語句後,顯示的結果如下:
四、關於mysql編碼問題1 查看MySQL編碼
SHOW VARIABLES LIKE ‘char%‘;
因為當初安裝時指定了字元集為UTF8,所以所有的編碼都是UTF8。
l character_set_client:你發送的資料必須與client指定的編碼一致!!!伺服器會使用該編碼來解讀用戶端發送過來的資料;
l character_set_connection:通過該編碼與client一致!該編碼不會導致亂碼!當執行的是查詢語句時,用戶端發送過來的資料會先轉換成connection指定的編碼。但只要用戶端發送過來的資料與client指定的編碼一致,那麼轉換就不會出現問題;
l character_set_database:資料庫預設編碼,在建立資料庫時,如果沒有指定編碼,那麼預設使用database編碼;
l character_set_server:MySQL伺服器預設編碼;
l character_set_results:響應的編碼,即查詢結果返回給用戶端的編碼。這說明用戶端必須使用result指定的編碼來解碼;
2 控制台編碼
修改character_set_client、character_set_results、character_set_connection為GBK,就不會出現亂碼了。但其實只需要修改character_set_client和character_set_results。
控制台的編碼只能是GBK,而不能修改為UTF8,這就出現一個問題。用戶端發送的資料是GBK,而character_set_client為UTF8,這就說明用戶端資料到了伺服器端後一定會出現亂碼。既然不能修改控制台的編碼,那麼只能修改character_set_client為GBK了。
伺服器發送給用戶端的資料編碼為character_set_result,它如果是UTF8,那麼控制台使用GBK解碼也一定會出現亂碼。因為無法修改控制台編碼,所以只能把character_set_result修改為GBK。
l 修改character_set_client變數:set character_set_client=gbk;
l 修改character_set_results變數:set character_set_results=gbk;
設定編碼只對當前串連有效,這說明每次登入MySQL提示符後都要去修改這兩個編碼,但可以通過修改設定檔來處理這一問題:設定檔路徑:D:\Program Files\MySQL\MySQL Server 5.1\ my.ini
3 MySQL工具
使用MySQL工具是不會出現亂碼的,因為它們會每次串連時都修改character_set_client、character_set_results、character_set_connection的編碼。這樣對my.ini上的配置覆蓋了,也就不會出現亂碼了。
【JAVAWEB學習筆記】09_MySQL多表&JDBC(包含MySQL資料庫思維導圖)