重返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.s1g.cn/index.php/mysql/12.html
- 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操作表的查詢語法將在下一個章節敘述,查詢表相對來說稍有復雜其中還包含,單表查詢,多表查詢,子查詢,外連接,內連接,左右外連接等。