数据库——删库跑路喽

  • 数据库简介
    • 数据库是什么东东?
    • 数据库分类如何?
  • 数据库基本操作
  • 数据库的进阶操作
  • 表的聚合查询(认真对待哦)
  • MySQL索引事务(简单了解)
  • Java的JDBC简单操作
    • 简介
    • JDBC工作原理
    • JDBC使用
    • JDBC使用步骤
  • 小结

数据库简介

数据库是什么东东?

解决文件安全性、文件不利于数据查询和管理、文件不利于存储海量数据、文件在程序中控制不方便等问题,设计出更加利于管理数据的软件——数据库,管理数据会更有效。

数据库分类如何?

关系型数据库: 采用关系模型来组织数据的数据库(Oracle、MySQL、SQL Server等)
    非关系型数据库: 不规定基于SQL实现(Redis、MongoDB、HBASE、Neo4j等)

数据库基本操作

  1. 创建数据库

       create database test;
    

  2. 显示当前数据库

        show databases;
    

  3. 使用当前数据库

        use test;
    

  4. 删除数据库
    注意: 千万不敢,否则神也救不了你!!!

     drop database test;
    

  5. 创建表格

       create table test (id int,name varchar(20));
    

  6. 查看表格的结构

        desc test;
    

  7. 删除表格
    注意: 使劲儿删,这个比删库还厉害!!!

       drop table test;
    

  8. 小二充电来




  • 插入数据

        insert into exam_result values(8, "毛爷爷", 99, 99 , 99);
    

      还可以这样操作呦!(多条数据插入)insert into exam_result  values(8, "毛爷爷", 99, 99 , 99),(8, "毛爷爷", 99, 99 , 99)...;
    
  • 查询数据(重点是它的进阶操作)

      select * from exam_result;
    

  • 修改数据

     我要把毛爷爷的语数英都改为88update exam_result set chinese=88, math=100, english=100 where name="毛爷爷";
    

    实际工作中不要轻易修改数据哦,不然老板会青睐你的。。。

  • 删除数据

    (建议把删除命令当做空气)

         delete from exam_result where name = "毛爷爷";
    

  • 数据进行规律排序(默认升序)

         select * from exam_result order by chinese  desc;
    

  • 数据去重

       select distinct chinese from exam_result;
    

  • 数据模糊查询

         select * from exam_result where name like '%明';
    

  • 数据分页查询

         select * from exam_result order by id limit  3 offset 0;
    

数据库的进阶操作

so easily!!!

  • not null — 那一列不能存储null值

         create table student(id int not null,name varchar(20),sex varchar(4));
    
  • unique — 保证那列的每行必须有唯一的值

          create table student(id int not null,name varchar(20) unique,sex varchar(4));
    
  • default — 给列赋指定的默认值

      create table student(id int not null,name varchar(20) default,sex varchar(4));
    
  • primary key — 是not null 和 unique 的结和,确保那列有唯一标识,有助于更容易更快速找到表中的特定记录

      create table student(id int not null primary key auto_increment, -- auto_increment 自动增长name varchar(20),sex varchar(4));
    
  • foreign key — 保证一个表中的数据匹配另一个表中的值参照完整性

        -- 创建班级表create table classes(id int primary key auto_increment,name varchar(20),);-- 创建学生表create table student(id int primary key auto_increment,name varchar(20) default 'unkown',classes_id int,foreign key (classes_id) references classes(id));
    
  • check — 保证列中的值符合指定的条件,但是MySQL数据库忽略check语句(了解)

表的聚合查询(认真对待哦)

  • count(列名) — 返回查询到的数据数量

      select  count(*) from student;
    

  • sum(列名) — 返回查询到的数据量总和,不是数字就没意义

          select sum(math) from exam_result;
    

  • avg(列名) — 返回查询到的数据平均值,不是数字就没意义

          select avg(chinese + math + english)  as 平均总分 from exam_result;
    

  • max(列名) — 返回查询到的数据最大值,不是数字就没意义

          select max(english) from exam_result;
    

  • min(列名) — 返回查询到的数据最小值,不是数字就没意义

          select min(math) from exam_result where math > 70;
    

  • group by — 对数据进行分组查询(经常与having搭配)

        select role, max(salary), min(salary), avg(salary) from emp group by role;
    

  • 内连接

          select  sco.score from student  as stu join score as sco on stu.id = sco.student_id and stu.name="许仙";
    

         select sco.score from student as stu ,score as sco where stu.id = sco.student_id and stu.name = "许仙";
    

  • 外连接 — 分为左外连接和右外连接,联合查询的时候左侧表完全显示,就是左外连接,反之,就是右外连接

      select * from student left join score on student.id = score.student_id;select * from student right join score on student.id = score.student_id;
    

