栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据库知识的整理(未完整版)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据库知识的整理(未完整版)

DB分类

1.关系型数据库(支持sql(结构化语言))
mysql(3306)
oracle(1521)
sqlserver(1433)
db2()

  • 关系:
    ①字段间有关系
    ②数据间有关系
    ③表间有关系

2.非关系型数据库
redis

dos命令的数据库

DDL命令:数据库定义语言
手动开启服务器:计算机管理-服务-管理

登录数据库: mysql -uroot -p  
显示所有数据库: show databases;
进入特定数据库:use 数据库名;
查看特定数据库的所有表:show tables;
查看表中内容:select * from 表名;
创建表和内容:create table 表名(
			字段名 字段类型(字段长度),
            字段名 字段类型(字段长度));
DB结构

库
​ ——表
​ ——数据(表格形式)
​ ——行(记录/数据) 列(字段)

信息孤岛

数据库三范式

①字段不可分割(一个字段只能表达一个意思)
②记录不可重复
③一个表只能表示一个实体

eg:user表只记录user的个人信息,show表记录演出时间和人员间的关系

建库 建表: 命名

驼峰式命名/tb_表名/下划线表示法

三键四约束 1.主键

(标识一条数据的唯一性;字段不能重复且不能为空)

SQL语句:
create table cat
(	id int(11),
	name varchar(2));
	
	CREATE TABLE cat1(
	id int(11) PRIMARY KEY, //设置主键
	name VARCHAr(5) NOT NULL//设置非空,非空约束
	);
2.外键
  • A表的某个字段值必须来源于B表的主键值,A表的字段就是外键(此时B表的主键值不能删除)
  • 在建表leave的初始设置外键;
  • 主键才能做别的表的外键,才能被别的表依赖
3.联合主键

(主键的任一键可以相同,但不能同时相同)

4.1非空约束

(不是null):字段不可为空

4.2唯一约束

字段不能重复但可以为空

  • 唯一索引不能出现多个null值,即只能有1个null值
  • 主键与唯一约束的区别
    ①主键不可为null,唯一约束可以允许一个值为null;
    ②主键默认是唯一索引,但唯一索引不一定是主键
    ③主键若为int型,可设自增约束;但唯一不行
    ④主键可作为另一张表的外键来源,
    ⑤唯一约束可以有多个,主键只有一个
索引

(数据库的目录:提高检索效率;占用空间,需要维护;)
1)唯一索引:表的目录
2)全文索引
3)普通索引
4)联合索引

4.3自增约束

(字段得是int型且为主键)
id进行自增约束

4.4默认约束

varchar:(得加英式的单引号‘’)当sex没有被人为赋值,即默认为’男’

字段类型

①int类型:可不写长度
②小数类型:float、double
③char(字符类型):必须提前规定长度
eg:当规定5长度,但实际只用了1,就会浪费空间
④varchar(可变字符类型),必须规定长度
但根据实际情况变化使用空间——一般用于name(因名字长度不一定)
⑤date(日期类型):年月日 ,长度不用写
⑥datetime(日期时间类型):年月日时分秒
⑦text(大文本类型)
id(一般为主键),name,date不可为空

SQL语言

数据持久化

把数据存储到磁盘上;
mysql的数据都是持久化的;redis的数据存在内存空间

SQL语言

漂号:``,起区分作用
navicat中快捷键:ctrl+“++” /鼠标左键+滚动滑轮

导入表

表——导入向导——Excel文件(xls)——选择要导入的xls文件——下一步——复制——下一步——开始

1.数据定义语言DDL

对库和表进行操作

定义库
查看数据库:show databases;
切换数据库:use 库名;
建库:create database 库名;
删库:drop database 库名;
定义表
建表:create table 表名(字段 数据类型(长度) 约束···,字段 数据类型,···,foreign key(外键名) references 另一张表的(主键名));
查看所有表:show tables;
查看表中字段信息:desc 表名;
新增表字段:alter table 表名 add 字段 字段类型;
修改字段数据类型:alter table 表名 modify 字段 字段类型;
删除字段:alter table 表名 drop 字段;
更改表名:rename table 表名 to 新表名;
修改字段名称:alter table 表名 change 旧字段 新字段 数据类型;
删除表:drop table 表名;
2.数据操作语言DML(curd)

操作数据:增、删、改、查curd >Affected rows:1受影响条数

增加
  • 字段值与字段名一一对应
  • default:
