MySQL介紹,SQL入門及表結構分析

MySQL是什麼:

先簡單解釋一下數據庫是什麼,數據庫就是數據的倉庫,也是一種文件系統,需要使用SQL來進行操作。

MySQL則是關係型數據庫(庫中的數據存在實體與實體的關係)。

常見的數據庫(Java開發中,MySQL和Oracle最爲常見):

Oracle:大型的數據庫,收費的。
MySQL:小型的數據庫,免費開源的。被Oracle收購了(6.x版本後開始收費)。
SQLServer:微軟的數據庫。
DB2:IBM公司產品,大型的數據庫,收費的。


MySQL結構圖:

在這裏插入圖片描述
用文字描述:一個數據庫的服務器(如MySQL)中包含多個數據庫,一個數據庫中有多張表,一個表中包含多個字段(字段和JavaBean的屬性對應),表中存放多行數據,一行數據和一個JavaBean實體對象對應。

用Dos窗口操作MySQL相關命令:

mysql install(安裝服務)
mysqld --initialize(初始化操作,生成data目錄)
net start mysql(啓動服務)
mysql -u root -p(登錄)
show databases;(查看所有數據庫)
use 數據庫名稱;(使用數據庫)
show create database 數據庫名稱;(查詢數據庫的創建的信息)
select database(); (查詢當前正在使用的數據庫 )






MySQL常用數據類型:

字符串型:VACHAR(長度可變)、CHAR)(長度不可變,剩餘字符用空格補齊)

數值型:TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE

日期型:DATE(包含年月日)、TIME(包含時分秒)、DATATIME(包含年月日時分秒,插入數據時如果爲空,字段值則爲空)、TIMESTAMP(包含年月日時分秒,插入數據時如果爲空,獲取當前系統日期,存入字段值)

SQL概述及分類:

SQL(Structured Query Language)意爲結構化查詢語言,是非過程性的語言(一條語句,就對應一個返回結果),用於操作數據庫的通用語言。

DDL(Data Definition Language)數據定義語言:creat(創建)、alter(修改)、drop(刪除),主要應用在庫和表上。

DML(Data Manipulation Language)數據操作語言:insert(插入)、update(修改)、delete(刪除),主要應用在數據上。

DQL(Data QueryLanguage)數據查詢語言:select(查詢),主要應用在數據上。

DCL(Data Control Language)數據控制語言:crant、revoke,主要應用在數據訪問權的控制。(用的相當少了)

SQL基本語法:

有關數據庫的創建、修改、刪除:

創建:creat database 數據庫名稱;
修改:alter database 數據庫名稱;
刪除:drop databse 數據庫名稱;

有關表的創建、修改、刪除:

1、表名稱後跟的括號,要以分號結束。
2、字段要以逗號結束,最後一個字段不能加逗號。
3、約束可以不寫。
4、類型如果爲字符數據,必須指定長度。


創建:
creat table 表名稱(
		字段名1 類型(長度) 約束,
		字段名2 類型(長度) 約束,
		字段名3 類型(長度) 約束
);

修改:
alter table 表名 add 新列名稱 類型(長度) 約束;(添加列)
alter table 表名 drop 列名稱;(刪除列)
alter table 表名 modify 列名稱 類型(長度) 約束;(修改列的類型或約束)
alter table 表名 change 舊名稱 新列名 類型(長度) 約束;(修改列的名稱)
rename table 表名 to 新表名稱;(修改表的名稱)

刪除:
drop table 表名稱; 

有關數據的插入、修改、刪除和查詢(重點):

插入:
insert into 表名稱 values(值1,值2,值3);(爲所有字段插入值)
insert into 表名稱 (字段1,字段2) values(值1, 值2);(爲指定字段插入對應值)

修改:
update 表名稱 set 字段1=值1,字段2=值2,... where 條件;(修改條件爲...的指定字段,沒有where條件則修改字段全部數據)

刪除:
delete from 表名稱 where 條件;(刪除指定條件的數據,沒有where則刪除表中所有數據)
truncate 表名稱;(也可以刪除全部數據,但方式是先把表刪除,然後創建一種表結構相同的空表,不支持事務操作)

查詢(重點):
select * from 表名稱;(最基本select語句,查詢所有列全部數據)

