国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

設(shè)計(jì)師個(gè)人網(wǎng)站網(wǎng)絡(luò)推廣渠道公司

設(shè)計(jì)師個(gè)人網(wǎng)站,網(wǎng)絡(luò)推廣渠道公司,亳州市網(wǎng)站建設(shè)客服電話,做網(wǎng)站的圖片一般放哪文章目錄 前言1.數(shù)據(jù)庫(kù)概述1.1 數(shù)據(jù)庫(kù)相關(guān)概念1.2登錄MySQL:1.3 MySQL常用命令1.4表:1.5SQL語(yǔ)句分類: 2.CRUD操作2.1 DQL1.基礎(chǔ)查詢基礎(chǔ)查詢(簡(jiǎn)單查詢)條件查詢:排序查詢:分組查詢:分…

文章目錄

  • 前言
  • 1.數(shù)據(jù)庫(kù)概述
    • 1.1 數(shù)據(jù)庫(kù)相關(guān)概念
    • 1.2登錄MySQL:
    • 1.3 MySQL常用命令
    • 1.4表:
    • 1.5SQL語(yǔ)句分類:
  • 2.CRUD操作
    • 2.1 DQL
      • 1.基礎(chǔ)查詢
        • 基礎(chǔ)查詢(簡(jiǎn)單查詢)
        • 條件查詢:
        • 排序查詢:
        • 分組查詢:
        • 分頁(yè)查詢:
      • 2 鏈接查詢
        • 鏈接方式分類
      • 3 子查詢
        • where子查詢
        • from子句中的子查詢
        • select后面的子查詢
      • 4 union合并查詢結(jié)果集
      • 5 limit 查詢
    • 2.2 DDL
      • 2.2.1 create:表的創(chuàng)建
      • 2 .2.2 alter:修改表
      • 2.2.3 drop:刪除表
        • 快速刪除表
    • 2.3DML
      • 2.3.1插入 insert
      • 2.3.2修改 Update
      • 2.3.3刪除 delete
    • 2.4 表
      • 2.4.1 表結(jié)構(gòu)的增刪改查
      • 2.4.2約束 (constraint)
        • 1 非空約束 (not null)
        • 2 唯一性約束 (unique)
        • 3 主鍵約束 (primary key :PK)
        • 4 外鍵約束(foreign key :FK)
    • 2.5 數(shù)據(jù)處理函數(shù)
      • 2.2.1 單行處理函數(shù)
      • 2.2.2 多行處理函數(shù)
  • 3 存儲(chǔ)引擎
  • 4 事務(wù)
    • 4.1 實(shí)現(xiàn)事務(wù)
      • 4.1.1 提交事務(wù) (commit)
      • 4.1.2 回滾事務(wù) (rollback)
    • 4.2 事務(wù)的特性
      • 4.2.1 事務(wù)的隔離性
        • 1 事務(wù)的隔離級(jí)別
  • 5 索引
    • 5.1創(chuàng)建索引
    • 5.2索引失效
    • 5.3 索引的分類
  • 6 視圖
    • 6.1 創(chuàng)建視圖
    • 6.2 刪除視圖
    • 6.3 視圖的CRUD
  • 7 DBA命令
    • 7.1 新建用戶
    • 7.2 授權(quán)
      • 7.2.1 回收授權(quán)
    • 7.3 數(shù)據(jù)的導(dǎo)入導(dǎo)出
      • 7.3.2數(shù)據(jù)的導(dǎo)入
  • 8 數(shù)據(jù)庫(kù)設(shè)計(jì)的三規(guī)范
  • 9 SQL高級(jí)應(yīng)用
    • 8.1 T-SQL程序設(shè)計(jì)
      • 8.1.1 變量
      • 8.1.2 流程控制語(yǔ)句
    • 8.2存儲(chǔ)過(guò)程
      • 8.2.1 存儲(chǔ)過(guò)程 的有點(diǎn)
      • 8.2.2 存儲(chǔ)過(guò)程的分類
      • 8.2.3 創(chuàng)建存儲(chǔ)過(guò)程
    • 8.3觸發(fā)器
      • 8.3.1 分類
      • 8.3.2 創(chuàng)建DML觸發(fā)器
      • 8.3.3 創(chuàng)建DDL觸發(fā)器

前言

MySQL專欄匯總 :MySQL 必死


1.數(shù)據(jù)庫(kù)概述

1.1 數(shù)據(jù)庫(kù)相關(guān)概念

數(shù)據(jù)庫(kù):DataBase (DB)

  • 按照一定格式存儲(chǔ)數(shù)據(jù)的一些文件的組合
  • 存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù),數(shù)據(jù)文件,日志文件。具有一定特定格式的數(shù)據(jù)。

數(shù)據(jù)庫(kù)管理系統(tǒng):DataBase Management (DBMS)

  • 專門用來(lái)管理數(shù)據(jù)庫(kù)中的數(shù)據(jù)的,數(shù)據(jù)庫(kù)管理系統(tǒng)可以對(duì)數(shù)據(jù)當(dāng)中的數(shù)據(jù)進(jìn)行增刪改查

SQL :結(jié)構(gòu)化查詢語(yǔ)言

  • 使用DBMS負(fù)責(zé)執(zhí)行SQL語(yǔ)句,來(lái)完成數(shù)據(jù)庫(kù)中的增刪改查。
  • SQL是一套標(biāo)準(zhǔn)語(yǔ)言,主要學(xué)習(xí)SQL語(yǔ)句。SQL語(yǔ)句可以在MySQL、Oracle、DB2中使用。

三者之間的關(guān)系:

DBMS ----執(zhí)行-----> SQL -------操作----> DB

1.2登錄MySQL:

mysql修改登錄用戶名和秘密

# 修改密碼-- 1.進(jìn)入cmd
-- 2. 輸入
mysql -u root -p;
-- 3.輸入舊密碼
Enter password: *****
-- 4.選擇數(shù)據(jù)庫(kù) 
mysql> use 庫(kù)名;
-- 輸入修改語(yǔ)句信息
mysql> UPDATE user SET password =PASSWORD("新密碼") WHERE user = '用戶名';-- 刷新
mysql> flush privileges;#修改用戶名:
-- 1.進(jìn)入cmd
-- 2. 輸入
mysql -u root -p;
-- 3.輸入舊密碼
Enter password: *****
-- 4.選擇數(shù)據(jù)庫(kù) 
mysql> use 庫(kù)名;
-- 輸入修改語(yǔ)句信息
mysql> UPDATE user SET u =user("新用戶名") WHERE user = 'root';
mysql> flush privileges; 
mysql> exit

1.在DOS窗口下:(隱藏密碼形式)

  • 打開mysql:net start mysql

  • 關(guān)閉mysql:net stop mysql

  • 進(jìn)入mysql指令:mysql -u root -p

  • 關(guān)閉mysql指令:exit(退出)

2.一步到位登錄MySQL指令:(顯示密碼形式)

  • mysql -uroot -p123456 // -p 后面的是MySQL 的密碼