数据有点长就不截图啦

  • 子查询 — 嵌入其他sql语句的select语句,也叫嵌套查询

          select * from student where classes_id = (select classes_id from student where name='不想毕业');
    

         select * from score where course_id in (select id from course where name="语文" or name="英文");
    

  • 合并查询 — 实际应用中,合并多个select的执行结果,可以使用集合操作符union、union all,前后查询的结果集中,字段需要一致(不常用,了解即可)

          select * from course where id < 3 union select * from course where name = "英文";
    

MySQL索引事务(简单了解)

  • 概念

    1. 索引是一种特殊的文件,包含对数据表所有记录的引用指针,可以对表中的一列或多列创建索引并指定索引的类型,各类索引有各自的数据结构的实现
  • 作用

    1. 数据库中的表、数据、索引之间的关系,类似书架上的图书、书籍目录的关系
    2. 索引所起的作用类似书籍目录,可用于快速定位、检索数据
    3. 索引对于提高数据库的性能有很大帮助
  • 事务的概念

    1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败,在不同的环境下,都可以有事务,对应在数据库中就是数据库事务

Java的JDBC简单操作

简介

   jdbc,java数据库连接,是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范,它为Java程序猿操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问

JDBC工作原理

  JDBC为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用接口

  • Java语言访问数据库操作完全面向抽象接口编程
  • 开发数据库应用不用限定在特定数据库厂商的API
  • 程序的可移植性大大增强

JDBC使用

  1. 准备数据库驱动包,并添加到项目的依赖中

  2. 建立数据库连接

     // 加载JDBC驱动程序Class.forName("com.mysql.jdbc.Driver");// 创建数据库连接Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/cole?user=root&password=root&useUnicode=true&characterEncoding=UTF-8");
    
  3. 创建操作命令(Statement)

      Statement statement = connection.createStatement();
    
  4. 执行SQL语句

      ResultSet resultSet = statement.executeQuery("select name from student");
    
  5. 处理结果集

        while(resultSet.next()) {String name = resultSet.getInt("name");System.out.println(String.format("Student: name%s", name));    }
    
  6. 释放资源(关闭结果集、命令、连接)

      // 关闭结果集if(resultSet != null) {try {resultSet.close();} catch(SQLException e) {e.printStackTrace();}}// 关闭命令if(statement != null) {try {statement.close();} catch(SQLException e) {e.printStackTrace();}}// 关闭连接命令if(connection != null) {try {connection.close();} catch(SQLException e) {e.printStackTrace();}}

    另一种连接方式:

        // 1.先和数据库建立连接// a) 先创建一个数据源(DataSource)DataSource dataSource = new MysqlDataSource();// b) 给数据源设置属性(为了让代码知道数据库在哪)((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/火箭班2021?characterEncoding=utf8&useSSL=true");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("wangjin521");// c) 通过 getConnection 方法来和服务器建立连接Connection connection = dataSource.getConnection();
    

JDBC使用步骤

  • 创建数据库连接(Connection)
  • 创建操作命令(Statement)
  • 使用操作命令来执行SQL
  • 处理结果集(ResultSet)
  • 释放资源

小结

  • 数据库约束

    约束类型 说明 实例
    null约束 使用not null 指定列不为空 name varchar(20) not null
    unique唯一约束 指定列为唯一的、不重复的 name varchar(20) unique
    default默认约束 指定列为空时的默认值 age int defauult 20
    主键约束 not null 和 unique 的结和 id int primary key
    外键约束 关联其它表的主键或唯一键 foreign key (字段名) references 主表(列)
    check约束 保证列中的值符合指定的条件 check(sex=‘男’ or sex=‘女’)
  • 表的关系

    1. 一对一
    2. 一对多
    3. 多对多:需要创建中间表来映射两张表的关系
  • 查询(重点掌握)

    1. 聚合函数:max、min、avg、count、sum
    2. 分组查询:group by…having…
    3. 内连接
    4. 外连接
    5. 嵌套查询
    6. 合并查询
    7. 事务索引简介
    8. Java中JDBC的简单使用

切记注意 :千万不敢轻易尝试删除修改操作,建议忘记这个命令哈,老板会善待你的!!!

