mysql總結思維導圖
WEB06-MYSQL
MYSQL的數據庫的概述
什麽是數據庫:就是一個文件系統,通過SQL訪問
常見關系型數據庫:mysql,Oracle,SQLServer...
SQL對數據庫和表操作
對數據庫進行CRUD的操作
對表進行CRUD的操作
day07-mysql回顧
SQL的概述
SQL:結構化的查詢語言.
分類:
DDL:數據定義語言
create,alter,drop...
DML:數據操縱語言
update,insert,delete
DCL:數據控制語言
grant,if..
DQL:數據查詢語言
select
特點:
非過程性語言: 一條語句就會有一個運行的結果
SQL對數據庫和表操作
對數據庫進行CRUD的操作
創建數據庫
create database 數據庫名稱 [character set 字符集 collate 字符集校對];
查看數據庫
查看數據庫服務器中所有的數據庫:
show databases;
查看某個數據庫的定義信息.
show create database 數據庫名;
查看當前正在使用的數據庫信息.
select database();
刪除數據庫
刪除數據庫:
drop database 數據庫名;
修改數據庫
修改數據庫修改的是的數據庫的字符集和校對規則.
alter database 數據庫名 character set 新字符集 collate 校對規則;
切換數據庫
use 數據庫名稱;
對表進行CRUD的操作
創建表
語法:
create table 表名 (
字段名 類型(長度) 約束,
字段名 類型(長度) 約束,
字段名 類型(長度) 約束
);
數據類型:
Java類型
MySQL
byte/short/int/long
tinyint/smallint/int/bigint
String
char/varchar
區別? char是固定長度的字符串,varchar可變長度的字符串.
char(8) 和 varchar(8)
如果插入一個字符串hello 插入到char 那麽 插入hello .
插入到varchar中 插入hello
float
float
double
double
boolean
bit
Date
date/time/datetime/timestamp
datetime和timestamp都是既有日期又有時間的日期類型
區別? datetime需要使用外部傳入的日期.如果沒傳這個值就是Null. timestamp會使用系統當前的時間作為這個值的默認值.
***** MYSQL中除了字符串類型需要設置長度其他的類型都有默認長度.
文件
文本文件
Text
二級制文件
BLOB
***** Oralce使用CLOB/BLOB 對應文本文件/二進制文件
約束:
單表約束:
主鍵約束:primary key (默認就是唯一非空的)
唯一約束:unique
非空約束:not null
表的查看
查看數據庫中有哪些表:
show tables;
查看表結構:
desc 表名;
表的刪除
drop table 表名;
表的修改
修改表添加列:
alter table 表名 add 列名 類型(長度) 約束;
alter table employee add image varchar(50);
修改表刪除列:
alter table 表名 drop 列名;
alter table employee drop job;
修改表的列的類型長度及約束:
alter table 表名 modify 列名 類型(長度) 約束;
alter table employee modify image varchar(80) not null;
修改表的列名:
alter table 表名 change 舊列名 新列名 類型(長度) 約束;
alter table employee change image eimage varchar(60);
修改表名:
rename table 舊表名 to 新表名;
rename table employee to user;
修改表的字符集:
alter table 表名character set 字符集;
alter table user character set gbk;
MYSQL的數據庫的概述
什麽是數據庫:就是一個文件系統,這個文件必須通過標準的SQL訪問
關系型的數據庫存放的都是實體之間的關系.
常見關系型數據庫
MySQL :免費的小型的數據庫,現在被Oracle收購.
Oracle :Oracle公司收費的大型的數據庫.
SQLServer :微軟公司收費中型的數據庫.
DB2 :IBM公司收費的大型的數據庫.
SyBase :SyBase公司收費的數據庫.已經被淘汰.PowerDesigner數據建模的工具.
SQLite :小型的嵌入式的數據庫.
***** Java程序中經常使用的數據庫
MySQL
Oracle
SQL對單表記錄操作
day08-mysql表
操作回顧
SQL對單表記錄操作
插入記錄:insert
insert into 表名 (列名,列名,...) values (值1,值2,...);
---插入指定列的值
insert into 表名 (列名,列名,...) values
(值1,值2,...),
(值1,值2,...),
(值1,值2,...);
-- 批量插入
insert into 表名 values (值1,值2,...);
---插入所有列的值
插入中文報錯
修改MYSQL的安裝路徑/my.ini文件 client 編碼為gbk
重新啟動mysql服務
? 註意事項:
* 列名的個數與值的個數對應.
* 列的類型與值的類型對應.位置也要對應.
* 列的類型如果是字符串或者日期,寫值的時候使用單引號將值引起來.
* 插入的值的最大長度不能超過列的最大長度.
修改記錄:update
update 表 set 列名=值,列名=值 [ where 條件];
註意事項:
* 列名和值類型也要一致.
* 值不能超過列的最大長度.
* 值是字符串或日期,需要使用單引號.
刪除記錄:delete
delete from 表 [ where 條件];
註意事項:
* 刪除表中的一行記錄,不能刪除某列值
* 如果沒有條件刪除表中的所有列.
刪除表中的所有記錄 truncate 表名 和 delete from 表名區別?
truncate table 刪除表的記錄:將整個表刪除掉,重新創建一個新的表. truncate 屬於DDL.
delete from 刪除表的記錄:一條一條進行刪除. delete屬於DML。
事務管理 只能作用在DML語句上.如果在一個事務中使用delete刪除所有記錄,可以找回 rollback.
查詢記錄:select
基本查詢
select [distinct] *|列名 from 表 [where 條件];
別名查詢
使用 as 起別名, as 可以省略.
條件查詢
= > < >= <= <>
between 值1 and 值2
like
可以使用占位符: _ 和 % :下劃線匹配一個字符, %:可以匹配任意多個字符
in
後跟著一組值
id in (1,2,3)
and or not
is not null ; is null
limit
數據分頁,是MySQL所特有的關鍵字 (orcale: rownum sqlserver : top)
兩種
limit 值
查詢前 幾(值) 條
limit 從哪開始, 向後獲取幾條
分頁顯示數據
limit 0,10
第一頁顯示10條數據
limit 10,10
第二頁顯示10條數據
排序:order by
asc 升序(默認)
desc 降序
聚合函數:
sum()
ifnull(english,0)
如果english是null的話,就把它改為0
任何值+null = null
count(*)
max()
min()
avg()
where 和 having的區別?
where 用於分組前 後不能跟聚合函數
having 用於分組後 可以跟聚合函數
分組:group by
分組條件過濾:having
SQL的查詢語句的總結
順序: s...f...w...g...h...o...;
SQL對多表記錄操作
多表設計:
正確分析表關系:
一對多:在多的一方創建一個字段,這個字段作為外鍵指向一的一方的主鍵
客戶和訂單:一個客戶可以產生多個訂單,一個訂單只能屬於是某一個客戶.
部門和員工:一個部門下可以有多個員工,一個員工只能屬於某一個部門.
多對多: 創建一個中間表,中間表中至少需要兩個字段分別作為外鍵指向多對多雙方的各自的主鍵
學生和課程:一個學生可以選擇多門課程,一門課程可以被多個學生選擇.
訂單和商品:一個訂單中包含多個商品,一個商品也可以出現多個訂單中.
一對一:(很少)
唯一外鍵對應:
假設一對一的雙方是一對多的關系.在多的一方創建外鍵指向一的一方的主鍵.需要在外鍵上添加一個unique約束
主鍵對應:
將一對一的雙方的主鍵建立映射
案例
實現權限
1. 通過五張表設計
user, role(角色), resources(資源), 還有兩張中間表
2. 權限框架 shiro
跟著開濤學shiro
***** 約束:用來保證數據的完整性.
* 多表約束:外鍵約束!!!
多表查詢:
連接查詢
笛卡爾積連接(交叉連接)
select * from A , B ;
內連接 :
inner join -- inner 可以省略
顯式內連接
select * from A inner join B on 條件;
SELECT * FROM customer c INNER JOIN orders o ON c.cid = o.cid;
隱式內連接
select * from A,B where 條件;
SELECT * FROM customer c ,orders o WHERE c.cid = o.cid;
查詢的結果都是兩個表的交集
外連接
outer join -- outer 可以省略
左外連接:
left outer join -- select * from A left outer join B on 條件;
SELECT * FROM customer c LEFT OUTER JOIN orders o ON c.cid = o.cid;
查詢的是左邊表的全部和兩個表的交集
右外連接:
right outer join -- select * from A right outer join B on 條件;
SELECT * FROM customer c RIGHT OUTER JOIN orders o ON c.cid = o.cid;
查詢的是右邊表的全部和兩個表的交集
查詢的是主表中的所有以及從表中符合條件的數據,如果從表中沒有數據的話,用 null 填充
子連接
一個SQL需要依賴另一個SQL語句的查詢結果
插入記錄:insert
刪除記錄:delete
修改記錄:update
查詢記錄:select
基本查詢
別名查詢
帶條件查詢
= > < >= <= <>
like , in
and or not
排序:order by
聚合函數:sum,count,max,min,avg
分組:group by
分組條件過濾:having
SQL對多表記錄操作
多表設計:
正確分析表關系:
一對多:在多的一方創建外鍵指向一的一方的主鍵
多對多:創建中級表,中級表至少兩個字段,分別指向雙方主鍵
一對一:(很少)
多表查詢:
連接查詢
交叉連接
內連接
隱式內連接:where
顯式內連接:inner join ... on
外連接
左外連接:
右外連接:
子查詢
一個SQL需要依賴另一個SQL語句的查詢結果
mysql總結思維導圖