MySQL資料庫學習筆記

2021-10-24 15:50:51 字數 4415 閱讀 7599

一、資料庫介紹

1、為什麼需要資料庫

記憶體掉電後資料丟失,計算機的資源有限,因此需要把程式中用的資料儲存下來以便於關機後還能繼續使用(資料持久化),而儲存資料最簡單的方法就是把資料以檔案形式寫入到磁碟中。

隨著程式的功能越來越複雜,需要操作的數量也就是越來越來大,管理資料就成了很大的問題,因為讀寫檔案並解析資料需要大量重複的操作,並且從大量資料的增、刪、改、查需要非常複雜的邏輯和耗時的操作。

如果程式都各息實現讀寫資料的**,一方面效率低、容易出錯,另一方面是每個程式訪問資料的介面、業務邏輯不同,所以**難以復用,所以我們前輩們就發明出一款專門用來管理資料的軟體--資料庫

使用資料庫程式設計師就不需要自己管理資料了,而是通過資料庫提供的介面來讀寫資料,至於資料是資料儲存到檔案中的、如何提高效率、如何保證安全,則不需要關心。

2、什麼是資料庫

資料庫,可以看作電子化的檔案櫃(儲存電子檔案的場所),使用者可以對檔案中的資料方便的增加、刪除、修改、查詢等操作。

注意:我們使用的其實是資料管理軟體,而不是儲存資料的倉庫,大底層來看我們使用資料庫其實就是與乙個程序通訊。

3、資料庫的型別

層次型資料庫

它的資料模型是上下級的層次關係,從資料結構上來看就是像一棵樹。

網狀型資料庫

層次型資料庫不足以表更複雜的資料關係,因此就有了網狀型資料庫,它的資料模型是資料節點與節點之間連線起來,從資料結構上來看就是圖型結構。

關係型資料庫

由於層次型、網狀型資料庫普通人難以理解,因此才有了關係型資料庫。

可以把關係型資料庫看作是二維**,它的資料模就相當於excel表。

隨著時間的推移和市場競爭,最終關係型資料獲得了最終的市場份額,因為關係型資料庫使用最方便、簡單。

4、目前主流的關聯式資料庫

商用資料庫:oracle,oceanbase,db2,sql server

開源資料庫:mysql,mariadb

桌面資料庫:以微軟的access為代表,適合桌面應用程式使用

嵌入式資料庫:sqlite為代表,適合手機、平板、可穿戴裝置使用

記憶體資料庫:redis,資料儲存在記憶體中,所以訪問速度非常快

二、sql語言介紹

1、什麼是sql

sql是結構化查詢語言的縮寫,用於訪問和運算元據庫,既可以查詢資料庫中的資料,也可以新增、刪除、修改資料庫中的資料,還可以對資料庫進行管理和維護。

sql語言被ansi組織定義出一套統一的標準,也就是所有的資料庫都支援sql語言,但是不同的資料庫對sql語言進行了不同程度的擴充套件(通常把它們稱為"方言"),也就是說如果只使用標準的sql語言,理論上所有的資料庫都可以使用,但如果使用了某個資料庫的擴充套件,換到其它資料庫上可能就不行了。

注意:大小寫不敏感

2、sql中的語句分類

資料庫控制語句:用於許可權的授予和**。

資料定義語句:用於建立、修改、刪除資料庫物件。

資料操作語句:用於改變資料庫中的資料,如:增、刪、改、查。

資料查詢語句:用於查詢所需要的資料,select。

事務控制語句:用來維護資料一致性的語句。

3、sql的資料型別

數值型tinyint 1位元組

smallint 2位元組

mediumint 3位元組

integer 4位元組

bigint 8位元組

float 4位元組

double 8位元組

decimal(m,d)

m是數字的最大數(精度)。其範圍為1~65(在較舊的mysql版本中,允許的範圍是1~254),m 的預設值是10。

d是小數點右側數字的數目(標度)。其範圍是0~30,但不得超過m

字串型

char(n) n:0~255 定長字串,相當於定義 char str[n];

varchar(n) n:0~65535 變長字串,n表示最多儲存n個位元組,具體多少個位元組不確定。

日期型date 3位元組 日期值 格式:yyyy-mm-dd

例:1000-01-01/9999-12-31

time 3位元組 時間值或持續時間 格式:hh:mm:ss

例:'-838:59:59'/'838:59:59'

year 1位元組 年份值 格式:yyyy

