Python學習日志
RBHGO的主頁歡迎關注
溫馨提示:創作不易,如有轉載,注明出處,感謝配合~
目錄
文章目錄
- Python學習日志
- 目錄
- Python學習日志15課 - 初識資料庫
- 資料庫基本操作
- 登錄(進入)`Mysql`
- 查看資料庫:
- 創建資料庫:
- 洗掉資料庫:
- 獲取資料庫幫助:
- 切換資料庫
- 資料庫中的資料型別:
- 表的基本操作
- 查看資料庫中的表:
- 創建二維表
- 顯示表結構:
- 洗掉表:
- 更新表:
- 修改表:
- 設計表:
- 查詢(搜索)表:
- 其他內容
- 范式理論
- 資料的完整性和一致性
- 總結
Python學習日志15課 - 初識資料庫
資料庫∶資料的倉庫(集散地),它解決了資料持久化和資料管理的問題,
持久化—>將資料從記憶體轉移到硬碟(可以長久保存資料的存盤介質),
學習資料庫,首先當然是正確安裝、配置資料庫環境,再談然后,本文使用的是win10下的MySQL8的版本,如果您下載配置完成,給您的超級管理員賬號設好了密碼,那就讓我們開始吧,
-
關系型資料庫(本文以MySQL為例):
關系資料庫特點,
-
理論基礎:關系代數,
-
具體表象:用二維表(有行和列)組織資料,
-
編程語言:結構化查詢語言(SQL)
-
編程語言:SQL -> Structured Query Language -> 結構化查詢語言
SQL是一種專門用來與資料庫通信的語言(不分大小寫)
-
我們通常可以將SQL陳述句分為四類:
- DDL (資料定義語言) —> 創建、洗掉、修改各種物件 —> create / drop / alter
- DML (資料操作語言) —> 插入、洗掉、更新(修改)資料 —> insert / delete / update
- DQL (資料查詢語言) —> 檢索(查詢)資料 —> select
- DCL (資料控制語言) —> 授予或者召回用戶權限 —> grant / revoke
-
-
非關系型資料庫:
- NoSQL —> No SQL —> No, SQL —> Not Only SQL
- NewSQL —> 保存資料的方式可能完全不同于傳統的關系型資料庫,
但是允許使用關系型資料庫的編程語言操作/獲取資料,
資料庫基本操作
登錄(進入)Mysql
? 1.PowerShell: mysql -u root -p —> 輸入密碼
- 進入指定資料庫
mysql -u 用戶名 -h Ip地址 -p—> 輸入密碼 - 也就是說連接自己的資料庫還可以寫成:
mysql -u root -h 127.0.0.1(localhost) -p—> 密碼
? 2.MySQL Command Line Client-Unicode: 直接密碼進入
查看資料庫:
-- 查看所有的資料庫
show databases;
-- 查看所有字符集(編碼方式)
show character set;
-- 查看所有的校對規則(排序)
show collation;
-- 查看所有的引擎
show engines;
創建資料庫:
創建資料庫時,我們通過default charset utf8指定了資料庫默認使用的字符集,推薦使用該字符集,因為utf8能夠支持國際化編碼,如果將來資料庫中用到的字符可能包括類似于Emoji這樣的圖片字符,也可以將默認字符集設定為utf8mb4(最大4位元組的utf-8編碼),
create database database_name default charset utf8mb4;
洗掉資料庫:
drop database if exists database_name;
溫馨提示:刪庫之前請三思而后行!!!
獲取資料庫幫助:
詢問資料庫操作的操作:問題前加 ?
-- 查看show命令的幫助
? show
-- 查看資料庫的型別
? data types
-- 資料型別bigint的怎么使用,范圍
? bigint
-- 浮點資料型別deciaml
? deciaml
切換資料庫
切換到要操作的資料庫(執行操作陳述句之前都得先切換到要操作的資料庫中):
use database_name;
溫馨提示:前期最容易忘記的就是執行切換到要操作的資料庫中,以及陳述句結尾的
;號,直到;之前的陳述句換行也沒關系,遇到分號才算是一段SQL陳述句的結束,
資料庫中的資料型別:
創建好一個資料庫,為的是持久化資料,存入資料是肯定不是直接的入庫就完事了,我們需要在資料庫中創建二維表,將特定的資料放在相應的表中,而創建表的時候,我們需要給表的每一列都給定資料型別,以免資料錄入的錯誤,避免不必要的麻煩,所以記住資料型別很重要,
-
整數:int(integer) / bigint / smallint / tinyint —> ussigned(無符號 -> 非負)
-
int范圍 ---> -2^31 —— 2^31 - 1 ---> ussigned 0 —— 2^32 - 1 -
bigint范圍 ---> -2^63 —— 2^63 - 1 ---> ussigned 0 —— 2^64 - 1 -
smallint范圍 ---> -2^15 —— 2^15 - 1 ---> ussigned 0 —— 2^16 - 1(65535) -
tinyint范圍 ---> -2^7 —— 2^7 - 1 ---> ussigned 0 —— 2^8 - 1(255)
小數:float / double / decimal
-
建議使用
decimal ---> deciaml(10,2)—> 共有10位保留2位小數
時間日期:time / date / datetime / timestamp(時間戳)
-
字串:char / varchar 大物件:longtext / longblob
-
char / varchar -
longtext / longblob(二進制大物件) —> 4G —> 放資源路徑(URL)
布爾型:boolean
-
boolean ---> tinyint(1)—> 0 / 1
列舉(Mysql獨有):emum
相信大家在下載MySQL資料庫的時候,都下載了MySQL自帶的功能強大的Workbench;沒下也沒關系,回到安裝程式點擊界面中Quick Action下藍色的Reconfigure把它安裝一下就行,在Workbench下寫SQL陳述句比在命令列中舒服很多(就想我們寫Python在Pycharm中寫一樣)注釋用--,
表的基本操作
DDL(資料定義語言 與 DML(資料操作語言)
查看資料庫中的表:
show tables;
創建二維表
關鍵字create
以下的創建表的SQL陳述句用學生表為例
create table tb_student
(
stu_id int unsigned not null comment '學號',
std_name varchar(10) not null comment '姓名',
stu_sex char(1) default 'M' not null comment '性別',
stu_birth date comment '出生日期',
primary key (stu_id)
) engine=innodb;
- 主鍵(primary key):能夠唯一確定一條記錄的列
- 外鍵(foreign key):外來的主鍵(其他表的主鍵)
顯示表結構:
desc tb_student;
洗掉表:
關鍵字delete,drop
1.drop table `tb_student`;(一般不這樣使用)
2.delete from `tb_student` where `stu_id`=3923;(洗掉表中的指定行,帶where條件)
3.truncate table `tb_student`;(截斷不可修復,使用請慎重,別說是看我這里知道的)
更新表:
關鍵字update
更新表一定記得帶where條件,否則會對全表進行跟新和刪表一樣是需要三思而后行的操作,
update `tb_student` set `stu_addr`='四川成都',`col_id`=2
where `stu_id`=3755;
修改表:
關鍵字alter
添加一個列:
alter table `tb_student` add column `stu_address` varchar(100);
洗掉一個列:
alter table `tb_student` drop column `stu_sex`;
alter table `tb_student` add column `stu_sex` boolean default 1;
修改一個列(modify -> 只改型別,change -> 修改類名):
alter table `tb_student` modify column `stu_sex` char(1) default 'M';
alter table `tb_student` change column `stu_sex` `stu_gender` char(1) default 'F';
添加額外的約束條件:
- 添加check約束,學生的性別只為'M'或'F':
alter table `tb_student` add constraint `ck_student_gender`
check (`stu_gender`='M' or `stu_gender`='F');
- 添加唯一性約束,學院的名字是具有唯一性的:
alter table `tb_college` add constraint `uk_college_name`
Unique (`col_name`);
洗掉約束:
alter table `tb_student` drop constraint `ck_student_gender`;
插入資料
關鍵字insert
向學生表寫入資料:
insert into `tb_student` values (3016, 'RBHGO', '1999-11-1', '慕尼黑', 'M');
insert into `tb_student` values (1001, '金輪', '1983-8-13', '蕪湖', 'M');
一次寫入多條(可以只錄入想錄入的資料,順序在此可以變換):
insert into `tb_student` (`stu_name`, `stu_id`, `stu_gender`) values
('小六子', '1006', 'M'),
('二麻子', '1002', default),
('九妹', '1009', 'F');
根據表的從屬關系(關系的重數),在多的一方建立具有約束條件的列(列的型別要保持一致):
alter table tb_student add column col_id int unsigned;
alter table tb_student add constraint fk_student_col_id foreign key (col_id)
references tb_college (col_id);
溫馨提示:建立約束可以直接在建表時就寫,但是讓建表陳述句看起來更加臃腫,所以個人更喜歡在修改表時操作,
設計表:
隨手建一個表可以不用設計,但是在大體量的專案中,如果我們想將我們的表建得又快又好,提前畫圖;這樣我們就可以更加直觀地建立資料庫中需要的表,需要注意的就是表與表之間是否具有的關系,(當然Workbench支持畫圖的這項功能)
-
ER圖 —> Entity Relationship Diagram
物體:矩形框 —> 表
屬性:橢圓框 —> 列(欄位)
關系:菱形框
~ 關系的重數:一對一(1:1)、一對多(1:n)、多對多(m:n 一般需要中間表來進行維護) -
EER圖(物理模型)—> Extended ER圖
弄好EER圖通過正向工程(forward engineer) —> 直接生成表或者建表的SQL陳述句,
寫好建表的SQL陳述句通過逆向工程(reverse engineer) —> 生成EER圖
查詢(搜索)表:
下面查詢SQL陳述句的基本流程,也是我在分享資料庫知識的時候想重點分享的內容,如果您有興趣的話,請關注我的下一篇文章,
select ..., ..., ... as ..., ... as ...
from ... where ... and... or...
group by .....
having ......
order by ...... asc / desc
limit ... offset ...
其他內容
范式理論
范式理論是設計關系型資料庫中二維表的指導思想,
- 第一范式:資料表的每個列的值域都是由原子值組成的,不能夠再分割,
- 第二范式:資料表里的所有資料都要和該資料表的鍵(主鍵與候選鍵)有完全依賴關系,
- 第三范式:所有非鍵屬性都只和候選鍵有相關性,也就是說非鍵屬性之間應該是獨立無關的,
資料的完整性和一致性
- 完整性:
- 物體完整性 —> 主鍵 / 唯一索引
- 參照完整性 —> 外鍵
- 領域完整性—>資料型別、型別長度、非空約束、默認值約束、檢查約束
- 一致性:事務 —> ACID特性 / 事務隔離級別
- 開啟:start transaction / begin
- 提交:commit
- 回滾:rollback
總結
MySQL 最早是由瑞典的 MySQL AB 公司開發的一個開放原始碼的關系資料庫管理系統,該公司于2008年被昇陽微系統公司(Sun Microsystems)收購,在2009年,甲骨文公司(Oracle)收購昇陽微系統公司,因此 MySQL 目前也是 Oracle 旗下產品,
MySQL 在過去由于性能高、成本低、可靠性好,已經成為最流行的開源資料庫,因此被廣泛地應用于中小型網站開發,
學習資料庫的知識是很有必要的它的出現就是因為解決以下問題
(1).實作資料共享,資料實作集中控制, (2).減少資料的冗余度,并且容易擴充, (3).資料的獨立性, (4).整體資料結構化, (5).資料一致性和可維護性,以確保資料的安全性和可靠性,以及故障恢復,
在我的分享中,以SQL陳述句查詢為主,朝向資料分析方向,如果您有興趣請關注我,
感謝學習陪伴,您的點贊,評論就是我更新的動力
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296962.html
標籤:其他
上一篇:爆肝六萬字整理的python基礎,快速入門python的首選
下一篇:自定義中間件生成token
