数据库

1.基本操作

1.1命令行操作
  1. mysql -u username -p+password; --连接数据库
  2. flush privileges; --刷新权限
  3. show databases; --查看所有的数据库
  4. use databasename; --切换数据库
  5. show tables; --显示当前数据库所有表信息
  6. describe databasename; --显示该数据库中所有表信息
  7. create database name; --创建数据库
  8. exit; --退出链接
  9. DESC tablename;--显示表的基本结构
1.2四大数据库语言

DDL (database definition language数据库定义语言)

DML (database manipulation language数据库操作语言)

DQL (database query language数据库查询语言)

DCL (database control language数据库控制语言)

1.3数据库操作语句

创建数据库

  1. create database [if not exists] name

删除数据库

  1. drop database [if exists] name
1.4列的数据类型

数值型:

tinyint 1个字节

smallint 2个字节

mediumint 3个字节

int 4个字节

float 4个字节

double 8个字节

decimal 字符串形式的浮点数

字符型:

char 字符串0~255

varchar 可变长字符串0~65535

tinytext 微型文本

text 文本串

日期型:

date Year-Mouth-Day 日期格式

time Hour-Minute-Second 时间格式

datetime 日期+时间

timestamp 时间戳1970.1.1~now 的毫秒数

null型:

未知类型、无值类型

1.5数据库的字段属性

Unsigned:无符号整数,不能为负数

zerofill:0填充

comment:注释

default:默认值

auto_increment:每执行语句一次 ,该值加一

version : 乐观锁

is_delete 伪删除

gmt_create 创建时间

gmt_update 修改时间

1.6建表操作
  1. create table [if not exists]`name`(
  2. `列名`+类型+字段属性+注释
  3. )engine='' default charset=''
1.7数据库引擎

INNODB 默认引擎,安全性高,支持事务处理,多表操作

MYISAM 早期引擎,节约空间,速度较快

MYISAM INNODB
事务支持 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间的大小 比较小 较大,约为2倍
1.8修改和删除表字段
  1. --修改表名
  2. alter table oldname rename as newname
  3. --增加表字段
  4. alter table tablename add 新的列名+类型
  5. --修改表字段
  6. alter table tablename modify 列名 + 新加的字段属性 --不能重命名
  7. alter table tablename change 新列名 + 字段属性 --重命名
  8. --删除表字段
  9. alter table tablename drop 列名
  10. --删除表(如果存在则删除)
  11. drop table if exists tablename

2.MySQL数据管理

2.1外键
  1. --创建表时加入外键
  2. foreign key(关联字段) references 主表(关联字段)
  3. key `约束名` `约束字段`
  4. constraint `约束名` foreign key (`约束字段`) references `主表``关联字段`
  5. --添加外键约束
  6. ALTER TABLE 从表
  7. ADD CONSTRAINT 约束名 FOREIGN KEY (关联字段) references 主表(关联字段);
2.2DML数据库操作语言

insert

  1. insert into 表名 ([列名1....]) values ('值'...),('值'...)--多行插入括号隔开

update

  1. update 表名 set 列名=新值 [选择条件 where ...]

delete

  1. delete from 表名 [选择删除列条件]--删除条件对应的列
  2. truncate 表名 --清空表,索引、键值等不会变,自增回归零
2.3DQL数据库查询语言

select语句顺序

基本查询

  1. select [distinct去重] 字段或* [as 别名] from 表名
  2. --字符串追加函数concat(a,b) eg:
  3. select concat('姓名:',name) from student

where条件子句

  1. --逻辑查询
  2. where 列名 (=,>=,<=,!=,<>..)
  3. --模糊(范围)查询
  4. where 列名 between .. and ..
  5. --模糊匹配
  6. where 列名 like '%'
  7. --列表查找
  8. where 列名 in ('',''...)

联表查询

  1. inner join --求交集-(whereon)
  2. left join --交集+左集-(on)
  3. right join --交集+右集 -(on) eg:
  4. select studentname,subjectResult
  5. from student as s
  6. inner join result as r
  7. on s.num = r.num

自连接

  1. --将一张表当做两张表内部联表查询,eg:
  2. select a.name,b.name
  3. from student as a,student as b
  4. where a.childId = b.fatherId
  5. --查询先行课或者父子类

分页和排序

  1. --排序:升序ASC 降序DESC eg:
  2. select name
  3. from student
  4. order by id ASC
  5. --分页: limit 起始行 每页行数
  6. select name
  7. from student
  8. limit 0,5 --从0行开始,每五行一页

子查询

  1. --可以在where条件语句中嵌入另一个查询
  2. where id = (
  3. select id ...
  4. )

