数据库详解

一、数据库

1.1、概念

数据库就是存储数据的仓库

数据库可以实现数据的持久化存储

数据库的本质就是文件系统

1.2、DBMS

DBMS:Database Management System,数据库管理系统

常见的DBMS(关系型数据库):

  1. mysql
  2. oracle
  3. db2
  4. sqlserver
  5. sqlite

注:

  1. 所有关系型数据库的结构都是表结构
  2. 所有关系型数据库都通用sql语言
1.3、数据库的结构

一个数据库管理系统可以维护管理多个数据库

一个数据库中包含多个张表

一张表中包含若干条记录

一条记录包含多个字段

1.4、mysql的基本操作

登录数据库:

  1. 打开命令提示符:win+r
  2. 输入:cmd,回车
  3. 输入:
    1. mysql -uroot -p密码
    2. mysql -uroot -p,再输入密码

退出:

方式1:ctrl + c

方式2:quit

方式3:exit

二、SQL语言

2.1、概念和分类

sql:structured query language,结构化查询语言

分类:

  1. DDL:数据定义语言,用于对数据库、表进行操作

    关键字:createdropalter

  2. DML:数据操作语言,用于对数据库表中的记录进行增删改

    关键字:insertdeleteupdate

  3. DQL:数据查询语言,用于查询数据库

    关键字:selectfrom

  4. TCL:事务控制语言,用于控制事务

    关键字:commitroll back

关键字:已经预先定义好的,具有特殊含义的单词

2.2、库的操作
-- 1.查看有哪些数据库
show databases;
-- 2.创建数据库
create database 库名;
-- 3.先判断数据库是否存在,不存在才创建
create database if not exists 库名;
-- 4.删除数据库
drop database 库名;
-- 5.先判断数据库是否存在,存在才删除
drop database if exists 库名;
-- 6.使用指定的数据库
use 库名;
2.3、表的操作
-- 1.查询所有表
show tables;
-- 2.创建表
create table 表名(字段名 字段类型, 字段名 字段类型, ...);
-- 3.删除表
drop table 表名;
-- 4.查看表结构
desc 表名;
-- 5.修改表名
alter table 旧表名 rename to 新表名;
-- 修改表结构
-- 1.添加新字段
alter table 表名 add 新字段 字段类型;
-- 2.删除字段
alter table 表名 drop 字段名;
-- 3.修改字段类型
alter table 表名 modify 字段名 字段类型;
-- 4.修改字段名
alter table 表名 change 旧字段名 新字段名 字段类型;
2.4、记录和字段的操作
2.4.1、添加记录:
-- 1.添加一条记录,为所有字段添加数据

insert into 表名 values(值1,值2,值3....);

-- 2.添加一条记录,为指定字段添加数据

