MySQL数据库
1、持久化数据
2、方便检索
3、存储大量数据
4、共享、安全
5、通过组合分析,获取新的数据
一、数据库的相关概念
DB database 数据库,存储一系列有组织数据的容器
DBMS Database Management System 数据库管理系统,使用DBMS管理和维护DB
SQL Structure Query Language 结构化查询语言,程序员用于和DBMS通信的语言
二、数据库存储数据的特点
1、数据先放在表中,表再放在库中
2、一个库可以有多张表,每张表都有自己的唯一标识名
orm: object relation mapping 对象关系映射
三、初识MySQL
1、MySQL服务的启动和停止
方式1:图形化
计算机管理–服务–MySQL服务
方式2:以管理员身份运行dos
net start 服务名
net stop 服务名
2、MySQL服务的登录和退出
方式1:通过dos命令
mysql -h主机名 -P端口号 -u用户名 -p密码
注意:
如果是本机,则-h主机名 可以省略
如果端口号是3306,则-P端口号可以省略
方式2:通过图形化界面客户端
通过sqlyog,直接输入用户名、密码等连接进去即可
3、MySQL的常见命令和语法规范
①常见命令
show database
show tables from 库名
show columns from 表名
use 库名
②语法规范
不区分大小写
每条命令结尾建议用分号
注释:
#单行注释
--单行注释
/* */ 多行注释
四、DQL语言的学习
DQL: Date Query Language,数据查询语言
1、基础查询
语法:
select 查询列表 from 表名;
特点:
①查询列表可以是字段、表达式、常量、函数等;
②可包含多个部分,中间用逗号隔开。
2、条件查询
语法:
select 查询列表
from 表名
where 筛选条件
特点:
1、按关系表达式筛选
> < >= <= = <>
2、按逻辑表达式筛选
and or not
3、模糊查询
like/not like:一般和通配符搭档使用
_ 任意单个字符
% 任意多个字符,包括0个
in/not in
between and/not between and
is null/is not null
3、排序查询
语法:
select 查询列表
from 表名
where 筛选条件
order by 排序列表
特点:
1、排序列表可以是单个字段、多个字段、表达式、函数、列数、以及以上的组合
2、升序 asc 默认
降序 desc
4、常见函数
单行函数:
1、字符函数
concat:拼接字符
substr:截取子串
substr(str, 起始索引, 截取的字符长度)
起始索引从1开始!!!
截取字符长度参数可选
length:获取字节长度
char_length:获取字符个数
upper:变大写
lower:变小写
trim:去前后指定的字符,默认是空格
left:截取子串
right:截取子串
lpad:左填充
rpad:右填充
instr:获取字符第一次出现的索引,索引从1开始
strcmp:比较两个字符大小
2、数学函数
abs:取绝对值
ceil:向上取整
floor:向下取整
round:四舍五入
truncate:截断
mod:取余
3、日期函数
now
curtime
curdate
datediff
date_format
str_to_date
4、流程控制函数
if函数
case 表达式 类似于switch语句
when 值1 then 结果1
when 值2 then 结果2
…
else 结果n
end
5、分组函数
说明:
分组函数往往用于实现将一组数据进行统计计算,最终得到一个值,又称为聚合函数或统计函数
包括:
sum
avg
max
min
count:计算非空字段值的个数,推荐使用count(*)
6、分组查询
语法:
select:查询列表
from:表名
where:筛选条件
group by:分组列表
having:分组后筛选
order by:排序列表
程序执行顺序:
①from子句
②where子句
③group by子句
④having子句
⑤select子句
⑥order by子句
7、连接查询
说明:
又称多表查询,当查询语句涉及到的字段来自于多个表时,就会用到连接查询
按功能分类:
Ⅰ内连接
①等值连接
多表等值连接的结果为多表的交集部分
②非等值连接
③自连接
----------------------------------------------sql92标准---------------------------------------
语法:
select 查询列表
from 表1 别名 表2 别名
where 连接条件
and 筛选条件
group by 分组列表
having 分组后筛选
order by 排序列表
执行顺序
from
where
and
group by
having
select
order by
---------------------------------------------sql99语法---------------------------------------------
语法:
select 查询列表
from 表1 别名
join 表2 别名
on 连接条件
where 筛选条件
group by 分组列表
having 分组后筛选
order by 排序列表
区别:
SQL99 使用 join关键字代替了之前的逗号,并且将连接条件和筛选条件进行了分离,提高阅读性!!!
Ⅱ外连接
查询结果为主表中所有的记录,如果从表有匹配项,则显示匹配项;如果从表没有匹配项,则显示null
外连接分主从表,两表的顺序不能任意调换
语法:
select 查询列表
from 表1 别名
left|right|full join 表2 别名
on 连接条件
where 筛选条件;
①左外连接
②右外连接
③全外连接
Ⅲ交叉连接
8、子查询
说明:
当一个查询语句中又嵌套了另一个完整的select语句,则被嵌套的select语句称为子查询或内查询;
外面的select语句称为主查询或外查询。
分类:
1、select后面
要求:子查询的结果为单行单列(标量子查询)
2、from后面
要求:子查询的结果可以为多行多列
3、where或having后面 ★
要求:子查询的结果必须为单列
单行子查询
多行子查询
4、exists后面
要求:子查询结果必须为单列(相关子查询)
特点:
1、子查询放在条件中,要求必须放在条件的右侧
2、子查询一般放在小括号中
3、子查询的执行优先于主查询
4、单行子查询对应了 单行操作符 : > < >= <= = <>
多行子查询对应了 多行操作符: any/some all in
9、分页查询
应用场景:
当页面上的数据,一页显示不全,则需要分页显示
语法:
select 查询列表
from 表1 别名
join 表2 别名
on 连接条件
where 筛选条件
group by 分组列表
having 分组后筛选
order by 排序列表
limit 起始条目索引,显示的条目数
执行顺序:
from 子句
join子句
on子句
where子句
group by子句
having子句
select子句
order by子句
limit子句
特点:
①起始条目索引如果不写,默认是0
②limit后面支持两个参数
参数1:显示的起始条目索引
参数2:条目数
10、union联合查询
说明:
当查询结果来自于多张表,但多张表之间没有关联,这个时候往往使用联合查询,也称为union 查询
语法:
select 查询列表 from 表1 where 筛选条件
union
select 查询列表 from 表1 where 筛选条件
特点:
1、多条待联合的查询语句的查询列数必须一致,查询类型、字段意义最好一致
2、union 实现去重查询
union all 实现全部查询,包括重复项
五、DML语言的学习
DML: Date Manipulation Language,数据操纵语言
1、插入语句
语法:
插入单行:
insert into 表名(字段1, 字段2, …) values (值1, 值2, …);
插入多行:
insert into 表名(字段1, 字段2, …) values
(值1, 值2, …), (值1, 值2, …), (值1, 值2, …) …;
特点:
①字段和值列表一一对应,包含类型、约束等必须匹配
②数值型的值,不用单引号
非数值型的值,必须使用单引号
③字段顺序无要求
2、修改语句★
语法:
update 表名 set 字段名 = 新值, 字段名 = 新值, …
where 筛选条件
3、删除语句
方式1: delete语句
语法 delete from 表名 where 筛选条件
方式2: truncate语句
语法 truncate table 表名
二者区别:
①delete 可以添加where条件
truncate不能添加where条件,一次性清除所有数据
②truncate效率高
③如果删除带自增长列的表,
使用delete删除后,重新插入数据,记录从断点处开始
使用truncate删除后,重新插入数据,记录从1开始
④delete删除数据,会返回受影响的行数
truncate删除数据,不返回受影响的行数
⑤delete 删除数据,可以支持事务回滚
truncate删除数据,不支持事务回滚
补充
自增长列 auto_increment
①自增长列要求必须设置在一个键上,比如主键或唯一键
②自增长列要求数据类型为数值型
③一个表至多有一个自增长列
六、DDL语言的学习
DDL: Data Define Language
数据定义语言,用于对数据库和表的管理和操作
1、库和表的管理
①库的管理
Ⅰ创建数据库
CREATE DATABASE IF NOT EXISTS …;
Ⅱ删除数据库
DROP DATABASE IF EXISTS …;
②表的管理
Ⅰ创建表
CREATE TABLE [IF NOT EXISTS] 表名(
字段名 字段类型 [字段约束],
字段名 字段类型 [字段约束],
字段名 字段类型 [字段约束],
…);
Ⅱ删除表
DROP TABLE [IF EXISTS] …;
Ⅲ修改表[了解即可]
语法:
ALTER TABLE 表名 ADD|MODIFY|CHANGE|DROP COLUMN 字段名 字段类型 [字段约束]
2、常见数据类型介绍
①整形
TINYINT SMALLINT INT BIGINT
②浮点型
FLOAT(m,n)
DOUBLE(m,n)
DECIMAL(m,n)
m,n可选
m:数字总个数
n:小数个数
③字符型
CHAR(n)
VARCHAR(n)
TEXT
n可选,表示最多字符个数
④日期型
DATE
TIME
DATETIME
TIMESTAMP
⑤二进制型
BLOB 存储图片数据
3、常见约束
字段约束:
主键 primary key
唯一 unique
非空 not null
默认 default
检查,mysql不支持,但不会抱错
外键约束
FOREIGN KEY 外键:用于限制两个表的关系,要求外键列的值必须来自于主表的关联列
要求:
1、主表的关联列和从表的关联列的类型必须一致,意思一样,名称无要求;
2、主表的关联列要求必须是主键;