一.關係型數據庫概述
1.數據庫定義和特色
- 關係型數據庫:是創建在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。
- RDBMS即關係數據庫管理系統(Relational Database Management System)的特色:
1.數據以表格的形式出現
2.每行爲各類記錄名稱
3.每列爲記錄名稱所對應的數據域
4.許多的行和列組成一張表單
5.若干的表單組成database
2.RDBMS 術語
- 數據庫: 數據庫是一些關聯表的集合。
- 數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
- 列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
- 行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
- 冗餘:存儲兩倍數據,冗餘下降了性能,但提升了數據的安全性。
- 主鍵:主鍵是惟一的。一個數據表中只能包含一個主鍵。你可使用主鍵來查詢數據。
- 外鍵:外鍵用於關聯兩個表。
- 複合鍵:複合鍵(組合鍵)將多個列做爲一個索引鍵,通常用於複合索引。
- 索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。相似於書籍的目錄。
- 參照完整性: 參照的完整性要求關係中不容許引用不存在的實體。與實體完整性是關係模型必須知足的完整性約束條件,目的是保證數據的一致性。
3.MySQL數據庫
概念
- MySQL 是一個關係型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 公司。MySQL 是一種關聯數據庫管理系統,關聯數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。
特色
- MySQL 是開源的,因此你不須要支付額外的費用。
- MySQL 支持大型的數據庫。能夠處理擁有上千萬條記錄的大型數據庫。
- MySQL 使用標準的SQL數據語言形式。
- MySQL 能夠運行於多個系統上,而且支持多種語言。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
- MySQL 對PHP有很好的支持,PHP是目前最流行的Web開發語言。
- MySQL 支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件爲8TB。
- MySQL 是能夠定製的,採用了GPL協議,你能夠修改源碼來開發本身的 MySQL 系統。
安裝
- a.解壓後在該文件夾下建立 my.ini 配置文件,編輯 my.ini 配置如下基本信息:
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[mysqld]
# 設置3307端口
port = 3307
# 設置mysql的安裝目錄
basedir=E:\MySQL\mysql-8.0.12
# 設置mysql數據庫的數據的存放目錄
datadir=E:\MySQL\sqldata
# 容許最大鏈接數
max_connections=20
# 服務端使用的字符集默認爲8比特編碼的latin1字符集
character-set-server=utf8
# 建立新表時將使用的默認存儲引擎
default-storage-engine=INNODB
# 默認使用「mysql_native_password」插件認證
default_authentication_plugin=mysql_native_password
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[client]
# 設置mysql客戶端鏈接服務端時默認使用的端口
port=3307
default-character-set=utf8
- b:初始化數據庫:使用管理員打開cmd,在 bin 目錄下執行命令:mysqld --initialize --console
- c:安裝服務:mysqld --install [服務名]
- d:啓動服務:net start mysql,net stop mysql中止服務,經過命令sc delete MySQL/mysqld -remove卸載 MySQL 服務
- e:登錄數據庫:mysql -u root -p 輸入上面初始化生成的密碼。
- f:更改密碼:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';
二.MYSQL的SQL語言
- SQL:Structure Query Language結構化查詢語言
- DDL:數據定義語言,定義數據庫、數據表它們的結構:create(建立) drop(刪除) alter(修改)
- DML:數據操做語言,主要是用來操做數據insert(插入) update(修改) delete(刪除)
- DCL:數據控制語言,定義訪問權限,取消訪問權限,安全設置grant
- DQL:數據查詢語言,select(查詢) from字句 where字句
三.數據庫CRUD的操做
--1.首先要登錄數據庫服務器
mysql -uroot -p123456
--2.數據庫的建立 :
create database 數據庫的名 character set 字符集 collate 校對規則
create database demodb character set utf8 collate utf8_bin;
--3.數據庫的查詢:
show databases;
select database(); //正在使用的
show create database 數據庫的名字;
--4.數據庫的修改:
alter database 數據庫 character set 字符集(utf8);
--5.數據庫的刪除:
drop database 數據庫名
--6.切換數據庫 :
use 數據庫的名字;
四.表的操做
1.建立表
create table 表名(
列名 列的類型(長度) 約束,
sid int primary key auto_increment,
sname varchar(30),
sex int,
age int
);
--列的類型:
int
char(固定長度)/varchar(可變長度),長度表明的是字符的個數
double
date:YYYY-MM-DD
time:hh:mm:ss 默認值是null
timestamp:YYYY-MM-DD hh:mm:ss默認使用當前時間
text:主要是存放文本
blob:存放的是二進制
--列的約束:
主鍵約束:primary key
惟一約束:unique
非空約束:not null
自動增加: auto_increment
2.查看錶
--查看全部的表
show tables;
--查看錶的定義
show create table 表名;
--查看錶結構
desc 表名;
3.修改表
--修改表名和字符集
rename table 舊錶名 to 新表名;
alter table 表名 character set gbk;
--修改列
添加列: alter table 表名 add 列名 列的類型 列的約束(not null);
刪除列: alter table 表名 drop chengji;
改類型: alter table 表名 modify 列名 新的類型 新的約束(not null);
改列名: alter table 表名 change 舊列名 新列名 varchar(2);
4.刪除表
drop table allidea;
五.表中數據的CRUD的操做
1.增刪改數據
--1.插入數據
insert into 表名(列名1,列名2,列名3) values(值1,值2,值3),(值1,值2,值3); //全插入時列名能夠省略
--中文亂碼問題
暫停mysql服務,在mysql安裝路徑中找到my.ini配置文件,將57行改爲gbk,重啓mysql.
--2.刪除記錄
delete from 表名 where 條件;
delete from demodb where sid = 5;
--delete和truncate 刪除數據有什麼差異
delete: DML一條一條刪除表中的數據,適合數據少,高效
truncate:DDL 先刪除表再重建表,適合數據比較多
--查看錶中的數據
select * from allidea;
--3.更新表記錄
update 表名 set 列名1=列的值1,列名2=列的值2 where 條件;
update student set sname='李四' where sid=5;
4.查詢記錄
--商品分類(欄目)
1.分類的id
2.分類名稱
3.分類描述
create table category(
cid int primary key auto_increment,
cname varchar(12),
cdesc varchar(31)
);
insert into category values(null,'手機數碼','中國製造');
insert into category values(null,'皮鞋箱包','意大利');
insert into category values(null,'服裝內衣','中國製造');
insert into category values(null,'菸酒食品','中國製造');
--全部商品(貨品)
1.商品ID
2.商品名稱
3.商品價格
4.生產日期
5.商品分類ID
--商品和商品分類:所屬關係
create table product(
pid int primary key auto_increment,
pname varchar(10),
price double,
pdate timestamp,
cno int
);
insert into product values(null,'小米手機',998,null,1);
insert into product values(null,'華爲手機',2888,null,1);
insert into product values(null,'貴人鳥',399,null,2);
insert into product values(null,'傑克瓊斯',500,null,3);
insert into product values(null,'海瀾之家',500,null,3);
insert into product values(null,'茅臺酒',388,null,4);
insert into product values(null,'西鳳酒',128,null,4);
insert into product values(null,'餅乾',5,null,4);
--查詢全部的商品
select * from product;
--查詢商品名稱和商品價格
select pname,price from product;
--別名查詢. as的關鍵字,as 關鍵字是能夠省略
--表別名(主要是用在多表查詢);
select p.pname,p.price from product as p;
--列別名;
select pname 名稱,price 價格 from product;
--去掉重複的值 distinct
select distinct price from product;
--select運算查詢(僅僅在查詢結果上作了運算)
select *,price*0.5 折後價格 from product;
--where關鍵字
--關係運算符:> >= < <= != <>(標準sql語法)
--判斷某一列是否爲空: is null,is not null
--邏輯運算: and , or , not
--between ... and ...在某一區間
--like:模糊查詢
_ :表明的是一個字符
% :表明的是多個字符
--in 在某個範圍中得到值
--查詢商品價格>60的全部商品信息
select * from product where price > 60;
--查詢商品價格在10到100之間
select * from product where price > 10 and price < 100;
between...add...
select * from product where price between 10 and 100;
--查詢商品價格小於 100 或者商品價格大於 999
select * from product where price < 100 or price > 999;
--查詢出名字中帶有 米 的商品
select * from product where pname like '%米%';
--查詢第二個名字是熊的全部商品
select * from product where pname like '_便%';
--查詢商品分類ID在1,4,5裏面全部的商品
select * from product where cno in (1,4);
--排序查詢: order by 關鍵字
asc : ascend 升序(默認的排序方式)
desc : descend 降序
--1.查詢全部商品,按照價格進行排序
select * from product order by price;
--2.查詢全部商品,按照價格進行降序
select * from product order by price desc;
--3.查詢名稱有 小 的商品,按照價格降序排序
select * from product where pname like '%面%' order by price desc;
--聚合函數: select 函數(列名) from 表名;
sum() : 求和
avg() : 求平均值
count() : 統計數量
max() : 最大值
min() : 最小值
--1.得到全部商品價格的總和
select sum(price) from product;
--2.得到全部商品的個數
select count(*) from product;
--注意:where條件後面不能接聚合函數
--查出商品價格 大於 平均價格 的全部商品
select * from product where price > (select avg(price) from product);
--分組: group by
--having 分組以後條件過濾關鍵字,能夠接聚合函數,出如今分組以後
--1.根據cno字段分組,分組後統計商品的個數
select cno,count(*)
from product group by cno;
--2.根據con分組,分組統計每組商品的平均價格,而且商品平均價格 > 60
select cno,avg(price)
from product group by cno
having avg(price) > 60;
--編寫順序
select .. from .. where .. group by .. having .. order by
--執行順序
from .. where .. group by .. having .. select .. order by