1.3 MySQL常用命令

  1. 查看數(shù)據(jù)庫(kù)

    show Database;
    
  2. 使用數(shù)據(jù)庫(kù)

    use test;
    

    use 數(shù)據(jù)庫(kù)名 ;

  3. 創(chuàng)建數(shù)據(jù)庫(kù)

    create database test1
    

    create database 數(shù)據(jù)庫(kù)名

  4. 查看表

    show tables;
    
  5. sql中導(dǎo)入數(shù)據(jù) (執(zhí)行sql腳本)

    source   全路徑(指定sql腳本的路徑)
    

    路徑不能出現(xiàn)中文!!!

  6. 查看MySQL版本

    select version();
    
  7. 查看當(dāng)前使用的數(shù)據(jù)庫(kù)

    select database();
    

1.4表:

數(shù)據(jù)庫(kù)中的最基本單元 :表

表結(jié)構(gòu):

  • 行(row):數(shù)據(jù) / 記錄

  • 列(column):字段 (每一個(gè)字段都有:字段名,數(shù)據(jù)類型,約束等屬性)

  • 字段名:

  • 數(shù)據(jù)類型:字符型、日期型、時(shí)間型、整型等

  • 約束:

1.5SQL語(yǔ)句分類:

  1. DDL : 數(shù)據(jù)定義語(yǔ)言 (Data Definition Language)

    • 對(duì)表結(jié)構(gòu)進(jìn)行操作
    • create:創(chuàng)建
    • alter:修改
    • drop:刪除
  2. DML : 數(shù)據(jù)操作語(yǔ)言 (Data Manipulation Language)

    • 對(duì)表當(dāng)中的數(shù)據(jù)進(jìn)行增刪改查 ,操作表中的數(shù)據(jù)data
    • inster :插入
    • delete :刪除
    • update :修改
  3. DQL : 數(shù)據(jù)查詢語(yǔ)言 (Data Query Language)

    • select 語(yǔ)句
  4. DCL : 數(shù)據(jù)控制語(yǔ)言 (Data Control Language)

    • 授權(quán):GRANT
    • 撤銷權(quán)限:REVOKE
  5. TCL :事務(wù)控制語(yǔ)言

    • 事務(wù)提交:commit
    • 事務(wù)回滾:rollback

2.CRUD操作

2.1 DQL

  • SQL語(yǔ)句是通用的,以英文分號(hào) " ; " 結(jié)束
  • MySQL數(shù)據(jù)庫(kù)的SQL語(yǔ)句不區(qū)分大小寫,關(guān)鍵字建議使用大寫。
  • 注釋
    1. 單行注釋:-- 注釋內(nèi)容或 # 注釋內(nèi)容(MySQL特有)
    2. 多行注釋:/* 注釋 */

1.基礎(chǔ)查詢

  1. 基礎(chǔ)查詢(簡(jiǎn)單查詢)

  • 查詢所有列 (字段)

    SELECT * FROM 表名;    -- 查詢所有字段  (效率低、可讀性差、開發(fā)中不建議)
    
  • 查詢單個(gè)/多個(gè)字段

    SELECT  字段1,字段2,···,字段n 
    FROM 表名;    -- 查詢單個(gè)/多個(gè)字段
  • 去重查詢

     SELECT DISTINCT  去重的字段1 FROM 表名;  SELECT DISTINCT  name FROM student;  -- 去重復(fù)的姓名  
  • 為字段起別名
     SELECT  字段1 AS 別名名稱 FROM 表名;  -- 方式一SELECT 新字段名 = 字段1  FROM 表名;  -- 方式二-- 列如:SELECT name AS 姓名 FROM student; -- 方式一SELECT name 姓名 FROM student; -- 方式二SELECT 姓名 = name  FROM studnet;  -- 方式三```**別名只是在顯示中,并不會(huì)修改到表中的字段名**別名中間存在有空格,會(huì)出現(xiàn)報(bào)錯(cuò),不符合語(yǔ)法,編譯錯(cuò)誤。若是字段中間必須要有空格必須使用單引號(hào)或者雙引號(hào)括起來(lái)```sqlSELECT name  AS  '姓 名' FROM student;  -- 標(biāo)準(zhǔn)字符串,單引號(hào)括起來(lái)SELECT name  AS  "姓 名" FROM student;  -- 不推薦,不標(biāo)準(zhǔn)```==注意:==1. 單引號(hào)是標(biāo)準(zhǔn)的字符串形式2. 雙引號(hào)在mysql中可以使用,在oracle中不可以使用
  • 字段可以使用數(shù)學(xué)表達(dá)式

    • 給字段進(jìn)行加減乘除
  1. 條件查詢:

    查詢出符合條件的內(nèi)容

    • 條件查詢語(yǔ)法
     SELECT 字段1,字段2,···,字段n,FROM 表名WHERE 條件;
  • 條件符號(hào):

    符號(hào)說(shuō)明
    =等于
    <>或!=不等于
    <小于
    <=小于等于
    >大于
    >=大于等于
    between ···· and兩個(gè)值之間,當(dāng)同于>= and <= 遵循左小右大
    is null為空(is not null 不能為空)
    and并且
    or或者
    in包含,相當(dāng)于多個(gè) or (not in :不包括在內(nèi))
    like模糊查詢,支持%或下劃線匹配
    %通配符:匹配任意個(gè)字符
    _下劃線:匹配一個(gè)字符
     SELECT name ,age FROM student WHERE age = 55 ; -- 等于SELECT name ,age FROM student WHERE age != 55;  -- 不等于SELECT name ,age FROM student WHERE age <> 55;SELECT name ,age FROM student WHERE age < 55;	-- 小于SELECT name ,age FROM student WHERE age <= 55;	-- 小于等于SELECT name ,age FROM student WHERE age > 55 ;	-- 大于SELECT name ,age FROM student WHERE age >= 55;	-- 大于等于SELECT name ,age FROM student WHERE age BETWEEN 23 AND 30;  -- 年齡在23到30之間SELECT name ,age FROM student WHERE age >= 23 AND <= 30 ;SELECT name ,age FROM student WHERE age IS NULL;  -- is null  is不能改為等號(hào)SELECT name ,age FROM student WHERE age IS NOT NULL;  -- is not null  is不能改為等號(hào)SELECT name ,age FROM student WHERE name = '張三' AND age > 45;   -- endSELECT name ,age FROM student WHERE name = '張三' OR  name = '小三';   -- OR 有一個(gè)就可以查找到SELECT name ,age FROM student WHERE age > 15 AND name = '張三' OR  name = '小三'; -- and 和 or 同時(shí)出現(xiàn)這一句中:先執(zhí)行 and 在執(zhí)行 or SELECT name ,age FROM student WHERE age > 15 AND (name = '張三' OR  name = '小三');  -- 正確的寫法  讓 or 先執(zhí)行SELECT name ,age FROM student WHERE age IN(15,35,45,25);  -- 年齡在15、25、35、45中的SELECT name ,age FROM student WHERE age NOT IN(15,35,45,25); -- 年齡不在15、25、35、45中的name 和 age
  • 模糊查詢:LIKE
     SELECT  字段1 AS 別名名稱 FROM 表名;  -- 方式一SELECT 新字段名 = 字段1  FROM 表名;  -- 方式二-- 列如:SELECT name AS 姓名 FROM student; -- 方式一SELECT name 姓名 FROM student; -- 方式二SELECT 姓名 = name  FROM studnet;  -- 方式三```**別名只是在顯示中,并不會(huì)修改到表中的字段名**別名中間存在有空格,會(huì)出現(xiàn)報(bào)錯(cuò),不符合語(yǔ)法,編譯錯(cuò)誤。若是字段中間必須要有空格必須使用單引號(hào)或者雙引號(hào)括起來(lái)```sqlSELECT name  AS  '姓 名' FROM student;  -- 標(biāo)準(zhǔn)字符串,單引號(hào)括起來(lái)SELECT name  AS  "姓 名" FROM student;  -- 不推薦,不標(biāo)準(zhǔn)```==注意:==1. 單引號(hào)是標(biāo)準(zhǔn)的字符串形式2. 雙引號(hào)在mysql中可以使用,在oracle中不可以使用SELECT name ,age FROM student WHERE LIKE '%小%' ;-- 含有‘小’的名字SELECT name ,age FROM student WHERE LIKE '張%' ;-- 姓張的SELECT name ,age FROM student WHERE LIKE '%森' ;-- 以森結(jié)尾的SELECT name ,age FROM student WHERE LIKE '%_垂%'; -- 第二個(gè)字為垂的SELECT name ,age FROM student WHERE LIKE '%__森%'; -- 第二個(gè)字為森的SELECT name ,age FROM student WHERE LIKE '%_%' ;-- 找出名字中含有下劃線的。 因?yàn)橄聞澗€具有特殊含義,需要把下劃線進(jìn)行轉(zhuǎn)義SELECT name ,age FROM student WHERE LIKE '%\_%'; -- 正確 √ 
  1. 排序查詢:

    排序總是在最后執(zhí)行!!!

    • 語(yǔ)法

      SELECT  字段1,字段2,···,字段n,
      FROM	表名	
      ORDER BY  排序字段名1 [排序方式1], 排序字段名2 [排序方式2]  ...;
      
    • 排序方式

      • ASC : 升序 (默認(rèn)值),不寫就是默認(rèn)升序

      • DEAC :降序

    • 多個(gè)字段排序 :如果有多個(gè)排序條件,當(dāng)前邊的條件值一樣時(shí),才會(huì)根據(jù)第二條件進(jìn)行排序

   SELECT name ,age FROM student 	ORDER BY age ; -- 按照年齡 默認(rèn)升序SELECT name ,age FROM student 	ORDER BY age DESC;  -- 降序SELECT name ,age FROM student 	ORDER BY age ASC ; -- 指定升序-- 多個(gè)字段排序 :如果有多個(gè)排序條件,當(dāng)前邊的條件值一樣時(shí),才會(huì)根據(jù)第二條件進(jìn)行排序SELECT name ,age,score FROM student	ORDER BY age DESC,name DESC ;  -- 若是年齡相同,才能進(jìn)行name排序-- 根據(jù)字段的位置進(jìn)行排序SELECT name ,age FROM student 	ORDER BY 2; -- 根據(jù)第二列排序