//①
insert into `表名`(字段名,字段名,字段名) values(字段内容,字段内容); 
INSERT into boys (id,`boyName`,userCP) VALUES(5,'张云雷',777);
//②当主键自增
INSERT into boys (id,`boyName`,userCP) VALUES(default,'张云雷',777);//default
INSERT into boys (`boyName`,userCP) VALUES('张云雷',777);//省略自增主键
//③当默认自增
INSERT into boys (id,`boyName`,userCP) VALUES(5,default,777);
INSERT into boys (userCP) VALUES(777); //可省略默认
//④当值可为null
INSERT into boys (id,`boyName`,userCP) VALUES(5,'张云雷',default);
INSERT into boys (id,`boyName`) VALUES(5,'张云雷');
删除
1//删除一个表的所有内容:delete from 表名;
DELETe FROM cat;
2//删除表中的某一条记录:DELETe FROM `表名` WHERe 删除条件;
①//DELETe FROM `boys` WHERe id=8;//用=判断
②//当删除内容判断是否为空时,用 is null;
DELETe FROM `boys` WHERe userCP is null;
修改
1//修改某条记录:UPDATe 表名 SET 想改成的条件where 该条记录;
UPDATE `boys` SET userCP=57 where `boyName`='郭';
2//修改整个表的某个属性:UPDATE 表名 SET 想改成的条件;
UPDATE `cat` SET `name`='好';
UPDATE `boys` SET userCP=57,`boyName`='无' where `boyName`='郭';//修改某条记录的多个属性
查询(重点)

*:通配符

count(*)/ count(1):查询记录数

原理

硬盘的数据通过select语句产生一张虚拟表,所有语句都在虚拟表上修改

关键字:

select
from
where:对原始数据筛选
order by:排序
limit:取值范围
distinct:去重
group by:分组
having:对数据二次筛选

SQL语句编写顺序(s f o w g h o l)

Select *|字段名|distinct(字段名)

​ From 表1 join表2

​ on 表1.字段=表2.字段

​ Where 原始数据的筛选条件

​ Group by 分组字段

​ Having 统计后数据的筛选条件

​ Order by 排序字段 排序规则,排序字段 排序规则

​ Limit 值1,值2

select nationality,count(*) ——想要的字段		5
from tb_student				——从那张表取		1	 
where age>10				——第一次筛选 	2
group by nationality		——分组			3
having count(*)>30			——二次筛选			4
order by count(*) desc		——排序
limit 0,3;					——取值
SQL语句执行顺序

