MySQL是一种开源的关系型数据库管理系统,广泛应用于Web应用程序的开发中。以下是MySQL数据库的一些基本知识点总结:
目录
1. 数据库的创建和删除
- 创建数据库:
create database 数据库名;
例:创建数据库mydatabase
create database mydatabase;
- 删除数据库:
drop database 数据库名;
例:删除数据库mydatabase
drop database mydatabase;
2. 表的创建和删除
- 创建表:
create table 表名(列名1 数据类型, 列名2 数据类型, 列名3 数据类型, ...);
例:创建mytable表
create table mytable(
id int(6) auto_increment primary key,
firstname varchar(30) not null,
lastname varchar(30) not null,
email varchar(50),
);
- 删除表:
drop table 表名;
例:删除mytable表
drop table mytable;
3. 数据的插入、更新和删除
-插入数据:
1.指定字段名
- insert into 表名 (字段名1, 字段名2, 字段名3, ...) values(值1, 值2, 值3, ...);
- insert into 表名 (字段名1, 字段名2, 字段名3, ...) values(值1, 值2, 值3, ...),(值1, 值2, 值3, ...);
例:在mytable插入firstname为“John”,lastname为“Doe”,email为“john@example.com”
insert into mytable (firstname, lastname, email) values('John', 'Doe', 'john@example.com');
2.不带字段名
- insert into 表名 values(值1, 值2, 值3,...);
- insert into 表名 values(值1, 值2, 值3,...),(值1, 值2, 值3, ...);
- 更新数据:
update 表名 set 字段名1 = 值1, 字段名2 = 值2, ... where 条件表达式;
例:将mytable 中id为1的email改成johndoe@example.com
update mytable set email = 'johndoe@example.com'
where id = 1;
- 删除数据:
delete from 表名 where 条件表达式;
例:将mytable 中id为1的数据删除
delete from mytable where id = 1;
4. 单表的查询
-基础查询:
select *[ 字段名1,字段名2... ]from 表名;
例:查询mytable表中所有记录的所有列
select * from mytable;
例:查询mytable中firstname、lastname
select firstname,lastname from mytable;
-条件查询 :
运算符
运算符 | 示例 |
---|---|
= | 等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |
比较条件的组合使用
运算符 | 描述 |
---|---|
and | 逻辑与,操作数全部为真,则结果为1,否则为0 |
or | 逻辑或,操作数中只要有一个为真,则结果为1,否则为0 |
not | 逻辑非,操作数为0,则结果为1,操作数为1,则结果为0 |
between关键字
运算符 | 示例 |
---|---|
between...and... | 在指定的闭区间范围内(包含边界) |
not between...and... | 不在指定的闭区间范围内 |
in()关键字
函数名 | 描述 |
---|---|
in() | 在给定的集合内 |
not in() | 不在给定的集合内 |
like关键字
运算符 | 示例 |
---|---|
like '匹配模式' | 获取匹配到的数据(用于模糊匹配) |
not like '匹配模式' | 获取不到的数据 |
通配符:
% ------代表任意多个字符
_(下划线) -----代表一个任意字符
is null关键字
运算符 | 示例 |
---|---|
is null | 比较一个数据是否是null |
is not null | 比较一个数据是否不是null |
select *[ 字段名1,字段名2... ]from 表名
where 条件表达式;
-高级查询:
select [distinct] * [字段名1,字段名2,字段名3,.......]
from 表名
[where 条件表达式1]
[group by 字段名[having 条件表达式 2]]
[order by 字段名[asc/desc]][limit 记录数];
distinct关键字
去除查询记录中重复的数据可使用distinct(去重复值子句)去除重复记录(消除重复行,只保留一条).
语法:distinct 字段名1;
order by子句
使用order by(排序子句)对查询出的数据进行上升或下降的排序MySQL提供了两种排序的方式,分别为单字段排序和多字段排序
说明: asc升序,desc降序,缺省值为升序
- 单字段排序 (单重排序)
语法: order by 字段名 [asc/desc]
- 多字段排序(多重排序)
语法: order by 字段名1 [asc/desc],字段名2 [asc/desc]
说明: 多字段排序首先按照第一字段值排序,当第一字段的值相同时,再按照第二字段值进行排序,依次类推。
limit关键字
关于记录数的限量问题:
对于一次性查询出的大量记录,不仅不便于阅读查看,还会浪费系统效率MySQL中提供了一个关键字limit(限量子句),可以限定记录的数量,也可以指定查询从哪一条记录开始(通常用于分页)。
语法: limit[偏移量,]记录数
例:查询mydb表中第6-10行记录
select * from mydb limit 5,5;
常用聚合函数
函数 | 描述 |
---|---|
count(字段名) | 返回参数字段的数量,参数可以使用*,即count(*) |
sum(字段名) | 返回参数字段之和 |
avg(字段名) | 返回参数字段的平均值 |
max(字段名) | 返回参数字段的最大值 |
min(字段名) | 返回参数字段的最小值 |
-分组查询:
group by 子句
分组统计:在应用中,通常需要对数据按照某个或多个字段进行分组统计
语法: group by 字段名
having子句
分组筛选:对查询的数据分组时,可以利用HAVING子对分组筛选
语法如下:
select 查询列表 from 表名
where 条件表达式
group by 字段名
having 条件表达式
5. 多表的查询
-连接查询:
内连接:
语法:
select 查询列表
from 表1 [inner] join 表2
on 表2.公共列=表1.公共列;
-子查询:
子查询是指在一个查询语句中嵌套另一个查询语句,用于获取更复杂的查询结果。
以下是一个使用子查询的例子: 假设我们有两个表格,一个是学生表格,一个是成绩表格。
学生表格包含学生的ID和姓名,成绩表格包含学生的ID和成绩。
我们想要查询出所有成绩大于80分的学生的姓名和成绩,可以使用以下的SQL语句:
select name, score from student
where id in(select id from score where score > 80);
6.视图
MySQL数据库中的视图是一种虚拟的表,它是基于一个或多个表的查询结果集。视图并不实际存储数据,而是在查询时动态生成结果集。
-创建视图
语法如下:
create view 视图名
as
select 语句;
-修改视图
语法如下:
alter view 视图名
as
select 语句;
-删除视图
语法如下:
drop view 视图名
7.函数
-自定义函数
创建自定义函数
语法如下:
delimiter 新语句结束符号[@@ / ## / $$]
create function 函数名(参数,数据类型)
return 返回值类型
begin
SQL语句
return 返回值;
end
新语句结束符号[@@ / ## / $$]
delimiter;
删除自定义函数:
drop function 名字
-条件函数:
语法:
if(表达式,表达式1(真),表达式2(假));
8.表的约束简介
-域完整性
关键字 | 说明 |
---|---|
not null | 非空约束 |
default | 默认值约束 |
-实体完整性
关键字 | 说明 |
---|---|
primary key | 主键约束(唯一标识) |
unique | 唯一约束 |
auto_increment | 自增约束 |
-参照完整性
关键字 | 说明 |
---|---|
foreign key | 外键约束 |