綜合案例:查詢年齡在20到50之間,并且更具年齡進(jìn)行降序排序

   SELECTname,ageFROM studentWHEREage >= 20 AND age <= 50ORDER BYage DESC ;
  1. 分組查詢:

    1. 分組函數(shù)

      分組函數(shù)在使用前必須進(jìn)行分組,若是沒有分組,則一個(gè)表就是一個(gè)組

      • 語(yǔ)法:
        SELECT 分組函數(shù)名(列名)FROM 表;
    - count :計(jì)數(shù)- sum :求和- avg :平均值- max :最大值- min :最小值- ==注意:==1. 自動(dòng)忽略NULL2. count(*) 和count(具體字段)的區(qū)別- count(*) :統(tǒng)計(jì)總行數(shù),不忽略null;- count(具體字段):表示統(tǒng)計(jì)該字段下所有**不為NULL的元素的總數(shù)**。忽略null3. 分組函數(shù)不能直接使用在where子句中。4. 所有的分組函數(shù)可以組合在一起用。
  1. 分組查詢語(yǔ)法

    • 先進(jìn)行分組,對(duì)每一組的數(shù)據(jù)進(jìn)行操作。
      SELECT  字段列表  FROM 表名 [WHERE  分組前條件限定]GROUP BY 分組字段名  [HAVING 分組后條件過(guò)濾];
      - ==where不參與分組,having是在分組之后的,where不能對(duì)聚合函數(shù)進(jìn)行判斷,having可以==- **關(guān)鍵字執(zhí)行順序:from -->  where --> group by -->  having-->  select -->order by**~~~mysqlSELECT COUNT(name) FROM student ;  -- 可以執(zhí)行,因?yàn)镾ELECT在分組后執(zhí)行SELECT name ,age FROM student WHERE age > MIN(age) -- 不能執(zhí)行 因?yàn)檫M(jìn)行WHERE時(shí) 還沒有進(jìn)行分組
  1. 案例
      -- 1.找出每個(gè)工作崗位的工資和?-- 思路:按照工作崗位分組,然后對(duì)工資求和SELECT job,SUM(sal)FROMempGROUP BYjob;	-- 2.找出 '每個(gè)部門,不同工作崗位'的最高薪資-- 兩個(gè)字段進(jìn)行分組SELECTdeptID,job,MAX(sal)FROMempGROUP BYdeptID,job ;-- 3.找出部門的最高薪資,要求顯示最高薪資大于3000的(方法一)SELECTdeptID,MAX(sal)FROMempGROUP BYdeptID HAVINGMAX(sal) > 3000;(方法二)	SELECTdeptID,MAX(sal)FROMempWHERE sal > 3000GROUP BYdeptID ;-- 優(yōu)化策略:where 和 having 優(yōu)先選擇where,where實(shí)現(xiàn)不了,再選擇having。-- having的執(zhí)行效率低-- 4.找出每個(gè)部門平均薪資,要求顯示平均薪資高于2500的  -- 這個(gè)就不能使用where(錯(cuò)誤的寫法,where子句中不能進(jìn)行寫分組函數(shù))	SELECTdeptID,AVG(sal)FROMempwhere avg(sal) >2500GROUP BYdeptID ;(正確寫法)SELECTdeptID,AVG(sal)FROMempGROUP BYdeptID HAVING AVG(sal) > 2500;-- 5.找出每個(gè)崗位的平均薪資,要求顯示平均薪資大于1500的,出去mag崗位之外。	SELECT job,AVG(sal) avgsalFROMempWHERE job!= 'mag'GROUP BYjobHAVING AVG(sal) > 1500ORDER BYavgsal DESC; -- jiang'x
  - ==SELECT 語(yǔ)句中,含有GROUP BY 語(yǔ)句,SELECT后面只能跟:參與分組,以及分組函數(shù)的字段,其他字段不可以寫上去== 添加其他的字段在oracle中會(huì)報(bào)錯(cuò)- HAVING 子句不能單獨(dú)使用,必須和GROUP BY 一起使用。 - HAVING:對(duì)分組之后的進(jìn)行條件刷選。
  1. 分頁(yè)查詢:

    • 語(yǔ)法:SELECT 字段名 FROM 表名 起始索引 查詢數(shù)目的條數(shù)

    • – 起始索引公式:當(dāng)前頁(yè)的起始索引 = (當(dāng)前頁(yè)碼 - 1) *每頁(yè)顯示的條數(shù)

      分頁(yè)查詢limit是MySQL數(shù)據(jù)庫(kù)的方言

      Oracle分頁(yè)查詢使用rownumber

      SQL Server分頁(yè)查詢使用top

  2. 去重查詢

    • 關(guān)鍵字
     select distinct name from student;
  • distinct 只能出現(xiàn)在所有查詢字段的最前方

  • 可以使用分組函數(shù)