select 字段1,字段2 from 表名稱;(查詢指定字段的數據)

select distinct 字段 from 表名稱;(查詢並去重指定字段數據,必須加字段,用*表示不起作用)

select * from 表名稱 where 條件;

其中條件可以是運算符:大於>、小於<、等於=、不等於!=、大於等於>=、小於等於<=
可以是in(數值1,數值2,數值3):表示匹配其中的任意數
可以是like '表達式':進行模糊匹配,'張_'表示開頭是張,且必須兩個字;'張%'表示開頭是張,不限字數;'%張%'表示只要有張即可。
可以是 is ull:判斷個字段是否爲空
可以再結合and or not進行編寫where語句,如:
select * from student where age >= 16 and age < 19;

select * from 表名稱 order by 列名 升序asc/降序desc;(對查詢的結果進行排序,默認爲升序,總是放在select語句最後)

select count(字段) from 表名稱;(聚集函數-計數)
select sum(字段) from 表名稱;(聚集函數-求和)
select max(字段) from 表名稱;(聚集函數-求最大值)
select min(字段) from 表名稱;(聚集函數-求最小值)
select avg(字段) from 表名稱;(聚集函數-求平均值)

select 字段, 聚集函數 from 表名稱 group by 字段 having 過濾條件;(根據字段進行分組,分組一般和聚集函數一起使用,求每組某個字段的總和,having和where均可實現過濾,但在having可以使用聚集函數,where不能使用聚集函數,也不能作用在group後)

select語句固定順序:
select ... from ... where ... group by ... having ... order by ...

例子(爲了好理解,在各個字段後加上別名):
select product 商品名, sum(price) 價格總和 from orders where price > 800 GROUP BY product having 價格總和 > 200 ORDER BY 價格總和 desc;

這句SQL的含義:從orders表中,查詢商品名和價格總和(聚集函數sum計算出來的),且prive必須大於800,按商品名分組後,過濾出價格總價大於200的數據,並按價格總和降序排序


數據庫表結構設計三種方式:

一對一表結構
在這裏插入圖片描述

一對多表結構
在這裏插入圖片描述
多對多表結構
在這裏插入圖片描述


創建單表時的約束:

primary key(聲明字段爲主鍵,唯一、非空、被引用)
auto_increment(聲明字段自增長)
unique (聲明字段唯一)
not null(聲明字段不爲空)


創建一對多表結構時,多表的約束:

多表約束其實就是外鍵約束,爲了數據完整性而存在。

上面所說的部門表和員工表,在一對多表結構中,如果不加外鍵,我們可以刪除兩個部門的數據,此時部門數據已經不存在了,但是員工表中還是存在部門的外鍵,顯然這是不合理的。

加上外鍵就可以避免這種情況發生。

creat table order(
	oid int primary key auto_increment,
	oname varchar(50),
	oprice doubble,
	uid int,
	foreign key order(uid) references user(uid)         這行表示聲明uid爲外鍵並執行user用戶主鍵	
);

笛卡爾積

當聯合查詢兩張表時,兩張表有關聯,並通過外鍵關聯,會出現笛卡爾積,如下:
在這裏插入圖片描述

我們理想的情況,應該是查出6條數據纔對,但卻查出了24條(相當於兩張表相乘了),想要解決笛卡爾積,可以採用內連接或外連接方式進行解決:

普通內連接(參照上圖兩表):
select * from dept inner(可省略) join emp on dept.did = emp.dno;

隱式內連接:
select * from dept d,emp e where d.did = e.dno;

左外連接:
select * from dept left outer(可省略) join emp on dept.did = emp.dno;

右外連接:
select * from dept right join emp on dept.did = emp.dno;

注意:哪個表先寫在from後,默認先展示哪個表的字段。

上面四種連接,在沒有多餘數據的情況下(都有對應的主外鍵關聯),查詢出的是數據完全相同。

當存在多餘數據時:
內連接默認不查詢,只查詢出有兩表中有關聯的數據;
左連接先把左表所有的數據全部都查詢出來,再把兩個表中有關聯的數據查詢出,再將無關聯的查詢出來;
右連接先把右表所有的數據全部都查詢出來,再把兩個表中有關聯的數據查詢出,再將無關聯的查詢出來;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章