1.数据库的基本概念
(1)数据库(DataBase):用于存储和管理数据的仓库。
(2)数据库的特点:
- 持久化存储数据的。其实数据库就是一个文件系统
- 方便存储和管理数据库
- 使用统一的方式操作数据库—>SQL
(3)常见的数据库软件
2.MYSQL数据库软件
MYSQL服务启动与关闭
1.手动
2.cmd—>services.msc
3.管理员运行cmd窗口
net start mysql 开启MySQL服务
net stop mysql关闭MySQL服务
4.MySQL登录
mysql -u用户名 -p密码
mysql -hip -u用户名 -p连接目标的密码
5.MySQL的退出
exit
quit
6.MySQL目录结构
MySQL安装目录:配置文件 my.ini
MySQL数据目录:数据库—>文件夹;表—>文件;数据—>数据
3.什么是SQL
1.什么是SQL?
结构化查询语言:定义可以操作所有的关系型数据库(Relational DBMS)的规则
2.SQL通用语法
-
SQL语句可以单行或者多行书写,以分号结尾。
-
可以使用空格和缩进来增强语句的可读性。
-
MySQL不区分大小写,建议使用大写来书写。
-
三种注释
单行注释:- - 注释或者# 注释内容(MySQL独有)
多行注释:/注释/
3.SQL分类
- DDL(操作数据库、表)
- DML(增删改表中的数据)
- DQL(查询表中的数据)
- DCL(授权)
4.DDL(操作数据库、表)
1.操作数据库:CRUD
-
C(Create):创建
create database 数据库名称;-- 创建一个数据库 create database 数据库名称 character set 字符集格式;-- 创建一个数据库,设定字符集 create database if not exists 数据库名称;-- 判断是否有数据库,没有在创建 create database if not exists 数据库名称 character set 字符集格式;-- 不存在数据库则创建,设定字符集
-
R(Retrieve):查询
show databases;-- 查询所有数据库的名称 show create database 数据库名称;-- 查询某个数据库的字符集
-
U(Update):修改
alter database 数据库名称 character set 字符集的格式;-- 修改数据库的字符集格式
-
D(Delete):删除
drop database 数据库的名称;-- 删除数据库 drop database if not exists 数据库名称;-- 判断数据库是否存在,存在删除数据库
-
使用数据库
select database();-- 查询当前正在使用的数据库 use 数据库的名称();-- 使用该数据库
2.操作表
-
C(Create):创建
create table 表名( 列名1 数据类型1, 列名2 数据类型2, ..... 列名3 数据类型3 )-- 创建表 create table 表名 like 被复制的表名-- 复制表
(1)int :整数类型
age int,
(2)double:小数类型
score double(5,2)
(3)date:日期,只包含年月日,yyyy-mm-dd
(4)datatime:日期,包含年月日时分秒,yyyy-mm-dd HH:mm:ss
(5)timestamp:时间戳类型 包含年月日时分秒 yyyy-mm-dd HH:mm:ss
如果将来不给这些字段赋值,或者赋值为null,则默认使用当前的系统时间。
(6)varchar:字符串
name varchar(20):名字最大20字符
zhangshan 8个字符 张三 2字符
-
R(Retrieve):查询
show tables;-- 查询所有表的名称 desc 表名;-- 查询表的结构
-
U(Update):修改
alter table 表名称 rename to 新的表名;-- 修改表的表名 alter table 表名称 character set 字符集的格式;-- 修改表的字符集 alter table 表名称 add 列名 数据类型;-- 添加一列 alter table 表名 change 列名 新的列名 新数据类型;-- 修改列名称和数据类型 alter table 表名 modify 列名 新数据类型;-- 修改列数据类型
-
D(Delete):删除
alter table 表的名称 drop 列名;-- 删除表中的一列
5.DML:增删改表中的数据
1.添加数据:
语法:
insert into 表名(列名1,列名2,...,列名n)values(值1,值2,...,值n);-- 添加数据
注意:
1.列名和值要一一对应
2.如果表名后,不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,...,值n);-- 添加数据
3.除了数字类型,其他类型需要使用''或“”都可以。
2.删除数据:
语法:
delete from 表名 [where 条件];-- 删除该条件数据
delete from 表名;-- 删除表中所有记录(效率低)
truncate table 表名;-- 删除表,然后再创建一个一摸一样的空表(效率高)
注意:
1.如果不加条件,则删除所有数据。
2.delete from 表名;是一条一条数据删除,效率低。
3.修改数据
语法:
update 表名 set 列名1=值1,列名2=值2,...[where 条件]-- 修改where条件中的数据
update 表名 set 列名1=值1,列名2=值2,...-- 不加where条件,更改全部数据
6.DQL:查询表中的记录
1.查询语句
select * from 表名;
语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
-
基础查询
-
多字段查询
select 字段名1,字段名2 ...from 表名;-- 多个字段的查询
如果查询所有字段,则可以使用*来代替字段列表
-
去除重复
distinct
-
计算列
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
ifnull(表达式1,表达式2):null参与的计算,计算结果都为null
表达式1:哪个字段需要判断是否为null
如果该字段为null后的替换值
-
起别名
as:as也可以省略
-
-
条件查询
-
where子句后跟条件
-
运算符
并且 && and
或者 || or
is null 查询是否为null
-
like 模糊查询
%多个字符
_单个字符
-
-
排序查询
语法:
order by 子句
order by 排序字段1 排序方式1,排序字段2,排序方式2 ...;
排序方式
ASC:升序,默认的。
DESC:降序
-
聚合函数
将一列数据作为一个整体,进行纵向的计算。
count:计算个数
一般选择非空的列:主键
count(*)只要一行的所以列都不为null,就算1
max:计算最大值
min:计算最小值
sum:计算和
avg:计算平均值
聚合函数的计算会排除null值
select MAX(列的名称) from 表的名称;-- 计算该列的最大值
-
分组查询
1.语法:group by 分组字段
select sex,AVG(math),count(id) from 表的名称 group by 分组字段;
where 和 having的区别?
where在分组之前进行限定,如果不满足条件,则不参加分组。having在分组之后进行限定,不满足结果不会被显示。
-
分页查询
语法:limit
select * from 表名称 limit 0,3;-- 第一页 select * from 表名称 limit 3,3;-- 第二页
—公式:开始的索引=(当前的页码-1)*每页显示的条数
分页操作是一个“方言”
2.约束
概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。
分类:
-
主键约束:primary key
-
非空约束:not null,值不能为null
- 在创建表时添加约束
CREATE TABLE student1( id INT, NAME VARCHAR (20) NOT NULL );-- name为非空 ALTER TABLE student1 MODIFY NAME VARCHAR(20);-- 删除非空约束
- 创建表完后,添加非空约束
ALTER TABLE student1 MODIFY NAME VARCHAR(20) NOT NULL;-- 创建表完后,添加非空约束
-
唯一约束:unique,值不能重复
create table student2( id int, phone_number VARCHAR(20) UNIQUE )-- 添加了唯一约束 alter table student2 drop INDEX phone_number;-- 删除唯一约束 ALTER table student2 MODIFY phone_number VARCHAR(20) UNIQUE;-- 添加唯一约束
-
主键约束:primary key
含义:非空且唯一
一张表只能有一个字段为主键,主键就是表中记录的唯一标识
create table student2(
id int PRIMARY KEY,
phone_number VARCHAR(20)
)-- 添加了主键
ALTER TABLE student2 DROP PRIMARY KEY;-- 删除主键,不需要指定字段,因为一个表只能一个主键
ALTER TABLE student2 MODIFY id int PRIMARY KEY;-- 创建表后添加主键
自动增长:只跟上一个数字有关系
CREATE TABLE student2(
id int PRIMARY KEY auto_increment,
name varchar(20)
)-- 设置自动增长主键
ALTER TABLE student2 MODIFY id INT;-- 删除自动增长
ALTER TABLE student2 MODIFY id int auto_increment-- 添加自动增长;
5.外键约束:foreign key让表与表产生关系,从而保证数据的正确性。
1.在创建表时,可以添加外键
create table 表名(
...
外键列
constraint 外键名称 foreign key 外键列名称 references 主表名称(主表列名称)
);
2.删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键列名称;-- 删除外键
3.添加外键
ALTER TABLE 表名 **ADD CONSTRAINT 外键名称 FOREIGN KEY 外键字段** references 主表名称;