数据库基础(增删改查)

news2024/11/26 14:29:20

目录

MySQL 背景知识 

数据库基础操作

1.创建数据库

2.查看所有数据库

 3.选中指定的数据库

4.删除数据库

数据库表操作

MySQL的数据类型

1.创建表

 3.查看指定表的结构

4.删除表

增删改

新增操作

 修改(Updata)

 删除语句

 面试题

查询操作

指定列查询

 查询的列为表达式

给查询结果的列,指定别名(使用as)

查询的时候 针对列进行去重(把有重复的记录,给合并成一个)

针对查询结果进行排序

 排序还可以指定多个列来进行排序

条件查询


MySQL 背景知识 

MySQL是 客户端-服务器结构的程序
数据是存储在服务器硬盘(外存)上的
MySQL 存储数据的结构(关系型数据库):数据库服务器--多个数据库--多个数据表--多行记录(行)--多列字段(列)

数据库基础操作

1.创建数据库

create database 数据库名

 create 和 database 都是 SQL 中的关键字,这里的关键字不区分大小写,数据库的名字不能是 SQL 中的关键字
创建数据库的时候,也可以指定数据库的字符集

create database 数据库名 charset 字符集名

2.查看所有数据库

show databases

 3.选中指定的数据库

use 数据库名

 选择数据库后,后续操作都是针对这个数据库来展开的

4.删除数据库

drop  database 要删除的数据库名

 这个操作非常危险,一旦删除数据库,就真的删除了,没有回收站

数据库表操作

MySQL的数据类型

数值类型

常用类型 int,double,decimal

 M表示有效数字的位数,D表示小数点后保留几位

字符串类型

 varchar 最常用表示字符串的类型,带有一个参数,约定了最大存储的空间,比如varchar(128),就表示这个列最多存128个字符,因此可以根据实际需求,来设置多长合适.

text,和mediumtext 适用于更长的字符串

日期类型

数据库表操作

1.创建表

create table 表名(列名 类型,列名 类型,......) ;

 表名和列名不能和SQL的关键字重复,如果必须要这样做,可以使用 反引号` `

 

 注释可以使用 -- 表示 类似 //

2.查看指定数据库下的所有表

show tables;

 3.查看指定表的结构

desc 表名;

 Field表示字段,Type表示字段的类型,NULL表示该字段是否允许为空(必选还是选题),Key表示约束,Defalult表示这一列的默认值,Extra表示额外的描述信息

4.删除表

drop table 表名

 删除表操作和删除数据库操作一样,都是非常危险的,删除了就真的删除了

增删改

新增操作

insert into 表名 values(列,列,列......);

SQL中使用Insert  关键字表示新增,每次新增都是新增一行

values 后面()内容,个数和类型要和表的结构匹配

 对指定列(一个或多个)进行插入

insert into 表名(列名) values(列名)

 一次指定插入多行

Insert 语句,values后面的()可以有多组,每一组就对应到一行(一行记录) 

 修改(Updata)

updata 表名 set 列名 = 值 +(一些子句比如 where,oder by,limit 当然也可以不加)

将王五同学的语文成绩修改成80分

update student2 set chinese = 80 where name = "王五";

 where子句描述了哪些行需要进行修改,set描述了哪些列需要进行修改.

修改操作,可以使用表达式进行修改

把所有同学的语文成绩-5;

update student2 set chinese = chinese-5;

 

update 可以修改多个列,多个列使用逗号隔开

给李四的语文成绩修改为70 数学成绩修改为80

update student2 set chinese = 70,math = 80  where name = "李四";

 

给总成绩倒数三名的数学成绩+5

update student2 set math = math+5 order by chinese+math+english asc limit 3; 

 

 删除语句

delete from 表名 where 条件

如果没有条件,就是把整个表中所有的记录都删除

删除student2表中所有的记录;

delete from student2;

 面试题

在mysql 中,一次插入一条记录,分别插入十次,效率要低于一次把10条记录一起插入