insert into 表名 (字段1,字段2,字段3...values(值1,值2,值3....);

-- 3.批量添加(所有字段)

insert into 表名 values(值1,值2,值3....),(值1,值2,值3....),(值1,值2,值3....),...-- 4.批量添加(指定字段)

insert into 表名 (字段1,字段2,字段3...values(值1,值2,值3....),(值1,值2,值3....),(值1,值2,值3....),...

注意:

1.值的数据和字段的数量必须一致

2.值的类型必须与字段的类型一致

3.字符串类型的值,必须用单引号或者双引号括起来

2.4.2、删除来记录:
--1.删除表中的所有记录
delete from 表名;
truncate table 表名;
--2.根据条件删除表中记录
delete from 表名 where 条件;  (多个条件用 and&&(并且)) 连接, between... and...,空值(null)用is

注意:

delete from 表名 和 truncate table 表名都可以用来删除表中所有记录,但是区别是 delete from 表名 在删除所有记录中的每一行记录逐行删除;而 truncate table 表名 是将整个表全部删除,然后构建一个与原始表结构相同的一张新表。

2.4.3、修改记录:
--1.修改表中所有记录的指定字段
update 表名 set 字段名1 =,字段名2 =, ... ;
--2.修改表中指定记录的指定字段
update 表名 set 字段名1 =,字段名2 =, ... where 条件;
2.4.4、查询记录:

1.基础查询

--1.查询表中的所有记录
select * from 表名;
* 是通配符表示查询所有列
--2.查询表中所有记录的指定字段
select 字段1,字段2,字段2, ... from 表名;
--3.去重查询
select distinct 字段名 from 表名;

2、条件查询

select 字段列表 from 表名 where 条件;

关系(比较)运算

>,<,>=,<=,=
!= 不等于
<> 不等于

逻辑运行算

与:并且 &&  and
或:或者 ||  or

指定范围内

between...and...

注意:含头含尾

指定列表中

in(值1,2,3,...

不在指定列表中

not in(值1,2,3,...

3、模糊查询

like '模糊查询的内容'

占位符:

1.%:表示任意个任意字符

2._:表示单个任意字符

4、排序查询

order by 字段名 排序方式

排序方式:

1.升序:asc,默认排序方式

2.降序:desc

多个字段排序,只有前一个字段相同时,才会根据后一个字段再进行排序

order by 字段名1 排序方式,字段名2 排序方式

5、聚合函数

将一列作为整体进行纵向计算

--平均值
avg()
--总和
sum()
--最大值
max()
--最小值
min()
--个数
count()

注意:

1、where 条件后不能使用聚合函数

2、聚合函数不计算null值

3、count()统计个数时,一般使用*

6、分组查询

group by 字段名
-- 表示以指定的字段进行分组

注意:

1.分组查询的字段只能是:分组字段和聚合函数

2.分组查询后对查询结果再进行条件筛选需要使用 having,having 用在分组之后

where 跟 having 的区别:

1.where 后不能使用聚合函数,having 后可以使用聚合函数

2.where 用在分组前的条件,满足where条件的进入分组,不满足where条件的不进入分组;having用在分组后的条件,满足having的能被查询到,不满足having的不被查询到

7、分页查询

limit 开始索引 , 每页显示的记录数
--索引:序号,从0开始

开始索引=(页码-1)*每页显示的记录数

总页数

1、能整除:总页数=总记录数 / 每页显示的记录数;

2、不能整除:总页数=总记录数 / 每页显示的记录数 + 1;

8、查询语句的结构

select 
	字段列表
from
	表名
where
	条件
group by
	分组字段
having
	条件
order by
	排序字段 排序方式
limit
	开始索引 , 记录数

9、多表查询

1、交叉查询

select 字段列表 from1,表2,...;

注:交叉查询的结果是笛卡尔积,查询的结果是两张表所有记录的组合情况;表1中有n条记录,表2中有m条记录,查询结果有m*n条记录;这样的查询结果有许多无效数据,需要加上有效条件来去除无效数据

2、内连接

内连接是在交叉查询的基础上添加两张表的连接条件

-- 92语法,隐式内连接
select 字段列表 from1,表2,... where 连接条件;  
-- 99语法,显式内连接
select 字段列表 from1 inner join2,... on 连接条件;
注:
	1inner可以省略
	2、内连接查询是两张表的交集

3、外连接

--左外连接
select 字段列表 from1 left outer join2 on 连接条件 where 其他条件
--右外连接
select 字段列表 from1 right outer join2 on 连接条件 where 其他条件

注:

​ 1、outer 可以省略

​ 2、左外连接查询结果是左表的全部和两表的交集;右外连接查询结果是右表的全部和两表的交集;

10、约束

对表中字段值的限制

分类:

1、非空约束

关键字:not null

限制了字段值不能为空

--1.建表时,添加非空约束
create table 表名(字段名 字段类型 not null,字段名 字段类型,...;
--2.建表后,添加非空约束
alter table 表名 modify 字段名 字段类型 not null;

注:已经存在空值的字段不能修改成非空

2、唯一约束

关键字:unique

限制了字段值不能重复

--1.建表时,添加唯一约束
create table 表名(字段名 字段类型 unique ,字段名 字段类型,...;
--2.建表后,添加唯一约束
alter table 表名 modify 字段名 字段类型  unique;

注:

​ 1、已经存在重复值的字段不能修改成唯一的

​ 2、一个字段可以同时设置成非空、唯一的,非空和唯一的关键字顺序任意

3、主键约束

关键字:primary key

主键约束是一条记录的唯一标识

特点:

​ 1.非空且唯一

​ 2.一张表只能有一个主键字段

--1.建表时,添加主键约束
create table 表名(字段名 字段类型 primary key ,字段名 字段类型,...);
create table 表名(字段名 字段类型 ,字段名 字段类型,字段名 字段类型,... , primary key(字段名) );
--1.建表后,添加主键约束
alter table 表名 modify 字段名 字段类型  primary key;

主键自增长:

create table 表名(字段名 字段类型 primary key auto_increment ,字段名 字段类型,...);

注意:

​ 1.只有主键才能自增长

​ 2.主键必须是数值类型的才能自增长

​ 3.添加记录时,自增长的主键值可以为null

​ 1.第一条记录从1开始

​ 2.其他记录从存在过的最大值开始+1

11、函数

概念:将一组逻辑语句封装在方法体中,对外暴露方法名

好处:

​ 1.提高了代码的复用性

​ 2.隐藏了功能的实现细节

调用:select 函数名(参数列表)from表名

1、字符(串)函数

--*1.length():返回的是指定字符串的字节数,gbk编码下一个汉字占两个字节,utf8编码下一个汉字占三个字节

--2.concat():将多个内容拼接
select concat(last_name,first_name) from employees

--3.upper()大写,lower()小写
select concat('我叫',upper(last_name),',我的邮箱是',lower(email)) from employees

--*4.substr():截取
select substr('abcdefg',2) --bcdefg
select substr('abcdefg',2,3)  -- 3代表长度

--*5.instr(a,b):返回b在a中第一次出现的位置,a中不存在b,返回0
select instr('abcdefg','b')  --2

2、数学函数

--1.round():四舍五入
select round(-1,5)  --  -2

--2.truncate():保留指定的小数位
select truncate2.45673-- 2.456 
select truncate2.45672-- 2.45

--3.ceil():向上取整
select ceil(2.4567-- 3
select ceil(-2.4567-- -2

--4.floor()向下取整
select floor(2.4567-- 2
select floor(-2.4567-- -3

--5.mod() 取模,求余数
select mod(10,-3)
本质:10 % -3
a % b 等价于 a - a / b * b

3.日期函数

--1.now() : 返回当前日期和时间
select now();

--2.curtime():返回当前时间
select curtime();

--3.curdate():返回当前日期
select curdate();

--4.year()
select year(now());  --2022

--5.month()
select avg(salary) ,month(hire_date) from employees group by month(hire_date) order by month(hire_date);

4、其他函数

--1.version() :查询版本
select version();

--2.database() :查看正在使用的数据库
select database();

返回当前日期和时间

select now();

–2.curtime():返回当前时间
select curtime();

–3.curdate():返回当前日期
select curdate();

–4.year()
select year(now()); --2022

–5.month()
select avg(salary) ,month(hire_date) from employees group by month(hire_date) order by month(hire_date);


4、其他函数

```sql
--1.version() :查询版本
select version();

--2.database() :查看正在使用的数据库
select database();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒分、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值