MySQL學習筆記

 

1.1 MySQL的概述

1.1.1 數據庫的概述

1.1.1.1 什麼是數據庫

數據庫就是一個文件系統,經過標準的SQL語句獲取數據web

1.1.2 MySQL的概述

1.1.2.1 什麼是MySQL數據庫

 

1.1.3 關係型數據庫概述

1.1.3.1 什麼是關係型數據庫

關係型數據庫存放的是實體之間的關係數據庫

 

1.1.3.2 常見的關係型數據庫

l MySQL服務器

l Oracle函數

l SQLServerspa

l DB2視頻

l SyBase對象

1.2 MySQL的安裝

1.2.1 MySQL安裝步驟

參見《MySQL的安裝》視頻排序

1.3 MySQL的數據存儲方式的概述

1.3.1 服務器的概念

1.3.1.1 什麼是服務器

服務器要從硬件和軟件兩個方面來講:事務

硬件:指的就是一臺計算機。rem

軟件:須要在這臺電腦上安裝數據庫服務器。

1.3.2 MySQL數據庫存儲的方式

1.3.2.1 存儲方式的描述

 

一臺數據庫服務器中會建立不少數據庫(一個項目,會建立一個數據庫)。在數據庫中會建立不少張表(一個實體會建立一個表)。在表中會有不少記錄(一個對象的實例會添加一條新的記錄)。

1.4 SQL的概述

1.4.1 SQL的概念

1.4.1.1 什麼是SQL

 

1.4.2 SQL的分類

1.4.2.1 DDL:數據定義語言

createdropalter..

1.4.2.2 DCL:數據控制語言

grantif

1.4.2.3 DML:數據操縱語言

insertupdatedelete

1.4.2.4 DQL:數據查詢語言

select

1.5 使用SQL

1.5.1 SQL對數據庫進行操做

1.5.1.1 建立數據庫

語法:

n create database 數據庫名稱 [character set 字符集 collate 字符集校對規則];

 

1.5.1.2 查看數據庫

語法:

查看數據庫服務器中全部的數據庫:show databases;

 

查看某個數據庫的定義信息: show create database 數據庫名稱;

 

1.5.1.3 修改數據庫

語法:

n alter database 數據庫名稱 character set 字符集 collate 校對規則;

 

1.5.1.4 刪除數據庫

語法:

n drop database 數據庫名稱;

 

1.5.1.5 其餘數據庫操做

切換數據庫:use 數據庫名稱;

 

查看當前正在使用的數據庫:

 

1.5.2 SQL對數據庫表進行操做

1.5.2.1 SQL建立表

語法:

n create table 表名稱(字段名稱 字段類型(長度) 約束,字段名稱 字段類型(長度) 約束…);

字段類型

一個實體對應一個表,一個實體屬性對應表的一個字段。

Java中的類型 MySQL中的類型

byte/short/int/long tinyint/smallint/int/bigint

float float

double double

boolean bit

char/String charvarchar類型

charvarchar的區別:

* char表明是固定長度的字符或字符串。

* 定義類型char(8),向這個字段存入字符串hello,那麼數據庫使用三個空格將其補全。

* varchar表明的是可變長度的字符串。

* 定義類型varchar(8), 向這個字段存入字符串hello,那麼存入到數據庫的就是hello

Date date/time/datetime/timestamp

datetimetimestamp區別

* datetime就是既有日期又有時間的日期類型,若是沒有向這個字段中存值,數據庫使用null存入到數據庫中

* timestamp也是既有日期又有時間的日期類型,若是沒有向這個字段中存值,數據庫使用當前的系統時間存入到數據庫中。

File BLOB/TEXT

約束

約束做用:保證數據的完整性

單表約束分類:

主鍵約束:primary key 主鍵約束默認就是惟一 非空的

惟一約束:unique

非空約束:not null

建表語句:

create database web_test1;

use web_test1;

create table user(

id int primary key auto_increment,

username varchar(20) unique,

password varchar(20) not null,

age int,

birthday date

);

 