原因:1.由于网络请求和响应需要时间开销(插入十次就需要十次的请求和响应,插入一次只需要一次)
        2. 数据库服务器是把数据保存在硬盘上的,在进行io(输入输出)操作的时候,数据量对效率的影响不是很大,而io操作的次数影响比较大
       3.mysql 为关系型数据库,每次进行sql,内部都会开启一个事务,每次开启事务会有一定的时间开销

查询操作

全列查询(查询表里的所有列)

select * from 表名

此处的 * 是通配符,代表了所有的列
注意此处的 select * 操作非常危险,这里的查询操作,会遍历表里面的所有数据,把数据从硬盘上读出来,通过网卡进行发送.
如果数据非常大,就很容易把硬盘IO吃满,或者把网络带宽吃满

指定列查询

select 列名 from 表名

 查询的列为表达式

在查询的过程中进行一个简单的计算(列和列之间)

现在有一个student2表(方便后面展示)

查询所有同学英语成绩+10

select name,english+10 from student2; 

注意:进行表达式查询的时候,查询结果是一个临时表,这个表是不写入硬盘当中的,临时表的类型不和原始的表完全一致,会尽可能的把数据给表示进去..因此,这里102.0是可以存进这个临时表的,而如果是原来的表是存不进102.0的(原来的语数英类型是decimal(3,1))

查询所有同学的总分(三门课相加)

select name,chinese+math+english from student2;

 

给查询结果的列,指定别名(使用as)

使用表达式查询的时候,写的表达式就是查询临时表的列名,比较丑,我可以起个别名

select name,ch inese+math+english as total from student2;

查询的时候 针对列进行去重(把有重复的记录,给合并成一个)

distinct(可以指定某一个列进行去重)

比如这里的李四和赵六的数学都是70分

select distinct math from student2;

 注意这里的70只出现了一次,因此是去了重的

针对查询结果进行排序

order by 字句

比如我们要针对语文这一列进行升序排序

select name,chinese from student2 order by chinese asc;

asc  为升序, desc 为降序

针对语文这一列进行降序排序

 select name,chinese from student2 order by chinese desc;

 

 如果要排序的列中,有NULL,NULL视为最小值

排序也可以针对别名进行排序

比如针对总成绩进行降序排序

select name,chinese+math+english as total from student2 order by total desc;

 排序还可以指定多个列来进行排序

排序指定多个列的时候,先以第一列为准,再比较第二列

比如这里来语文和数学来排序,语文高的排在前面,当语文分数一样时,再比较数学,数学高的排前面

select name,chinese,math from student2 order by chinese desc,math desc;

条件查询

where 查询的结果按行进行删选,通过where指定一个条件,判断查询到的每一行,是否满足条件,把条件为真的行保留(作为临时表结果)

在sql中,"="号,就是比较相等的意思,不是赋值(这个符号如果左右俩边都是NULL结果为false,此时我们可以使用<=>避免这个问题)

查询英语不及格的同学

select * from student2 where english<60;

 查询哪些同学语文成绩好于英语成绩

select * from student2 where chinese > english;

查询总分在200分以上的同学

select name,chinese+english+math as total from student2 where chinese+english+math > 200; 

 注意这里where子句,不能使用列的别名来比较,比如这里不能用total代替chinese+english+math

查询语文成绩大于80,并且英语成绩也大于80的学生

select name,chinese,english from student2 where chinese > 80 and english > 80;

 查询语文成绩大于80,或者英语成绩大于80的学生

select name,chinese,english from student2 where chinese > 80 or english > 80;

如果一个条件中同时有and和or,先计算and后计算or,当然我们也可以写括号来定义优先级 

between...and...

查询语文成绩在70到80之间的同学

select * from student2 where chinese between 70 and 80; 

in

查询语文成绩为95或者80或者75或者60的同学

select * from student2 where chinese in(95,80,75,60); 

like

查询 姓张 的同学的成绩(开头第一个字是张)

select * from student2 where name like "张%"; 

这里%分号的含义是通配符的意思可以表示0个或多个字符,也就是说以张开头的内容,都能查询出来 

使用下划线_ 匹配一个字符(__匹配俩个,依次类推)

比如查询 姓张,并且名称是俩个字的同学

select * from student2 where name like "张_";

使用like的查询是模糊查询,查询的开销比较大

limit

