1.0数据库
1.1数据分类
数据库就是一个存放计算机数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来对数据进行组织和存储的,我们可以通过数据库提供的多种方法来管理其中的数据。
1.1.1关系型数据库
-
定义:定义:建立在关系模型上的,简单理解为,遵循sql语言的,关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 mysql使用广泛的数据库,开源,免费著称
-
sql server 微软出的,在微软的项目中用的多
-
Oracle 适合大型项目,有钱公司用的,适合银行、电信、国企等、
-
sqlite 轻量级数据存储(移懂设备)主要应用在移动是设备(手机。
-
postgresql 优点:
1、易于维护:都是使用表结构,格式一致
2、使用方便:SQL语言通用,可用于复杂查询
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写
2、固定的表结构,灵活度稍欠
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
1.1.2非关系型数据库
- 非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等
redis 存储(存储一些不是特别重要的数据
mingodp 缓存 (华为用的多)类字典类型
{‘name’:‘张三’,‘age’:18}键和值得关系
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘
3、高扩展性
4、成本低:nosql数据库部署简单,基本都是开源软件
缺点:
1、不提供sql支持,学习和使用成本较高
2、无事务处理
3、数据结构相对复杂,复杂查询方面稍欠
1.1.3 实时数据库
- firebase
1.1.4( 关系型数据库模型)RDBMS模型
RDBMS :relationl databse managment system RDBMS_client :客户端 RDBMS_serve:服务器
-
多条测试用例 -- > 工作蒲 -->多个工作蒲 --> excel文件
-
每一条数据 --> 数据表 --> 多张数据表 --> 数据库(不能同名)(见名知意)
-
数据库排名
1.2 SQL语法
- 数据库原生语句
DQL (查询语句:select* from )
1.2.1、1DQL(数据查询语言)
- 用于对数据的查询select查询
# 查看数据库
show databases like('数据库名称'):
#使用数据库
use 数据库名字
# 查看当前使用数据库
select datatase(数据库名称)“
# 查看当前时间
#查看当前系统的时间和日期
SELECT NOW();
SELECT TIME('年-月-日 时:分:秒');
SELECT TIMESTAMP('年-月-日 时:分:秒');
SELECT YEAR('年-月-日 时:分:秒');
SELECT MONTH('年-月-日 时:分:秒');
1.2.2、DML (数据操作语言)
用于对于数据的增加,修改 、删除
- insert(增加) update (修改) delete(删除)
ALTER TABL 表名 ADD 字段 VARCHAR(字符几位);
# 修改字段,已经存在的字段
ALTER TABLE 表名 CHANGE 原字段 新字段 INT UNIQUE; #改名字
ALTER TABLE 表名 MODIFY 新字段 VARCHAR(字符几位) NOT NULL UNIQUE; #改数据类型
# 进行操作删除指定列
ALTER TABLE 表名 DROP 字段
SHOW TABLES;#展示表
DROP TABLE 表名;#删除表
DROP DATABASE IF EXISTS 表名;如果有这个表就删除
DESC 表名;#查看表结构
- 插入数据
方法一:全列插入
insert into 表名 value/values(数据的顺序必须按照字段的数据)
方法二:
insert into 表名(字段一,字段2)values/value(字段对应的值)
注意点: 如果是自增字段,可以不写,或者用null值来进行填充
- 更新数据
update 表名 set 字段名=值,字段名=值……where 条件定位
注意点:如果不定位会出现当前表的指定字段全部被修改
- 删除数据
delete from 表名 where 条件定位
1。2.3、 TPL (事务处理语言)
一组操作,要么全部成功,要么全部失败
commit(成功) rollback(失败) 可视化工具尽量少用
1.2.4 DCL(数据控制语言)
权限 权限的授权与收回
1.2.5 DDL (数据定义语言)
进行创建数据库,数据库表
修改
- 指针控制语言
- 通过控制指针完成表的操作
- 创建表 CRATE DATABASE IF NOT EXTSTS 数据库 CHARSET=utf8 create database 数据库名字 charset=编码方式:
- 创建数据库
create dabase a charet=utf8
- 创建一个名为a的数据库
show databases
显示mysql中所有数据库的名称
- 使用数据库
use 数据库名字
**USE** 语句用来完成一个数据库到另一个数据库的跳转。
use
- 查看当前数据库
select database():查看当前数据库
select database():查看数据库
select version():查看数据库版本
select now():查看数据库当前时间
1.2.6(指针控制语言)
通过控制指针完成表的操作
- 在已经存在的表加上指定的字段
- ALTER TABLE userinfos ADD
2.6.2 创建表
// 创建一个名为 userinfos 的表
CREATE TABLE userinfos(
id INT UNSIGNED PRIMARY KEY,
username VARCHAR(100),
age TINYINT,
gender TINYINT,
phone VARCHAR(11)
)
2.6.3 数据类型
类型 字节大小 案例
char 0-255 char(3),'abcd'-->'abc','adc'-->'abc','ab'-->'ab'
varchar 0-255 varchar(3)"abcd"--->"abc","abc"--->"abc","ab"--->"ab"
text 0-65535 大文本,一般大于4000字节用它
- char和varchar的区别:
1、占据空间不同:char的长度是不可变的,而varchar的长度是可变的
2、存取速度不同:char的存取数度比varchar要快得多,因为其长度固定,方便程序的存储与查找
3、存储方式不同:char的存储方式是对英文字符占用1个字节,对汉字占用两个字节,而varchar的存储方式是对每个英文字符占用2个字节,汉字也占用2个字节
2.6.4 数字
类型 字节 有符号数 无符号数
- int 4
- tinyint 1 -128-127 0-255
- BIGINT 8
- SMALLINT 4
tinyint :小整数,范围
2.6.5 约束
- 约束类型
- primary key 主键 物理位置的唯一性
- notnone 非空
- unique 唯一值
- check 检查
- 约束类型:将数据的内容做约束
- 字段约束
- 约束在定义的过程中,在字段数据类型后直接定义
- 表级约束
字段约束:约束在定义的过程中,在字段数据类型后直接定义 表级约束:是定义在业务类型为表上的约束,例如主键、外键等约束
| 主键 | 外键 | |
|---|---|---|
| 定义 | 唯一标识一条记录,不能有重复的,不允许为空 | 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 |
| 作用 | 用来保证数据完整性 | 用来和其他表建立联系用的 |
| 个数 | 主键只能有一个 | 一个表可以有多个外键 |
2.7 指针控制语言
通过控制指针完成表的操作
2.8 数据库表字段的问题(重点)
- 表字段的操作
alter table 表名 add 字段名字 数据类型和约束 #添加
alter table 表名 change 原来的名字 新的字段名 数据类型和约束 重新命名版本 #修改
alter table 表名 modify 原来的字段名 类型和约束 只修改数据类型和约束 #稍作修改
alter table 表名 drop 字段名 #删除
DML
- 插入数据
方法1:全列插入
insert into表名 value/values(数据的顺序必须按照字段的顺序)
方法2:
insert into 表名(字段1,字段2)values/value(字段对应得值)
注意点:
如果是自增字段,可以不写,或者用NULL来进行填充
insert into 表名 values/value(数据的顺序必须按照字段的数据)
注释:向数据库表中增加一条数据
- 更新
update 表名 set 字段名=值,字段名=值... where 条件定位
注意点:
如果不定位,会出现当前表得指定字段全部被修改
-删除
delete from 表名 where 条件定位
drop database if exists 表名
软删除:非物理、逻辑删除
硬删除:物理意义上的删除
2.1创建数据库
- 语法规则
careate database 数据名字 charset=编码方式
- CREATE DATABASE newdb CHRSET =utf8(全选中按f9)
- CREATE DATABASE IF NOT (查询)newdb CHRSET =utf8:添加if增加融错性 (如果newdb不存在我就新建一个)
- 例:
-
IF 条件成立:
-
成立
-
如果明天不下雨(伪代码)
-
就去上班
-
如果明天下雨
-
家里躺尸
-
fi(‘如果明天不下雨,‘
select#执行 if(’明天下雨‘,‘家里躺’,‘上班’)
如果明天不下雨(伪代码)
if明天不下雨
就去上班
else:
家里躺尸
if 如果明天下雨
家里躺尸
select#执行 if(’明天下雨‘,‘家里躺’,‘上班’)
2.2删除数据库
-
1064(语法错误)
-
trop database nemdb:(全部选中按f9 )
-
trop database if exists nemdb:
2.3 创建用户表
- 列
-
姓名
-
年龄
-
性别
-
手机号
-
create(表明)table userinfos
普通版
creat table userinfos
id int unsigned primary key :标注
usename varchar(100),
age tinyint, # tinyint #(小整数)
gender tinyint,
phone vrchar(11)
show tables:(选中按f9)
drop table userinfos
进阶版
creat table userinfos
id int unsigned primary key :标注
usename varchar(100),
age tinyint, # tinyint #(小整数)
gender tinyint,
phone vrchar(11)not null unique
show tables:(选中按f9)
-
数据库三范式
-
第二范式:一个表至少有一个主键
住建:标注这每一条数据的唯一性,标记他的物理位置的唯一性
2.4字符类型
| 类型 | 字节大小 | 案例 |
|---|---|---|
| cher | 0-255 | cher(3),'abcd'--'abc','qwer'--'qwe' |
| varchar | 0-255 | varxher(3).'asdf'---'asd' |
| text | 0-65535 | 大文本,一般大于40000个字节可以用 |
2.5数字
int() 函数是整数数据类型的[数据]是表示某种数学[整数]
| 类型 | 字节 | |
|---|---|---|
| int | 4 | |
| tinyint | 1 | 有符号-128到127,无符号0-255 |
| bingints | 8 | |
| smallint | 2 |
-
有符号2**3
-
无符号2**
2.6约束
2.6.1约束
| primary key | 住建 | 物理位置的唯一性,标记储存顺序 |
|---|---|---|
| not null | 非空 | |
| unique | 唯一值 | |
| mul | 外键 | |
| check | 检查 | 在MySQL5.0 版本不生效 |
2.6.2 约束类型
- 2.6.2.1字段约束
约束在定义的过程,在字段数据类型后直接定义
- 2.6.2.
两张表链接起来用id链接
2.4约束
2.4.1约束
| primary key | 住建 | 物理位置的唯一性,标记储存顺序 |
|---|---|---|
| not null | 非空 | |
| unique | 唯一值 | |
| mul | 外键 | |
| check | 检查 | 在MySQL5.0 版本不生效 |
2.4.2 约束类型
- 2.4.2.1字段约束
约束在定义的过程,在字段数据类型后直接定义
- 2.4.2.2.
两张表链接起来用id链接
3、字段的操作
修改字段 、修已经存在的字段
alter table userinfos change phone mobile int unique
-
alter table userinfos modifymobile varchar (11) uto null unique
进行操作删除指定列表
alter table userinfos dropaddress
字段的操作
alter table 表明 add 字段名字 数据类型和约束
alter table 表明 change 原来字段名 新的字段名 数据类型 和约束 重新命名版本
alter table 表明 modtfy原来的字段名 类型和约束 只修改数据类型和约束
alter table 表明 drop 字段名
**地址(是表和表的关系) **(一对多关系)
地址表
id
具体信息
练习方式
收件人信息
create table addresses(
id intunsigned frimary key,
addre varchar (200) not null,
phone vachar (11) not mull,
re_name varchar (20)
)
重要
- 表字段操作
- alter table 表名 add 字段名字 数据类型和约束
- alter table 表名 chang 原来的字段名 ,新的字段名 数据类型合约束,重新命名的版本名
- alter table 表名 modify 原来的字段名,类型和约束,只修改数据类型和约束
- alter table 表名 drop 字段你名
3.0 DML 语言
- besc userinfos
-
数据表中增加一条数据
- insert into userinfos values(2,'张三‘,12,0,131111111111112):
- select*from userinfos:
- insert into userinfos value((2,'张三‘,12,0,131111111111112)
- select*from userinfos:
-
3.1插入数据
-
方法一:
- insert into 表明 value/ values(数据的顺序必须按照字段的顺序)
-
方法er:
- insert into 表明 (字段1,字段2)values/ value(字段对应的值
-
注意:
- 如果是自增字段 可以不写 或者用NULL 进行填充
-
修改数据
-
update userinfos set gender=2(这一条全部更新)
-
update userinfos set gender=1 where (这是给她一个量)id=2 (这是更新一条数据)
-
需求
-
张二的年龄是28的男生
- update userinfos set age=28 , gender=0 where id=3
-
-
3.2更新
-
update 表明 set 字段名=值,字段=值... where 条件定位
-
注意点:
- 如果不定位,会出现当前指定的字段全部被修改
-
-
3.3 删除
- 需求
- 删除所有id>10 的用户id大于10
- delete from userinfos where id>10:(先定位)
-
软删除 、硬删除
- 硬删除:物理意义上的删除
- 软删除:非物理,逻辑删除
- delete form 表明 where 条件定位
-
向boys表中添加数据
-
desc boys:
-
insert into boys values( 5,’杨洋‘,0)
-
insert into boys values( 0,’陈伟霆‘,0)(自正自检用0)
- insert into boys values (’杨洋‘,0)
- insert into boys values (hull,’杨洋‘,0)hull浪值
- insert into boys
- 查id
- select *from boys:
-
4、查询
-查询su select *from boys:
DQL
5.1查询所有的字段
select*from boys;
select * from 加字段名
5.2查询指定的字段
select 字段名1 as 别名.......from 表名
给字段起名
select 字段名1 as 别名,字段名2别名2.....from 表名、
注意点
- 关于去别名的问题 as 可以省略也可以写
5.3去重操作
select distinct brabd_id from tp_good
- 关键字
- distinct
5.4 条件筛选
select 指定字段 from 表名 where 条件
5.5排序
- select*from 表面 order by 字段 desc|asc ,字段2 desc|sasc
desc 升序
asc 降序
5.6 分页
select 字段 from 表名 limit 位置,个数
5.7聚合统计
count 统计个数 sum 求和 avg 平均值 max 最大值 min 最小值
5.8 分组
select 分组依据(分组字段名),gorup_concat (需要展示的字段名1......) from 表名 group by 字段名
5.9 where having
-
where :在原始的数据上进行条件筛选
-
having :分组后的条件筛选
-
or 或
-
and 和
-
拓展
-
拼接字符穿
select substra(‘asd12’,1,2)
-
切割字符串,冲一开始
-
select lengtb (‘asdfgg')
-
字符串长度
-
select insert(’asd‘1,2,’qwe‘)
替换
SELECT INSERT('asd',1,1,'qwe')#替换 这是按条件替换 SELECT INSERT('asd',1,0,'qwe')
SELECT TRIM(' asdff')#去空格
SELECT LTRIM(' asd ')#去两边空格
SELECT RTRIM(' asd ')#去前面空格
SELECT REPLACE('asd123','2','qwe')# 替换 吧2换成qwe
格式
case 字段
when 表达式1 ihen 输出值1
when 表达式 2 ihen 输出值2
.。。。
else 输出值
end
- 用例
SELECT last_name,job_id AS job, CASE job_id WHEN 'ad_pres' THEN 'a' WHEN 'st_man' THEN 'b' WHEN 'sa_rep' THEN 'd' WHEN 'st_clerk' THEN 'e' END AS grade FROM employees
-
拓展 SELECT ROUND(1.234)#取整
SELECT ROUND(1.234,2)
SELECT ROUND(1.5)
SELECT TRUNCATE(1.2344,3)#阶段 截断1.2344的小数点的3为以后
SELECT MOD(4,3) #除法 4除以3
INNER JOIN左连接
LEFT JOIN 右连接