Java學習筆記--sql語句
首先明確,sql語句是針對Mysql資料庫程式設計的特殊語句。
1.資料約束(約束使用者操作表資料的行為)
1.1預設值約束
關鍵字:default;
注意:當前欄位沒有插入預設值的時候,預設值才會起作用。
CREATE TABLE test(
NAME VARCHAR(20),
gender VARCHAR(2) DEFAULT '男'
);
1.2非空約束(某欄位一定要有值)
關鍵字:NOT NULL
注意:約束欄位不能不插入值,也不能插入NULL
CREATE TABLE test(
NAME VARCHAR(20) NOT NULL,
gender VARCHAR(2)
);
1.3唯一約束(被約束的欄位不能出現重複的值)
關鍵字:UNIQUE
注意:唯一約束可以多次插入null
CREATE TABLE test(
id INT UNIQUE,
NAME VARCHAR(20)
);
1.4主鍵約束(唯一+非空)
關鍵字:PRIMARY KEY
注意:– 1)通常情況下,我們會給每張表都會設定一個主鍵欄位,用來標記記錄的唯一性
– 2)但是不建議把業務含義欄位作為主鍵,因為隨著業務的變化,業務欄位可能會出現重複。
– 3)建議給每張張獨立新增一個叫id的欄位,把這個id欄位設定成主鍵,用來作為記錄的唯一性
CREATE TABLE test(
id INT PRIMARY KEY,
NAME VARCHAR(20)
);
1.5自增長約束(初始值為0,每次遞增1)
關鍵字:AUTO_INCREMENT
注意:使用truncate table刪除資料的時候,可以把自增長的初始值置為0
CREATE TABLE test(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
)
1.6外來鍵約束(約束兩種表的情況)
關鍵字:FOREIGN KEY REFERENCES
注意:約束別人的表叫主表,被約束的表叫附表
插入資料: 先插入主表的資料,再插入副表資料
修改資料: 先修改主表資料,再修改副表資料
刪除資料:先刪除副表資料,再刪除主表資料
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
deptId INT,
CONSTRAINT employee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)
);
CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
1.7級聯技術(當有了外來鍵的時候,我們希望修改或刪除資料的時候,修改或刪除主表的資料同時也能夠影響附表的資料)
關鍵字:ON * CASCADE
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
deptId INT,
-- 新增級聯修改: ON UPDATE CASCADE
-- 新增級聯刪除: ON DELETE CASCADE
CONSTRAINT employee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE
);
2.資料庫設計
2.1三大正規化
1.要求表的每個欄位必須獨立的不可分割的單元
2.在第一正規化的基礎上,要求表的除主鍵以外的欄位都和主鍵有依賴關係的。一張表應該只表達一個意思!
3.在第二正規化基礎上,要求表的除主鍵外的欄位都只能和主鍵有直接決定的依賴關係。
3.多表查詢
3.1交叉連線查詢
後果:會產生笛卡爾效應
SELECT employee.name,dept.name FROM employee,dept;
3.2內連結查詢
SELECT e.name,d.name
FROM employee e,dept d
WHERE e.deptId=d.id;
SELECT e.name,d.name
FROM employee e
INNER JOIN dept d
ON e.deptId=d.id;
3.3左外連結查詢
SELECT d.name,e.name
FROM dept d
LEFT OUTER JOIN employee e
ON d.id=e.deptId;
3.4右外連結查詢
SELECT d.name,e.name
FROM employee e
RIGHT OUTER JOIN dept d
ON d.id=e.deptId;
3.5自連結查詢
SELECT e.name AS '員工',b.name AS '上司'
FROM employee e
LEFT OUTER JOIN employee b
ON e.bossId=b.id;
4.mysql儲存過程
4.1mysql儲存過程說通俗點就是sql程式設計
4.2儲存過程的特點
1)儲存過程儲存到資料庫伺服器端,通過資料庫客戶端工具呼叫儲存過程
2)儲存過程的效率會非常高!因為儲存過程是在資料庫伺服器端執行。
3)儲存過程的移植性非常差的!
4.3語法
DELIMITER 結束符號
CREATE PROCEDURE 儲存過程名稱 (形式引數列表)
BEGIN
多個sql語句
END 結束符號
CALL 儲存過程名稱(實際引數列表);
引數型別:
IN: 輸入引數,可以攜帶資料到儲存過程中
OUT: 輸出引數,可以攜帶資料到儲存過程外面。
INOUT: 輸入輸出引數。
--
mysql資料庫三種變數:
-- 1)全域性變數。mysql內建的變數,mysql程式關閉的時候全域性變數才會失效!!
-- show variables:產看全域性變數
-- character_set_client: mysql接收的客戶端的資料編碼
-- character_set_results: mysql使用什麼編碼輸出給客戶端資料
-- 檢視某個全域性變數: select @@變數名
-- 修改某個全域性變數: set @@變數名=值
-- 2) 會話變數。變數只在某次登入的會話中有效!退出連線,會話變數資料失效!!
-- 檢視某個會話變數: select @變數名
-- 修改/定義某個會話變數: set @變數名=值
-- 案例:演示查詢和更改會話變數
-- 3) 區域性變數:在儲存過程中定義的變數。儲存過程結束區域性變數失效!!
-- 檢視某個區域性變數: select 變數名
-- 修改某個區域性變數: set 變數名=值
-- 定義某個區域性變數: declare 變數名 資料型別;
DELIMITER $
CREATE PROCEDURE pro_testByIf(IN num INT,OUT str VARCHAR(20))
BEGIN
IF num=1 THEN
SET str = '星期一';
ELSEIF num= 2 THEN
SET str ='星期二';
ELSEIF num=3 THEN
SET str = '星期三';
ELSE
SET str = '錯誤引數';
END IF;
END $
CALL pro_testByIf(5,@str);
SELECT @str;
5.觸發器
1定義:當往員工表插入/修改/刪除一條資料的時候,同時往日誌表記錄下來,這時就要使用觸發器完成。
2語法:關鍵字–TEIGGER
建立觸發器
CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW
INSERT INTO emp_log(content) VALUES('員工被插入了一條記錄');
刪除觸發器
DROP TRIGGER tri_empAdd;
相關文章
- 【SQL Server學習筆記】Delete 語句、Output 子句、Merge語句SQLServer筆記delete
- MySql 學習筆記一:SQL語句優化MySql筆記優化
- SQLite語句學習筆記SQLite筆記
- SQL語句筆記SQL筆記
- 學習筆記----一句SQL語句寫個乘法表筆記SQL
- Python學習筆記 - if語句Python筆記
- SQL 語句學習SQL
- sql語句學習SQL
- Java學習筆記--sql與javaJava筆記SQL
- python學習筆記(五)——語句Python筆記
- MySQL事務控制語句(學習筆記)MySql筆記
- Python學習筆記3(條件語句+迴圈語句)Python筆記
- Python學習筆記(三)——條件語句、迴圈語句Python筆記
- sql語句學習總結SQL
- mysql sql語句學習(一)MySql
- MySQL學習筆記之SQL語句建立、修改和刪除資料庫MySql筆記資料庫
- java學習基礎篇筆記4-----switch-case語句+Scanner類Java筆記
- 簡單的SQL語句學習SQL
- SQL學習筆記SQL筆記
- 新學習的Java語句Java
- Swift學習筆記(二十七)——條件語句和Switch-case語句Swift筆記
- SQL語句基礎學習之TRIMSQL
- Python零基礎學習筆記(十八)——break語句和continue語句Python筆記
- Java學習中迴圈語句的學習Java
- Java學習之跳轉語句Java
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句基礎學習之Alter Table [記不住呀呵呵]SQL
- JAVA學習筆記Java筆記
- Java學習之分支結構---判斷語句:if語句和switch語句Java
- 《JAVA學習指南》學習筆記Java筆記
- 英語學習筆記筆記
- JavaScript學習筆記 - 進階篇(3)- 流程控制語句JavaScript筆記
- MyBatis學習 之 三、動態SQL語句MyBatisSQL
- 《SQL 反模式》 學習筆記SQL模式筆記
- spark學習筆記--Spark SQLSpark筆記SQL
- PL/SQL學習筆記-1SQL筆記
- PL/SQL學習筆記-2SQL筆記
- PL/SQL學習筆記-3SQL筆記