Mysql 数据库总结

一 数据库的概述

1. 数据库的介绍

目前来说如果我们要进行数据存储,有几种方式 :
1.1   我们可以使用集合等方式将数据保存在内存中,但是数据不能持
        久化保存,断电 / 程序退出,数据就清除了
1.2   我们还可以将数据保存在普通文件中,可以持久化保存,但是查
        找,增加,修改,删除数据比较麻烦,效率低
所以我们需要一个既可以持久化保存数据又可以方便操作的地方来
存储数据,这就是我们接下来要给大家介绍的数据库

二.SQL概述

1.SQL语句介绍

SQL Structure Query Language 。(结构化查询语言) , 通过
sql 操作数据库 ( 操作数据库 , 操作表 , 操作数据 )
SQL 被美国国家标准局( ANSI )确定为关系型数据库语言的美国
标准,后来被国际化标准组织( ISO )采纳为关系数据库语言的
国际标准
各数据库厂商 (MySql,oracle,sql server) 都支持 ISO SQL标准

2.SQL中数据的常用类型

类型名称
说明
int
整数类型
double
小数类型
decimal
m,d
指定整数位与小数位长度的小数类型
decimal(4,2) 表达的范围 : -99.99~99.99
date
日期类型,格式为 yyyy-MM-dd ,包含年月日,
不包含时分秒
datetime
日期类型,格式为 YYYY-MM-DD HH:MM:SS
包含年月日时分秒
timestamp
日期类型,时间戳
varchar
M
文本类型, M 0~65535 之间的整数 , 变长
char(M)
文本类型 , M 0~65535 之间的整数 , 定长
固定长度 char(n) 例如 : char(20), 最大能存放 20 个字符 . ‘aaa’,
还是占 20 个字符的空间
可变长度 varchar(n) 例如 :varchar(20), 最大能存放 20 个字符 .
‘aaa’, 3 个字符的空间
一般使用 varchar(n) 节省空间 ; 如果长度 ( 身份证 ) 是固定的话 可
以使用 char(n) 性能高一点

三.DDL操作表

1.创建表

创建表, 格式:
   create table 表名 (
      字段名 数据类型[长度] [约束],
      字段名 数据类型[长度] [约束],
      ...
   );
注:[]中的内容是可选项
需求:创建一张学生表 ( 含有 id 字段 , 姓名字段 , 性别字段 . id 为主键自
动增长 )
-- 需求: 创建一张学生表(含有id字段,姓名字段,性别字段. id为主
键自动增长)
-- 创建表之前需要选中数据库
use day0708_1;
create table student(
 id int primary key auto_increment,
 name varchar(40),
 gender varchar(13) not null
);

四.DML操作表记录-增删改

1.插入记录