查询结果中,引入一个limit来限制查询结果的数量
在查询结果末尾,加上limit 指定N,N就表示这次查询最大结果的数量

比如现在只查询总分前3名同学的记录

select *,chinese+math+english as total from student2 order by total desc limit 3; 

limit offset

如果直接使用limit n,查到的是前N行(第一页)的东西,如果搭配offset 就可以指定第几条开始进行筛选, 

比如我们要排除掉第一行的张三,查看其它同学中总分前三名的记录

select *,chinese+math+english as total from student2 order by total desc limit 3 offset 1;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统设计:通用思路之4S分析法

1.系统设计 系统设计是一个定义系统架构、功能模块、服务及接口和数据存储等满足特定需求的过程。 与面向对象设计不同的是&#xff0c;面向对象设计通常是对于某个特定功能模块的设计&#xff0c;通常要求设计类图关系、接口关系、实现关系等涉及具体代码层面的设计&#xff…

C语言库函数之 qsort 讲解、使用及模拟实现

引入 我们在学习排序的时候&#xff0c;第一个接触到的应该都是冒泡排序&#xff0c;我们先来复习一下冒泡排序的代码&#xff0c;来作为一个铺垫和引入。 代码如下&#xff1a; #include<stdio.h>void bubble_sort(int *arr, int sz) {int i 0;for (i 0; i < sz…

基于chatgpt动手实现一个ai_translator

动手实现一个ai翻译 前言 最近在极客时间学习《AI 大模型应用开发实战营》&#xff0c;自己一边跟着学一边开发了一个进阶版本的 OpenAI-Translator&#xff0c;在这里简单记录下开发过程和心得体会&#xff0c;供有兴趣的同学参考&#xff1b; ai翻译程序 版本迭代 在学习…

C语言必会题目(2)

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 今天继续分享C语言必会的题目&#xff0c;上一篇文章主要是一些选择题&#xff0c;而今天我们主要内容为编程题的推荐与讲解 准备好迎接下面的题了吗&#xff1f;开始发车了&#xff01;&#xff01;&#xff01; 输入…

pytest运行时参数说明,pytest详解,pytest.ini详解

一、Pytest简介 1.pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要有一下几个特点&#xff1a; 简单灵活&#xff0c;容易上手&#xff0c;支持参数化 2.能够支持简单的单元测试和复杂的功能测试&#xff0c;还可以用来做selenium、appium等自动化测试&#xf…

zookeeper案例

目录 案例一&#xff1a;服务器动态上下线 服务端&#xff1a; &#xff08;1&#xff09;先获取zookeeper连接 &#xff08;2&#xff09;注册服务器到zookeeper集群&#xff1a; &#xff08;3&#xff09;业务逻辑&#xff08;睡眠&#xff09;&#xff1a; 服务端代码…

提高生产力 | Apifox 数据结构验证最佳实践

目录 实践场景 定义返回响应 场景数据准备 校验响应数据 总结 在设计接口的过程中&#xff0c;响应数据需要和返回响应规范一一对应。这样能够确保接口的一致性和可靠性&#xff0c;并且方便接口的使用和维护&#xff0c;即使在后续迭代过程中出现问题&#xff0c;开发人员…

zabbix监控安装部署

目录 一、环境 二、配置 1.配置yum源&#xff0c;这里用的清华的 2.过滤一下安装包&#xff0c;查看依赖包 安装依赖包 3.配置数据库 开机自启 创建数据库 创建用户 授权 导入数据到数据库 查看zabbix数据库有没有表和数据 4.修改zabbix配置文件 1.修改zabbix配置…

【Java】常见面试题:多线程

文章目录 1. 谈谈进程和线程之间的区别【高频】2. java中有哪些方式来创建线程&#xff1f;3. run和start的区别【经典面试题】4. Java线程的状态5. 【线程不安全的原因】6. 就以count为例&#xff1a;一个线程加锁、一个线程不加锁&#xff0c;此时能否保证线程的安全呢&#…

client-go实战之十二:选主(leader-election)

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 本文是《client-go实战》系列的第十二篇&#xff0c;又有一个精彩的知识点在本章呈现&#xff1a;选主(leader-election)在解释什么是选主之前&…