1.5.2.2 SQL查看錶

查看某個數據庫下的全部的表

語法:show tables;

 

查看某個表的結構信息

語法:desc 表名;

 

 

1.5.2.3 SQL刪除表

刪除表

語法:drop table 表名;

 

1.5.2.4 SQL修改表

修改表:添加列

n alter table 表名 add 列名 類型(長度) 約束;

 

修改表:修改列類型,長度和約束

n alter table 表名 modify 列名 類型(長度) 約束;

 

修改表:刪除列

n alter table 表名 drop 列名;

 

修改表:修改列名稱

n alter table 表名 change 舊列名 新列名 類型(長度) 約束;

 

修改表:修改表名

n rename table 表名 to 新的表名;

 

修改表:修改表的字符集

n alter table 表名 character set 字符集;

 

1.5.3 SQL對數據庫表的記錄進行操做(重點)

1.5.3.1 SQL添加表的記錄

語法:

向表中插入某些列:insert into 表名 (列名1,列名2,列名3…) values (1,2,3…)

向表中插入全部列:insert into 表名 values (1,2,3…);

注意事項

1.值的類型與數據庫中表列的類型一致。

2.值的順序與數據庫中表列的順序一致。

3.值的最大長度不能超過列設置最大長度。

4.值的類型是字符串或者是日期類型,使用單引號引發來。

添加記錄

添加某幾列

insert into user (id,username,password) values (null,'aaa','123');

 

添加全部列

insert into user values (null,'bbb','123',23,'1993-09-01');

 

添加中文記錄

insert into user values (null,'張三','123',23,'1993-09-01');

 

直接向數據庫中插入中文記錄會出現錯誤!!!

解決方法:

show variables like '%character%';  --查看數據庫中與字符集相關參數:

須要將MySQL數據庫服務器中的客戶端部分的字符集改成gbk

找到MySQL的安裝路徑:my.ini文件,修改文件中[client]下的字符集

 

* 從新啓動MySQL的服務器

services.msc

1.5.3.2 SQL修改表的記錄

語法:

n update 表名 set 列名=,列名=[where 條件];

注意事項

1.值的類型與列的類型一致。

2.值的最大長度不能超過列設置的最大長度。

3.字符串類型和日期類型添加單引號。

修改某一列的全部值

update user set password = 'abc';

 

按條件修改數據

update user set password = 'xyz' where username = 'bbb';

 

按條件修改多個列

update user set password='123',age=34 where username='aaa';

 

1.5.3.3 SQL刪除表的記錄

語法:

n delete from 表名 [where 條件];

注意事項

1.刪除表的記錄,指的是刪除表中的一行記錄。

2.刪除若是沒有條件,默認是刪除表中的全部記錄。

刪除某一條記錄

delete from user where id = 2;

 

刪除表中的全部記錄

delete from user;

 

刪除表中的記錄有兩種作法:

delete from user;

刪除全部記錄,屬於DML語句,一條記錄一條記錄刪除。事務能夠做用在DML語句上的

truncate table user;

刪除全部記錄,屬於DDL語句,將表刪除,而後從新建立一個結構同樣的表。事務不能控制DDL

1.5.3.4 SQL查看錶的記錄(重點)

基本查詢

語法:select [distinct] *|列名 from [條件];

環境的準備:

create table exam(

id int primary key auto_increment,

name varchar(20),

english int,

chinese int,

math int

);

 

insert into exam values (null,'張三',85,74,91);

insert into exam values (null,'李四',95,90,83);

insert into exam values (null,'王五',85,84,59);

insert into exam values (null,'趙六',75,79,76);

insert into exam values (null,'田七',69,63,98);

insert into exam values (null,'李老八',89,90,83);

查詢全部學生考試成績信息

select * from exam;

 

查詢全部學生的姓名和英語成績

select name,english from exam;

 

查詢英語成績信息(不顯示重複的值)

select distinct english from exam;

 

查看學生姓名和學生的總成績

