• 當前位置:首頁 > IT技術 > 數據庫 > 正文

    [數據庫 03] 數據操作
    2021-11-30 22:52:28

    之前都是對數據庫的數據表進行的操作,

    之后都是對表中的數據進行操作:

    MySQL數據操作


    1. MySQL數據管理DML

    1. 外鍵(不重要)

    1. 數據庫級別外鍵:不推薦

    添加另一個表中的建過來:

    -- 在創建表()的最后寫:
    key `FK_本表屬性` (`本表屬性`),
    constraint `FK_本表屬性` foreign key (`本表屬性`) references `另外表名`(`另外表的屬性`)
    

    或者在表創建之后:

    alter table `本表名` add constraint `FK_本表屬性` foreign key(`屬性名`) references `另外表名`(`另外表屬性`) 
    
    1. 程序級別外鍵:推薦

    2. DML語言(數據操作)

    插入 insert:

    -- 插入一個值
    insert into `表名`(`屬性1`,`屬性2`) values(`屬性1的值`,`屬性2的值`)
    -- 插入多行值
    insert into `表名`(`屬性1`,`屬性2`) values(`屬性1的值`,`屬性2的值`),(`屬性1的值`,`屬性2的值`)
    

    修改 update:修改數據一定要走索引(where后的數據是索引,否則事務未提交走的是表級鎖

    update `表名` set  `屬性`="要修改的值" where `key` = 某個值 
    -- 修改一行的多個值
    update `表名` set `屬性1`="value1",`屬性2`="value2" where `key` = 某個值
    

    where后的條件:=, <, >, <>是不等于,between...and...., and, or,

    刪除delete:

    delete from `表名` where `屬性`=`某個值`
    -- 刪除一張表的記錄,
    truncate `表名`
    

    delete table `表名 和 truncate的區別

    truncate更專業,auto_insc等屬性重新計z數,而delete刪除整張表的記錄時,自增不重新計數。truncate不會影響事務

    使用delete的區別:

    InnoDB:自增存儲在內存中,當重啟mysql后,自增也從初始值開始,mysql80修復了;

    MyISAM: 自增存儲在文件中,重啟mysql也從上一次刪除的后續值進行

    2. DQL查詢語句

    *** 重要***

    select [ALL| DISTINCT] {table.field [as anotherName]} from
    table_name
    [left|right|inner join table2_name]
    -- 順序不能變
    [where ]
    [group by] -- 指定結果按照哪幾個字段分組
    [having] -- 過濾分組的記錄必須滿足的次要條件
    [order by]
    [limit {offset, row_count}];
    

    1. 查詢 去重

    select語句:遠古筆記

    new:

    --  函數concat(a, b), 可以做連接
    select concat("name:", StudentName) as 新名字 from student;
    -- 返回的結果為:
    | 新名字|
    |name:趙四|
    -- select 語句也可以跟計算、系統變量、version()函數、等
    select version();
    select @@auto_increment_increment
    

    2. 條件子句

    條件:

    where sno >1000 and sno < 2000;
    where sno between 1000 and 2000;
    where sno >1000 && sno < 2000;
    

    模糊查詢:

    where name like '劉%'  -- like后面的一定要用單引號包起來
    

    _ 匹配單個字符,% 匹配0~多個字符

    in, is null, is not null

    3. 聯表查詢JOIN

    內連接(兩邊都符合條件)

    自連接

    外連接(左外,右外)

    左外:左表為主表,左表中的數據全部出現,右邊必須滿足條件,所以左表會匹配到右表中沒有的null(對右表更嚴格)

    4. 分頁 LIMIT 和排序 ORDER BY

    分頁:用于前端分頁顯示

    • 緩解數據庫壓力

    limit語法:

    -- limit 起始值,頁面展示的數據條數
    第n頁:
    limit (n-1)*pageSize, pageSize
    eg:
    1-100個數據
    limit 0, 5 -- 第0個數據到第4個數據
    limit 5, 5 -- 第5個數據到第9個數據(第二頁)
    limit 10,5 -- 第10個數據到第14個數據(第三頁)
    

    5. 子查詢(不用)

    本質:在where語句中,嵌套一個查詢語句

    select from
    where xxx = (子查詢語句) -- 先執行子查詢,后執行外查詢 
    

    3. 函數

    1. 常用函數

    -- 數學運算
    select abs(-8) -- 絕對值
    select ceiling(9.4) -- 向上取整(常用),結果為10
    select floor(9.4) -- 向下取整 9
    select rand() -- 返回一個[0,1) 的隨機數
    -- 字符串
    select char_length("") -- 字符串長度
    替換,反轉,大小寫,用在操作中
    
    -- 時間和日期函數
    select current_date() -- 獲取當前日期
    select now() -- 獲取 YYYY MM DD HH mm ss
    select year(now()) -- 獲取年,頁可以獲得月,日,時,分,秒
    -- 系統
    select system_user() -- 獲取使用數據庫的用戶
    select user() -- 同上
    select version() 
    

    2. 聚合函數

    遠古筆記

    3. 數據庫級別MD5加密

    message digest algorithm 5th

    MD5 不可逆

    -- 寫法
    表: id name pwd
    -- 插入時加密
    insert into testTable values (1, "firstName", MD5("123456"))
    -- (校驗) 對用戶傳入的數據加密,比對加密后的值, 如果查出來就匹配
    select * from testTable 
    where name = "xiaoming" and pwd = MD5("用戶的輸入密碼")
    

    4. 事務

    要么都成功,要么都失敗

    將一組SQL放到一個批次中去執行

    事務原則:遠古筆記 ACID

    Transaction : 事務

    Atomicity : 要么都成功,要么都失敗

    Consistency(最終一致性)事務前后數據完整性保證一致

    Isolation :并發訪問時,互不干擾

    Durability : 事務一旦提交,寫入數據庫不可逆


    事務級別:

    丟失修改數據:t1修改,每提交,被t2修改給覆蓋

    讀臟數據:t1修改,沒有提交的時候t2讀,t1回滾了,t2讀到臟數據

    不可重復讀: t1讀,沒提交,t2修改,t1發現前后讀不一致

    幻讀:同上,t2修改增加了一列

    -- mysql默認開始事務,如果要手動提交事務, 手動關閉:
    set autocommit = 0;
    -- 事務開啟:
    start transaction;
    	insert ....
    	insert ...
    
    commit; -- 提交 or
    rollback; -- 回滾
    -- 事務結束
    set autocommit = 1;
    
    -- 不重要
    savepoint 保存點名
    rollback to savepoint 保存點名 -- 也可以設置保存點, 最后回滾到保存點去。(事務沒提交,保存點也沒用)
    release savepoint 保存點名 -- 刪除保存點
    

    5. 索引

    ** B+樹

    兩個連接:用explain命令查看使用索引時搜索的行數(對比不同)

    CodingLabs - MySQL索引背后的數據結構及算法原理

    (13條消息) 【MySQL優化】——看懂explain_漫漫長途,終有回轉;余味苦澀,終有回甘-CSDN博客_explain

    索引:幫助Mysql高效獲取數據的數據結構,(索引是數據結構)

    1. 索引分類:

    • 主鍵索引:primary key
      • 一張表只能由一個主鍵索引,但主鍵索引可以是多列
    • 唯一索引: unique key
      • 唯一索引是被索引的列中,不允許有相同的行值;一個表可以有多個列是唯一索引
    • 常規索引: key/index
      • 默認
    • 全文索引: FullText
      • 特定的引擎才有,MyISAM有

    2. 測試索引:

    explain 執行語句; -- 可以顯示查詢次數等
    

    3. 索引原則:

    • 索引不是越多越好
    • 不要對經常變動的數據加索引
    • 小數據量不需要加索引
    • 索引一般加在常用來查詢的字段上。

    索引的數據結構:


    Hash類型的索引

    BTree:InnoDB 默認

    6. 權限管理和備份

    1. 用戶管理

    SQLyog可視化管理:(點擊小人,新建用戶,下一頁是權限選擇)

    sql管理:找mysql下的user表本質還是對mysql.user進行增刪改查

    -- 創建一個用戶
    CREATE USER kuangsheng IDENTIFIED BY '123456';
    -- 修改密碼
    SET PASSWORD = PASSWORD('xinmima') -- 修改當前版本密碼
    SET PASSWORD FOR kuangsheng = PASSWORD('xinmima') -- 修改某用戶密碼
    -- 重命名用戶名
    RENAME
    -- 用戶授權
    GRANT 
    -- 撤銷權限
    REVOKE
    -- 刪除用戶
    DROP USER
    

    2. 數據庫備份

    保證數據不丟失,數據轉移

    Mysql數據庫備份的方式:

    1. 拷貝物理文件

    2. SQLyog可視化導出

      • 想要導出的表右鍵備份或導出,
    3. 命令行導出 mysqldump

      # mysqldump -h主機,-u用戶名,-p密碼 ,數據庫 表,> 導出到的地址/文件名
      mysqldump -hlocalhost -uroot -p123456 school student > 地址/文件名
      # 導入:在cmd中登錄到mysql>下,:
      source 地址/文件名.sql
      

    7. 數據庫的歸約,三大范式

    前端: ant design網站

    1NF(原子性):數據庫中每一列都是不可分割的原子數據項

    2NF:(對主鍵沒有部分依賴):每張表只描述一件事情

    3NF: (直接依賴, 沒有傳遞依賴

    規范性和性能問題

    本文摘自 :https://www.cnblogs.com/

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码