from——join——on——where——group by(开始使用select中的别名,后面的语句中都可使用)——(聚合函数:avg、sum···——having——select——distinct——order by——limit

普通select查询
  • 1.//查询一个表的全部内容:SELECT * from 表名;
SELECt * from `boys`;
  • 2//查询表中的某几个属性:SELECt 字段名,字段名 from 表名;

    SELECt `boyName`,id from `boys`;
    
  • 3.//用条件查询表中的某条记录:SELECt 字段名 FROM 表名 WHERe 查询条件;

    SELECt `boyName` FROM `boys` WHERe id=5;
    
  • 4.给字段名起别名 as(对查询出来的数据起作用)

    SELECt boyName as '姓名' from boys;
    
  • 字段值去重:distinct(字段) 【单独使用】【常用】

    SELECt DISTINCT(boyfriend_id) from beauty;//只显示第一次出现的boyfriend_id
    
where条件(4.12)
  • 比较运算符:= > < >= <= !=(即<>)

    select * from `user` where age <5; 
    
  • 判断是否为null: is NULL 、 is not NULL

    select * from `boys` where userCP is NULL;
    SELECt * from `boys` where userCP is not NULL;
    
  • 逻辑运算符: AND(&) or(|) not(!)

    SELECt * FROM `boys` WHERe userCP=57 or userCP=777;
    SELECt * FROM `boys` WHERe not userCP=57;
    
  • 区间判断:between and (可读性不好)

    SELECt *FROM `boys` WHERe userCP BETWEEN 57 AND 777;//【包含57 和777】
    
  • 多个等值判断:in

    SELECt * FROM `boys` WHERe id IN (1,4,5,8);   
    SELECt * FROM `boys` WHERe id=1 or id=4 or id=5 ore id=8;   
    
  • 模糊判断:

    • %——>若干个字符(0个,1个,多个)
    SELECt * FROM `boys` WHERe boyName LIKE '张%';//查询以张开头的的人
    SELECt * FROM `boys` WHERe boyName LIKE '%%云%';//查以云开头,或以云结尾的
    
    • _——>表示一个字符
    SELECt * FROM `boys` WHERe boyName LIKE '_云%';//查第二个字符是云的
    SELECt * FROM `boys` WHERe boyName LIKE '%云_';//查倒数第二个字符是云的
    
内置函数(4.13) 字符串处理函数
  • -concat(字符串1,字符串2····):从左到右合并字符串

    select concat(id,boyName) FROM boys;
    
  • trim(str):去掉左右所有空格

    SELECt trim(boyName) FROM boys;
    
  • litrm(str):去掉左所有空格

  • rtrim(str):去掉右所有空格

  • substring(str,x,y):从x位置开始,连续取y个str子串

    SELECt substring(`boyName`,1,2) from boys;
    
数值处理函数
  • abs(x):返回绝对值

    SELECt abs(-12);
    
  • ceil(x):返回大于x的最小整数

  • floor(x):返回小于x的最大整数

  • mod(x,y):返回x与y的模

    SELECT mod(13,24);//模为13,13%24=0···13
    SELECT mod(27,24);//模为3,27%24=1···3
    
  • rand():返回(0-1)之间的随机数 select round(rand()*100);

     
  • round(x,y):返回参数x的y位小数的四舍五入结果

    SELECT round(3.6785,2);
    
日期处理函数
  • year(日期/日期时间类型字段):返回年份

    SELECT year(borndate) from beauty;
    SELECt * from beauty where year(borndate)=1988;
    
  • month(日期/日期时间类型字段):返回月份

    SELECt month(borndate) from beauty;
    
  • day(日期/日期时间类型字段):返回日期

    SELECt day(borndate) from beauty;
    
聚合函数

特点:只返回一条记录;只能查询一个字段;多个聚合函数可以一起查询

select avg(boyfriend_id) as '平均年龄',max(boyfriend_id) from beauty;//多个聚合函数可以一起查询

  • 1.count(*):返回满足条件的记录数,尽量不再查询其他字段,没意义

    • SELECt COUNT(*) FROM 表名; //查询表中的记录的总条数

    • null:不算条数——>尽量用count(*),避免字段的条数为null,出错

    SELECt COUNT(*) FROM `boys`; <==>SELECt COUNT(1) FROM `boys`;//count(1)查询得快
    SELECt COUNT(*)  as '记录数' FROM `boys`;
    SELECt COUNT(0) FROM `boys`;//查询第一个字段的总条数
    
  • 2.sum(数值类型的字段):返回满足条件的字段值的和

    SELECt sum(boyfriend_id) from beauty;//返回boyfriend_id的总和
    
  • 3.max(数值类型的字段):返回满足条件的字段值的最大值

    SELECt max(boyfriend_id) from beauty;
    
  • 4.min(数值类型的字段):返回满足条件的字段值的最小值

    SELECt min(boyfriend_id) from beauty;//若最小记录有多条相同的,也只返回一条
    
  • 5.avg(数值类型的字段):返回满足条件的字段值的平均值

    SELECt avg(boyfriend_id) from beauty;
    
排序语句order by

(与where查询平级)

order by【默认排序是asc升序】

格式:order by 主关键字 排序规则(asc|desc),次要关键字 排序规则,次次要关键字 排序规则

SELECt * FROM boys ORDER BY userCP asc, id desc;//按cp数量升序排,id降序排
SELECt * FROM boys ORDER BY userCP asc, id;//按cp数量升序排,id按默认升序排
取记录范围limit

记录的索引值从0开始

  • limit 值n:从索引值0开始,连续取值n条记录(默认从0开始)

    SELECt * from boys LIMIT 0,5;//从boys表中从0起连续取5条记录
    
  • limit 索引值,值1:从索引值开始,连续取值1条记录
    项目中的翻页代码:select * from 表名 limit(页码-1)*每页记录数,每页记录数

分组查询group by

配合聚合函数使用(此时返回不止一条);务必把分组的字段也查询出来

  • 返回的记录数即分组字段的不重复值的数量

    SELECt borndate,count(*) from beauty GROUP BY borndate;//查borndate务必把分组的字段也查询出来
    select * from beauty GROUP BY borndate;//按照生日分组
    select * ,count(*)from beauty GROUP BY borndate;//按照生日分组,并统计数量
    
  • distinct与group by的区别

    • group by侧重分组统计,distinct侧重去除重复记录

    distinct是每种类型取一条数据;group by是按每个类型进行分组(不止1条数据)

    • SQL的执行阶段不同,先执行group by,后执行distinct
    • group by配合聚合函数使用,distinct无法直接配合聚合函数
    • group by的效率高于distinct
筛选数据having

对已经筛选的数据进行二次筛选

select * from boys HAVINg userCP>50;
select nationality,count(*) from tb_student where sex='男' group by nationality having count(*)>30;//将男生按照民族进行分组并输出民族和各民族男生数量【1次筛选】,再加入having关键字后,可以筛选出其中男生数量>30的民族【即2次筛选】
  • where和having的区别
    • where在group by前;having在group by后
    • where是对原始数据(分组前数据)的条件过滤;having是对统计后的数据(分组后)的条件过滤
    • where后不能用聚合函数;having后可以
多表联合查询(4.14) 内连接inner join

查询两表间的共同数据;返回相交数据;

SELECt * from `project` inner join `department`;//笛卡尔积(两表数据相乘)
SELECt * from `project` inner join `department` on `project`.dnum=`department`.dnumber; //两表相乘后寻找相交数据
外连接 左连接 右连接 外连接

子查询

3.数据控制语言DCL

修改数据库的操作权限,eg:授权、收回用户对库的权限etc

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004133.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号