select name,english+chinese+math from exam;

 

別名查詢

select name,english+chinese+math as sum from exam;

 

條件查詢

使用where子句

> , < , >= , <= , <> ,=

like:模糊查詢

in:範圍查詢

條件關聯:and , or ,not

查詢李四學生的成績:

select * from exam where name = '李四';

 

查詢名稱叫李四學生而且英文大於90

select * from exam where name = '李四' and english > 90;

 

查詢姓李的學生的信息

like能夠進行模糊查詢,like子句中能夠使用_或者%做爲佔位符。_只能表明一個字符,而%能夠表明任意個字符。

* like ‘_’ :名字中必須是兩個字,並且是姓李的。

* like ‘%’ :名字中姓李的學生,李子後能夠是1個或任意個字符。

* like ‘%:名字中以四結尾的。

* like ‘%%:只要名稱中包含這個字就能夠。

 

select * from exam where name like '%';

 

查詢英語成績是69,75,89學生的信息

select * from exam where english in (69,75,89);

 

排序查詢

使用order by 字段名稱 asc/desc;

查詢學生信息,而且按照語文成績進行排序:

select * from exam order by chinese;

 

查詢學生信息,而且按照語文成績倒序排序:

select * from exam order by chinese desc;

 

查詢學生信息,先按照語文成績進行倒序排序,若是成績相同再按照英語成績升序排序

select * from exam order by chinese desc,english asc;

 

查詢姓李的學生的信息,按照英語成績降序排序

select * from exam where name like '%' order by english desc;

 

分組統計查詢

聚合函數使用

sum();

獲取全部學生的英語成績的總和:

select sum(english) from exam;

 

獲取全部學生的英語成績和數學成績總和:

select sum(english),sum(math) from exam;

 

查詢姓李的學生的英語成績的總和

select sum(english) from exam where name like '%';

 

查詢全部學生各科的總成績:

select sum(english)+sum(chinese)+sum(math) from exam;

 

select sum(english+chinese+math) from exam;

與上面的語句有什麼不一樣?

* 上面的語句是按照列的方式統計,英語成績總和+語文成績總和+數學成績總和。

* 下面的語句先計算英語+數學+語文而後再求和。

* 使用ifnull的函數

 

count();

得到學生的總數

select count(*) from exam;

 

得到姓李的學生的個數

select count(*) from exam where name like '%';

 

max();

得到數學成績的最高分:

select max(math) from exam;

 

min();

得到語文成績的最小值

select min(chinese) from exam;

 

avg();

獲取語文成績的平均值

select avg(chinese) from exam;

 

分組查詢

語法:使用group by 字段名稱;

環境準備

create table orderitem(

id int primary key auto_increment,

product varchar(20),

price double

);

insert into orderitem values (null,'電視機',2999);

insert into orderitem values (null,'電視機',2999);

insert into orderitem values (null,'洗衣機',1000);

insert into orderitem values (null,'洗衣機',1000);

insert into orderitem values (null,'洗衣機',1000);

insert into orderitem values (null,'冰箱',3999);

insert into orderitem values (null,'冰箱',3999);

insert into orderitem values (null,'空調',1999);

按商品名稱統計,每類商品所購買的個數:

select product,count(*) from orderitem group by product;

 

按商品名稱統計,每類商品所花費的總金額:

select product,sum(price) from orderitem group by product;

 

按商品名稱統計,統計每類商品花費的總金額在5000元以上的商品

***** where的子句後面不能跟着聚合函數。若是如今使用帶有聚合函數的條件過濾(分組後條件過濾)須要使用一個關鍵字having

select product,sum(price) from orderitem  group by product having sum(price) > 5000;

 

按商品名稱統計,統計每類商品花費的總金額在5000元以上的商品,而且按照總金額升序排序

select product,sum(price) from orderitem  group by product having sum(price) > 5000 order by sum(price) asc;

 

總結

S(select) F(from)W(where)G(group by)H(having)O(order by);

相關文章
相關標籤/搜索