2 鏈接查詢

  • 多表查詢

鏈接方式分類

  1. 內(nèi)連接:

    完全能匹配上這個(gè)條件的數(shù)據(jù)查詢出來(lái)

    多個(gè)表之間的關(guān)系的平等的關(guān)系

    1. 等值鏈接

      -- 查詢每個(gè)員工所在部門名稱,顯示員工名和部門名
      -- SQL92  :結(jié)構(gòu)不夠清晰,
      select s.sname,y.yname
      fromstudent s , yanjiu y
      where s.sno = y.sno;-- SQL99  :表鏈接的條件是獨(dú)立的,連接之后還可以繼續(xù)添加條件  inner可以省略
      select s.sname,y.yname
      fromstudent s 
      [inner] join yanjiu y
      ons.sno = y.sno;
      
    2. 非等值鏈接

      條件不是等量關(guān)系

      -- 工資介于salgrade中的最低和最高之間 用到兩個(gè)表
      select e.ename,e.sal,s.grade
      fromemp e
      joinsalgrade s
      one.sal between s.losal and s.hisal
    3. 自鏈接:一個(gè)表寫成兩個(gè)表

      -- 查詢員工的上級(jí)領(lǐng)導(dǎo),要求顯示員工名和對(duì)應(yīng)的領(lǐng)導(dǎo)名
      selecta.ename  '員工名', b.ename '領(lǐng)導(dǎo)名'
      from emp a
      joinemp b
      on a.mgr = b.empno;		
      
  2. 外連接

    多個(gè)表之間有主次的關(guān)系,主表和副表

    主表就是要全部查詢出來(lái)的,副表的符合條件才會(huì)查詢出來(lái)

    1. 左鏈接

      -- 左外查詢  左邊的是主表
      select s.sname,y.yname
      fromstudent s left join yanjiu y
      ons.sno = y.sno;-- 查詢員工的上級(jí)領(lǐng)導(dǎo),要求顯示員工名和對(duì)應(yīng)的領(lǐng)導(dǎo)名
      selecta.ename  '員工名', b.ename '領(lǐng)導(dǎo)名'
      from emp a
      left joinemp b
      on a.mgr = b.empno;		
      
    2. 右鏈接

      -- 右外查詢  右邊的是主表  outer可以省略
      select s.sname,y.yname
      fromstudent s 
      right [outer] join yanjiu y
      ons.sno = y.sno;

      左右鏈接之間可以相互轉(zhuǎn)換

    外連接的查詢結(jié)果條數(shù)一定是 >= 內(nèi)連接的查詢結(jié)果條數(shù)

  3. 全連接

笛卡爾積現(xiàn)象:當(dāng)兩張表進(jìn)行鏈接查詢,沒有任何條件查詢的時(shí)候,最終查詢結(jié)果條數(shù),是兩張表?xiàng)l數(shù)的乘積

==避免笛卡爾積現(xiàn)象:==連接時(shí)加條件,滿足這個(gè)條件的記錄就篩選出來(lái)!

select sname,yname
fromstudent,yanjiu
where student.sno = yanjiu.sno-- 起別名	
select s.sname,y.name
fromstudent s,yanjiu y
where s.sno = y.sno-- 減少鏈接次數(shù)

3 子查詢

SELECT語(yǔ)句中嵌套子查詢,被嵌套的SELECT語(yǔ)句為子查詢

where子查詢

-- 找出比最低工資高的員工姓名和工資
SELECT ename, sal
FROMemp
WHEREsal >(SELECT MIN(sal) FROM emp);

from子句中的子查詢

  • from后面的子查詢,可以將子查詢的查詢結(jié)果當(dāng)作一個(gè)臨時(shí)表

    -- 找出每個(gè)崗位的平均工資的薪資等級(jí)
    select t.*,s.grade
    from (select job,avg(sal)  avgsal  from emp group by job) as t
    joinsalgrade s
    ont.avgsal between s.losal and s.hisal	
    

select后面的子查詢

  • 返回的結(jié)果只能有一條數(shù)據(jù),多余一條數(shù)據(jù)就會(huì)報(bào)錯(cuò)

4 union合并查詢結(jié)果集

SELECT name ,age FROM student WHERE name = '張三'
UNION
SELECT name ,age FROM student WHERE name = '小三';
  • 效率高,鏈接一次新表,匹配次數(shù)就會(huì)翻倍,union可以減少匹配次數(shù),還可以將結(jié)果集拼接起來(lái)

  • union在進(jìn)行結(jié)果集的合并時(shí),要求兩個(gè)結(jié)果集的列數(shù)相同

5 limit 查詢

  • 將查詢結(jié)果集的一部分取出來(lái),使用在分頁(yè)查詢中

使用方法:

  1. 完整寫法: LIMIT :startIndex(從0開始) ,length(長(zhǎng)度)
SELECT ename, sal
FROMemp
ORDER BYsal desc
LIMIT5 ; -- 取前五條SELECT ename, sal
FROMemp
ORDER BYsal desc
LIMIT1,5 ; -- 前六:1-6

通用分頁(yè)

每頁(yè)顯示 6頁(yè)條記錄

第1頁(yè):limit 0,6 【0、1、2、3、4、5】

第2頁(yè):limit 6,6 【6 7 8 9 10 11】

第3頁(yè):limit 12,6

第n頁(yè):limit (n-1) * 6,6

開始的index = pageSize * ( n - 1)

limit (pageNO - 1) * pageSize , pageSize

2.2 DDL

  • 對(duì)表的結(jié)構(gòu)進(jìn)行操作

2.2.1 create:表的創(chuàng)建

  1. 語(yǔ)法:

    CREATE TABLE 表名
    (
    字段名1 數(shù)據(jù)類型,
    字段名1 數(shù)據(jù)類型,
    字段名1 數(shù)據(jù)類型,
    字段名n 數(shù)據(jù)類型   
    );
    

    表名規(guī)范:

    以   t_table1  或者  tbl_ 開始  -- 可讀性高
    

    創(chuàng)建表實(shí)列:

    -- 建立學(xué)生表
    CREATE TABLE t_student
    (sno int(10),name varchar(22),age  int(3),sex char(5),email varchar(255)
    );-- 建立學(xué)生表,指定默認(rèn)值
    CREATE TABLE t_student
    (sno int(10),name varchar(22),age  int(3) default '女',sex char(5),email varchar(255)
    );
    

2. 數(shù)據(jù)類型

  • 數(shù)據(jù)類型就是屬性 ,有一些常用的,例如:整數(shù)數(shù)據(jù) ,字符數(shù)據(jù),日期數(shù)據(jù),貨幣數(shù)據(jù)等

數(shù)字類型

數(shù)據(jù)類型范圍占用的字節(jié)
bigint-263 ~263 -18字節(jié)
int-231~231-14字節(jié) (11字符)
smallint- 215 ~ 215-12字節(jié)
tinyint0~2551字節(jié)
float-1.79E+308~3.40E+384或者8字節(jié)

