本文mysql中,数据库CURD,表CURD以及单表操作相关内容。多表操作,之后再补
1. 数据库基本概念
数据库:DataBase 简称:DB, 是用于存储数据的仓库
特点:
1. 持久化存储数据, 其实数据库就是一个文件系统
2. 方便存储和管理数据
3. 使用了统一的方式来操作数据
常见的数据库软件:
Oracle
MySQL
SQL_Server
DB2
...
2. MySQL数据库软件
1. 安装
2. 卸载
3. 配置
MySQL服务:开启 net start/stop mysql
3. SQL学习
4. mysql 登录和退出
1. mysql -uroot -ppassword
a mysql -h[ip] -uroot -ppassword
2. 退出 exit
5. SQL:结构化查询语言
定义了操作关系型数据库的语句可以单行或者多行书写,一规则
通用语法
1. SQL可以单行或多行书写,以分号结尾
2. mys查询语言ql SQL语句不区分大小写, 但是关键字建议大写
3. 注释: -- 注释内容,# 注释内容
多行注释:/**/
5.1 SQL分类
DDL:数据库定义语言 CRUD
操作数据库,表
DDL:操作数据库
Create:创建
创建数据库:
create database [数据库名字];
create database if not exists [数据库名字]; 如果数据库不存在则创建
create database db3 character set gbk; 创建数据库并且设置编码格式
create database if not exists db3 character set gbk; 上面两条连一起
Retrieve:查询
查询所有数据库名称
show databases;
show create database 数据库名称:查询某个数据库的创建语句
Update:修改
修改数据库的字符集
alter database [数据库名称] character set 字符集名称;
Delete:删除
删除数据库
drop database [数据库名称];
create database if exists [数据库名字]; 如果存在才删除
使用数据库
查询正在使用的数据库
select database();
使用数据库
use database();
操作表:
Create:创建
创建表:
1. 语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
列名3 数据类型3,
...
列名n 数据类型n
);
最后一列,一定不要逗号;
数据库的数据类型
1. int: 整数类型
2. double: 小数类型
* score double(5, 2), -- 一共五位,小数点后两位
3. date:只包含年月日,yyyy-mm-dd
4. datetime:日期包含年月日时分秒
yyyy-mm-dd HH:mm:SS
5. timestamp:时间戳类型,不给它赋值或者赋一个空值,
则默认使用当前的系统时间
6. varchar:字符串
* name varchar(20); 最大二十个字符
2. 复制表:
create table [目标表] like [母表];
Retrievve:查询
show tables;
查询表结构
desc 表名;
Update:修改
1. 修改表名
alter table [表名] rename to 新的表名;
2. 修改表的字符集
查看字符集:
show create table [表名];
修改字符集:
alter table [表名] character set [目标字符集]
3. 添加一列
alter table [表名] add [列名] [数据类型];
4. 修改列名称 类型
alter table [表名] change [被修改列] [修改后列名][数据类型];
alter table [表名] modify [被修改列] 类型; -- 这个只改类型
5. 删除列
alter table [表名] drop [列名];
Delete:删除
删除表:drop table [表名];
drop table if exists [表名];
DML:数据库操作语言
增删改表数据
添加数据:
语法:insert into [表名](列名1, 列名2, ,,, 列名n) values(值1, 值2, ,,, 值n);
注意:1. 列名和值得一一对应
2. 列名不写,就是给所有项添加
3. 除了数字,其他的都需要引起来
删除数据:
delete from [表名] [where 条件];
不写条件 删除表中的所有数据
TRUNCATE TABLE [表名];
将表删除,重新创建新的表--》推荐
修改数据
update 表名 set 列名1 = 值1, 列名2 = 值2 ,,, 列名n = 值n [where 条件];
注意:不加条件那就全改了
DQL:数据库查询语言
查询表中数据
1. 全 select * from [表名];
2. select
字段列表
from
表名
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
基础查询:
1. 多字段查询
select [列名1, 列名2, ,,, 列名n] from [表名];
2. 去除重复
select distinct [列名1, 列名2, ,,, 列名n] from [表名];
3. 计算列
select [列名1, 列名2, ,,, 列名n] [列名1 + 列名2 + , ,,, 列名n] from [表名]; -- 求和为例子
注意:null 参与的计算结果都为 null
select [列名1, 列名2, ,,, 列名n] [列名1 + IFNULL(列名2, 0) + , ,,, 列名n] from [表名]; -- 求和为例子
这里使用了IFNULL 如果为NULL则使用0参与运算
select [列名1, 列名2, ,,, 列名n] [列名1 + IFNULL(列名2, 0) + , ,,, 列名n] AS [别名] from [表名]; -- 求和为例子
4. 起别名
条件查询
1. where 子句后跟条件
2. 运算符
* >, <, <=, >=, =(不是 ==), <>(不等于 != 也可以)
* BETWEEN ... AND
SELECT * FROM stu WHERE age BETWEEN 20 and 30;
* IN(集合)
SELECT * FROM stu WHERE age = 20 or age = 30;
这两句是一样的
SELECT * FROM stu WHERE age IN (20, 30);
* LIKE'张%' 模糊查询
占位符:
_:单个任意字符
%:任意多个字符
SELECT * FROM stu WHERE name LIKE '马%';
* IS NULL 查询某一列为空不可以用=NULL
SELECT * FROM stu WHERE name IS NULL;
SELECT * FROM stu WHERE name IS NOT NULL;
* and/&&, or 或 ||, not 或 !
3. 查询语句
1. 排序查询
语法: order by 子句
order by 排序字段1 排序方式1, 排序字段2 排序方式2 ...
注意:排序方式 ASC:升序, 默认。
DESC降序
地儿排序条件只有第一个条件一样的时候才会去使用
2. 聚合函数
将一列数据作为一个整体,进行纵向的计算
1. count:计算个数
SELECT COUNT(列名) FROM [表名];
SELECT COUNT(*) FROM [表名]; -- 只要有非空的项就算一列
2. max:计算最大值
3. min:计算最小值
4. sum:计算和
5. avg:计算平均值
注意:聚合函数的运算,会排除NULL
解决:选择不包含非空的列
使用IFNULL()
3. 分组查询
语法: group by 分组字段;
注意:分组之后查询的字段:分组字段/聚合函数
例如:
SELECT sex, AVG(math) FROM student3 GROUP BY sex;
SELECT sex, AVG(math), COUNT(id), MAX(math) FROM student3 WHERE math > 70 GROUP BY sex;
加了个条件 --》 大于70分的参与分组
SELECT sex, AVG(math), COUNT(id), MAX(math) FROM student3 WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
HAVING COUNT(id) > 2:只看数量大于2的分组的数据
总结 where: 在分组之前进行限定,如果不满足条件,则不参与分组,
where 后不可以跟聚合函数
Having在分组之后限定,不满足条件,则不显示查询结果。
4. 分页查询
语法:limit 开始的索引, 每页查询的条数;
SELECT * FROM student3 LIMIT 0, 3;
SELECT * FROM student3 LIMIT 3, 3;
开始的索引 = (当前的页码 - 1) * 每页的条数
注意:limit操作是一个mysql"方言"