数据库知识点整理

DDL

DDL-数据库操作

show databases    ------------  查看所有数据库

select database();  ----------查看当前数据库

create database 数据库名;---- 创建数据库

use 数据库名;  --------------使用数据库

drop database 数据库名;-----删除数据库

DDL-表操作

show tables;-----查看当前数据库所有表

desc 表名; -----查询表结构

show create 表名;---查询指定表的建表语句

create table 表名(字段 字段类型 ,字段 字段类型) [ comment 表注释 ]; ---表创建

alter table 表名 add(增加)/modify(修改数据类型)/change(修改字段)/drop(删除字段)/rename to(修改表名)...;

drop table 表名;  ------删除表

truncate table 表名;------删除指定表并重新创建该表

DML

 insert into 表名(字段1,字段2...)value [(值1,值2...)] 添加数据

update 表名 set 字段1 = 值1,字段2 = 值2 [where 条件 ];----修改数据

delete from 表名 [ where 条件 ];---------------删除数据

delete from 表名;--------删除整张表的数据

DQL

 select                       字段列表--------->字段名[ AS ]别名

from                          表名列表

where                       条件列表----------->    ( >  >=  <  <=  <>  like  between...and...  in   and   or )

                                                           where 分组之前过滤,不满足where条件不分组

group by                  分组字段列表

Having                     分组后条件列表 ------->分组之后过滤

order by                   排序字段列表------------>升序ASC  降序DESC

limit                          分页参数------------------>起始索引(从0开始,每页展示记录数)

DQL基础查询

select 字段1,字段2,....from  表名;-------------> 查询多个字段

select * from 表名; -------------------------------------->查询所有字段

select 字段 as(as可省)‘ 别名 ’ from 表名;--------->设置别名

select distinct 字段列表 FROM 表名;---------------->去除重复记录:

like " %x"  最后一位为x

like " _ _ " 查询两位

聚合函数

常见聚合函数:

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

语法:

select  聚合函数(字段列表) from 表名;

分组查询

语法:

select 字段列表 from 表名 [  条件 ] group by 分组字段名 [ having 分组后的过滤条件 ];

where 和 having 的区别:

执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。

判断条件不同:where不能对聚合函数进行判断,而having可以。

注意事项

执行顺序:where > 聚合函数 > having

分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

排序查询

select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2;

ASC: 升序(默认)

DESC: 降序

注意:如果是多字段排序,第一个字段相同时才会根据第二个字段进行排序

分页查询:

select 字段列表 from 表名 limit 起始索引, 查询记录数;

注意事项

  • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
  • 分页查询是数据库的方言,不同数据库有不同实现,MySQL是LIMIT
  • 如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10

DQL执行顺序

from ->where -> group by -> select-> order by ->limit

DCL

DCL----管理数据库用户、控制数据库的访问权限

1.用户管理

use mysql;

select * from user;------------->查询用户

create user ‘ 用户名 ’ @ ‘ 主机名 ’ identified by ' 密码 ';------>创建用户

alter user ‘ 用户名 ’ @ ‘ 主机名 ’ identified with mysql_native password by ' 新密码 ';---修改用户密码

drop user ‘ 用户名 ’ @  ‘ 主机名 ’;-------删除用户

2.权限控制

show grants for ‘ 用户名 ’ @ ‘ 主机名 ’;----------->查询权限

grant 权限列表 on 数据库名.表名 to ' 用户名 '  @ ‘ 主机名 ’;------>授予权限

revoke  权限列表 on 数据库名.表名 from ' 用户名 '  @ ‘ 主机名 ’;------>撤销权限

函数

1.字符串函数

concat(字符串拼接)、lower(全转小写)、upper(全转大写)、lpad(左填充)、rpad(右填充)、trim(去头和尾空格)、substring(字符串截取)

