重返MySQL之MySQL基礎
本章詳細介紹了,什麼是資料庫,常見的關係型資料庫有哪些,什麼是MySQL,及MySQL中DDL操作表,DML操作表記錄。
1.0 資料庫概述
1.1 資料儲存的方式
- 目前來說如果我們要進行資料儲存,有幾種方式:
- 我們可以使用集合等方式將資料儲存在記憶體中,但是資料不能持久化儲存,斷電/程式退出,資料就清除了
- 我們還可以將資料儲存在普通檔案中,可以持久化儲存,但是查詢,增加,修改,刪除資料比較麻煩,效率低
- 所以我們需要一個既可以持久化儲存資料又可以方便操作的地方來儲存資料,這就是接下來要給大家介紹的資料庫
1.2 什麼是資料庫
- 資料庫(DataBase,DB):指長期儲存在計算機的儲存裝置(硬碟)上,按照一定規則組織起來,可以被各種使用者或應用共享的資料集合. 還是以檔案的方式存在伺服器的電腦上的。
- 說白了就是資料的倉庫, 用來持久化儲存資料的.
1.3 常見的關係型資料庫
- MySql :開源免費的資料庫,中小型的資料庫,後來Sun公司收購了MySql,而Sun公司又被Oracle收購
- Oracle:收費的大型資料庫.Oracle公司的產品.Oracle收購SUN公司,收購MySql.
- DB2:IBM公司的資料庫產品,收費的.銀行系統中.
- SQLServer:MS公司.收費的中型的資料庫.
- SyBase:已經淡出歷史舞臺.提供了一個非常專業資料建模的工具PowerDesigner.
- SQLite: 嵌入式的小型資料庫,應用在手機端.
2.0 知識點-資料庫結構
- 資料庫是用來儲存資料的,那麼到底通過什麼樣的方式來存的. 結構是怎麼樣的呢?
- 資料庫管理程式(DBMS)可以管理多個資料庫,一般開發人員會針對每一個應用建立一個資料庫。為儲存應用中實體的資料,一般會在資料庫建立多個表,以儲存程式中實體的資料。
- 資料庫管理系統、資料庫和表的關係如圖所示:
3.0 什麼是MySQL
3.1 MySQL始出
- MySQL是開源,多執行緒的關係型資料庫,支援雙重授權模式,最早是在瑞典MySQL AB公司開發,其MySQL取名,來源於Monty 大女兒My,MySQL以免費,可靠性,易用性,廣受好評。
- 1996年MySQL釋出1.0版本,同年十月MySQL釋出3.11.1版本,當時只提供Solaris下的二進位制版本,又一個月後,Linux下二進位制包也釋出,此時MySQL還非常簡陋,只能在一個表中進行增刪查改操作,並無其他功能。
- 之後MySQL被Sun公司收購,隨後Sun被Oracle收購,所以目前MySQL屬於Oracle旗下產品
4.0 MySQL安裝
- MySQL安裝沒有什麼技術要求,幾乎是一路next,其中間只需要設定一下密碼即可,我原來MySQL一直安裝在虛擬機器上面,所以本次也釋出了一篇Windows10安裝MySQL5.6的圖文介紹其中包含了MYSQL安裝與啟動登入,文章連線:https://www.41it.cn/index.php/2021/08/01/mysqlinstall/
- MySQL圖形化工具下載連線,解壓即用無安裝技術
- 連結:https://pan.baidu.com/s/1Dw5k-zI1yNcCil5-VGpjdQ
提取碼:41it
5.0 SQL概述
5.1 什麼是sql?
- SQL:Structure Query Language。(結構化查詢語言),通過sql運算元據庫(運算元據庫,操作表,運算元據)
- SQL被美國國家標準局(ANSI)確定為關係型資料庫語言的美國標準,後來被國際化標準組織(ISO)採納為關聯式資料庫語言的國際標準
- 各資料庫廠商(MySql,oracle,sql server)都支援ISO的SQL標準。
- 各資料庫廠商在標準的基礎上做了自己的擴充套件。 各個資料庫自己特定的語法
5.2 sql的語法
- 每條語句以分號結尾(命令列裡面需要),如果在navicat,java程式碼中不是必須加的。
- SQL在window中不區分大小寫,關鍵字中認為大寫和小寫是一樣的
5.3 sql的分類
- Data Definition Language (DDL資料定義語言) 如:運算元據庫,操作表
- Data Manipulation Language(DML資料操縱語言),如:對錶中的記錄操作增刪改
- Data Query Language(DQL 資料查詢語言),如:對錶中的記錄查詢操作
- Data Control Language(DCL 資料控制語言),如:對使用者許可權的設定
6.0 DDL運算元據庫
6.1 資料庫增刪查改
create database 資料庫名 [character set 字符集][collate 校對規則] 注: []意思是可選的意思
-- 建立一個資料庫名為41itblog的資料庫
create database 41itblog;
-- 建立一個為41itblog2的資料庫指定編碼為GBK
create database 41itblog2 character set gbk;
-- 檢視所有資料庫
show databases;
-- 檢視41itblog資料庫定義結構
show create database 41itblog;
-- 刪除資料庫
drop databse 資料庫名;
-- 修改資料庫
alter database 資料庫名 character set 字符集;
-- 切換資料庫
use 資料庫名;
-- 檢視正在使用的資料庫
select database();
7.0 DDL操作表增刪查改
7.1 DDL建立表語法
create table 表名(
欄位名 欄位型別 [約束],
欄位名 欄位型別 [約束],
........
欄位名 欄位型別 [約束]
);
7.2 資料庫資料型別
- 資料庫資料型別一般可以分為三類,字串,數值,日期
- 整型 一般使用int 或者bigint
- 浮點/雙精度型
- 預設的範圍 float或者double
- 指定範圍 float(M,D) eg: float(4,2) 表達的範圍: -99.99~99.99
- 字串
- 固定長度 char(n) eg: char(20), 最大能存放20個字元. ‘aaa’, 還是佔20個字元的空間
- 可變長度 varchar(n) eg:varchar(20), 最大能存放20個字元. ‘aaa’, 佔3個字元的空間
- 一般使用varchar(n) 節省空間; 如果長度(eg:身份證)是固定的話 可以使用char(n) 效能高一點
- 關於大檔案
- 一般在資料庫裡面很少存檔案的內容, 一般存檔案的路徑
- 一般不使用二進位制存, 使用varchar(n)存檔案的路徑
- 日期
- DATE 只有日期
- DATETIME 日期和時間
7.3 資料庫欄位約束
-
即規則,規矩 限制;
-
作用:保證使用者插入的資料儲存到資料庫中是符合規範的
約束 約束關鍵字 主鍵 primary key 唯一 unique 非空 not null
約束種類:
- not null: 非空 ; eg: username varchar(40) not null username這個欄位不能為空,必須要有資料
- unique:唯一約束, 後面的資料不能和前面重複; eg: cardNo char(18) unique; cardNo欄位不能出現重複的資料
- primary key;主鍵約束(非空+唯一); 一般用在表的id列上面. 一張表基本上都有id列的, id列作為唯一標識的
- auto_increment: 自動增長,必須是設定了primary key之後,才可以使用auto_increment
- id int primary key auto_increment; id不需要我們自己維護了, 插入資料的時候直接插入null, 自動的增長進行填充進去, 避免重複了.
注意:
- 先設定了primary key 再能設定auto_increment
- 只有當設定了auto_increment 才可以插入null 自己維護 否則插入null會報錯
id列: - 給id設定為int型別, 新增主鍵約束, 自動增長
- 或者給id設定為字串型別,新增主鍵約束, 不能設定自動增長
7.4 建立資料庫表
建立一張部落格使用者表(含有id欄位,網名欄位,性別欄位.QQ欄位 id為主鍵自動增長)
-- 建立一張部落格使用者表(含有id欄位,網名欄位,性別欄位.QQ欄位 id為主鍵自動增長)
create table blog_user(
id int primary key auto_increment,
name varchar(40),
sex varchar(40),
qq int
);
7.5 檢視資料庫表
-- 檢視所有的表
show tables;
-- 檢視錶定義結構
desc 表名;
7.6 修改資料庫表
- 修改資料庫表語法
- 增加一列;alter table 表 add 欄位 型別 約束;
- 修改列的型別約束; alter table 表 modify 欄位 型別 約束 ;
- 修改列的名稱,型別,約束;alter table 表 change 舊列 新列 型別 約束;
- 刪除一列; alter table 表名 drop 列名;
- 修改表名 ; rename table 舊錶名 to 新表名;
- 給blog_user表新增一個地址欄位
alter table blog_user add address varchar(60) not null;
- 給blog_user表的sex欄位改成int型別
alter table blog_user modify sex int;
- 給blog_user表的address欄位修改成phone欄位
alter table blog_user change address phone varchar(20);
- 把class欄位刪除
alter table blog_user drop phone;
- 把blog_user表修改成blog_article
rename table blog_user to blog_article;
7.7 刪除資料庫表
-- 刪除表語法
drop table 表名;
-- 刪除blog_article
drop table blog_article;
8.0 DML操作表記錄-增刪改
準備工作: 建立一張部落格使用者表(使用者id,使用者名稱字,使用者年齡,使用者地址
create table blog_user(
user_id int primary key auto_increment,
user_name varchar(40),
user_age int,
user_address varchar(80)
);
8.1 插入資料
- 插入方式一: 插入指定列,如果沒有把這個列進行列出來, 以null進行自動賦值了
insert into 表(列,列..) values(值,值..);
- 插入方拾二:插入所有列
-- 注意 建立資料庫時候需要將編碼設定為utf8 insert into 表 values(值,值....); eg: insert into blog_user values(null,'張三',18,'河南'); insert into blog_user values(null,'李四',19,'湖南'); insert into blog_user values(null,'王二',50,'河北'); insert into blog_user values(null,'趙武',7,'湖北');
8.2 更新記錄
- 更新記錄語法
update 表 set 列 =值, 列 =值 [where 條件] -- 將所有使用者年齡改為18 update blog_user set user_age = 18; -- 將使用者名稱是張三的年齡改為50 update blog_user set user_age =50 where user_name='張三'; -- 將使用者名稱是李四的年齡改為25地址改為北京 update blog_user set user_age =25 , user_address='北京' where user_name='李四'; -- 使用者名稱是王二的年齡在原有的基礎上增加兩歲 update blog_user set user_age =user_age+2 where user_name='王二';
8.3 刪除記錄
- delete刪除記錄語法
delete from 表 [where 條件] -- 刪除名字為張三的資料 delete from blog_user where user_name='張三'; -- 刪除年齡小於25的資料 delete from blog_user where user_age < 25; -- 刪除所有記錄 delete from blog_user ;
- truncate 刪除表
truncate table 表;
- delete 和truncate區別
- DELETE 刪除表中的資料,表結構還在; 刪除的記錄可以找回
- TRUNCATE 刪除是把表直接DROP掉,然後再建立一個同樣的新表(空)。刪除的記錄不可以找回
- 邏輯刪除和物理刪除
- 物理刪除: 真正的刪除了, 資料不在, 使用delete就屬於物理刪除
- 邏輯刪除: 沒有真正的刪除, 資料還在. 搞一個標記, 其實邏輯刪除是更新 eg: state欄位 1 啟用 0禁用
- delete 和truncate區別
- 這裡只有DML操作表其中的增刪改,關於DML操作表的查詢語法將在下一個章節敘述,查詢表相對來說稍有複雜其中還包含,單表查詢,多表查詢,子查詢,外連線,內連線,左右外連線等。