配置數據庫連接及數據庫操作
主外鍵說明:
主鍵:是表中一行的一個唯一標識,通過主鍵我們可以快速的查詢一條數據!
主鍵特性:唯一(unique),not null,可以被引用!
表的關聯:
1.一對一
CREATE TABLE `husband` (
`id` INT(11) PRIMARY KEY AUTO_INCREMENT,
`hname` VARCHAR(50)
)
DROP TABLE wife;
SELECT * FROM wife
CREATE TABLE `wife` (
`id` INT(11) PRIMARY KEY,
`wname` VARCHAR(50),
FOREIGN KEY(id) REFERENCES husband(id)
)
INSERT INTO husband VALUES(NULL,"武大郎");
INSERT INTO wife VALUES(1,"潘金蓮")
SELECT * FROM husband;
SELECT * FROM wife;
INSERT INTO wife VALUES(2,"xi");
2.一對多
經典案例:部門和員工的關系:一個部門有多個員工,但是一個員工只能在一個部門中
對於一對多的關系表:我們通常是在多的一端維護一個外鍵,這個外鍵指向一的主鍵
CREATE TABLE dept(
dept_id INT PRIMARY KEY AUTO_INCREMENT,
dept_name VARCHAR(50)
)
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(50),
dept_id INT,
FOREIGN KEY(dept_id) REFERENCES dept(dept_id)
)
SHOW TABLES;
INSERT INTO dept VALUES(NULL,"後勤部")
SELECT * FROM dept;
INSERT INTO employee VALUES(NULL,"郭富城",4)
SELECT * FROM employee
DELETE FROM employee WHERE id = 4;
3.多對多
經典案例:老師和學生,選課
單表查詢:
SELECT SUM(score),id
FROM stu
WHERE id > 2
GROUP BY snum
HAVING SUM(score) > 90
ORDER BY id ASC
LIMIT 1,2;
多表查詢
縱向連接(union ,union all)
select name from stu1
UNION all
select name from stu2
註意:union會對數據進行過濾,保證數據唯一,而union all不會對數據進行
橫向連接
join on來完成橫向連接
inner join :只會顯示滿足條件的數據
select * from ( person p) inner join (orders o) on p.id = o.oid
1)左向外聯接:LEFT JOIN或LEFT OUTER JOIN
左向外聯接的結果集包括 LEFT OUTER子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。
select a.*,b.* from a left join b on a.id=b.parent_id
2)右向外聯接:RIGHT JOIN 或 RIGHT OUTER JOIN
右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。
select a.*,b.* from a right join b on a.id=b.parent_id
3)完整外部聯接:FULL JOIN 或 FULL OUTER JOIN
完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。
select a.*,b.* from a full join b on a.id=b.parent_id
jdbc簡介
通過jdbc連接數據庫的基本步驟:
導入jar包驅動類
jdbc語法:jdbc:子協議:廠商內容
對於mysql而言:?jdbc:mysql://主機地址:端口號/庫名
? jdbc:mysql://localhost:3306/test
jdbc獲取數據庫連接:
//準備四個參數
//加載數據庫驅動類
//利用DriverManager的getConnection方法獲取數據庫連接
示例代碼:
package com.neuedu.manage.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtil {
private static Connection connection=null;
private static String url="jdbc:mysql://localhost:3306/republic";
private static String username="root";
private static String password="123456";
private static String driverClass="com.mysql.jdbc.Driver";
public Connection getConnection(){
try {
Class.forName(driverClass);
connection = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
public static void close(Connection con,Statement statement,ResultSet rSet){
if(rSet!=null){
try {
rSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
配置數據庫連接及數據庫操作