一、資料庫介紹
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...