例:1901/2155

datetime 8位元組 混合日期和時間值 格式:yyyy-mm-dd hh:mm:ss

例:1000-01-01 00:00:00/9999-12-31 23:59:59

timestamp 4位元組 時間戳 格式:yyyymmdd hhmmss

例:1970-01-01 00:00:00/2038 結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2023年1月19日 凌晨 03:14:07

三、訪問資料庫

1、本地訪問

mysql -uuser -ppwd 方便,但有暴露密碼的風險

mysql -uuser -p 可以隱藏的輸入密碼

2、遠端訪問

先通過ssh、telnet命令遠端登入搭建資料庫的伺服器,然後再登陸資料庫,前提是伺服器要開戶ssh或telnet遠端登入的功能。

3、客戶端訪問

mysql workbench

四、資料庫控制語句

建立資料庫:create database namedb;

建立使用者並授權: grant all(select,insert,update,delete) privileges on namedb.* to users@』*』 identified by 『pwd』;

重新整理:flush privileges;

選擇資料庫:use namedb;

注意:每次使用者登入後,第乙個操作就要選擇要使用的資料庫。

五、資料定義語句

1、建立表

create table 表名(欄位名 欄位類開,…);

注意:語句不區分大小寫,但表名、欄位名區分大小寫。

檢視當前資料庫中的所有**:show tables;

檢視表結構:desc 表名;

練習1:建立乙個老師表

2、修改表

修改表名:rename table 舊表名 to 新錶名;

增加列:alter table 表名 add(欄位名 字段型別);

注意:只能新增到末尾,不能插入到中間。

刪除列:alter table 表名 drop 欄位名;

修改列:alter table 表名 modify 欄位名 字段型別;

3、刪除表

刪除表資料,保留表結構:truncate 表名;

刪除表資料和表結構:drop table 表名;

六、表設計的三正規化

1、無重複的列

如果列的資料重複,可以拆分成兩張表。

1011 hehe1 w 20 c1|c2

1012 hehe2 w 20 c1|c3

1011 hehe1 w 20 c1

1011 hehe1 w 20 c2

1012 hehe2 w 20 c1

1012 hehe2 w 20 c3

2、在遵循第一正規化的基礎,字段完全依賴於主鍵

如果乙個欄位與主鍵沒有依賴關係,可能會導致其它欄位的值重複。

1011 hehe1 w 20

1011 hehe1 w 20

1011 c1

1011 c2

1012 c1

1012 c3

3、在遵循第二正規化的基礎,字段不能傳遞依賴於主鍵

如果乙個欄位與主鍵僅有傳遞依賴關係,也可能會導致其它欄位的值重複。

七、資料操作語言

1、插入資料

插入一條完整資料:insert into students values(字段值);

字段值要與表結構一一對應。

隨意插入一條不完整資料:insert into students(欄位名) values(字段值);

欄位名與字段值要一一對應。

2、修改表資料

修改所有行:update 表名 set 欄位名=資料;

修改部分行:update 表名 set 欄位名=資料 where 條件;

3、刪除表資料

刪除所有資料:delete from 表名;

功能相當於 truncate 表名;

刪除符合條件的資料:delete from 表名 where 條件;

4、客戶端不允許修改、刪除

edit->preferences->sql editor->取消底部的safe updates…

八、資料查詢語言

select 欄位1,欄位2,… from 表名 where 條件;

注意:*是sql中的萬用字元,代表所有字段

MySQL 資料庫學習筆記 2

show variables show variables like character set 顯示所有和字符集相關的變數 show create database db name 顯示資料庫建立的字符集 windows 中 的my.ini 和 linux 中的 my.conf 中 設定了 mys...

Mysql資料庫學習筆記 一

啟動服務 net start mysql57 終止服務 net stop mysql57 命令列登入mysql管理系統mysql h 127.0.0.1 u root p 環境變數 修改提示符 prompt u h d 提示符改為 root 127.0.0.1 none 書寫規範 關鍵字和函式名大寫...

MySQL資料庫學習筆記(3)

mysql中的函式包括 字元函式 數值運算子與函式 比較運算子與函式 日期時間函式 資訊函式 聚合函式 加密函式等。1 字元函式 比如說,需要將姓和名一起輸出時 前導空格是指第乙個字元之前的空格,後續空格是指最後乙個字元之後的空格。注意 mysql中的字串編號從1開始。select substrin...