sql註釋:java
第一種:--sql
第二種:#數據庫
建立庫 CREATE DATABASE 庫名;函數
刪除庫 DROP DATABASE test;spa
CREATE TABLE 表名(對象
字段 數據類型,排序
VARCHAR至關於String,CHAR事務
多個字段之間用,隔開最後一個不要,rem
)it
增長字段
ALTER TABLE 庫名 add COLUMN 字段名 int
刪除字段
ALTER TABLE 庫名 DROP COLUMN 字段名
主鍵:惟一標識
id int PRIMARY key auto_increment, 設置主鍵自增
添加數據值要與列一一對應
語法:INSERT INTO 表名 (字段列) values(值...);
語法:INSERT INTO 表名 values(值...);
MODIFY修改數據類型
語法:ALTER TABLE 表名 MODIFY 字段名 數據類型
CHANGE修改列名
語法:ALTER TABLE 表名 CHANGE 舊名 新名 數據類型
更改數據update
UPDATE 表名 set 字段=值 條件
刪除數據delete
DELETE FROM 表名 WHERE 條件
TRUNCATE新建一張與原表結構一摸同樣的表
TRUNCATE 表名
DCL:數據控制語言
DQL:數據查詢語言 關鍵字: select
查詢表中全部的字段
SELECT * from 表名
#運算符 > < >= <= != null ISNULL null與任何值相加都爲null
SELECT * from 表名 where 條件
SELECT * from emp WHERE common is not NULL
SELECT * from emp WHERE not common is NULL
SELECT * from emp
WHERE salay BETWEEN 4500 AND 5000
IN
SELECT * from emp WHERE id in (1,3,5,7)
通配符:_單個字符 %任意個數的字符
SELECT * from emp WHERE e_name LIKE "張_"
SELECT * from emp WHERE e_name LIKE "張%"
SELECT * from emp WHERE e_name LIKE "%三%"
ASC升序也可省略 DESC降序
SELECT * from emp ORDER BY salay ASC
SELECT * from emp ORDER BY salay DESC
統計總提成
SELECT sum(字段名) from emp
求提成的平均值
SELECT avg(字段名) from emp
只能統計不爲null的個數
函數中的參數爲數字表明統計的是記錄
統計記錄的數量
SELECT count(1) from emp
SELECT count(*) from emp
求最大值
SELECT max(common) from emp
求最小值
SELECT min(common) from emp
分組GROUP BY通常與聚合函數一塊使用
-- 按部門總成本排序
SELECT depart,sum(salay) a,sum(common) b
,sum(salay+IFNULL(common,0)) c
FROM emp GROUP BY depart ORDER BY c
-- 查詢部門成本大於12000
where 與 HAVING
-- where放在表名後過濾大的條件
-- having通常與分組合用過濾分組後的條件
SELECT depart,sum(salay) a,sum(common) b
,sum(salay+IFNULL(common,0)) c
FROM emp
GROUP BY depart
HAVING sum(salay+IFNULL(common,0))>=12000
分頁limit
-- limit一個參數表明查詢的數量
SELECT * FROM emp LIMIT 5
-- limit兩個參數:
-- 第一個表明開始搜索的位置,位置從0開始
-- 第二個參數表明查詢的數量
SELECT * FROM emp LIMIT 1,4
子查詢:以一個結果爲另外一個查詢的條件
SELECT*FROM 表名 where 字段名 in(select *from 表名 where 條件)
select 字段名 別名 , 別名.字段名 別名 from 表名 別名 ,表名 別名 where 條件 group by 分完組的字段名
SELECT * FROM 表名 a INNER JOIN 表名 b ON a.字段名=b.字段名
笛卡爾積:多表聯查沒條件,多張表中記錄相乘
左鏈接:以左表爲基礎表
select * from 表名 left outer(可省略) join 表名 on 條件
右連接:以由表爲基礎表
select* from 表名 right outer join 表名 on 條件
交叉連接:通常出現笛卡爾積現象
select*from 表名 cross outer join 表名 on 條件
外鍵。一句話歸納:若是一個表A的主鍵還存在與另外一個表B中,那麼B中這個字端能夠做爲A表的外鍵。
(有一種好記的方法是,存在與外面的主鍵就是外鍵)。好比上面成績表的學號是學生表的外鍵,成績表的課程編號是課程表的外鍵。
做用:主要保證數據的完整性
建立表時建立外鍵
CREATE TABLE Orders
O_Id int NOT NULL,
OrderNo int NOT NULL,
e_id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (e_id) REFERENCES emp(id)
)
刪除外鍵
語法:ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名
ALTER TABLE orders DROP FOREIGN KEY o_e_fk
建立表後添加外鍵
#語法:Alter table 表名 add constraint 外鍵名字 foreign key (外鍵字段) references 父表(主鍵字段);
ALTER TABLE orders ADD CONSTRAINT o_e_fk
FOREIGN KEY (e_id) REFERENCES emp(id)
先刪除外鍵表中的數據再刪關聯表中的數據
DELETE from orders WHERE o_id=2
DELETE from emp WHERE id=2
事務:主要用於處理操做量大,複雜度高的數據,一個程序執行的最小單元
事務的特性:(ACID)
原子性:事務的不可分割,組成事務的各個邏輯單元不可分割。
一致性:事務執行的先後,數據完整性保持一致。
隔離性:事務執行不該該受到其餘事務的干擾。
持久性:事務一旦結束,數據就持久化到數據庫中。
隔離級別:
髒讀:一個事務讀到了另外一個事務未提交的數據,致使查詢結果不一致
不可重複讀:一個事務讀到了另外一個事務已經提交的update的數據,致使屢次查詢結果不一致。
虛讀/幻讀:一個事務讀到了另外一個事務已經提交的insert的數據,致使屢次查詢結果不一致。
傳播行爲
一、PROPAGATION_REQUIRED:若是當前沒有事務,就建立一個新事務,若是當前存在事務,就加入該事務,該設置是最經常使用的設置。
二、PROPAGATION_NESTED:若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則執行與PROPAGATION_REQUIRED相似的操做
三、PROPAGATION_SUPPORTS:支持當前事務,若是當前存在事務,就加入該事務,若是當前不存在事務,就以非事務執行。‘
四、PROPAGATION_MANDATORY:支持當前事務,若是當前存在事務,就加入該事務,若是當前不存在事務,就拋出異常。
五、PROPAGATION_REQUIRES_NEW:支持當前事務,建立新事務,不管當前存不存在事務,都建立新事務。
六、PROPAGATION_NOT_SUPPORTED:以非事務方式執行操做,若是當前存在事務,就把當前事務掛起。
七、PROPAGATION_NEVER:以非事務方式執行,若是當前存在事務,則拋出異常。
實例:
#建立事務 TRANSACTION
BEGIN;#開始事務
INSERT INTO stu(name,sex,age,s_no) VALUES('admin','男',22,'s_002');
COMMIT;#提交事務
BEGIN;#開始事務
INSERT INTO stu(name,sex,age,s_no) VALUES('李四','男',22,'s_001');
ROLLBACK;#回滾事務