MySql資料庫快速入門與常用sql語句
阿新 • • 發佈:2019-02-15
MySql資料庫入門與常用sql語句
1.常見資料庫
1.oracle資料庫(大型) ------oracle甲骨文
2.DB2資料庫(大型) ------IBM
3.sqlserver(中型) ------微軟
4.MySQL(小型) ------oracle
2.什麼資料庫
持久化技術
1.IO
2.資料庫
資料庫:就是一個檔案系統,通過標準SQL語言操作檔案系統中資料 —- 用來存放軟體系統的資料
3.資料庫中存放的是什麼樣的資料?
關係型資料庫 ‘
4.mysql資料庫的安裝與解除安裝
1.解除安裝 1.查詢資料檔案的位置 因為資料檔案與安裝檔案可能不在一個位置 刪除資料庫後可以不會將資料檔案刪除 datadir="" 2.正常刪除資料庫 在控制面板jiangmysql刪除 3.刪除資料檔案 4.將mysql遺留檔案刪除 2.安裝 mysql資料庫的預設埠3306 1.關於編碼 選擇utf8 2.目錄配製環境變數path 3.設定root密碼 測試是否成功 cmd------>mysql -u root -p 回車 輸入密碼 如果看到 mysql 成功 3.重置mysql密碼 1.在執行中輸入 services.msc 停止mysql服務 2.在cmd下輸入 mysql --skip-grant-tables 啟動伺服器 游標不動(不要關) 3.新開啟cmd 輸入mysql -u root -p use mysql; update user set password=password('abc') WHERE User='root' ; 4.關閉兩cmd 工作管理員中結束mysql程序 5.在服務管理頁面 重啟mysql服務
5.mysql資料伺服器與資料庫與表的關係
mysql -h 主機名 -p 埠 -u使用者名稱 -p
輸入密碼
如果自己電腦安裝了mysql伺服器
mysql -u root -p
6.資料在資料烤肉中的儲存方式 與java中的資料關係
資料庫中表中的一個欄位相當於一個屬性
一個記錄相當於一個類的物件
7.sql介紹
sql結構化查詢語句 sql非過程性語言 sql分類(四種) DDL 資料定義語言 用來定義資料庫 表等 DML 資料操縱語言 update insert delete DCL 資料控制語言 使用者許可權事務處理 DQL(重點) 資料查詢語言 select
資料庫(DB)
1.建立資料庫
1.1 簡單建立資料庫
create database 資料名;
1.2 建立資料庫時可以指定編碼集與校驗規則
CHARACTER SET:知道資料庫採用的字符集
COLLATE:指定資料庫字符集的比較方式
create database 資料庫名 character set 編碼集 collate 校驗;
create database 資料庫名 character set="utf8" collate="utf8_general_cl";
2.使用資料庫
use 資料庫名稱
3.刪除資料庫
drop database 資料庫
4.檢視資料庫
show databases; //檢視所有資料庫
show create database 資料庫名稱 ; //檢視指定資料庫
5.修改資料(瞭解)
alter database 資料庫名 character set="編碼集" collate="校驗"
6.檢視當前使用的資料庫
select database();
練習
建立一個名稱為mydb1的資料庫.
create database mysql;
建立一個使用utf8字集的mydb1
create database dtb character set="utf8" ;
建立一個使用utf8字符集,並帶校對規則的mydb3資料庫
create database dtb character set="utf8" collate="utf_general__cl";
資料表(table)
1.簡單建立
create table 表名(
欄位名稱1 型別,
欄位名稱2 型別,
..........
欄位名稱n 型別
)
2.指定編碼與校驗
create table 表名(
欄位名稱1 型別,
欄位名稱2 型別,
..........
欄位名稱n 型別
) character set=編碼 collate=校驗
3.mysql資料表中的型別
與java中的型別對比
Java型別 mysql型別
整型
byte| short |int |long TINYINT| SMALLINT INT | BIGINT
boolean boolean
true/false
字串(字元) varchar char
char與varchar的區別
varchar 可變`字串 "hello"
char 不可變 "hello"
日期 日期
java.util.Date date -----2010-10-10
java.sql.Date datetime--2010-10-10 11:11:11
java.sql.Time time 11:11:11
java.sql.TimeStamp timestamp 15852156486
小數
float float
double double
decimal
資料庫中的大資料
在資料庫中的大資料使用 IO
InputStream/OutPutStream------------blob
Reader/Writer ------------text
---------------------------
date 日期
time 時間
timestamp 時間戳
datetime 日期時間
示例:建立一個類
create table student(
id int,
name varchar(10),
birthday date,
chinese decimal(5,2) [總共5位數,小數點後面2為]
)
4.查看錶結構
show tables;
show create table student;
複習:
1.建立 create database 庫名 character set=”utf8” collate=”utf8_general_ci”;
2.刪除 drop database 庫名
3.檢視 show database; show create database 庫名;
4.修改資料庫編碼 alter database 庫名 character set=”” collate=”“;
5.切換資料庫 use 庫名;
6.檢視當前使用的資料庫 select database();
操作表
1.建立
create table 表名(
欄位名 型別
) character set="" collate="";
2. 表中的欄位型別
int
varchar char
float double decimal
text blob
date datetime
3.檢視
desc 表名;
show tables;
show create table 表名;
表的約束
表的約束一共有六種
約束用來保證資料有效性和完整性
主要介紹三種
1.主鍵約束
主鍵有兩個特點:非空 唯一
id int primary key auto_increment, //mysql欄位自動增長:auto_increment
//sqlserver自動增長:identity(1,1)
//oracle自動增長 sequence序列
2.非空約束
name varchar(5) not null unique, //不為空,且唯一
3.唯一約束
表的結構修改
1.新增欄位
alter table 表名 add 欄位 型別;
alter table users add birthday date;
2.修改欄位型別
alter table 表名 modify 欄位 型別 ;
alter table users modify birthday datetime;
4.刪除欄位
alter table 表名 drop 欄位;
alter table users drop birthday;
3.修改欄位 change
alter table users change 舊欄位名稱 新欄位名稱 型別;
alter table users change birthday entry_date date;
5.修改表的字符集
alter table 表名 character set=字符集;
6.修改表名
rename table 表名 to 新表名
rename table users to emp;
7.刪除主鍵
alter table 表名 drop primary key;
主鍵不能自動增長
create table users(
id int primary key auto_increment,
name varchar(20),
birthday date,
)
操作資料表(update delete insert select)
最簡單的查詢
select * from 表名; 查看錶中的資料
1.insert操作
基本格式1
insert into 表名(欄位,...) values(值);
insert into users(id,name,birthday) values (1,'Tom','1990-1-1');
注意:只有數值型別可以不使用引號,其他型別必須要單引號;
基本格式2
如果是對錶中所有欄位新增操作
insert into 表名(欄位名) values(值1,...);
基本格式3
可以對指定欄位進行新增操作
insert into 表名(欄位名) values(值,...) ;
insert into users(id,name) value (1,'james');
如果表中的某個欄位是auto_increment ,新增時可賦值為null,這樣會自動增長
插入中文紀錄
insert into users values(null,'張三');
錯誤原因:mysql client 採用預設字符集
修改編碼
1.控制檯命令列.
show variable like 'character%';
修改客戶端編碼
set character set_client =gbk;//輸入時編碼正確
修改結果編碼集
set character_set_result=gbk;//檢視時編碼正確
2.修改配置檔案. my.ini
在my.ini檔案中找到
[client]
port=3306
[mysql]
default-character-set=編碼
這樣修改後對
character_set_client
character_set_results
character_set_connection
編碼進行修改
這三個是針對客戶端
2. update語句
基本格式:
update 表名 set 欄位=值;
一般情況下會加上where條件,如果不加,是對整個欄位賦值
update 表名 set 欄位1=值2,欄位2=值2... where id=1,id=2;
3.delete 語句
delete from 表名 where 條件
如果不加條件,相當於刪除表中的所有資料
delete是刪除記錄的,不能刪除某一列資料
只能刪除表中內容的,而不能刪除表結構
面試題:
delete.drop,truncate區別
1.detelete,truncate是用來刪除表中資料,而drop是刪除表結構
truncate 是先將表結構刪除,再重新建立表結構.
2. delete 是受事務控制的,可恢復(DML)
truncate不受事務控制,不可恢復(DDL)
3.delete可以對指定資料進行刪除
truncate 只能刪除所有資料
drop table 表名
truncate table 表名
4. select 語句
基本select (1)
select 欄位 from 表名;
select * from 表;代表查詢表中所有欄位值,不建議用
如果支隊某幾個欄位進行查詢
select 欄位1,欄位2,... from 表名.
distinct 用來消除重複值
基本select (2)
1.在select 語句可以對查詢的欄位進行運輸
2.可以使用as給欄位起別名(as可以省略)
查詢學生三科成績,顯示時,顯示姓名與三科總成績.
select name as '姓名' ,(Chinese+math+English)/3 as '平均分' from student;
select name,Chinese,math+10,English from student;
查詢時可以使用where子句進行過濾查詢
where 經常使用的運算子
1.關係運算符 > < <= >= = <>或!=
select name,Chinese,math,English from student where Chinese in(85,95);
2.in
3.邏輯運算子 and or not
4.is null 判斷空 is not null 判斷非空
5.like 模糊查詢
6.between ...and...
相當於 大於 and 小於
注意 between後是小值 and後面是大值
查詢語文成績在80-90之間的
select * from student where Chinese<=90 and Chinese>=80;
select *from student where Chinese between 80 and 90;
查詢姓張的人的資訊
select * from student where name like '張%'
查詢姓名為關某某的人的資訊
select * from student where name like '張_' (只找一個)
%匹配多個字元
_匹配一個字元
select 中的order by
排序:
select 欄位 from 表名 where 條件 order by 欄位 asc|desc;
asc 升序
desc 降序
注意order by 位於語句的最後
select * from student order by Chinese desc;
select id,name,Chinese,math,English,Chinese+math+English as total from student order by Chinese+math+English desc;
聚集函式 (統計函式 聚合函式)
count
select count(*) from 表名;
查看錶中的記錄條數
如:
統計一個班共有多少個學生?
select count (name) from student;
統計一個班語文成績大於90的學生有多少個?>
select count(*) from student where Chinese>90;
統計總分大於260的認輸有多少個?
select count(*) ,Chinese+math+English from student where Chinese+math+English>260;
sum
統計符合條件的列的總和
聚集函式當某一欄位的值為null時,會自動轉換為0
而如果null與其它值做+運算,結果為null.
mysql中有一個函式ifnull
ifnull(English,0)
求所有學生的總成績如果成績為null,按0取
select sum(ifnull(Chinese,0)+ifnull(math,0)+ifnull(English,0)) from student;
練習
統計一個班的數學總成績?
select sum(math) from student ;
統計一個班的語文,數學,英語各科總成績
select sum(Chinese),sum(math),sum(English) from student;
統計一個班的語文平均分
select sum(Chinese)/count(Chinese) from student;
avg
平均值
select avg(math) fromstudent;
求一個班的總分平均分
select (sum(Chinese)+sum(math)+sum(English))/count(*) from student;
select avg (Chinese+math+ifnull(English,0)) from student;
max/min
求列中最大值/最小值
練習:
求班級最高分和最低分
select max(Chinese+math+English) as '最高分', min(Chinese+math+English) as '最低分' from student;
5.mysql資料庫的備份與恢復
1.資料庫備份
在資料外面對資料庫內容進行備份
cmd > mysqldump -u 使用者名稱 -p 資料庫名 > 檔名.sql
2.恢復資料庫
首先要創建出資料庫,然後進入資料庫,在資料庫內部進行
source 檔名.sql //在mysql內部使用
在外部對資料庫進行恢復也必須先把資料庫創建出來
mysql -u 使用者名稱 p 資料庫名<檔名.sql //在cmd下使用
2.多表設計
在實際開發中,表與表之間是存在關係的,也就是說,表與表之間存在關聯
關聯分為幾種:
1.1對1
例如 人與身份證
假設 人具有 姓名 年齡
身份證 身份證號
1對1關係怎樣關聯資料?
在任意一方只要新增一個欄位來描述關聯關係
2.1對多(開發中最常見的一種關係)
例如:員工與部門
假設:員工有資訊: 員工資訊 員工工資
部門資訊: 部門名稱 部門地址
一個員工屬於一個部門,一個部門可以有多個員工
1對多關係怎樣關聯資料?
在多的地方新增1的一方的地段資訊
3.多對多
例如:老師與學生
老師屬性 姓名
學生屬性 姓名
多對多關係怎樣關聯資料?
會產生一張中間表,用來描述多對多關係.
使用外來鍵約束,可以保證資料完整性
多表查詢
笛卡爾積
多表關聯sql
select* from 表1,表2;
select * from emp,dept;
怎樣消除笛卡爾積
將要查詢的兩種表的關聯資料進行等式比較.
select * from 表1,表2 where 表1,欄位=表2,欄位;
select * from emp inner join dept where emp.dept_id=dept.id;