函数功能
concat(s1, s2, …, sn)字符串拼接,将s1, s2, …, sn拼接成一个字符串
lower(str)将字符串全部转为小写
upper(str)将字符串全部转为大写
lpad(str, n, pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
rpad(str, n, pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
trim(str)去掉字符串头部和尾部的空格
substring(str, start, len)返回从字符串str从start位置起的len个长度的字符串

2.数值函数

ceil(向上取整)、floor(向下取整)、mod(x,y)返回x/y的模、rand()返回0-1内的随机数  、round(x,y)求参数x四舍五入的值,保留y位小数

函数功能
ceil(x)向上取整
floor(x)向下取整
mod(x, y)返回x/y的模
rand()返回0~1内的随机数
round(x, y)求参数x的四舍五入值,保留y位小数

3.日期函数

函数功能
curdate ()返回当前日期
curtime ()返回当前时间
now ()返回当前日期和时间
year (date)获取指定date的年份
month (date)获取指定date的月份
day (date)获取指定date的日期
date_add (date, interval expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
datediff (date1, date2)返回起始时间date1和结束时间date2之间的天数

4.流程函数

函数功能
if (value, t, f)如果value为true,则返回t,否则返回f
ifnull (value1, value2)如果value1不为空,返回value1,否则返回value2
case when[ val1 ] then [ res1 ] … else [ default ] end如果val1为true,返回res1,… 否则返回default默认值
case [ expr ] when  [ val1 ]  then  [ res1 ] … else [ default ] end如果expr的值等于val1,返回res1,… 否则返回default默认值

约束

1.非空约束 

not null

2.唯一约束

unique

3.主键约束

primary key 主键约束非空且唯一 (自增:auto_increment)

4.默认约束

default

5.检查约束

check 要求存储的值满足条件

6.外键约束

foreign key  保证数据的一致性和完整性

多表查询

1.多表关系

一对一:用于表结构拆分,在其中任何一方设置外键,关联两张表的主键

一对多:在多的一方设置外键,关联一的一方的主键

多对多:建立中间表中间表包含两个外键,关联两张表的主键

索引

1.索引

索引是高效获取数据的数据结构

2.索引结构:

B-Tree(B树):平衡的多路查找树

B+tree:Btree和双向链表

Hash(无法利用索引完成排序)只能用于等值比较,不支持范围查询

R-tree

3.索引分类:

单值索引:一个索引只包含单个列,一个表中可以有多个单值索引

唯一索引:索引列的值必须唯一,可为空

复合索引:一个索引包含多个列

4.索引语法:

create [ unique] index xxx on xxx(xxx);  创建索引

show index from xxxx;  查看索引

drop index xxx on xxxx;  删除指定索引

5.SQL性能分析:

执行频次、慢查询日志、profile、explain

6.索引使用:

联合索引:最左前缀法则(最左边的列必须存在)

索引失效:

1.索引列函数运算

2.字符串不加引号

3.like 模糊匹配

4.or连接条件,一侧有索引一侧无索引

5.mysql评估,全表扫描比索引快

6.没有用最左前缀法则则失效

SQL提示

覆盖索引:查询返回的列在索引结构都包含了  不需要再回表查询

前缀索引:场景(字符串长度长或者大文本字段)

单列索引/联合索引:推荐联合索引,联合索引性能较高,运用得当可避免回表查询

7.索引设计原则:

1.需要针对哪些表设计索引 数据量大且查询频次较高

2.需要针对这些表的哪些字段建立索引  经常在where、order by,group by 之后出现的字段建立对应索引

3.如果此列唯一 建唯一索引 区分度高

 如果能建立联合索引尽量用联合索引

字符串长度较长或者大文本字段用前缀索引

SQL优化

1.插入数据

insert :批量插入、手动控制事务、主键顺序插入

2.主键优化

数据组织方式:基于索引

主键长度尽量短、顺序插入   ---主键自增

3.order by 优化

using index:直接通过索引返回数据,性能高

using filesort:需要将返回结果在排序缓冲区排序

4.group by 优化

索引,多字段分组满足最左前缀法则

5.limit优化

覆盖索引+子查询

6.count优化

性能:count(字段)<count(主键id)<count(1)约=count(*)

7.update优化

尽量根据主键/索引字段进行数据更新

视图

视图:

虚拟的表,不保存查询结果,只保存查询SQL逻辑

作用:简单、安全、数据独立

创建:create [or replace] view 视图名称(列名列表)AS select 语句 [ with [ cascaded | local ] check option ]

查询

查看创建视图语句:show create view 视图名称

查看视图数据:select * from 视图名称...;

修改

方式一:create [ or replace ] view 视图名称[( 列名列表)] AS select语句[ with [ cascaded | local ] check option ]

方式二:alter view 视图名称[( 列名列表)] AS select语句 [ with [ cascaded | local ] check option ]

删除

drop view [ if exists ] 视图名称 [ 视图名称 ]...

代码示例:

 

触发器

可以在表数据进行insert、update、delete之前或之后触发

保证数据完整性、日志记录、数据校验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/452691.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day02_计算机常识丶第一个程序丶注释丶关键字丶标识符

计算机常识 计算机如何存储数据 计算机世界中只有二进制。那么在计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。 进制 进制也就是进位计数制&#xff0c;是人为定义的带进位的计数方法 实例&#xff1a; // 在java 中 可以使用不同…

[PHP]Undefined index错误只针对数组

1、示例一 <?php $a null; var_dump($a[name]); 结果&#xff1a;无报错 2、示例二 <?php $a []; var_dump($a[name]);结果&#xff1a;报错

【JavaEE初阶】深入理解网络编程—使用UDP协议API实现回显服务器

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP/UDP协议的原理理解~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…

JMeter 中两大高级线程组的区别与应用

一、JMeter 中的高级线程组概述 最近群里的测试小伙伴在问在 JMeter 中&#xff0c;“jpgc - Ultimate Thread Group”和“jpgc - Stepping Thread Group 阶梯加压”有哪些区别和实际应用场景有哪些&#xff1f;所以这里也跟大家分享一下 JMeter 作为一款强大的性能测试工具&a…

Java项目-基于Springboot的应急救援物资管理系统项目(源码+说明).zip

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

基于SpringBoot网上超市的设计与实现(论文+源码)_kaic

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此超市商品销售信…

100 种下划线 / 覆盖层动画 | 终极 CSS(层叠样式表)集合

还在为你的菜单项和链接寻找动画效果而感到疲惫吗&#xff1f; 不用再找了&#xff01;这里列出了 100 多种不同的动画。从简单的到更复杂的&#xff0c;你肯定能找到自己想要的。 无需 SVG&#xff08;可缩放矢量图形&#xff09;&#xff0c;无需 JavaScript&#xff08;脚…

小白也能剪出优秀视频:四大视频剪辑工具推荐!

无论是社交媒体上的短视频分享&#xff0c;还是专业制作的长视频内容&#xff0c;视频剪辑工具都扮演着至关重要的角色。今天&#xff0c;就让我们来探讨几款市面上流行的视频剪辑工具。 福昕视频剪辑 直达链接&#xff1a;www.pdf365.cn/foxit-clip/ 操作教程&#xff1a;立…

使用Diffutoon把视频转换成动漫风格,无需部署,开箱即用

无论是图片动漫转换以及视频动漫转换&#xff0c;我们前期也介绍过相关的模型&#xff0c;但是其模型输出的动漫视频不是有瑕疵&#xff0c;就是动漫效果不唯美&#xff0c;今天介绍一个modelscope社区开源的动漫风格转换模型Diffutoon。 Diffutoon模型接受视频作为输入&#x…

【C语言】循环中断break

在循环使用过程中&#xff0c;可能遇到某些情况需要终止循环。比如按座位查找一位学生&#xff0c;循环查找&#xff0c;找到时可以直接停止。后续的循环将不再执行。 break;只跳出一层循环 例子中的素数判断&#xff0c;查找到根号n停止&#xff1a;一个合数等于两个数的乘积…

新手必须掌握的Linux命令

1.1 常用系统工作命令 echo [linuxprobelocalhost /]$ echo $SHELL /bin/bash 使用$变量的方式提取SHELL的值&#xff0c;并输出到到屏幕上 date [linuxprobelocalhost /]$ date -s "20170901 8:30:00" 将系统时间设置为 reboot ----系统重启命令poweroff --…

JavaWeb Servlet--09深入:注册系统05---动态搜索栏

动态搜索栏 分析&#xff1a;在显示用户信息的表单里有一个下拉框选择用户的信息&#xff0c;一个文本框进行输入&#xff0c;一个按钮就行搜索&#xff0c;在下拉框选择了性别或许姓名的某一个包含字就会返回所有满足的用户。在controller层进行接收选择的搜索条件&#xff0…

Starrocks部署前期准备

前提条件 硬件要求 CPU StarRocks 依靠 AVX2 指令集充分发挥其矢量化能力。因此&#xff0c;在生产环境中&#xff0c;强烈建议您将 StarRocks 部署于 x86 架构 CPU 的服务器上。 您可以在终端中运行以下命令来检查 CPU 是否支持 AVX2 指令集&#xff1a; cat /proc/cpuin…

【深度学习】RNN的简单实现

目录 1.RNNCell 2.RNN 3.RNN_Embedding 1.RNNCell import torchinput_size 4 hidden_size 4 batch_size 1idx2char [e, h, l, o] x_data [1, 0, 2, 2, 3] # 输入&#xff1a;hello y_data [3, 1, 2, 3, 2] # 期待&#xff1a;ohlol# 独热向量 one_hot_lookup [[1, …

如何使用Python合并Excel文件中的多个Sheet

在日常工作中&#xff0c;我们经常会遇到需要处理多个Excel工作表&#xff08;Sheet&#xff09;的情况。比如&#xff0c;一个Excel文件中包含了一个月内每天的数据&#xff0c;每个工作表代表一天。有时候&#xff0c;为了方便分析&#xff0c;我们需要将这些分散的数据合并到…

数据结构单向链表的插入和删除(一)

链表 一、链表结构&#xff1a; &#xff08;物理存储结构上不连续&#xff0c;逻辑上连续&#xff1b;大小不固定&#xff09;二、单链表&#xff1a;三、单项链表的代码实现&#xff1a;四、开发可用的链表&#xff1a;四、单链表的效率分析&#xff1a; 一、链表结构&#x…

Javaweb基础-vue

Vue.js Vue是一套用于构建用户界面的渐进式框架。 起步 引入vue <head><script src"static/js/vue2.6.12.min.js"></script> </head> 创建vue应用 <body> <div id"index"><p>{{message}}</p> </div>…

Vulnhub:Me-and-My-Girlfriend-1

一.环境启动/信息收集 &#xff08;1&#xff09;根据物理地址用nmap的主机发现功能得出IP地址 nmap -P 192.168.138.0/24 //同网段下主机发现得到IP为192.168.138.180&#xff08;2&#xff09;做nmap的目录扫描和端口扫描来发现其他站带以及信息 nmap -p- 192.168.138.180 …

CTF(五)

导言&#xff1a; 本文主要讲述在CTF竞赛中&#xff0c;web类题目easyphp。 靶场链接&#xff1a;攻防世界 (xctf.org.cn) 参考文章原文链接&#xff1a;Web安全攻防世界05 easyphp&#xff08;江苏工匠杯&#xff09;_攻防世界 easyphp-CSDN博客 一&#xff0c;观察页面。…

玄机平台-应急响应-webshell查杀

首先xshell连接 然后进入/var/www/html目录中&#xff0c;将文件变成压缩包 cd /var/www/html tar -czvf web.tar.gz ./* 开启一个http.server服务&#xff0c;将文件下载到本地 python3 -m http.server 放在D盾中检测 基本可以确认木马文件就是这四个 /var/www/html/shell.p…