MySQL多表
外鍵
主表主鍵和從表外鍵 ==(從表的外鍵引用主表的主鍵)==
從表的外鍵類型必須和主表的主鍵類型一樣
主鍵被外鍵引用的時候不能刪(主表不能刪除已經被從表引用的記錄)
從表外鍵不能添加主表不存在的記錄
外鍵作用
-- 分類表
create table category(
cid varchar(32) primary key,
cname varchar(100)
);
-- 商品表
create table product(
pid varchar(32) primary key,
pname varchar(40),
price double,
category_id varchar(32)
);
-- 添加外鍵
alter table 從表 add [constraint] [外鍵名] foreign key (從表外鍵字段名) references 主表 (主表主鍵);
alter table product add foreign key(category_id) references category(cid);
alter table product add constraint product_fk foreign key(category_id) references category(cid);
表與表之間關系
一對多關系
主表主鍵被多個從表的外鍵引用
部門--員工,分類--商品,客戶--訂單
多對多關系
多對多關系需要創建第三者表,表中至少2個字段,這2個字段分別作為外鍵指向各自一方的主鍵
學生--課程
一對一關系(了解)
開發中不常用,可以做成一張表
主表的主鍵唯一,主表的外鍵也唯一unique
創建表實現
--多對多
-- 訂單表
CREATE TABLE orders(
oid VARCHAR(32) PRIMARY KEY,
totalprice DOUBLE
);
-- 訂單項表
CREATE TABLE orderitem(
oid VARCHAR(50),
pid VARCHAR(50)
);
-- 商品表
create table product(
pid varchar(32) primary key,
pname varchar(40),
price double,
category_id varchar(32)
);
-- 聯合主鍵(可省略)
alter table orderitem add primary key(oid,pid);
-- 訂單表和訂單項表的主外鍵關系
alter table orderitem add constraint orderitem_orders_fk foreign key(oid) references orders(oid);
-- 商品表和訂單項表的主外鍵關系
alter table orderitem add constraint orderitem_product_fk foreign key(pid) references product(pid);
查詢操作
查詢分類
交叉連接查詢(基本不會使用,得到的是兩個表的乘積)
select * from A,B;
A表有n條記錄,B表有m條記錄,得到的結果為n*m條記錄
內連接查詢(使用關鍵字inner join --inner可以省略)
隱式內連接: select * from A,B where 條件;
顯式內連接:select * fom A inner join B on 條件;
外連接查詢(使用關鍵字outer join --outer可以省略)
左外連接:left outer join
右外連接:right outer join
區別:
左外連接:左表的全部以及兩個表的交集(內連接)
右外連接:右表的全部以及兩個表的交集(內連接)
-- 隱式內鏈接查詢
SELECT * FROM category,product WHERE category_id=cid;
SELECT * FROM category AS c,product AS p WHERE c.cid = p.category_id;
-- 顯示內鏈接查詢
SELECT * FROM category INNER JOIN product ON cid = category_id;
SELECT * FROM category AS c INNER JOIN product AS p ON c.cid = p.category_id;
-- 左右外連接查詢
SELECT * FROM category LEFT OUTER JOIN product ON cid = category_id;
SELECT * FROM category AS c LEFT OUTER JOIN product AS p ON c.cid = p.category_id;
SELECT * FROM category RIGHT OUTER JOIN product ON cid = category_id;
SELECT * FROM category AS c RIGHT OUTER JOIN product AS p ON c.cid = p.category_id;
子查詢
將一條select語句結果作為另一條select語法的一部分(查詢條件,查詢結果,表等)
根據category表的"化妝品"字段搜索到它的cid,然后根據cid去product表里搜索所有的化妝品產品
開發中子查詢用的概率沒有內連接和外連接用的多
JDBC
抽取工具類
在數據庫連接中,加載驅動,獲取連接,釋放資源的代碼都是重復的,如果對數據庫操作的方法多,就會使代碼冗余量多
public class JDBCUtils {
private static Connection conn = null;
static {
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mybase";
String user = "root";
String password = "root";
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("加載數據庫驅動失敗!");
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("連接數據庫異常");
}
}
private JDBCUtils(){}
public static Connection getConnection() {
return conn;
}
}
使用properties配置文件
在開發中遇到的四個參數:驅動類型,數據庫url,用戶名,密碼通常寫在配置文件中,方便后期的維護和更新數據庫
如果不使用配置文件,通過硬編碼的形式獲取數據庫連接,交付工程后客戶如果需要修改數據庫類型或者修改數據庫信息,則需要重新給一份bin/class文件
通過配置文件,就不需要動代碼了
位置: src文件下
如果是web程序,則放在classpath文件夾下
文件按擴展名必須是properties
文件內容:
一行一組數據: key=value
不要有空格
不支持中文,只能使用英文
db.properties文件內容:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/dbname
user=root
password=root
通過ResourceBundle加載配置文件
ResourceBundle專門用于處理properties文件的
讀取的文件名不需要加后綴
ResourceBundle rb = ResourceBundle.getBundle("fileName");//不需要加后綴
String value = rb.getString("key");
通過Properties加載配置文件
Properties類也用于處理properties文件的
讀取的文件名需要加后綴
//獲取類加載器
static {
InputStream is = currentClass.class.getClassLoader().getRescoreAsStream("fileName.propertyes");
Properties prop = new Propertyes();
prop.load(is);
String value = prop.getProperties("key");
}
最后編輯于 :2017.12.08 00:40:57
?著作權歸作者所有,轉載或內容合作請聯系作者 平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。