時(shí)間類型

數(shù)據(jù)類型輸出
time12:35:29.123 (精確度到秒后面三位)時(shí)分秒
date2007-05-08 (年月日)短日期
smalldatetime2007-05-08 12:35:00
datetime2007-05-08 12:35:29.123(精確到后面 就是小數(shù)點(diǎn)后面三位) 長(zhǎng)日期
datetime2007-05-08 12:35:29.1234567(精確到小數(shù)點(diǎn)后面三七位)

字符串類型

類型說(shuō)明
char[(n)]固定長(zhǎng)度(255長(zhǎng)度) 。 n用于定義字符串長(zhǎng)度,必須在1~8000之間。
varchar[(n|max)]可變長(zhǎng)度。n用于定義字符串長(zhǎng)度,可以在1~8000之間。
nchar[(n)]固定長(zhǎng)度的Unicode字符串?dāng)?shù)據(jù)。n用于定義字符串長(zhǎng)度,必須在1~4000之間。
nvarchar可變長(zhǎng)度的Unicode字符串?dāng)?shù)據(jù)。n用于定義字符串長(zhǎng)度,必須在1~4000之間。
clob字符大對(duì)象。最多可以存儲(chǔ)4G的字符串(超過(guò)255個(gè)字符,使用它)
blob二進(jìn)制大對(duì)象。存儲(chǔ)圖片、聲音、視頻等媒體數(shù)據(jù)(插入數(shù)據(jù)時(shí),必須使用IO流

2 .2.2 alter:修改表

修改數(shù)據(jù)表:

  • 修改表名: ALTER TABLE 表名 RENAME TO 新的表名;
  • 修改列名和數(shù)據(jù)類型: ALTER TABLE 表名 CHANGE 列名 新列名 新數(shù)據(jù)類型;
  • 添加一列: ALTER TABLE 表名 ADD 列名 數(shù)據(jù)類型;
  • 刪除列 : ALTER TABLE 表名 DROP 列名
  • 修改數(shù)據(jù)類型: ALTER TABLE 表名 MODIFY 列名 新數(shù)據(jù)類型;

2.2.3 drop:刪除表

語(yǔ)法:

DROP TABLE 表名
DROP TABLE IF EXISTS  表名  -- 存在就刪除

快速刪除表

  1. 語(yǔ)法

    truncate table 表名;
    
    • 特點(diǎn):物理刪除,刪除效率高,不可以恢復(fù)
    • 刪除數(shù)據(jù),表結(jié)構(gòu)保留
    • 不能刪除單條數(shù)據(jù)

刪除數(shù)據(jù)表:

  • 刪除表:DROP TABLE 數(shù)據(jù)表名;
  • drop 表TABLE if exists 表名;

2.3DML

  • 對(duì)表中的數(shù)據(jù)進(jìn)行修改

2.3.1插入 insert

  1. 語(yǔ)法

    insert into 表名(字段名1,字段名2,字段名3,...) values(值1,值2,值3,...)
    
    • 字段名和值要一一對(duì)應(yīng):數(shù)量對(duì)應(yīng),數(shù)據(jù)類型要對(duì)應(yīng)。

    插入實(shí)列:

    insert into t_student(sno,name,age,sex,eamil) values(1,'張三',15,'女','1234567@qq.com')  -- 按照順序insert into t_student(name,sno,age,sex,eamil) values('張三',1,15,'女','1234567@qq.com')  -- 字段順序可以調(diào)整,但是字段名和值一定要對(duì)應(yīng)insert into t_student(sno,name) values('張4',2) -- 只要某些字段,插入數(shù)據(jù)后其他的字段就會(huì)是nullinsert into t_student() values(1,'李4',12,'女','123456744@qq.com') -- 省略字段名,就必須寫上所有的字段名
    
  2. 插入多條記錄

    INSERT  
    INTO   表名  (列名1,列名2.…) 
    VALUES  (值1,值2...), (值1,值2...), (值1,值2…);
    
  3. insert插入日期

    格式化:format()

  4. 將查詢結(jié)果插入到一張表中( 少 用 )

    insert into 表名 select * from 表名 ;select * into 新表名 from 表名;
    

2.3.2修改 Update

  1. 語(yǔ)法格式

    update表名
    set字段名1 = 值1,字段名2 = 值2,字段名3 = 值3,字段名n = 值n
    where條件;
    
    • 沒有條件將會(huì)將整個(gè)表更改

2.3.3刪除 delete

  • 表中的數(shù)據(jù)被刪除了,但是數(shù)據(jù)在硬盤上的真實(shí)存儲(chǔ)空間不會(huì)被釋放
  • 刪除效率低,可回滾
  1. 語(yǔ)法格式

    delete 
    from表名
    where條件
    
    • 沒有條件將會(huì)把整個(gè)表內(nèi)的數(shù)據(jù)進(jìn)行刪除
  2. 刪除大表(刪除表中的全部數(shù)據(jù))

    
    

2.4 表

2.4.1 表結(jié)構(gòu)的增刪改查

  • 一旦設(shè)計(jì)好表,就很少會(huì)對(duì)表進(jìn)行修改
  • 修改成本高,就要對(duì)java代碼進(jìn)行修改
  • 使用工具(navicat)修改

2.4.2約束 (constraint)

  • 給字段添加約束,保證表中數(shù)據(jù)的完整性,有效性!!!
  • 保證表中的數(shù)據(jù)有效
  • 列約束:直接在列后面添加約束
  • 表級(jí)約束:約束沒有添加在列的后面
  1. 非空約束:not null
  2. 唯一約束:unique
  3. 主鍵約束:primary ley(PK)
  4. 外鍵約束:foreign key(FK)
  5. 級(jí)聯(lián)更新
  6. 檢查約束:check(mysql不支持)

1 非空約束 (not null)

  • 約束的字段不嫩改為null

    CREATE TABLE t_student
    (sno int(10) not null,name varchar(22) not null,age  int(3),sex char(5),email varchar(255)
    );
    

2 唯一性約束 (unique)

  • 可以為null ,但是不可以重復(fù)

    drop table if exists t_student
    CREATE TABLE t_student
    (sno int(10) unique,  -- 列級(jí)約束name varchar(22),age  int(3),sex char(5),email varchar(255)
    );insert into t_student() values(1,'李4',12,'女','123456744@qq.com')
    insert into t_student() values(2,'李4',12,'女','123456744@qq.com')
    -- 在插入數(shù)據(jù)的時(shí)候,sno的值,則不能重復(fù) 
    
  • 多個(gè)字段字段聯(lián)合起來(lái)具有唯一性

    CREATE TABLE t_student
    (sno int(10),name varchar(22),unique(sno,name)  -- sno ,name 聯(lián)合起來(lái)唯一。表
    );
    insert into t_student() values(1,'李4',12,'女','123456744@qq.com')
    insert into t_student() values(2,'李武',12,'女','123456744@qq.com')
    -- 分開的sno,name可以重復(fù),但是(sno,name) 聯(lián)合起來(lái)就不可以重復(fù)
    
  • not null 和unique聯(lián)合使用

    CREATE TABLE t_student
    (sno int(10) not null unique,  -- sno變成主鍵name varchar(22)
    );
    

3 主鍵約束 (primary key :PK)

  • 主鍵約束:一個(gè)表只能有一個(gè)主鍵

  • 主鍵字段:字段添加主鍵約束

  • 主鍵值:每一行記錄的唯一標(biāo)識(shí)。

    • 建議使用:int 、bigint、char等類型
    • 不建議使用:varchar來(lái)做主鍵,主鍵值定長(zhǎng)的。
  • 特征

  1. not null + unique (主鍵值不能為空,不能重復(fù))
  • 任何每一張表都要有主鍵,沒有就是非法的

    drop table if exists t_student
    CREATE TABLE t_student
    (sno int primary key ,  name varchar(22)
    );-- 表級(jí)約束添加主鍵約束
    drop table if exists t_student
    CREATE TABLE t_student
    (sno int ,  name varchar(22),primary key(sno)
    );-- 一個(gè)字段做主鍵:單一主鍵-- 多個(gè)字段做主鍵:復(fù)合主鍵  (不要使用)
    drop table if exists t_student
    CREATE TABLE t_student
    (sno int ,  name varchar(22),primary key(sno,name)
    );
    
  • 自然主鍵:自然數(shù)(使用多)

  • 業(yè)務(wù)主鍵:主鍵值與業(yè)務(wù)緊密關(guān)聯(lián)。(使用少,業(yè)務(wù)變動(dòng)會(huì)影響到業(yè)務(wù)會(huì)改變)

    -- 自動(dòng)維護(hù)主鍵值
    drop table if exists t_student
    CREATE TABLE t_student
    (sno int primary key auto_increment,  --  使sno自增:auto_incrementname varchar(22)
    );
    

4 外鍵約束(foreign key :FK)

  • 術(shù)語(yǔ):

    • 外鍵約束:
    • 外鍵字段:字段添加上外鍵約束
    • 外鍵值:外鍵字段中的每一個(gè)值。可以為null
  • 父表:被引用的表

  • 子表:引用的表

順序: (理解,不要死記)

  1. 刪除表:
    • 先刪除子表,再刪除父表
  2. 創(chuàng)建表
    • 先創(chuàng)建父表,再創(chuàng)建子表
  3. 刪除數(shù)據(jù)
    • 先刪除子數(shù)據(jù),再刪除父數(shù)據(jù)
  4. 插入數(shù)據(jù)
    • 先插入父,再插入子
CREATE TABLE t_calss   -- 父表
(classno int primary key ,  --  使sno自增:auto_incrementclassname varchar(22)
);CREATE TABLE t_student  -- 子表
(sno int primary key auto_increment,  name varchar(22),classcno int foreign key(classno) references t_class(classno)
);

2.5 數(shù)據(jù)處理函數(shù)

  • 又稱為:單行處理處理函數(shù)

2.2.1 單行處理函數(shù)

  • 一個(gè)輸入,對(duì)應(yīng)一個(gè)輸出
函數(shù)名說(shuō)明
lower大寫變成小寫
upper小寫變成大學(xué)
substr取子串(被截取的字符串,起始下標(biāo),截取的長(zhǎng)度)
length取長(zhǎng)度
trim去前后空格
str_to_date將字符串轉(zhuǎn)換成日期
date_fromat格式化日期
round四舍五入
rand生成隨機(jī)數(shù)
ifnull將null轉(zhuǎn)換成一個(gè)具體值
SELECT loser(name),age FROM student  -- name 內(nèi)容變成小寫SELECT round(123456.123,0) FROM studnet ; -- round(參數(shù)1,參數(shù)2)  參數(shù)1:要四舍五入的數(shù);參數(shù)2:保留多少位小數(shù)

2.2.2 多行處理函數(shù)

  • 多個(gè)輸入,對(duì)應(yīng)一個(gè)輸出

分組函數(shù) / 聚合函數(shù) / 多行處理函數(shù) 在上面的分組查詢中查看 這里的內(nèi)容

3 存儲(chǔ)引擎

(了解)

  • 表存儲(chǔ) / 組織

  • 建表時(shí):指定存儲(chǔ)引擎

    engine  -- 指定存儲(chǔ)引擎
    CHARSET -- 指定表的字符編碼
    
  • MySQL支持的搜索引擎

    show engines \G  -- 顯示目前數(shù)據(jù)庫(kù)版本支持的數(shù)據(jù)庫(kù)引擎
    
    • MyISAM
      • MyISAM的表具有以下的特征:
        1. 格式文件一存儲(chǔ)表結(jié)構(gòu)的定義(mytable.frm)
        2. 數(shù)據(jù)文件―存儲(chǔ)表行的內(nèi)容(mytable.MYD )
        3. 索引文件–存儲(chǔ)表上索引(mytable.MYI):索引是一本書的目錄,縮小掃描范圍,提高效率
    • InnoDB:
      • MySQL默認(rèn)存儲(chǔ)引擎,重量級(jí)引擎
      • 支持事務(wù),保證數(shù)據(jù)庫(kù)的安全,支持事務(wù)回滾
      • 服務(wù)器崩潰了,支持自動(dòng)恢復(fù)
      • 表和索引存儲(chǔ)在一個(gè)表空間內(nèi)
    • MEMORY:
      • 數(shù)據(jù)存儲(chǔ)在內(nèi)存當(dāng)中,斷電就沒有
      • 表數(shù)據(jù)及索引被存儲(chǔ)在內(nèi)存中,查詢快,效率高,不需要與硬盤交互。

4 事務(wù)

transaction

  • 事務(wù):完整的業(yè)務(wù)邏輯。

事務(wù)的DML語(yǔ)句

insert
update
delete
  • 數(shù)據(jù)的增刪改查要考慮安全

  • 多條DML語(yǔ)句共同來(lái)聯(lián)合完成

  • 多條語(yǔ)句同時(shí)成功,或者同時(shí)失敗!

4.1 實(shí)現(xiàn)事務(wù)

4.1.1 提交事務(wù) (commit)

  • 清空事務(wù)性活動(dòng)的日志文件,將數(shù)據(jù)全部徹底持久化到數(shù)據(jù)庫(kù)表中
  • 提交事務(wù)標(biāo)志著,事務(wù)的結(jié)束。全部成功的結(jié)束。

mysql 默認(rèn)情況下是自動(dòng)提交事務(wù)

  • 自動(dòng)提交不符合我們開發(fā)的業(yè)務(wù),必須多條同時(shí)執(zhí)行成功才進(jìn)行提交業(yè)務(wù)。
-- 關(guān)系自動(dòng)提交機(jī)制,先執(zhí)行
start transaction

4.1.2 回滾事務(wù) (rollback)

  • 將之前所有的DML 操作全部撤銷,并且清空事務(wù)性活動(dòng)的日志文件
  • 回滾事務(wù)標(biāo)志著,事務(wù)的結(jié)束。全部失敗的結(jié)束。
-- 在經(jīng)過(guò)一系列的增刪改查之后
rollback ;

回滾到上一次的提交

4.2 事務(wù)的特性

  • A :原子性

    說(shuō)明事務(wù)是最小的工作單元,不可以再分。

  • C :一致性

    所有的事務(wù)要求:在同一個(gè)事務(wù)當(dāng)中,所有操作必須同時(shí)進(jìn)行,或者同時(shí)失敗,保證數(shù)據(jù)的一致性。

  • I :隔離性

    A事務(wù)和B事務(wù)之間具有一定的隔離。

    A和B事務(wù)同時(shí)操作同一個(gè)表,結(jié)果會(huì)怎么樣?

  • D:持久性

    事務(wù)最終結(jié)束的一個(gè)屏障。事務(wù)提交,將沒有保存到硬盤上的數(shù)據(jù)保存到硬盤上。

4.2.1 事務(wù)的隔離性

1 事務(wù)的隔離級(jí)別

  1. 讀未提交:read uncommitted (最低的隔離級(jí)別) 《提交之前就可以讀到》

    • 事務(wù)A可以讀取到事務(wù)B未提交的數(shù)據(jù)
    • 臟讀現(xiàn)象 (Dirty read)
    • 理論情況下
  2. 讀已提交:read committed 《提交之后才能讀到》

    • 事務(wù)A只能讀取到事務(wù)B提交之后的數(shù)據(jù)
    • 解決了臟讀現(xiàn)象
    • 不可重復(fù)讀取數(shù)據(jù)
    • 每一次讀取到的數(shù)據(jù)是真實(shí)數(shù)據(jù)
  3. 可重復(fù)讀:repeatable read 《提交之后也讀不到 :讀取到開啟事務(wù)時(shí)的數(shù)據(jù)。事務(wù)不結(jié)束數(shù)據(jù)就不會(huì)改變》

    • 事務(wù)A開啟之后,每一次在事務(wù)A中讀取到的數(shù)據(jù)都是一致的。即使事務(wù)B修改數(shù)據(jù),事務(wù)A中讀取到的數(shù)據(jù)依然沒有改變。
    • 解決了不可以重復(fù)讀問(wèn)題
    • 出現(xiàn)幻影讀:讀取的數(shù)據(jù)都是幻想
  4. 序列化 / 串行化:serializable (最高的隔離級(jí)別)

    • 效率最高,解決所有問(wèn)題

    • 事務(wù)要進(jìn)行排隊(duì),不能并發(fā)!!

  • 查看事務(wù)隔離級(jí)別:
select @@tx_isolation
  • 設(shè)置全局隔離級(jí)別
set global transaction isolation level read uncommitted  -- 讀wei

5 索引

  • 索引是在數(shù)據(jù)表字段上添加的,提高查詢效率
  • 一個(gè)字段可以添加一個(gè)索引,多個(gè)字段聯(lián)合起來(lái)也可以添加索引

添加索引條件:

  1. 數(shù)據(jù)量龐大
  2. 以條件查詢的形式存在
  3. 很少的DML(insert 、update、delete)操作

5.1創(chuàng)建索引

  1. 創(chuàng)建索引語(yǔ)法:
create index 索引名 on 表名(字段);
  1. 刪除索引
drop index 索引名 on emp;

底層原理:二叉樹(B-tree)

  1. 查看索引

    explain select * from 表 where 條件 
    

5.2索引失效

  1. 模糊查詢盡量避免以“%” 開始,則會(huì)開始進(jìn)行索引查詢,否則不會(huì)進(jìn)行索引查詢。索引查詢時(shí)必須知道第一個(gè)字母是什么
  2. 使用 or 的情況失效,or兩邊字段同時(shí)有索引才會(huì)走索引。
  3. 復(fù)合索引,沒有使用左側(cè)的列查找
  4. where當(dāng)中索引列參加了運(yùn)算
  5. 在where當(dāng)中索引列使用了函數(shù)

5.3 索引的分類

  1. 單一索引 :單個(gè)字段添加索引
  2. 復(fù)合索引 :兩個(gè)或多個(gè)字段添加索引
  3. 主鍵索引 :主鍵上添加索引
  4. 唯一性索引 :具有unique 約束的字段上添加索引 (唯一性較弱的字段上索引用處不大)

union 不會(huì)使用索引失效

6 視圖

view

  • 不同角度看同一份數(shù)據(jù)

6.1 創(chuàng)建視圖

create view 視圖名 as select * from 表名
  • 室友DQL語(yǔ)句才能以view的形式創(chuàng)建

6.2 刪除視圖

drop view 視圖名

6.3 視圖的CRUD

  • 視圖的操作會(huì)影響到原表的操作。
  • 視圖是一張臨時(shí)表

7 DBA命令

7.1 新建用戶

CREATE USER username IDENTIFIED BY 'password';
  • username:你將創(chuàng)建的用戶名,
  • password:該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務(wù)器.

7.2 授權(quán)

grant all privileges on dbname.tbname to 'username'@'login ip' identified by 'password' with grant option;
  1. dbname=*表示所有數(shù)據(jù)庫(kù)
  2. tbname=*表示所有表
  3. login ip=%表示任何ip
  4. password為空,表示丌需要密碼即可登錄
  5. with grant option; 表示該用戶還可以授權(quán)給其他用戶

用戶權(quán)限表

權(quán)限名權(quán)限描述
alter修改數(shù)據(jù)庫(kù)的表
create創(chuàng)建新的數(shù)據(jù)庫(kù)戒表
delete刪除表數(shù)據(jù)
drop刪除數(shù)據(jù)庫(kù)/表
index創(chuàng)建/刪除索引
insert添加表數(shù)據(jù)
select查詢表數(shù)據(jù)
update更新表數(shù)據(jù)
all允許任何操作
usage只允許登錄

7.2.1 回收授權(quán)

revoke privileges on dbname[.tbname] from username;

刷新權(quán)限:

flush privileges;

7.3 數(shù)據(jù)的導(dǎo)入導(dǎo)出

7.3.1數(shù)據(jù)的導(dǎo)出

  • 在dos命令窗口進(jìn)行

    導(dǎo)出指定數(shù)據(jù)庫(kù)

    C:\Users\25849>mysqldump bookshop>D:\bookshop.sql -uroot -p123456
    
  • 導(dǎo)出指定表

    C:\Users\25849>mysqldump bookshop emp> D:\ bookshop_emp.sql -uroot -p123456
    

7.3.2數(shù)據(jù)的導(dǎo)入

C:\Users\25849>mysql -uroot -p123456
mysql>create database bookshop;
mysql>use bookshop;
mysql>source D:\bookshop.sql

8 數(shù)據(jù)庫(kù)設(shè)計(jì)的三規(guī)范

數(shù)據(jù)表的設(shè)計(jì)依據(jù),對(duì)數(shù)據(jù)庫(kù)表的設(shè)計(jì)

  • 第一范式(1NF):要求任何一張表必須要有主鍵,每一個(gè)字段為原子性,字段不可以再分。

  • 第二范式(2NF):建立在第一范式基礎(chǔ)上,要求所有非主鍵字段完全依賴于主鍵,不存在部份依賴

  • 第三范式(3NF):建立在第二范式基礎(chǔ)上,要求所有非主鍵字段直接依賴于主鍵,不存在傳遞依賴

  • 減少數(shù)據(jù)表的冗余

9 SQL高級(jí)應(yīng)用

8.1 T-SQL程序設(shè)計(jì)

8.1.1 變量

  1. 全局變量

    @@ -- @@開頭的變量
    
    • 系統(tǒng)定于和維護(hù),用戶無(wú)法進(jìn)行修改或管理
  2. 局部變量

    declare @i int  -- 使用關(guān)鍵declare 聲明變量 i,數(shù)據(jù)類型為:int 
    
    • 局部變量賦值

      -- 使用 set 或 select
      set @i = 123
      select @i = 1
      

8.1.2 流程控制語(yǔ)句

1 if 語(yǔ)句

# 類似 java 中的 if ··· else if ··· else
if <條件表達(dá)式><命令行或程序塊>
else <命令行或程序塊>

2 begin ··· end語(yǔ)句

BEGIN<命令行或程序塊>
END

3 IF [NOT] EXISTS 語(yǔ)句

IF [NOT] EXISTS(select 子查詢)<命令行或程序塊>
else <命令行或程序塊>	

4 CASE 語(yǔ)句

格式一:

CASE <表達(dá)式>WHEN <表達(dá)式> THEN <表達(dá)式>···WHEN <表達(dá)式> THEN <表達(dá)式>[ELSE  <表達(dá)式>]
END	

格式二:

CASE <表達(dá)式>WHEN <表達(dá)式> THEN <表達(dá)式>···WHEN <表達(dá)式> THEN <表達(dá)式>[ELSE  <表達(dá)式>]
END	
SELECT SNo,CNo,Score = CASEWHEN Score is null THEN '未考'WHEN Score < 60  THEN '不及格'WHEN Score >= 60 AND Score <= 90 THEN '良好'WHEN Score >= 90 THEN '優(yōu)秀'END
FROM SC

5 WHILE 語(yǔ)句

WHILE (條件)<命令行或程序塊>

8.2存儲(chǔ)過(guò)程

8.2.1 存儲(chǔ)過(guò)程 的有點(diǎn)

  1. 模塊化的程序設(shè)計(jì)
  2. 高效率的執(zhí)行
  3. 較少網(wǎng)絡(luò)流量
  4. 可以作為安全機(jī)制使用

8.2.2 存儲(chǔ)過(guò)程的分類

  1. 系統(tǒng)存儲(chǔ)的過(guò)程
  2. 用戶自定義存儲(chǔ)過(guò)程
  3. 擴(kuò)展存儲(chǔ)過(guò)程

8.2.3 創(chuàng)建存儲(chǔ)過(guò)程

DROP TABLE IF EXISTS t_student;CREATE TABLE t_student
(id INT(11) PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) NOT NULL,age  INT(11) NOT NULL
);INSERT INTO t_student VALUES(NULL,'懿',22),(NULL,'小懿',18);

