MySql的特点
1.操作便捷
2.小巧,功能齐全
3.免费、开源的数据库
4.可运行与Windows或Linux系统,跨平台
数据库
简称DB
长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据"仓库"
作用:
存放、管理数据
分类
关系型数据库、NoSQL数据库
常见的数据库
关系型数据库:MySQL ORACLE PostgreSQL
NoSQL数据库:redis mongoDB
MySQL数据库的特点
开源免费,小巧但功能齐全
可在Windows和Linux系统上运行
操作方便,适用于中小型甚至大型网址应用
数据库的还原
sql语句的分类
数据定义语言DDL – create drop alter
数据操控语言 DML – insert update delete
数据查询语言DQL – select
数据控制功能DCL – 对权限,配置的更改 – IDENTIFIED grant privileges
SHOW DATABASES;查询所有的库
字符串类型
[] 表示可以可无
char[(M)] 固定长字符串,检索快但费空间
varchar[(M)] 可变字符串
先写字段名,再写字段类型,然后写属性
ENGINE 存储引擎
提供规则
InnoDB MySQL8只能用
mys
主键不仅是约束,还是索引
递增auto_increment 按照最大的值递增
MySQL创建数据库
create database 数据库名
MySQL删除数据库
drop database 数据库名
选择数据库
use 数据库名
创建数据表
create table 表名(
字段名 字段类型
)
删除数据表
drop table 表名
插入数据
insert into 表名(field1,fieldn) values(value1,valuen)
查询数据
select 字段名1,字段名n from 表名 【where 条件】
where字句
= 等号,检测两个值是否相等
<> != 不等
‘>’ 大于
‘<’ 小于
‘>=’ 大于等于
‘<=’ 小于等于
between 在某个范围之间
and 并且
or 或
insert增加数据
insert into 表名 [(字段1,字段n)] values/value(值1,值n)
insert into select
insert into 表名2(字段名1,字段名n) select 字段名1,字段名n from 表名1
从表1复制数据,然后把数据插入到一个已存在的表中
update修改数据
update 表名 set 字段名1 = 值1[,字段名n = 值n] [where 条件]
delete删除数据
delete from 表名 [where 条件]
truncate删除数据
truncate [table] 表名
速度快,效率高
DQL数据查询语言
单表查询
针对数据库中的一张数据表进行查询,可以通过各种查询条件和方式去做相关的优化
查询语句语法规则
select [distinct] {*|表1.**|[表1.字段1[as 字段别名1]],[表n.字段n[as 字段别名n]]} from 表1 [as 表别名]
[left|right|inner join 表2 on 表之间的关系]
[where]
[group by]
[having]
[order by]
[limit {[位置偏移量,] 行数}]
{}包含的内容必须存在
distinct 去重
as 起别名
group by 按组分类显示查询出的数据
having group by分组时依赖的分组条件
order by 将查询出来的结果按一定顺序排序
limit 限制显示查询结果的条数
指定字段列
select *|字段名1,字段名n from 表名
表别名和字段别名
SELECT 表别名.字段名1 AS 字段别名1, 表别名.字段名2 AS 字段别名2 FROM 表名 AS 表别名
distinct 去重
SELECT DISTINCT 字段名1, 字段名2… FROM 表名
where条件字句
select * from 表名[where 条件]
like关键字 模糊查询
SELECT * FROM 表名 WHERE 字段 LIKE 条件
• 在WHERE子句中,使用LIKE关键字进行模糊查询;
• 与“%”一起使用,表示匹配0或任意多个字符;
• 与“_”一起使用,表示匹配单个字符。
in关键字
SELECT * FROM 表名 WHERE 字段 IN (值1,值2…);
在某个集合的范围内查找
in 与 = 的异同
相同:都在where中使用作为筛选条件之一,都是等于的含义
不同:in可以规定多个值,= 规定一个值
NULL值查询
SELECT * FROM 表名 WHERE 字段 IS NULL | IS NOT NULL
• NULL代表“无值”;
• 区别于零值0和空符串;
• 只能出现在定义允许为NULL的字段;
• 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较。
常用聚合函数
avg(字段名) 返回指定列的平均值
count(常量 | * |字段名) 返回指定列中非null值的个数
min(字段名) 返回指定列的最小值
max(字段名) 返回指定列的最大值
sum(字段名) 返回指定列的所有值之和
group by 分组
1、对所有的数据进行分组统计;
2、分组的依据字段可以有多个,并 依次分组。
select sname from 表名 group by sname//根据sname字段名进行分组
having
与GROUP BY结合使用,进行分组 后的数据筛选。
order by 排序
select * from 表名 order by 字段名 [asc|desc]
• ORDER BY 表示对SELECT语句查询得到的结果,按字段名进行排序;
• DESC表示排序的顺序为降序,ASC表示排序的顺序为升序;
不写默认为升序排序
limit关键字、
select * from 表名 limit [n,]m
• LIMIT关键字是MySQL特有关键字;
• LIMIT限制SELECT返回结果的行数;
• n 表示第一条记录的偏移量,m 表示显示记录的数量;
多表联查
内联查询方式1
select *from 表1,表2 … where 表1.xxx = 表2.xxx = 表n.xxx
内联查询方式2
select * from 表1 inner join 表2 on 表1.xxx = 表2.xxx = 表n.xxx
外联查询
select * from 表1 left join 表2 on 表1.xxx = 表2.xxx
表1为主
select * from 表1 right join 表2 on 表1.xxx = 表2.xxx
表2为主
union 连接查询 找出两张表的并集
语法:
select A.field1 as f1, A.field2 as f2 from A union
(select B.field3 as f1, field4 as f2 from B) order by 字段 desc/asc union是求两个查询的并集。
union合并的是结果集,不区分来自于哪一张表,所以可以合并多张表查询出来的数据。
注意:
1列名不一致时,会以第一张表的表头为准,并对其栏目。
2会将重复的行过滤掉。
3如果查询的表的列数量不相等时,会报错。
4在每个子句中的排序是没有意义的,mysql在进行合并的时候会忽略掉。
5如果子句中的排序和limit进行结合是有意义的。
6可以对合并后的整表进行排序
一切查询的结果都是一个虚拟表
where不能对分完组的数据进行过滤,用having
having必须依附在group by出现
没有group by having不能出现
索引的类型
BTREE
最多三层
B+TREE
索引的种类
主键索引
唯一索引
常规索引
全文索引
幻读
添加的时候,
@局部变量
@@全局变量
int 只进不出
out 只出不进
inout 又进又出
sql注入
select * from login where lname=lname or 1=1;