重返MySQL之MySQL基礎(chǔ)
本章詳細(xì)介紹了佛吓,什么是數(shù)據(jù)庫,常見的關(guān)系型數(shù)據(jù)庫有哪些宵晚,什么是MySQL,及MySQL中DDL操作表维雇,DML操作表記錄淤刃。
1.0 數(shù)據(jù)庫概述
1.1 數(shù)據(jù)存儲的方式
- 目前來說如果我們要進(jìn)行數(shù)據(jù)存儲,有幾種方式:
- 我們可以使用集合等方式將數(shù)據(jù)保存在內(nèi)存中吱型,但是數(shù)據(jù)不能持久化保存逸贾,斷電/程序退出,數(shù)據(jù)就清除了
- 我們還可以將數(shù)據(jù)保存在普通文件中津滞,可以持久化保存铝侵,但是查找,增加触徐,修改咪鲜,刪除數(shù)據(jù)比較麻煩,效率低
- 所以我們需要一個既可以持久化保存數(shù)據(jù)又可以方便操作的地方來存儲數(shù)據(jù)撞鹉,這就是接下來要給大家介紹的數(shù)據(jù)庫
1.2 什么是數(shù)據(jù)庫
- 數(shù)據(jù)庫(DataBase疟丙,DB):指長期保存在計算機(jī)的存儲設(shè)備(硬盤)上鸟雏,按照一定規(guī)則組織起來崔慧,可以被各種用戶或應(yīng)用共享的數(shù)據(jù)集合. 還是以文件的方式存在服務(wù)器的電腦上的惶室。
- 說白了就是數(shù)據(jù)的倉庫, 用來持久化保存數(shù)據(jù)的.
1.3 常見的關(guān)系型數(shù)據(jù)庫
- MySql :開源免費的數(shù)據(jù)庫皇钞,中小型的數(shù)據(jù)庫夹界,后來Sun公司收購了MySql可柿,而Sun公司又被Oracle收購
- Oracle:收費的大型數(shù)據(jù)庫.Oracle公司的產(chǎn)品.Oracle收購SUN公司复斥,收購MySql.
- DB2:IBM公司的數(shù)據(jù)庫產(chǎn)品,收費的.銀行系統(tǒng)中.
- SQLServer:MS公司.收費的中型的數(shù)據(jù)庫.
- SyBase:已經(jīng)淡出歷史舞臺.提供了一個非常專業(yè)數(shù)據(jù)建模的工具PowerDesigner.
- SQLite: 嵌入式的小型數(shù)據(jù)庫,應(yīng)用在手機(jī)端.
1571057856327
2.0 知識點-數(shù)據(jù)庫結(jié)構(gòu)
- 數(shù)據(jù)庫是用來存儲數(shù)據(jù)的,那么到底通過什么樣的方式來存的. 結(jié)構(gòu)是怎么樣的呢?
- 數(shù)據(jù)庫管理程序(DBMS)可以管理多個數(shù)據(jù)庫评汰,一般開發(fā)人員會針對每一個應(yīng)用創(chuàng)建一個數(shù)據(jù)庫被去。為保存應(yīng)用中實體的數(shù)據(jù)惨缆,一般會在數(shù)據(jù)庫創(chuàng)建多個表踪央,以保存程序中實體的數(shù)據(jù)畅蹂。
- 數(shù)據(jù)庫管理系統(tǒng)液斜、數(shù)據(jù)庫和表的關(guān)系如圖所示:
img
3.0 什么是MySQL
3.1 MySQL始出
- MySQL是開源少漆,多線程的關(guān)系型數(shù)據(jù)庫示损,支持雙重授權(quán)模式嚷硫,最早是在瑞典MySQL AB公司開發(fā)仔掸,其MySQL取名起暮,來源于Monty 大女兒My负懦,MySQL以免費纸厉,可靠性残腌,易用性贫导,廣受好評孩灯。
- 1996年MySQL發(fā)布1.0版本,同年十月MySQL發(fā)布3.11.1版本寨昙,當(dāng)時只提供Solaris下的二進(jìn)制版本舔哪,又一個月后捉蚤,Linux下二進(jìn)制包也發(fā)布,此時MySQL還非常簡陋布持,只能在一個表中進(jìn)行增刪查改操作题暖,并無其他功能。
- 之后MySQL被Sun公司收購狂秦,隨后Sun被Oracle收購裂问,所以目前MySQL屬于Oracle旗下產(chǎn)品
4.0 MySQL安裝
- MySQL安裝沒有什么技術(shù)要求堪簿,幾乎是一路next皮壁,其中間只需要設(shè)置一下密碼即可虑瀑,我原來MySQL一直安裝在虛擬機(jī)上面,所以本次也發(fā)布了一篇Windows10安裝MySQL5.6的圖文介紹其中包含了MYSQL安裝與啟動登錄叽奥,文章連接:https://www.41it.cn/index.php/2021/08/01/mysqlinstall/
- MySQL圖形化工具下載連接痛侍,解壓即用無安裝技術(shù)
- 鏈接:https://pan.baidu.com/s/1Dw5k-zI1yNcCil5-VGpjdQ
提取碼:41it
5.0 SQL概述
5.1 什么是sql?
- SQL:Structure Query Language主届。(結(jié)構(gòu)化查詢語言),通過sql操作數(shù)據(jù)庫(操作數(shù)據(jù)庫,操作表,操作數(shù)據(jù))
- SQL被美國國家標(biāo)準(zhǔn)局(ANSI)確定為關(guān)系型數(shù)據(jù)庫語言的美國標(biāo)準(zhǔn)枫夺,后來被國際化標(biāo)準(zhǔn)組織(ISO)采納為關(guān)系數(shù)據(jù)庫語言的國際標(biāo)準(zhǔn)
- 各數(shù)據(jù)庫廠商(MySql,oracle,sql server)都支持ISO的SQL標(biāo)準(zhǔn)筷屡。
- 各數(shù)據(jù)庫廠商在標(biāo)準(zhǔn)的基礎(chǔ)上做了自己的擴(kuò)展毙死。 各個數(shù)據(jù)庫自己特定的語法
什么是SQL
5.2 sql的語法
- 每條語句以分號結(jié)尾(命令行里面需要),如果在navicat,java代碼中不是必須加的除呵。
- SQL在window中不區(qū)分大小寫纠拔,關(guān)鍵字中認(rèn)為大寫和小寫是一樣的
5.3 sql的分類
- Data Definition Language (DDL數(shù)據(jù)定義語言) 如:操作數(shù)據(jù)庫稠诲,操作表
- Data Manipulation Language(DML數(shù)據(jù)操縱語言)臀叙,如:對表中的記錄操作增刪改
- Data Query Language(DQL 數(shù)據(jù)查詢語言)劝萤,如:對表中的記錄查詢操作
- Data Control Language(DCL 數(shù)據(jù)控制語言)跨释,如:對用戶權(quán)限的設(shè)置
6.0 DDL操作數(shù)據(jù)庫
<img src="https://www.41it.cn/wp-content/uploads/2021/08/數(shù)據(jù)庫圖形工具執(zhí)行流程.png" alt="數(shù)據(jù)庫圖形工具執(zhí)行流程" style="zoom:75%;" />
6.1 數(shù)據(jù)庫增刪查改
create database 數(shù)據(jù)庫名 [character set 字符集][collate 校對規(guī)則] 注: []意思是可選的意思
-- 創(chuàng)建一個數(shù)據(jù)庫名為41itblog的數(shù)據(jù)庫
create database 41itblog;
-- 創(chuàng)建一個為41itblog2的數(shù)據(jù)庫指定編碼為GBK
create database 41itblog2 character set gbk;
-- 查看所有數(shù)據(jù)庫
show databases;
-- 查看41itblog數(shù)據(jù)庫定義結(jié)構(gòu)
show create database 41itblog;
-- 刪除數(shù)據(jù)庫
drop databse 數(shù)據(jù)庫名;
-- 修改數(shù)據(jù)庫
alter database 數(shù)據(jù)庫名 character set 字符集;
-- 切換數(shù)據(jù)庫
use 數(shù)據(jù)庫名;
-- 查看正在使用的數(shù)據(jù)庫
select database();
7.0 DDL操作表增刪查改
7.1 DDL創(chuàng)建表語法
create table 表名(
字段名 字段類型 [約束],
字段名 字段類型 [約束],
........
字段名 字段類型 [約束]
);
7.2 數(shù)據(jù)庫數(shù)據(jù)類型
- 數(shù)據(jù)庫數(shù)據(jù)類型一般可以分為三類煤傍,字符串蚯姆,數(shù)值,日期
- 整型 一般使用int 或者bigint
- 浮點/雙精度型
- 默認(rèn)的范圍 float或者double
- 指定范圍 float(M,D) eg: float(4,2) 表達(dá)的范圍: -99.99~99.99
- 字符串
- 固定長度 char(n) eg: char(20), 最大能存放20個字符. ‘a(chǎn)aa’, 還是占20個字符的空間
- 可變長度 varchar(n) eg:varchar(20), 最大能存放20個字符. ‘a(chǎn)aa’, 占3個字符的空間
- 一般使用varchar(n) 節(jié)省空間; 如果長度(eg:身份證)是固定的話 可以使用char(n) 性能高一點
- 關(guān)于大文件
- 一般在數(shù)據(jù)庫里面很少存文件的內(nèi)容, 一般存文件的路徑
- 一般不使用二進(jìn)制存, 使用varchar(n)存文件的路徑
- 日期
- DATE 只有日期
-
DATETIME 日期和時間
數(shù)據(jù)庫數(shù)據(jù)類型
7.3 數(shù)據(jù)庫字段約束
即規(guī)則,規(guī)矩 限制;
-
作用:保證用戶插入的數(shù)據(jù)保存到數(shù)據(jù)庫中是符合規(guī)范的
約束 約束關(guān)鍵字 主鍵 primary key 唯一 unique 非空 not null
約束種類:
- not null: 非空 ; eg: username varchar(40) not null username這個字段不能為空,必須要有數(shù)據(jù)
- unique:唯一約束, 后面的數(shù)據(jù)不能和前面重復(fù); eg: cardNo char(18) unique; cardNo字段不能出現(xiàn)重復(fù)的數(shù)據(jù)
- primary key郭毕;主鍵約束(非空+唯一); 一般用在表的id列上面. 一張表基本上都有id列的, id列作為唯一標(biāo)識的
- auto_increment: ==自動增長,必須是設(shè)置了primary key之后,才可以使用auto_increment==
- id int primary key auto_increment; id不需要我們自己維護(hù)了, 插入數(shù)據(jù)的時候直接插入null, 自動的增長進(jìn)行填充進(jìn)去, 避免重復(fù)了.
注意:
- 先設(shè)置了primary key 再能設(shè)置auto_increment
- 只有當(dāng)設(shè)置了auto_increment 才可以插入null 自己維護(hù) 否則插入null會報錯
id列: - 給id設(shè)置為int類型, 添加主鍵約束, 自動增長
- 或者給id設(shè)置為字符串類型,添加主鍵約束, 不能設(shè)置自動增長
7.4 創(chuàng)建數(shù)據(jù)庫表
創(chuàng)建一張博客用戶表(含有id字段,網(wǎng)名字段,性別字段.QQ字段 id為主鍵自動增長)
-- 創(chuàng)建一張博客用戶表(含有id字段,網(wǎng)名字段,性別字段.QQ字段 id為主鍵自動增長)
create table blog_user(
id int primary key auto_increment,
name varchar(40),
sex varchar(40),
qq int
);
創(chuàng)建數(shù)據(jù)庫表
7.5 查看數(shù)據(jù)庫表
-- 查看所有的表
show tables;
-- 查看表定義結(jié)構(gòu)
desc 表名;
7.6 修改數(shù)據(jù)庫表
- 修改數(shù)據(jù)庫表語法
- 增加一列乘碑;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 刪除數(shù)據(jù)庫表
-- 刪除表語法
drop table 表名;
-- 刪除blog_article
drop table blog_article;
8.0 DML操作表記錄-增刪改
準(zhǔn)備工作: 創(chuàng)建一張博客用戶表(用戶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 插入數(shù)據(jù)
- 插入方式一: 插入指定列吁峻,如果沒有把這個列進(jìn)行列出來, 以null進(jìn)行自動賦值了
insert into 表(列滑负,列..) values(值,值..)用含;
- 插入方拾二:插入所有列
-- 注意 創(chuàng)建數(shù)據(jù)庫時候需要將編碼設(shè)置為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='李四'; -- 用戶名是王二的年齡在原有的基礎(chǔ)上增加兩歲 update blog_user set user_age =user_age+2 where user_name='王二';
8.3 刪除記錄
- delete刪除記錄語法
delete from 表 [where 條件] -- 刪除名字為張三的數(shù)據(jù) delete from blog_user where user_name='張三'; -- 刪除年齡小于25的數(shù)據(jù) delete from blog_user where user_age < 25; -- 刪除所有記錄 delete from blog_user ;
- truncate 刪除表
truncate table 表;
- delete 和truncate區(qū)別
- DELETE 刪除表中的數(shù)據(jù),表結(jié)構(gòu)還在; 刪除的記錄可以找回
- TRUNCATE 刪除是把表直接DROP掉啄骇,然后再創(chuàng)建一個同樣的新表(空)痴鳄。刪除的記錄不可以找回
- 邏輯刪除和物理刪除
- 物理刪除: 真正的刪除了, 數(shù)據(jù)不在, 使用delete就屬于物理刪除
- 邏輯刪除: 沒有真正的刪除, 數(shù)據(jù)還在. 搞一個標(biāo)記, 其實邏輯刪除是更新 eg: state字段 1 啟用 0禁用
- delete 和truncate區(qū)別
- 這里只有DML操作表其中的增刪改,關(guān)于DML操作表的查詢語法將在下一個章節(jié)敘述,查詢表相對來說稍有復(fù)雜其中還包含,單表查詢,多表查詢,子查詢,外連接,內(nèi)連接,左右外連接等。