來自拉鉤教育-JAVA就業(yè)集訓(xùn)營
1.MySQL
2. SQL
----------------------------------------------------------
1.MySQL
1.1 MySQL的啟動與關(guān)閉
啟動MySQL
net start mysql57
關(guān)閉MySQL
net stop mysl57
1.2 命令行登錄數(shù)據(jù)庫
- MySQL是一個需要賬戶名密碼登錄的數(shù)據(jù)庫,登陸后使用健蕊,它提供了一個默認的root賬號苔货,使用安裝時設(shè)置的密碼即可登錄渺杉。
命令 | 說明 |
---|---|
mysql -u 用戶名 -p 密碼 | 使用指定用戶名和密碼登錄當(dāng)前計算機中的MySQL數(shù)據(jù)庫 |
mysql -h 主機IP -u 用戶名 -p 密碼 | 指定IP 方式,進行 登錄 |
命令演示:
mysql -uroot -p123456
mysql -h127.0.0.1 -uroot -p123456
退出命令
exit 或者 quit
1.3 MySQL的目錄結(jié)構(gòu)
- MySQL安裝目錄
MySql的默認安裝目錄在 C:\Program Files\MySQL\MySQL Server 5.7
目錄 | 目錄內(nèi)容 |
---|---|
bin | 放置一些可執(zhí)行文件 |
docs | 文檔 |
include | 包含(頭)文件 |
lib | 依賴庫 |
share | 用于存放字符集、語言等信息蚣录。 |
-
MySQL配置文件 與 數(shù)據(jù)庫及 數(shù)據(jù)表所在目錄
my.ini 文件 是 mysql 的配置文件糕非,一般不建議去修改
-
data<目錄> Mysql管理的數(shù)據(jù)庫文件所在的目錄
幾個概念
數(shù)據(jù)庫: 文件夾
表: 文件
數(shù)據(jù): 文件中的記錄
1.4 數(shù)據(jù)庫管理系統(tǒng)
什么是數(shù)據(jù)庫管理系統(tǒng) ?
數(shù)據(jù)庫管理系統(tǒng)(DataBase Management System DBMS):指一種操作和管理維護數(shù)據(jù)庫的大型軟件。
MySQL就是一個 數(shù)據(jù)庫管理系統(tǒng)軟件, 安裝了Mysql的電腦,我們叫它數(shù)據(jù)庫服務(wù)器.數(shù)據(jù)庫管理系統(tǒng)的作用
用于建立千绪、使用和維護數(shù)據(jù)庫,對數(shù)據(jù)庫進行統(tǒng)一的管理梗脾。-
數(shù)據(jù)庫管理系統(tǒng)荸型、數(shù)據(jù)庫 和表之間的關(guān)系
MySQL中管理著很多數(shù)據(jù)庫,在實際開發(fā)環(huán)境中 一個數(shù)據(jù)庫一般對應(yīng)了一個的應(yīng)用炸茧,數(shù)據(jù)庫當(dāng)中保存著多張表瑞妇,每一張表對應(yīng)著不同的業(yè)務(wù),表中保存著對應(yīng)業(yè)務(wù)的數(shù)據(jù)梭冠。
2. SQL(重點)
2.1 SQL的概念
- 什么是SQL 辕狰?
結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言控漠,是一種數(shù)據(jù)庫查詢和程序設(shè)計語言蔓倍,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)润脸。 - SQL 的作用
是所有關(guān)系型數(shù)據(jù)庫的統(tǒng)一查詢規(guī)范柬脸,不同的關(guān)系型數(shù)據(jù)庫都支持SQL所有的關(guān)系型數(shù)據(jù)庫都可以使用SQL不同數(shù)據(jù)庫之間的SQL 有一些區(qū)別 方言
2.2 SQL的通用語法
- SQL語句可以單行 或者 多行書寫,以分號 結(jié)尾 ; (圖形化界面中可以不用寫分號)
- 可以使用空格和縮進來增加語句的可讀性毙驯。
- MySql中使用SQL不區(qū)分大小寫倒堕,一般關(guān)鍵字大寫,數(shù)據(jù)庫名 表名列名 小寫爆价。
- 注釋方式
注釋語法 | 說明 |
---|---|
-- 空格 | 單行注釋 |
/* */ | 多行注釋 |
# | MySql特有的單行注釋 |
# show databases; 單行注釋
-- show databases; 單行注釋
/*
多行注釋
show databases;
*/
2.3 SQL的分類
分類 | 說明 |
---|---|
數(shù)據(jù)定義語言 | 簡稱DDL(Data Definition Language)垦巴,用來定義數(shù)據(jù)庫對象:數(shù)據(jù)庫,表铭段,列等骤宣。 |
數(shù)據(jù)操作語言 | 簡稱DML(Data Manipulation Language),用來對數(shù)據(jù)庫中表的記錄進行更新序愚。 |
數(shù)據(jù)查詢語言 | 簡稱DQL(Data Query Language)憔披,用來查詢數(shù)據(jù)庫中表的記錄。 |
數(shù)據(jù)控制語言 | 簡稱DCL(Date Control Language)爸吮,用來定義數(shù)據(jù)庫的訪問權(quán)限和安全級別芬膝,及創(chuàng)建用戶。(了解) |
2.4 DDL操作 數(shù)據(jù)庫
2.4.1創(chuàng)建數(shù)據(jù)庫
命令 | 說明 |
---|---|
create database 數(shù)據(jù)庫名; | 創(chuàng)建指定名稱的數(shù)據(jù)庫 |
create database 數(shù)據(jù)庫名 character set 字符集; | 創(chuàng)建指定字符集的數(shù)據(jù)庫(一般是utf-8) |
代碼示例
/*
方式1 直接指定數(shù)據(jù)庫名進行創(chuàng)建
默認的字符集為: latin1
*/
create database dbl;
/*
方式2 指定數(shù)據(jù)庫名 指定字符集創(chuàng)建
一般指定為utf-8 與Java相同
*/
create database db2 character set utf8;
2.4.2 查看選擇數(shù)據(jù)庫
命令 | 說明 |
---|---|
use 數(shù)據(jù)庫; | 選擇數(shù)據(jù)庫 |
select database(); | 查看當(dāng)前正在使用的數(shù)據(jù)庫 |
show databases; | 展示所有的數(shù)據(jù)庫 |
show create database 數(shù)據(jù)庫名 | 查看一個數(shù)據(jù)庫的定義信息 |
代碼示例
# 切換數(shù)據(jù)庫 從db1到db2
use db2;
# 查看當(dāng)前正在使用的數(shù)據(jù)庫
select database();
# 查看MySQL中有那些數(shù)據(jù)庫
show databases;
# 查看 一個db1數(shù)據(jù)庫定義的信息
show create database db1;
2.4.3 修改數(shù)據(jù)庫
修改數(shù)據(jù)庫的字符集
命令 | 說明 |
---|---|
alter database 數(shù)據(jù)庫名 character set 字符集; | 修改數(shù)據(jù)庫的字符集 |
# 將數(shù)據(jù)庫db1 的字符集 修改為 utf8
ALTER DATABASE db1 CHARACTER SET utf8;
# 查看當(dāng)前數(shù)據(jù)庫的基本信息形娇,發(fā)現(xiàn)編碼已更改
SHOW CREATE DATABASE db1;
2.4.4刪除數(shù)據(jù)庫
命令 | 說明 |
---|---|
drop database 數(shù)據(jù)庫名; | 從MySQL中永久的刪除指定的數(shù)據(jù)庫 |
代碼示例
# 刪除db1數(shù)據(jù)庫
drop database db1;
2.5 DDL操作 數(shù)據(jù)表
2.5.1 MySQL常見的數(shù)據(jù)類型
- 常見的數(shù)據(jù)類型
類型 | 描述 |
---|---|
int | 整型 |
double | 浮點型 |
varchar | 字符型 |
data | 日期型 |
2)詳細的數(shù)據(jù)類型
注意:MySQL中的 char類型與 varchar類型锰霜,都對應(yīng)了 Java中的字符串類型,區(qū)別在于:
- char類型是固定長度的: 根據(jù)定義的字符串長度分配足夠的空間桐早。
- varchar類型是可變長度的: 只使用字符串長度所需的空間
比如:保存字符串 "abc"
x char(10) 占用10個字節(jié)
y varchar(10) 占用3個字節(jié)
適用場景:
- char類型適合存儲 固定長度的字符串癣缅,比如 密碼 厨剪,性別一類
- varchar類型適合存儲 在一定范圍內(nèi),有長度變化的字符串
2.5.2 創(chuàng)建表
語法格式:
create table 表名(
字段名稱1 字段類型(長度),
字段名稱2 字段類型(長度),
...
最后一行不需要加逗號
)
- 需求1: 創(chuàng)建商品分類表
表名:category
表中字段:
分類ID :cid ,為整型
分類名稱:cname友存,為字符串類型祷膳,指定長度20
SQL實現(xiàn)
create table category(
cid int,
cname varchar(20)
);
- 需求2: 創(chuàng)建測試表
表名: test1
表中字段:
測試ID : tid ,為整型
測試時間: tdate , 為年月日的日期類型
SQL實現(xiàn)
create test1(
tid int,
tdate date
);
- 需求3: 快速創(chuàng)建一個表結(jié)構(gòu)相同的表(復(fù)制表結(jié)構(gòu))
語法格式:
create table 新表名 like 舊表名
代碼示例
# 創(chuàng)建一個表結(jié)構(gòu)與 test1相同的 test2表
create table test1 like test2;
# 查看表結(jié)構(gòu)
desc test2;
2.5.3 查看表
命令 | 說明 |
---|---|
show tables | 查看當(dāng)前數(shù)據(jù)中的所有表名 |
desc 表名 | 查看數(shù)據(jù)表的結(jié)構(gòu) |
代碼示例
# 查看當(dāng)前數(shù)據(jù)庫中的所有表名
SHOW TABLES;
# 顯示當(dāng)前數(shù)據(jù)表的結(jié)構(gòu)
DESC category;
# 查看創(chuàng)建表的SQL語句
SHOW CREATE TABLE category;
2.5.4 刪除表
命令 | 說明 |
---|---|
drop table 表名; | 刪除表(從數(shù)據(jù)庫中永久刪除某一張表) |
drop table if exists 表名爬立; | 判斷表是否存在钾唬, 存在的話就刪除,不存在就不執(zhí)行刪除 |
代碼示例
# 直接刪除 test1 表
drop table test1;
#先判斷 再刪除test2
drop table if exists test2;
2.5.5 修改表
- 修改表名
語法格式
rename table 舊表名 to 新表名;
需求: 將category表 改為 category1
rename table category to category1;
- 修改表的字符集
語法格式
alert table 表名 character set 字符集;
需求: 將category表的字符集 修改為gbk
alert table category character set gbk;
- 向表中添加列,關(guān)鍵字add
語法格式
alert table 表名 add 字段名稱 字段類型;
為分類表添加一個新的字段為 分類描述 cdesc varchar(20)
# 為分類表添加一個新的字段為 分類描述 cdesc varchar(20)
alert table category add cdesc varchar(20);
- 修改表中列的 數(shù)據(jù)類型或長度 , 關(guān)鍵字 MODIFY
語法格式
alert table 表名 modify 字段名稱 字段類型
需求:對分類表的描述字段進行修改侠驯,類型varchar(50)
alert table category modify cdesc varchar(50);
- 修改列名稱 , 關(guān)鍵字 CHANGE
語法格式
alert table 表名 change 舊列名 新列名 類型(長度);
需求: 對分類表中的 desc字段進行更換, 更換為 description varchar(30)
alert table category change desc description varchar(30);
- 刪除列 抡秆,關(guān)鍵字 DROP
語法格式
alert table 表名 drop 列名
需求: 刪除分類表中description這列
alert table category drop description;
3.6 DML 操作表中數(shù)據(jù)
SQL中的DML 用于對表中的數(shù)據(jù)進行增刪改操作
3.6.1插入數(shù)據(jù)
語法格式:
insert into 表名 (字段1,字段2,字段3...) values (字段1,字段2,...);
- 代碼準備,創(chuàng)建一個學(xué)生表
- 需求
表名:student
表中字段:
學(xué)員ID, sid int
姓名, sname varchar(20)
年齡吟策, age int
性別儒士, sex char(1)
地址, address varchar(40)
create table student (
sid int,
sname varchar(20),
age int,
sex char(1),
address varchar(40)
)
- 向?qū)W生表中添加數(shù)據(jù)檩坚,3種方式
方式1: 插入全部字段着撩, 將所有字段名都寫出來
insert into student (sid,sname,age,sex,address) values (1,'孫悟空',20,'男','花果山');
方式2:插入全部字段名,不寫字段名
insert into student values (2,'孫悟飯',10,'男','地球');
方式3:插入指定字段的值
insert into category (cname) values ('白骨精');
注意:
a) 值與字段必須要對應(yīng),個數(shù)相同&數(shù)據(jù)類型相同
b)值的數(shù)據(jù)大小匾委,必須在字段指定的長度范圍內(nèi)
c)varchar char date類型的值必須使用單引號拖叙,或者雙引號 包裹。
d)如果要插入空值赂乐,可以忽略不寫薯鳍,或者插入null
e) 如果插入指定字段的值,必須要上寫列名
3.6.2 更改數(shù)據(jù)
語法格式1: 不帶條件的修改
update 表名 set 列名 = 值;
語法格式2:帶條件的修改
update 表名 set 列名 = 值 [where 條件表達式:字段名 = 值 ]
不帶條件的修改,將所有的性別修改為女(慎用! !)
update student set sex = '女';
帶條件的修改,將sid為3的學(xué)生,性別改為男
update student set sid = 3 where sex = '男';
一次修改多個列挨措, 將sid為 2 的學(xué)員挖滤,年齡改為 20,地址改為 北京
update student set age = 20,address = 20 where sid = 2;
3.6.3 刪除數(shù)據(jù)
語法格式1:刪除所有數(shù)據(jù)
delete from 表名
語法格式2: 指定條件 刪除數(shù)據(jù)
delete from 表名 [where 字段名 = 值]
刪除 sid 為 1 的數(shù)據(jù)
DELETE FROM student WHERE sid = 1;
刪除所有數(shù)據(jù)
DELETE FROM student;
如果要刪除表中的所有數(shù)據(jù),有兩種做法
-
delete from 表名
; 不推薦. 有多少條記錄 就執(zhí)行多少次刪除操作. 效率低 -
truncate table 表名
: 推薦. 先刪除整張表, 然后再重新創(chuàng)建一張一模一樣的表. 效率高
truncate table student;
3.7 DQL 查詢表中數(shù)據(jù)
3.7.1 準備數(shù)據(jù)
#創(chuàng)建員工表
表名 emp
表中字段:
eid 員工id浅役,int
ename 姓名斩松,varchar
sex 性別,char
salary 薪資觉既,double
hire_date 入職時間惧盹,date
dept_name 部門名稱,varchar
#創(chuàng)建員工表
CREATE TABLE emp(
eid INT,
ename VARCHAR(20),
sex CHAR(1),
salary DOUBLE,
hire_date DATE,
dept_name VARCHAR(20)
);
#添加數(shù)據(jù)
INSERT INTO emp VALUES(1,'孫悟空','男',7200,'2013-02-04','教學(xué)部');
INSERT INTO emp VALUES(2,'豬八戒','男',3600,'2010-12-02','教學(xué)部');
INSERT INTO emp VALUES(3,'唐僧','男',9000,'2008-08-08','教學(xué)部');
INSERT INTO emp VALUES(4,'白骨精','女',5000,'2015-10-07','市場部');
INSERT INTO emp VALUES(5,'蜘蛛精','女',5000,'2011-03-14','市場部');
INSERT INTO emp VALUES(6,'玉兔精','女',200,'2000-03-14','市場部');
INSERT INTO emp VALUES(7,'林黛玉','女',10000,'2019-10-07','財務(wù)部');
INSERT INTO emp VALUES(8,'黃蓉','女',3500,'2011-09-14','財務(wù)部');
INSERT INTO emp VALUES(9,'吳承恩','男',20000,'2000-03-14',NULL);
INSERT INTO emp VALUES(10,'孫悟飯','男', 10,'2020-03-14',財務(wù)部);
INSERT INTO emp VALUES(11,'兔八哥','女', 300,'2010-03-14',財務(wù)部);
3.7.2 簡單查詢
- 查詢不會對數(shù)據(jù)庫中的數(shù)據(jù)進行修改.只是一種顯示數(shù)據(jù)的方式 SELECT語法格式
語法格式
select 列名 from 表名
需求1: 查詢emp中的 所有數(shù)據(jù)
SELECT * FROM emp; -- 使用 * 表示所有列
需求2: 查詢emp表中的所有記錄瞪讼,僅顯示id和name字段
SELECT eid,ename FROM emp;
需求3: 將所有的員工信息查詢出來岭参,并將列名改為中文
- 別名查詢,使用關(guān)鍵字 as
SELECT
eid AS '編號',
ename AS '姓名' ,
sex AS '性別',
salary AS '薪資',
hire_date '入職時間', -- AS 可以省略
dept_name '部門名稱'
FROM emp;
需求4:查詢一共有幾個部門
- 使用去重關(guān)鍵字 distinct
# 使用distinct 關(guān)鍵字,去掉重復(fù)部門信息
SELECT DISTINCT dept_name FROM emp;
需求5: 將所有員工的工資 +1000 元進行顯示
- 運算查詢 (查詢結(jié)果參與運算)
SELECT ename , salary + 1000 FROM emp;
3.7.3 條件查詢
如果查詢語句中沒有設(shè)置條件,就會查詢所有的行信息,在實際應(yīng)用中,一定要指定查詢條件,對記錄進行過濾
語法格式
select 列名 from 表名 where 條件表達式
* 先取出表中的每條數(shù)據(jù),滿足條件的數(shù)據(jù)就返回,不滿足的就過濾掉
運算符
1.比較運算符
運算符 | 說明 |
---|---|
> < <= >= = <> != | 大于尝艘、小于、大于(小于)等于姿染、不等于 |
BETWEEN ...AND... | 顯示在某一區(qū)間的值 例如: 2000-10000之間: Between 2000 and 10000 |
IN(集合) | 集合表示多個值,使用逗號分隔,例如: name in (悟空背亥,八戒) in中的每個數(shù)據(jù)都會作為一次條件,只要滿足條件就會顯示 |
LIKE '%張%' | 模糊查詢 |
IS NULL | 查詢某一列為NULL的值, 注: 不能寫 = NULL |
- 邏輯運算符
運算符 | 說明 |
---|---|
And && | 多個條件同時成立 |
Or || | 多個條件任一成立 |
Not | 不成立秒际,取反。 |
需求1:
查詢員工姓名為黃蓉的員工信息
查詢薪水價格為5000的員工信息
查詢薪水價格不是5000的所有員工信息
查詢薪水價格大于6000元的所有員工信息
查詢薪水價格在5000到10000之間所有員工信息
查詢薪水價格是3600或7200或者20000的所有員工信息
代碼實現(xiàn)
# 查詢員工姓名為黃蓉的員工信息
SELECT * FROM emp WHERE ename = '黃蓉';
# 查詢薪水價格為5000的員工信息
SELECT * FROM emp WHERE salary = 5000;
# 查詢薪水價格不是5000的所有員工信息
SELECT * FROM emp WHERE salary != 5000;
SELECT * FROM emp WHERE salary <> 5000;
# 查詢薪水價格大于6000元的所有員工信息
SELECT * FROM emp WHERE salary > 6000;
# 查詢薪水價格在5000到10000之間所有員工信息
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;
# 查詢薪水價格是3600或7200或者20000的所有員工信息
-- 方式1: or
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
-- 方式2: in() 匹配括號中指定的參數(shù)
SELECT * FROM emp WHERE salary IN(3600,7200,20000);
需求2:
查詢含有'精'字的所有員工信息
查詢以'孫'開頭的所有員工信息
查詢第二個字為'兔'的所有員工信息
查詢沒有部門的員工信息
查詢有部門的員工信息
模糊查詢 通配符
通配符 | 說明 |
---|---|
% | 表示匹配任意多個字符串, |
_ | 表示匹配 一個字符 |
# 查詢含有'精'字的所有員工信息
SELECT * FROM emp WHERE ename LIKE '%精%';
# 查詢以'孫'開頭的所有員工信息
SELECT * FROM emp WHERE ename LIKE '孫%';
# 查詢第二個字為'兔'的所有員工信息
SELECT * FROM emp WHERE ename LIKE '_兔%';
# 查詢沒有部門的員工信息
SELECT * FROM emp WHERE dept_name IS NULL;
-- SELECT * FROM emp WHERE dept_name = NULL;
# 查詢有部門的員工信息
SELECT * FROM emp WHERE dept_name IS NOT NULL;