當前位置:首頁 > IT技術 > 數(shù)據庫 > 正文

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

之前都是對數(shù)據庫的數(shù)據表進行的操作,

之后都是對表中的數(shù)據進行操作:

MySQL數(shù)據操作


1. MySQL數(shù)據管理DML

1. 外鍵(不重要)

  1. 數(shù)據庫級別外鍵:不推薦

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

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

或者在表創(chuàng)建之后:

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

2. DML語言(數(shù)據操作)

插入 insert:

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

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

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的區(qū)別

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

使用delete的區(qū)別:

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

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

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:

--  函數(shù)concat(a, b), 可以做連接
select concat("name:", StudentName) as 新名字 from student;
-- 返回的結果為:
| 新名字|
|name:趙四|
-- select 語句也可以跟計算、系統(tǒng)變量、version()函數(shù)、等
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. 聯(lián)表查詢JOIN

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

自連接

外連接(左外,右外)

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

4. 分頁 LIMIT 和排序 ORDER BY

分頁:用于前端分頁顯示

  • 緩解數(shù)據庫壓力

limit語法:

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

5. 子查詢(不用)

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

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

3. 函數(shù)

1. 常用函數(shù)

-- 數(shù)學運算
select abs(-8) -- 絕對值
select ceiling(9.4) -- 向上取整(常用),結果為10
select floor(9.4) -- 向下取整 9
select rand() -- 返回一個[0,1) 的隨機數(shù)
-- 字符串
select char_length("") -- 字符串長度
替換,反轉,大小寫,用在操作中

-- 時間和日期函數(shù)
select current_date() -- 獲取當前日期
select now() -- 獲取 YYYY MM DD HH mm ss
select year(now()) -- 獲取年,頁可以獲得月,日,時,分,秒
-- 系統(tǒng)
select system_user() -- 獲取使用數(shù)據庫的用戶
select user() -- 同上
select version() 

2. 聚合函數(shù)

遠古筆記

3. 數(shù)據庫級別MD5加密

message digest algorithm 5th

MD5 不可逆

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

4. 事務

要么都成功,要么都失敗

將一組SQL放到一個批次中去執(zhí)行

事務原則:遠古筆記 ACID

Transaction : 事務

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

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

Isolation :并發(fā)訪問時,互不干擾

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


事務級別:

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

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

不可重復讀: t1讀,沒提交,t2修改,t1發(fā)現(xiàn)前后讀不一致

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

-- mysql默認開始事務,如果要手動提交事務, 手動關閉:
set autocommit = 0;
-- 事務開啟:
start transaction;
	insert ....
	insert ...

commit; -- 提交 or
rollback; -- 回滾
-- 事務結束
set autocommit = 1;

-- 不重要
savepoint 保存點名
rollback to savepoint 保存點名 -- 也可以設置保存點, 最后回滾到保存點去。(事務沒提交,保存點也沒用)
release savepoint 保存點名 -- 刪除保存點

5. 索引

** B+樹

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

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

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

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

1. 索引分類:

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

2. 測試索引:

explain 執(zhí)行語句; -- 可以顯示查詢次數(shù)等

3. 索引原則:

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

索引的數(shù)據結構:


Hash類型的索引

BTree:InnoDB 默認

6. 權限管理和備份

1. 用戶管理

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

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

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

2. 數(shù)據庫備份

保證數(shù)據不丟失,數(shù)據轉移

Mysql數(shù)據庫備份的方式:

  1. 拷貝物理文件

  2. SQLyog可視化導出

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

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

7. 數(shù)據庫的歸約,三大范式

前端: ant design網站

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

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

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

規(guī)范性和性能問題

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

開通會員,享受整站包年服務立即開通 >