MySQL函数

  1. ABS(-8) --绝对值
  2. ceiling() --向上取整
  3. floor() --向下取整
  4. rand() --获取一个0~1的随机数
  5. sign() --判断该数符号
  6. char_length() --返回该字符串的长度
  7. concat('',''..) --字符串拼接
  8. instr('','a') --返回a在字符串中的索引
  9. reverse() --字符串反转
  10. current_date()
  11. curdate --返回当前日期
  12. now()
  13. localtime() --返回当前时间
  14. sysdate() --系统时间

聚合函数

函数名称 功能
count() 计数count(字段)会忽略null,count(*)和count(1)
sum() 求和
avg() 平均值
max() 最大值
min() 最小值

在聚合函数下,可以用某个字段进行分组求聚合,关键字为group by 列字段

如果要在分组过滤的基础上在进行条件筛选,此时不能使用where,需要使用having

  1. select AVG(grade) as 平均分 from result
  2. group by subjectId
  3. having 平均分>80

数据库级别的MD5加密

  1. update 表名 set 列名 = MD5(列名) --加密
  2. insert into 表名 values(MD5(123456)) --插入的同时加密

3.事务

3.1 事务ACID原则

ACID

Atomicity原子性:统一成功、统一失败

Consistency一致性:事务前后整个系统系统逻辑运算结果不变

Durability持久性:事务一旦提交永久性更改

Lsolation隔离性 :多个事务之间相互隔离,事务隔离容易产生以下几种问题

  • 脏读(读入未提交事务的数据)、不可重复度(读入其他事务修改的数据)、虚读(读入其他事务插入的数据)....

为此在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同,分别是:

1、读未提交(Read Uncommited),该隔离级别允许脏读取(一个事务读取到了另一个事务未提交的数据),其隔离级别最低

2、授权读取也称为已提交读(Read Commited),授权读取只允许获取已经提交的数据。授权读取允许不可重复读取。

3、可重复读(Repeatable Read)

就是保证在事务处理过程中,多次读取同一个数据时,其值都和事务开始时刻是一致的,因此该事务级别禁止不可重复读取和脏读取,但是有可能出现幻影数据。所谓幻影数据,是指在一个事务中读取到了其他事务插入的数据、一般是行影响

4、串行化

是最严格的事务隔离级别,它要求所有事务被串行执行,即事务只能一个接一个的进行处理,不能并发执行。

3.2转账事务实例
  1. --mysql默认开启事务自动提交
  2. set autocommit = 0 --关闭自动提交
  3. start transaction --标记事务开始
  4. ... --sql语句
  5. --执行成功,事务提交
  6. commit
  7. --执行失败,事务回滚(默认到最开始的地方)
  8. rollback
  9. --事务结束,开启自动提交
  10. set autocommit = 1

4.索引

4.1索引的分类

帮助MySQL高效获取数据的数据结构,show index from 表名(显示该表的所有索引信息)

  • 主键索引(primary key)
  • 唯一索引(unique key)
  • 常规索引(key/index)
  • 全文索引(fulltext index)
4.2添加索引
  1. alter table 表名 add fulltext index 索引名(字段名)
4.3索引底层

CodingLabs - MySQL索引背后的数据结构及算法原理

5.数据库用户管理

6.规范数据库设计

6.1三大范式

第一范式:保证列信息不可再分

第二范式:具备第一范式,每列都只与主键相关

第三范式:具备第一、二范式,每列都与主键直接相关

7.JDBC

7.2JDBC程序
  1. public class JDBCtest {
  2. public static void main(String[] args) throws ClassNotFoundException, SQLException {
  3. //1.加载驱动(JDBC5.0后不需要加载)
  4. Class.forName("com.mysql.jdbc.Driver");
  5. //2.用户信息和url
  6. //协议+主机名+端口号+数据库名+?+参数
  7. //?+参数(支持中文编码、设置编码utf8、设置安全连接)
  8. String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&charactorEncoding=utf8&useSSL=false";
  9. String userName = "root";
  10. String password ="123456";
  11. //3.链接数据库,获取数据库对象(可以进行事务提交、回滚)
  12. Connection connection = DriverManager.getConnection(url,userName,password);
  13. //4.获取数据库执行对象
  14. Statement statement = connection.createStatement();
  15. //5.数据库操作
  16. String sql = "Select * from student";
  17. ResultSet set = statement.executeQuery(sql);//获取查询结果链表
  18. while(set.next()){
  19. System.out.print(set.getObject("id")+" == ");
  20. System.out.println(set.getObject("name"));
  21. }
  22. //6.释放连接
  23. set.close();
  24. statement.close();
  25. connection.close();
  26. }
  27. }

