數據庫知識_01
1.什麽是數據庫?
數據庫就是一個文件系統,只不過我們需要通過命令行(SQL)來操作這個文件系統
2.常見數據庫:
mysql:開源免費的適用於中小型企業的免費數據庫
mariadb:由mysql創始人搞出來的,直接是mysql開源版本的一個分支,基本上所有的命令都是一樣的
oracle:商業軟件,收費軟件,適用於大型電商網站,收購了sun公司
db2:IBM公司,thinkpad,解決方案:軟件和硬件,服務器架構,銀行系統大多采用db2
sqlserver:windows裏面,政府網站asp.net,並且大學教學通常都是采用SQLserver。圖形化工具做的不錯
sybase:被淘汰的
NOSQL非關系型數據庫:key--value
mongodb:
redis:set get
3.關系型數據庫:
主要用來描述實體與實體之間的關系,
實實在在存在的事物:男生與女生 學生和班級 員工和部門
E-R關系圖:要求必須得會畫
實體:方框
屬性:橢圓
關系:菱形
4.MYSQL數據庫服務器
MYSQL數據庫:數據庫管理軟件
服務器:就是一臺電腦,這臺安裝相關的服務器軟件,這些軟件會監聽不同的端口號,根據用戶訪問的端口號,提供不同的服務
5.MYSQL的安裝和卸載
卸載:
打開控制面板,刪除軟件
刪除mysql安裝目錄的所有文件C:\Program File\MySQL
刪除mysql數據存放文件:C:\ProgramData\MySQL
安裝:
運行安裝程序:在啟動配置教程之前,一路下一步,沒有下一步的話就直接finish
第一次finish之後啟動服務器配置教程
第一個incluce mysql bin directory to windows path
第二個:端口號不要去修改,字符集要選UTF-8,密碼不要忘記了
附件(重置root密碼):
方法一:
在my.ini的[mysqld]字段加入:
重啟mysql服務,這時的mysql不需要密碼即可登錄數據庫
然後進入mysqlmysql>use mysql; mysql>更新 update user set password=password(‘新密碼‘) WHERE User=‘root‘;mysql>flush privileges; 運行之後最後去掉my.ini中的skip-grant-tables,重啟mysqld即可。
方法二:
不使用修改my.ini重啟服務的方法,通過非服務方式加skip-grant-tables運行mysql來修改mysql密碼
停止mysql服務
打開命令行窗口,在bin目錄下使用mysqld-nt.exe啟動,即在命令行窗口執行: mysqld-nt --skip-grant-tables
後另外打開一個命令行窗口,登錄mysql,此時無需輸入mysql密碼即可進入。
按以上方法修改好密碼後,關閉命令行運行mysql的那個窗口,此時即關閉了mysql,如果發現mysql仍在運行
的話可以結束掉對應進程來關閉。
啟動mysql服務
6.MYSQL的SQL語句
SQL:Structure Query Language結構化查詢語言
DDL:數據定義語言:定義數據庫;數據表他們的結構:create(創建) drop(刪除)alter(修改)
DML:數據操縱語言:主要是用來操作數據 insert(插入) delete(刪除)update(修改)
DCL:數據控制語言:定義訪問權限,取消訪問權限,安全設置 grant
DQL:數據查詢語言:select(查詢) from字句 where字句
7.數據庫的CRUD的操作
首先要登錄數據庫服務器:mysql -u用戶名 -p密碼
創建數據庫:
create database 數據庫的名字:create database day06;
創建數據庫數據庫的時候,指定字符集:
create database 數據庫的名字 character set utf8;
eg:create database day06_1 character set utf8;
create database 數據庫的名字 character set 字符集 collate 校對規則;
eg:create database day_02 character set utf8 collate utf8_bin;
查看數據庫:、
查看所有數據庫:
show databases;
information_schema
performance_schema
mysql(這三個數據庫不要動)
查看數據庫定義的語句:
show create database 數據庫名字
eg:show create database day06;
eg:show create database day06_2;
修改數據庫的操作:
修改數據庫的字符集:
alter database 數據庫的名字 character set 字符集
alter database day06_1 character set gbk;
刪除數據庫:
drop database 數據庫名字;
drop database day06_02;
drop database test;
其他數據庫操作命令:
切換數據庫(選中數據庫):
use 數據庫名字;
use day06;
查看一下當前正在使用的數據庫:
select database();
8.表的CRUD操作
創建表:
create database 數據庫名字
create table 表名(
列名 列的類型(長度) 約束,
列名2 列的類型(長度) 約束
);
列的類型:
java sql
int int
char/String char/varchar
char:固定長度
char(3): 一 一空格空格
varchar(3): 一 一
長度代表的是字符的個數。另外提一下:utf8下漢字是3個字節
double double
float float
boolean boolean
date date:YYYY-MM-DD
time:hh-mm-ss
datetime:YYYY-MM-DD hh:mm:ss 默認值 是null
timestamp:YYYY-MM-DD hh:mm:ss 默認使用當前時間
text:主要是用來存放文本
blob:存放的是二進制
列的約束:
主鍵約束:primary key
唯一約束:unique
非空約束:not null
創建表:
1.分析實體:學生
2.學生ID
3.姓名
4.性別
5.年齡
create table student(
sid int primary key,
sname varchar(31),
sex int,
age int
);
查看表:
查看所有的表:show tables;
查看表的定義:show create table student;
查看表的結構:desc student;
修改表:
添加列(add):alter table 表名 add 列名 列的類型 列的約束
alter table student add chengji int not null;
修改列(modify):alter table student modify sex varchar(2);
修改列名(change):alter table student change sex gender varchar(2);
刪除列(drop):alter table student drop chengji;
修改表名(rename):rename table student to heima;
修改表的字符集:alter table heima character set gbk;
刪除表:
drop table heima;
9.Sql完成對表中數據的CRUD的操作
插入數據:insert into 表名(列名1,列名2,列名3) valus(值1,值2,值3);
eg:insert into student(sid,sname,sex,age)values(1,’張三‘,1,23);
簡單寫法(如果插入的是全列名的數據,表後面的列明可以省略):insert into student values(2,’張三‘,1,23);
註意:如果是插入部分列的話,列明不能省略
insert into student(sid,sname) values(3,’lisi‘);
nsert into student values(3,’lisi‘);//這種寫法是錯誤的
批量插入:
insert into student values
(4,’張三‘,1,23),
(5,’張三‘,1,23),
(6,’張三‘,1,23),
(7,’張三‘,1,23),
(8,’張三‘,1,23);
單條插入和批量插入的效率:
插三條數據
查看表中數據:select*from student;
刪除記錄:delete from 表名 [where 條件]
delete from student where sid=10;
delete from student;如果沒有指定條件會將表中數據一條一條全部刪掉
更新表記錄:
update 表名 set 列名=列的值,列名2=列的值2 [where 條件]
將sid為5的名字改為李四
如果參數是字符串,日期要加單引號
update student set sname=’李四‘ where sid=5;
update student set sname=’李四‘ ,set=0;(會將表中所有數據都修改)
查詢記錄:
select [distinct] [*] [列名,列名2] from 表名 [where 條件]
distinct:去除重復數據
select:選擇顯示那些列的內容
--商品分類:手機數碼,鞋靴箱包
1.分類的ID
2.分類名稱
3.分類描述
create table category(
cid int primary key auto_increment,
cname varchar(10),
cdesc varchar(31)
);
insert into category values(null,’手機數碼‘,‘電子廠品,黑馬生產’);
insert into category values(null,’鞋靴箱包‘,’江南皮革廠,傾情打造‘);
insert into category values(null,’香煙酒水’,‘黃鶴樓,茅臺,二鍋頭’);
insert into category values(null,‘酸奶餅幹’,‘哇哈哈,蒙牛酸酸乳’);
insert into category values(null,‘饞嘴零食’,‘瓜子花生,八寶粥,辣條’);
select*from category;//表中所有數據
select cname,desc fromcategory;//查看表中指定列的數據
--所有商品
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,‘小米mix4’,998,null,1);
insert into product values(null,‘錘子’,2888,null,1);
insert into product values(null,‘阿迪王’,99,null,2);
insert into product values(null,‘老村長’,88,null,3);
insert into product values(null,‘勁酒’,35,null,3);
insert into product values(null,‘小熊餅幹’,1,null,4);
insert into product values(null,‘衛龍辣條’,1,null,5);
insert into product values(null,‘旺旺大餅’,1,null,5);
--簡單查詢:
--查詢所有的商品:select*from product;
--查詢商品名稱和商品價格:select pname,price from product;
--別名查詢,as的關鍵字,as關鍵字是可以省略的
--表別名:select p.pname,p.price from product p;(主要是用在多表查詢);
select p.pname,p.price from product as p;
--列別名:select pname as 商品名稱,price as 商品價格 from product;
select pname as 商品名稱,price as 商品價格 from product ;
省略as關鍵字
select pname 商品名稱,price 商品價格 from product ;
--去掉重復的值
--查詢商品所有的價格
select price from product;
select distinct price from product;
--select運算查詢:僅僅在查詢結果上做了運算,數據沒變 + - * /
select *,price*1.5 from product;
select *,price*1.5 as 折後價 from product;
select *,price*0.8 from product;
--條件查詢[where關鍵字]
指定條件,確定要操作的記錄
--查詢商品價格>60元的所有商品信息
select*from product where price>60;
--where 後的條件寫法
--關系運算符:> >= < <= = != <>
<>:不等於(標準SQL語法)
!=:不等於(非標準SQL語法)
--查詢商品的價格不等於88的所有商品
select*from product where price<>88;
select*from product where price!=88;
--查詢商品的價格在10到100之間
select*from product where 10<price and price<100;
between..and..
select*from product where price between 10 and 100;
--邏輯運算:and , or, not
--查詢商品價格小於100或者商品價格大於900
select *from product where price<100 or price>900;
--like:模糊查詢
_:代表的是一個字符
%:代表的是多個字符
--查詢出名字中帶有餅的所有商品 %餅%
select *from product where pname like ‘%餅%‘;
--查詢第二個名字是熊的所有商品 ’-熊%‘
select*from product where pname like ’_熊%‘;
--in在某個範圍中獲得值
--查詢出商品分類ID在1,4,5裏面的所有商品
select *from product where cno in(1,4,5);
--排序查詢:order by 關鍵字
asc:ascend升序(默認的排序方式)
desc:descend降序
--0.查詢所有商品,按照價格進行排序
select*from product order by price;
--1.查詢所有的商品,按價格進行降序排序(asc-升序 desc-降序);
select *from product order by price desc;
--2,查詢名稱有 小 的商品,按價格升序排序
1.查詢名稱有 小· 的商品;
select*from product where pname like ’‘%小%;
2.進行排序得出結果
select*from product where pname like ’%小%‘ order by price asc;
--聚合函數:
sum():求和
avg():求平均值
count():統計數量
max():最大值
min():最小值
--1.獲得所有商品價格總和:
select sum(price) from product;
--2.獲得所有商品的平均價格:
select avg(price) from product;
--3.獲得所有商品的個數;
select count(*) from product;
--註意:where條件後面不能接聚合函數
--查出商品價格大於平均價格的所有商品
查出所有商品;select*from product;
大於
平均價格
--子查詢
select*from product where price >(select avg(price)from product);
--分組:group by
--1.根據cno字段分組,分組後統計商品的個數
select cno,count(*) from product group by cno;
--2.根據cno分組,分組統計每組商品的平均價格,並且商品價格>60
select cno,avg(price) from product group by cno having avg(price)>60;;
--having關鍵字 可以接聚合函數的 出現分組之後
--where關鍵字 它是不可以接聚合函數的,出現在分組之前
--編寫順序
--S..F..W..G..H..O
select...from...where...group by..having..order by
--執行順序
F..W..G..H..S..O
from...where...group...having...select...order by
數據庫知識_01