8.3觸發(fā)器

8.3.1 分類

  1. DML 觸發(fā)器
  2. DDL 觸發(fā)器

8.3.2 創(chuàng)建DML觸發(fā)器

格式:

CREATE TRIGGER 觸發(fā)器名稱
ON { table | view }
{ FOR | AFTER | INSTEAD OF }
{ [INSERT] | [UPDATE] | [DELETE] }
AS
SQL語(yǔ)句[,...n]

例子:修改student 表數(shù)據(jù),修改之后查詢修改后的數(shù)據(jù)。

--創(chuàng)建修改之后的觸發(fā)器
CREATE TRIGGER trig_student_After
ON student
FOR  UPDATE 
AS PRINT 'THE TRIGGER IS AFTER'SELECT * FROM student
  • FOR 和AFTER 作用一樣

8.3.3 創(chuàng)建DDL觸發(fā)器

CREATE TRIGGER 觸發(fā)器名稱ON { ALL SERVER | DATABASE }
{ FOR | AFTER }
{ 事件類型|事件組}[,...n]
AS
SQL語(yǔ)句[,...n]

例子:插入數(shù)據(jù)庫(kù)后輸入 ‘創(chuàng)建數(shù)據(jù)庫(kù)’

CREATE TRIGGER trig_create
ON ALL SERVERAFTER CREATE_DATABASE
ASPRINT '創(chuàng)建數(shù)據(jù)庫(kù)'
http://aloenet.com.cn/news/40547.html