关系数据库——MySQL的更多相关文章

  1. ES数据架构与关系数据库Mysql

    ES数据架构的主要概念(与关系数据库Mysql对比) MySQL ElasticSearch Database Index Table Type Row Document Column Field S ...

  2. Django

    一.Django 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统) ...

  3. 大数据存储:MongoDB实战指南——常见问题解答

    锁粒度与并发性能怎么样? 数据库的读写并发性能与锁的粒度息息相关,不管是读操作还是写操作开始运行时,都会请求相应的锁资源,如果请求不到,操作就会被阻塞.读操作请求的是读锁,能够与其它读操作共享,但是当 ...

  4. python爬虫抓取数据

    URL管理器实现方式:1. 内存python内存待爬取URL集合:set()已爬取URL集合:set() 2. 关系数据库MySQLurls(url, is_crawled) 3. 缓存数据库(高性能 ...

  5. 分区表,桶表,外部表,以及hive一些命令行小工具

    hive中的表与hdfs中的文件通过metastore关联起来的.Hive的数据模型:内部表,分区表,外部表,桶表受控表(managed table):包括内部表,分区表,桶表 内部表: 我们删除表的 ...

  6. Elasticsearch简单介绍

    如何对站内的数据进行检索? ElasticSearch是比较著名的一个分布式检索解决方案.传统的数据库例如mysql,oracle等,对一个关键词进行检索通常都是采用like的匹配,对性能或者数据量的 ...

  7. sqoop关系型数据迁移原理以及map端内存为何不会爆掉窥探

    序:map客户端使用jdbc向数据库发送查询语句,将会拿到所有数据到map的客户端,安装jdbc的原理,数据全部缓存在内存中,但是内存没有出现爆掉情况,这是因为1.3以后,对jdbc进行了优化,改进j ...

  8. 【转】Elasticsearch学习

    原作者:铭毅天下,原文地址:blog.csdn.net/laoyang360 https://blog.csdn.net/wojiushiwo987/article/details/52244917 ...

  9. spark之JDBC开发(连接数据库测试)

    spark之JDBC开发(连接数据库测试) 以下操作属于本地模式操作: 1.在Eclipse4.5中建立工程RDDToJDBC,并创建一个文件夹lib用于放置第三方驱动包 [hadoop@CloudD ...

  10. spark之JDBC开发(实战)

    一.概述 Spark Core.Spark-SQL与Spark-Streaming都是相同的,编写好之后打成jar包使用spark-submit命令提交到集群运行应用$SPARK_HOME/bin#. ...

随机推荐

  1. python基础之常用数据类型和字符串

    一.数据类型 在python3中有六大标准数据类型:Numbers(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionaries(字典). 其中: ...

  2. 知识图谱-生物信息学-医学顶刊论文(Bioinformatics-2021)-KG4SL:用于人类癌症综合致死率预测的知识图神经网络

    5.(2021.7.12)Bioinformatics-KG4SL:用于人类癌症综合致死率预测的知识图神经网络 论文标题:KG4SL: knowledge graph neural network f ...

  3. Conda的使用

    conda常用的命令 在Anaconda Powershell Prompt 输入: 1.conda -V检验是否安装及当前conda的版本. 2.conda list查看安装了哪些包 3.conda ...

  4. Windows7下驱动开发与调试体系构建——1.驱动开发的环境准备

    目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 系统基础环境 开发环境 win7下开发驱动需要安装vs,这里使用2017. 安装vs ...

  5. Django Admin save 重写 保存

    在 django admin管理控制台中,用户按下"Save and add another",表单的字段值仍然填充最后插入的值 并且保存 在ModelAdmin中添加选项save ...

  6. 类视图函数 VIEW

    常用的视图函数: ListView.DetailView.UpdateView 1 ListView object_list:此属性表示对象的列表 常用场景: 1.展示数据库中信息: 2.在展示信息时 ...

  7. spring源码解析(一) 环境搭建(各种坑的解决办法)

    上次搭建spring源码的环境还是两年前,依稀记得那时候也是一顿折腾,奈何当时没有记录,导致两年后的今天把坑重踩了一遍,还遇到了新的坑,真是欲哭无泪;为了以后类似的事情不再发生,这次写下这篇博文来必坑 ...

  8. EventBridge助力阿里云视觉智能开放平台AI智能存储实践

    本文作者:李建,阿里巴巴达摩院技术专家. 01 视觉智能开放平台(VIAPI)业务场景介绍 阿里云视觉智能开放平台(简称 VIAPI),是基于之前很多技术实践经验积累的 AI 能力的沉淀平台.目前整个 ...

  9. JAVA系列之类加载机制详解

    类的加载机制 ? 双亲委派机制 ? 什么是类加载器 ? 自定义类加载器有哪些应用场景 ? 通常,在关于Java的类加载部分会遇到以上疑问,本文将对类加载重要部分做详细介绍,包括重要的基础概念和应用场景 ...

  10. 【Java并发006】使用层面:Lock锁机制全解析

    一.前言 二.synchronized局限性 + Lock锁机制的引入 2.1 synchronized局限性 第一,使用synchronized,其他线程只能等待直到持有锁的线程执行完释放锁(syn ...