Keepalived源码安装

文章目录 Keepalived源码安装安装准备缺少OpenSSL解决方法 Keepalived 源码安装 安装准备 tar zxf keepalived-2.2.8.tar.gz /root/ ll drwxrwxr-x. 10 1000 1000 4096 Aug 9 18:29 keepalived-2.2.8 #进入目录执行以下命令查看帮助 ./configure --help #重要编译参数 -…

QT学习笔记-oracle oci数据库驱动交叉编译并移植到ARM开发板

QT学习笔记-oracle oci数据库驱动交叉编译并移植到RK3568ARM开发板 0、背景1、搭建交叉编译环境2、交叉编译过程3、把数据库驱动部署到目标系统中 0、背景 在上一文《QT学习笔记-QT安装oracle oci驱动》中介绍了在Windows环境下使用QT访问oracle数据库时遇到驱动无法加载问题的…

kingbase:数据库启动状态

1 启停KingbaseES数据库 Linux下通过系统服务&#xff1a; root用户执行&#xff1a; service kingbase8d stop/start/restart ——注册服务的情况下 Linux下通过安装用户&#xff1a; 安装用户执行&#xff1a; sys_ctl stop/start/restart -D data路径 2 查看数据库当…

UI自动化环境的搭建(python+pycharm+selenium+chrome)

最近在做一些UI自动化的项目&#xff0c;为此从环境搭建来从0到1&#xff0c;希望能够帮助到你&#xff0c;同时也是自我的梳理。将按照如下进行开展&#xff1a; 1、python的下载、安装&#xff0c;python环境变量的配置。 2、pycharm开发工具的下载安装。 3、selenium的安装。…

【Java】一只小菜坤的编程题之旅【3】

文章目录 1丶判定是否互为字符重排2、杨辉三角3丶某公司的1个面试题&#xff08;字符串包含问题&#xff09; 1丶判定是否互为字符重排 这个题我们用一个非常简单的思想就能实现&#xff0c;我们先将字符串转换为字符数组&#xff0c;然后对字符数组进行排序&#xff0c;然后再…

Codeforces Round 893 (Div. 2)ABC

Codeforces Round 892 (Div. 2) 目录 A. United We Stand题目大意思路代码 B. Olya and Game with Arrays题目大意思路代码 C. Another Permutation Problem题目大意思路代码 A. United We Stand 题目大意 给你一个数组&#xff0c;把这个数组分成两个数组a和b&#xff0c;使…

03_013内存分配api以及页表详解

前言 之前文章中物理ram中的最小单位一直用页来表示 这次又描述的详细了点 物理ram的最小单位 有的地方叫 块,框,页帧 在虚拟空间中最小单位也叫页 需要好好区分 不过后来想想管你虚拟页还是物理ram页 都存在物理ram上 都能想成一 一对应的关系 所以大家都叫页好像也行 内存分…

【Unity3D】Shader Graph节点

1 前言 Shader Graph 16.0.3 中有 208 个 Node&#xff08;节点&#xff09;&#xff0c;本文梳理了 Shader Graph 中大部分 Node 的释义&#xff0c;官方介绍详见→Node-Library。 Shader Graph 通过图像的形式表达了顶点变换和片元着色流程&#xff0c;其背后都是一些列的数学…

保持城市天际线(力扣)贪心 JAVA

给你一座由 n x n 个街区组成的城市&#xff0c;每个街区都包含一座立方体建筑。给你一个下标从 0 开始的 n x n 整数矩阵 grid &#xff0c;其中 grid[r][c] 表示坐落于 r 行 c 列的建筑物的 高度 。 城市的 天际线 是从远处观察城市时&#xff0c;所有建筑物形成的外部轮廓。…

【系统架构】分布式系统架构设计

1 分布式系统是什么 分布式系统是指由多个计算机节点组成的一个系统&#xff0c;这些节点通过网络互相连接&#xff0c;并协同工作完成某个任务。 与单个计算机相比&#xff0c;分布式系统具有更高的可扩展性、可靠性和性能等优势&#xff0c;因此广泛应用于大规模数据处理、高…