數據庫及SQL/MySQL基礎
課時1 數據庫概述
1、常見數據庫
Oracle 甲骨文
DB2 IBM
SQL Server 微軟
Sybase 賽爾斯
MySQL 甲骨文
2、理解數據庫
RDBMS = Manager + Database
Relational Database Management System
關係型數據庫管理系統
Database = N 個 Table
Table: 表結構、表記錄
課時2 Java應用與數據庫的關係
…
課時3-4 安裝/刪除MySQL
安裝路徑不要有中文
MAC brew安裝/卸載mysql
$ brew install mysql
$ brew uninstall mysql
課時5 MySQL安裝路徑以及配置信息
mysqld 服務端
mysql 客戶端
課時6 開啓關閉服務器以及登錄退出客戶端
mysql啓動/關閉服務
$ mysql.server start
$ mysql.server stop
登錄退出客戶端
# 登錄
$ mysql -uroot -p
# 查看數據庫
> show databases;
# 退出
> exit/quit;
課時7 SQL語言的概述
SQL
Structured Query Language
結構化查詢語言
SQL方言
某些數據庫的獨有語法,
例如:limit語句只在MySQL中使用
SQL語法
1、單行或多行書寫,分號結尾
2、可以使用空格或縮進增強可讀性
3、MySQL不區分大小寫,建議使用大寫
SQL語句分類
簡稱 | 全稱 | 中文 | 說明 |
---|---|---|---|
DDL | Data Definition Language | 數據定義語言 | 定義庫、表、列結構 |
DCL | Data Control Language | 數據控制語言 | 定義訪問權限和安全級別 |
DML | Data Manipulation Language | 數據操作語言 | 操作數據,增、刪、改 |
DQL | Data Query Language | 數據查詢語言 | 查詢數據 |
課時8 DDL(數據定義語言)之操作數據庫
-- 查看所有數據庫:
show databases;
-- 選擇數據庫:
use <database_name>;
-- 創建數據庫:
create database [if not exists] <database_name> [charset=utf8];
-- 刪除數據庫:
drop database [if exists] <database_name>;
-- 修改數據庫編碼:
alter database <database_name> character set utf8
課時9-10 數據類型介紹
int 整型
double 浮點型,例如 double(5, 2) 表示最多5位,其中2位小數,即最大999.99
decimal 浮點型,貨幣使用,不會出現精度缺失
char 定長字符串,char(255),長度不足指定長度會補足到指定長度,比變長節省空間
varchar 變長字符串 varchar(65535)
text(clob) 字符串
tynytext(255B),
text(64K),
mediumtext(16M),
longtext(4G)
blob 字節類型
tynyblob(255B),
blob(64K),
mediumblob(16M),
longblob(4G)
date 日期 yyyy-MM-dd
time 時間 hh:mm:ss
timestamp 時間戳
課時11 DDL(數據定義語言)之操作表
1、創建表, 注意最後一列沒有逗號
create table [if not exists] <table_name>(
<列名> <列類型>,
...
<列名> <列類型>
);
eg:
-- 創建數據庫
create database school;
-- 切換數據庫
use school;
-- 創建數據表
create table tb_stu(
number char(11),
name varchar(50),
age int,
gender varchar(10)
);
-- 查看當前數據庫中所有表
show tables;
-- 查看指定表的創建語句
show create table tb_stu;
show create table stu \G
d
-- 查看錶結構
desc tb_stu;
-- 刪除表
drop table ts_stu;
show tables;
2、修改表
-- 前綴
alter table <table_name>
-- 添加列
alter table <table_name> add (
<列名> <列類型>,
...
<列名> <列類型>
);
-- 修改列類型
-- 如果已存在數據,新類型可能會影響到已存在數據
alter table <table_name> modify 列名 列類型;
-- 修改列名稱
alter table <table_name> change 原列名 新列名 列類型;
-- 刪除列
alter table <table_name> drop 列名;
-- 修改表名
alter table 原表名 rename to 新表名;
課時12-13-14 DML(數據操作語言)
查詢所有記錄
select * from <table_name>;
1、插入數據
insert into <table_name>(列名1, 列名2,...) values(列值1, 列值1,...);
沒有指定的列等同於插入默認值
值的順序與指定列順序對應
列名可省略(不建議)
字符串類型使用單引號,不能使用雙引號
日期類型也要使用單引號
2、修改數據
update 表名 set 列名1=列值1, 列名2=列值2,...[where條件]
條件必須是一個boolean類型的值或表達式
運算符:=、!=、<>、>、<、>=、<=、between…and、in(…)、is null、not、or、and
3、刪除數據
delete from 表名 [where條件]
-- truncate是DDL語句,先刪除drop,在創建creae,無法回滾
truncate table 表名
課時15 DCL(數據控制語言)
1、創建用戶
一個項目創建一個用戶,一個項目對應的數據庫只有一個
-- 用戶只能在指定的ip地址上登錄
create user 用戶名@ip地址 identified by 密碼;
-- 用戶可以在任意ip地址上登錄
create user 用戶名@'%' identified by 密碼;
2、用戶授權
(1) 給用戶分派指定權限
grant 權限1,...權限n on 數據庫.* to 用戶名@ip地址
eg:
grant create, alter, drop, insert, update, delete, select on db1.* to user1@localhost;
(2) 給用戶分派所有權限
grant all on 數據庫.* to 用戶名@ip地址
3、撤銷授權
(1) 撤銷指定權限
revoke 權限1,...權限n on 數據庫.* from 用戶名@ip地址
eg:
revoke create, alter, drop on db1.* from user1@localhost;
(2) 撤銷指定權限
revoke 權限1,...權限n on 數據庫.* from 用戶名@ip地址
4、查看權限
show grants for 用戶名@ip地址;
5、刪除用戶
drop user 用戶名@ip地址;
課時16 DQL(數據查詢語言)之基礎查詢之列控制
-- 查詢所有列
select * from 表名;
-- 查詢指定列
select 列名1, 列名2... 列名n from 表名;
-- 記錄去重
select distinct * from 表名;
select distinct 列名 from 表名;
-- 列運算
-- (1)加減乘除
select age-1 from table
-- (2)字符串連接,不能用加號連接+
select concat('$', salary) from table;
-- (3)轉換null值, 任何值與null相加都是null
select ifnull(salary, 0) + 1000 from table;
-- ifnull(salary, 0) 如果salary is null 那麼 salary->0
-- (4)列別名
select name as 姓名 from table;
select name 姓名 from table;
課時17 DQL(數據查詢語言)之條件查詢
使用where子句控制記錄
select * from table where salary>500;
select * from table where name in ('李白', '杜甫');
select * from table where salary between 200 and 500;
課時18 DQL(數據查詢語言)之模糊查詢
下劃線_
代表一個字符
百分號%
代表[0,n]個字符
select * from table where name like '張_';
select * from table where name like '張%';
課時19 DQL(數據查詢語言)之排序
默認升序排序
-- 升序 默認, asc可省略
select * from table order by id asc;
-- 降序
select * from table order by id desc;
-- 多列排序
select * from table order by salary asc, id desc;
課時20 DQL(數據查詢語言)之聚合函數
-- 統計有效行數,整行全是null不計數
select count(*) from table;
-- 統計不是null的行數
select count(id) from table;
-- 求和
select sum(salary) from table;
-- 最小值
select min(salary) from table;
-- 最大值
select max(salary) from table;
-- 平均值
select avg(salary) from table;
select count(*) 人數,
sum(salary) 總和, avg(salary) 平均值,
max(salary) 最高, min(salary) 最低
from table;
課時21 DQL(數據查詢語言)之分組查詢
select job, count(*) from table group by job;
-- 先過濾再分組
select job, count(*) from table where salary > 1500 group by job;
-- 先過濾,再分組,再對分組結果過濾
select job, count(*) from table where salary > 1500 group by job having count(*) >= 2;
課時22 DQL(數據查詢語言)之limit方言
計算公式:
跳過行數 = ( 當前頁 - 1 ) * 每頁記錄數
select * from table limit count;
select * from table limit count OFFSET offset;
select * from table limit offset, count;