相關(guān)文章:

  • 365元做網(wǎng)站網(wǎng)絡(luò)營(yíng)銷的發(fā)展趨勢(shì)
  • 代做安裝預(yù)算的網(wǎng)站青島網(wǎng)站建設(shè)
  • 怎么自己的電腦做網(wǎng)站服務(wù)器百度廣告代理商
  • 網(wǎng)站運(yùn)營(yíng)推廣方案云南百度公司
  • 網(wǎng)站ico圖標(biāo) 代碼搜索引擎排名中國(guó)
  • 上的網(wǎng)站app上海百度公司總部
  • 女同性怎么做的視頻網(wǎng)站軟文有哪些發(fā)布平臺(tái)
  • 合肥seo優(yōu)化安徽網(wǎng)站關(guān)鍵詞優(yōu)化
  • 虛擬主機(jī)網(wǎng)站淘客網(wǎng)站建設(shè)b站推廣軟件
  • 網(wǎng)站備案之前需要建好網(wǎng)站嗎windows優(yōu)化大師要會(huì)員
  • 教育網(wǎng)站怎么做如何推廣一個(gè)項(xiàng)目
  • 長(zhǎng)春企業(yè)網(wǎng)站模板建站域名解析ip
  • css做購(gòu)物網(wǎng)站的分類目錄搜索引擎優(yōu)化搜索優(yōu)化
  • 做地方旅游網(wǎng)站目的意義正規(guī)的教育培訓(xùn)機(jī)構(gòu)有哪些
  • 中華人民共和國(guó)城鄉(xiāng)與建設(shè)部網(wǎng)站長(zhǎng)沙seo優(yōu)化推薦
  • ae有么有做gif的網(wǎng)站構(gòu)建新發(fā)展格局
  • 網(wǎng)站開發(fā)架設(shè)baidu百度
  • 如何打開本地安裝的WORDPRESS網(wǎng)站查詢工具seo
  • 合肥建設(shè)學(xué)校官網(wǎng)網(wǎng)站網(wǎng)站關(guān)鍵詞挖掘
  • html5移動(dòng)網(wǎng)站模板貴港網(wǎng)站seo
  • 怎么兼職做網(wǎng)站谷歌seo站內(nèi)優(yōu)化
  • 用網(wǎng)站模板建網(wǎng)站谷歌官網(wǎng)注冊(cè)入口
  • 一個(gè)網(wǎng)站想看訪客量怎么做seo外鏈平臺(tái)
  • 青浦網(wǎng)站建設(shè)公司福州短視頻seo推薦
  • 網(wǎng)站風(fēng)格設(shè)計(jì)百度seo怎么樣優(yōu)化
  • 網(wǎng)站建設(shè)文化怎么樣圖片百度搜索
  • 簡(jiǎn)單的招聘網(wǎng)站怎么做電商網(wǎng)站設(shè)計(jì)
  • 手機(jī)哪里可以做視頻網(wǎng)站鄭州聚商網(wǎng)絡(luò)科技有限公司
  • 勁松做網(wǎng)站的公司百度一下首頁(yè)設(shè)為主頁(yè)
  • wordpress中文 插件網(wǎng)站文章優(yōu)化技巧