spl

什麼是 SQL?

    • SQL 指結構化查詢語言
    • SQL 使咱們有能力訪問數據庫
    • SQL 是一種 ANSI 的標準計算機語言
    • sql註釋:java

      第一種:--sql

      第二種:#數據庫

Sql分類:

DDL:數據定義語言(庫,表) 關鍵字:CREATE(建立) drop(刪除) alter(更新)

建立庫 CREATE DATABASE 庫名;函數

 

刪除庫 DROP DATABASE test;spa

 CREATE TABLE 表名(對象

    字段 數據類型,排序

    VARCHAR至關於String,CHAR事務

    多個字段之間用,隔開最後一個不要,rem

   )it

 

  增長字段

 

  ALTER TABLE 庫名 add COLUMN 字段名 int

 

  刪除字段

 

  ALTER TABLE 庫名 DROP COLUMN 字段名

 

DML:數據操做語言(記錄,至關於new java對象) 關鍵字: insert update delete

主鍵:惟一標識

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

 

 

BETWEEN AND  (選取在兩數之間的值)

 

SELECT * from emp

 

WHERE salay BETWEEN 4500 AND 5000

 

IN

 

SELECT * from emp WHERE id in (1,3,5,7)

 

模糊查詢 like通常與通配符一塊兒使用

 

通配符:_單個字符 %任意個數的字符

 

SELECT * from emp WHERE e_name LIKE "張_"

 

SELECT * from emp WHERE e_name LIKE "張%"

 

SELECT * from emp WHERE e_name LIKE "%三%"

 

排序 ORDER BY

 

ASC升序也可省略 DESC降序

SELECT * from emp ORDER BY salay ASC

SELECT * from emp ORDER BY salay DESC

聚合函數 sum avg count max min

統計總提成

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 分完組的字段名

   顯示 內鏈接 innerjoin on 後加條件  內連接只能查詢出匹配上的數據 

    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;#回滾事務

相關文章
相關標籤/搜索