数据库——可不敢删库跑路喽(建议收藏)相关推荐

  1. 『数据库』你以为删库跑路就能让你老板内(lei)牛(liu)满面--数据库的恢复技术

    数据库从入门到精通:戳我 文章目录 一. 事务的基本概念 1.事务 1.1what's the 事务: 1.2事务的定义 1.2.1 事务的显示定义 1.2.2 事务的隐式定义方式 2.事务的ACID ...

  2. 数据库从入门到删库跑路(二) - - PL/SQL

    数据库从入门到删库跑路 - - PL/SQL 1.PL/SQL(Procedure Language & Structured Query Language) 定义:一种高级数据库程序设计语言 ...

  3. 从“删库跑路”聊聊开启BinLog防止误删表数据、结构及数据库

    最近网上很多同学都在疯传疫情删库=跑路,工作中误删数据或者数据库我们一定需要跑路吗?我看未必在 MySQL数据库中我们知道 binlog 日志记录了我们对数据库的所有操作接下来就来开启程序员自救之路 ...

  4. 数据库周刊54丨2020 年度报告:PingCAP、腾讯云数据库、人大金仓、GoldenDB ;CPU 100% SQL优化案例;Mysql内存溢出处理;避免删库跑路黑天鹅……

    热门资讯 [1.PingCAP 2020 年度报告|相信开放的力量 [摘要]本文为PingCAP 2020年度报告.盘点了PingCAP里程碑大事件:完成D轮2.7亿美元融资,创造全球数据库历史新的里 ...

  5. binlog日志_【删库跑路】使用Binlog日志恢复误删的MySQL数据

    前言 "删库跑路"是程序员经常谈起的话题,今天,我就要教大家如何删!库!跑!路! 开个玩笑,今天文章的主题是如何使用Mysql内置的Binlog日志对误删的数据进行恢复,读完本文, ...

  6. 【删库跑路】使用Binlog日志恢复误删的MySQL数据

    前言 "删库跑路"是程序员经常谈起的话题,今天,我就要教大家如何删!库!跑!路! 开个玩笑,今天文章的主题是如何使用Mysql内置的Binlog日志对误删的数据进行恢复,读完本文, ...

  7. 嘲讽了那么多删库跑路的人和事以后,我终于也干了一次删库的事

    有个 有个这么一天,大概是个周五,天灰蒙蒙的,乌云好像都要哭了一样,我爸向我提了一个需求,要求写一套后台管理系统,然后用这套东西通过485/232串口连接水泵什么的; 当时我人就傻了,我才是个三个月的 ...

  8. 删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!

      视学算法报道   编辑:好困 袁榭 [新智元导读]在开源程序界惹出「删库跑路」大新闻的开发者Marak Squires,最近发声:「人无完人,编程错误而已,GitHub你就不用再封我号了嘛!」 2 ...

  9. 成天说要删库跑路,这次真的有人干了

    说句玩笑,乍一看到这条新闻时,还以为是微软系统被员工删库了,吓了我一跳. "删库跑路",一直是程序员们的口头禅,但很少有人敢做这样的事情,毕竟容易牢底坐穿了. 之前发生过某科技公司 ...

最新文章

  1. 周日21点50:关注电子阅读的大潮到来
  2. Java中的注解以及应用 @Deprecated @SupressWarning @Override
  3. Android之error: ‘const struct JNINativeInterface‘ has no member named ‘callVoidMethod‘
  4. JAVA之列表集合ArrayList
  5. contos下安装JDK1.7 ,tomcat,nginx
  6. 2021年PMP考试最新通关宝典
  7. linux桌面共享编程,Remmina:一个Linux下功能丰富的远程桌面共享工具
  8. 上市企业小米科技应用的发票扫描仪
  9. 奈奎斯特与香农定理_奈奎斯特定律和香农定理
  10. 龙哥手把手教你学LabVIEW视觉-深度学习简明教程【halcon篇】
  11. element-ui tamplate slot-scope 模板插槽的使用
  12. 液晶屏控制器方案LT7680A
  13. ATECLOUD智能云测试平台,中国人自己的“LABVIEW”-测试测量软件
  14. Base64转换成图片
  15. 此计算机 未识别的网络,未识别的网络无网络访问解决方法(图文)
  16. [51Nod]NOIP2018提高组省一冲奖班模测训练(一)题解
  17. Apple: Mac OS X美洲狮10.8的硬件兼容列表
  18. 教育培训行业现状分析
  19. 安卓Apk安装过程,社招面试心得
  20. Android与GNU体系

热门文章

  1. 【计算机组成原理】指令系统(一)—— 指令格式
  2. vue 如何使用定时器?
  3. 深度理解TTL电平与CMOS电平的异同
  4. opentracing-02 dapper论文词汇摘要
  5. 受”误解,阿里校招java面试
  6. Xml declaration should precede all document content——问题解决
  7. 十万个为什么 —— 冷知识
  8. RemObjects Data Abstract数据库软件的最佳框架
  9. 稍微深入分析Ubuntu环境下安装NVIDIA驱动导致黑屏的原因
  10. mysql 解压包怎么使用_mysql解压包的安装基础教程