-- 创建一张商品表(商品id,商品名称,商品价格,商品数量)
create table product(
 id int primary key auto_increment,
 pname varchar(100),
 price double,
 num int
方式一 : 插入指定列 , 如果没有把这个列进行列出来 , null 进行
自动赋值。
insert into 表(列,列..) values(值,值..);
insert into product(pname,price)
values('Mac',18888);
insert into product(pname,price,num)
values('Mac',18888,null);
方式二:插入所有的列
insert into 表 values(值,值....);
insert into product values(null,'小米电脑',5888,10);
insert into product values(null,'华硕电脑',5888,null);
insert into product values(null,'苹果电
脑',18000.0,10);
insert into product values(null,'华为5G手
机',30000,20);
insert into product values(null,'小米手机',1800,30);
insert into product values(null,'iPhonex',8000,10);
insert into product values(null,'苹果电脑',8000,100);
insert into product values(null,'iPhone7',6000,200);
insert into product 
values(null,'iPhone6s',4000,1000);
insert into product values(null,'iPhone6',3500,100);
insert into product 
values(null,'iPhone5s',3000,100);
insert into product values(null,'方便面',4.5,1000);
insert into product values(null,'咖啡',11,200);
insert into product values(null,'矿泉水',3,500);
除了整数 \ 小数类型外 , 其他字段类型的值必须使用引号引起来
( 建议单引号 )
如果要插入空值 , 可以不写字段 , 或者插入 null

2.删除记录

delete 语法:
delete from 表 [where 条件]  
truncate 语法
truncate table 表;
-- 删除记录
-- 语法一: delete from 表名 [where 条件]  
-- 删除表中名称为’Mac’的记录
delete from product where pname = 'Mac'
-- 删除价格小于5001的商品记录
delete from product where price < 5001
-- 删除表中的所有记录
delete from product
-- 语法二: truncate table 表名;
truncate table product
delete truncate 区别【面试题】
DELETE 删除表中的数据,表结构还在 ; 删除后的数据可以找
, 一条一条的删除 .
TRUNCATE 删除是把表直接 DROP 掉,然后再创建一个同样
的新表。删除的数据不能找回。执行速度比 DELETE 快。
工作里面的删除
物理删除 : 真正的删除了 , 数据不在 , 使用 delete 就属于物理删

五.基本语法查询

select [*] [列名 ,列名] [列名 as 别名 ...][distinct 字段] from 表名 [where 条件]

六.简单查询

查询所有的列的记录
查询某张表特定列的记录
去重查询 :去重针对某列 , distinct 前面不能先出现列 名
别名查询
运算查询 (+,-,*,/ ) :运算查询 列名与列名之间是可以
运算的
-- 查询所有的列语法:select * from 表名
-- 需求:查询product表中的所有数据
select * from product;
-- 查询某张表特定列:select 列名,列名,... from 表
名
-- 需求:查询product表中的pname,price字段的值
select pname,price from product;
-- 去重查询:select distinct 列名 from 表名
-- 需求:查询price字段,[去重]单个字段去重
select distinct price from product;
-- 需求:查询pname,price字段,[同时去重]多个字段去
重
select distinct pname,price from product;
-- 注意:distinct前面不能有字段名
select id,distinct price from product; -- 报
错
-- 别名查询
-- 对字段取别名:select 字段 as 别名,字段 as 别
名,... from 表名。注意: as可以省略,一般都会省略
select pname as 商品名称,num as 商品数量 from
product;
select pname 商品名称,num 商品数量 from
product;
-- 对表取别名:select 表1别名.字段名,... from 表1
as 表1别名。注意: as可以省略 一般都会省略
select p.pname,p.price from product as p;
select p.pname,p.price from product p;
-- 运算查询(+,-,
*
,/等),null和其他数据进行运算得到
是null
-- 需求:计算每个商品的总价(单价*数量)
select price,num from product;
select price*num from product;
select price * num 总价 from product
select price * ifnull(num,0) 总价 from
product

七.条件查询

between...and... 区间查询
where price between 1000 and 3000 相当于
1000<=price<=3000
in( 值,值 ..)
-- 查询id为1,3,5,7的
select * from t_product where id = 1
select * from t_product where id = 3
select * from t_product where id = 5
select * from t_product where id = 7
select * from t_product where id in(1,3,5,7)
like 模糊查询 。一般和 _ 或者 % 一起使用
_ 占一位
% 0 或者 n
name like '张%' --查询姓张的用户, 名字的字数没有
限制
name like '张_' --查询姓张的用户 并且名字是两个
字的
and 多条件同时满足
where 条件1 and 条件2 and 条件3
or 任意条件满足
where 条件1 or 条件2 or 条件3

八.排序查询

有时候我们需要对查询出来的结果排序显示,那么就可 以通过ORDER BY 子句将查询出的结果进行排序。排序可 以根据一个字段排,也可以根据多个字段排序,排序只 是对查询的结果集排序,并不会影响表中数据的顺序。
环境的准备
CREATE TABLE student(
 sid INT PRIMARY KEY auto_increment,
 sname VARCHAR(40),
 sex VARCHAR(10),
 age INT,
 score DOUBLE
);
INSERT INTO student VALUES(null,'zs','男',18,96.5);
INSERT INTO student VALUES(null,'ls','女',18,96.5);
INSERT INTO student VALUES(null,'ww','男',15,50.5);
INSERT INTO student VALUES(null,'zl','女',20,98.5);
INSERT INTO student VALUES(null,'tq','男',18,60.5);
INSERT INTO student VALUES(null,'wb','男',38,98.5);
INSERT INTO student VALUES(null,'陈迈','男',18,100);
INSERT INTO student VALUES(null,'小红','女',28,28);
INSERT INTO student VALUES(null,'小强','男',21,95);
-- 单列排序:只按某一个字段进行排序,单列排序
-- SELECT 字段名 FROM 表名 [WHERE 条件] ORDER BY 
-- 字段名 [ASC|DESC]; //ASC: 升序,默认值;   DESC: 降序
-- 需求: 以分数降序查询所有的学生
select * from student order by score desc;
-- 组合排序:同时对多个字段进行排序,如果第1个字段
-- 相等,则按第2个字段排序,依次类推
-- SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 
-- 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];
-- 需求:以分数降序查询所有的学生, 如果分数一致,再以age降序
select * from student order by score desc,age asc;
select sid 序号,sname 名字,sex 性别,age 年龄,score 分数 from student order by score desc;

九.聚合函数

之前我们做的查询都是横向查询,它们都是根据条件一 行一行的进行判断,而使用聚合函数查询是纵向查询 , 它是对一列的值进行计算,然后返回一个结果值 。聚合 函数会忽略空值NULL
聚合函数
作用
max( 列名 )
求这一列的最大值
min( 列名 )
求这一列的最小值
avg( 列名 )
求这一列的平均值
count( 列名 )
统计这一列有多少条记录
sum( 列名 )
对这一列求总和
语法:
SELECT 聚合函数(列名) FROM 表名 [where 条件];

十.分组查询

分组查询是指使用 GROUP BY 语句对查询信息进行分 组。
语法
SELECT 字段1,字段2... FROM 表名 [where 条件]GROUP BY 列 [HAVING 条件];


-- 根据性别分组, 统计每一组学生的总人数
SELECT sex, count(*) FROM student GROUP BY
sex;

十一. 分页查询

语法
select * from 表名 limit m,n;

m是指从哪开始查;记录开始的index,从0开始,表示第一条记录
n是指查多少条。



-- 需求: 分页查询学生, 每一页查询4条
select * from student limit 0,4; -- 第1页
select * from student limit 4,4; -- 第2页
select * from student limit 8,4; -- 第3页

m=(当前页码-1)*n,

  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值