数据库

1.基本操作

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

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

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

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

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

1.3数据库操作语句

创建数据库

create database [if not exists] name

删除数据库

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建表操作
create table [if not exists]`name`(
`列名`+类型+字段属性+注释
)engine='' default charset=''
1.7数据库引擎

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

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

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

2.MySQL数据管理

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

insert

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

update

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

delete

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

select语句顺序

基本查询

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

where条件子句

--逻辑查询
where 列名 (=,>=,<=,!=,<>..)
--模糊(范围)查询
where 列名 between .. and ..
--模糊匹配
where 列名 like '%'
--列表查找
where 列名 in ('',''...)

联表查询

inner join --求交集-(where、on)
left join --交集+左集-(on)
right join --交集+右集 -(on) eg:
select studentname,subjectResult
from student as s
inner join result as r
on s.num = r.num

自连接

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

分页和排序

--排序:升序ASC 降序DESC eg:
select name
from student
order by id ASC
--分页: limit 起始行 每页行数
select name
from student
limit 0,5 --从0行开始,每五行一页

子查询

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

MySQL函数

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

聚合函数

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

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

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

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

数据库级别的MD5加密

update 表名 set 列名 = MD5(列名)       --加密
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转账事务实例
--mysql默认开启事务自动提交
set autocommit = 0 --关闭自动提交
start transaction --标记事务开始
... --sql语句
--执行成功,事务提交
commit
--执行失败,事务回滚(默认到最开始的地方)
rollback
--事务结束,开启自动提交
set autocommit = 1

4.索引

4.1索引的分类

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

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

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

5.数据库用户管理

6.规范数据库设计

6.1三大范式

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

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

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

7.JDBC

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

关系数据库——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. uoj220【NOI2016】网格

    刚了几个小时啊,这tm要是noi我怕不是直接滚粗了.我判答案为1的情况试了几种做法,最后终于想到了一个靠谱的做法,然后细节巨多,调了好久,刚拿到97分时代码有6.2KB了,后来发现有些东西好像没啥用就 ...

  2. 齐博X1忘记管理员密码了怎么办?如何强制进后台?

    当你忘记密码,或者是某些原因导致进不了后台的话,这个时候你修改一下根目录的admin.php文件,把文件第二行 //define('SUPER_ADMIN',true); 前面的 // 双斜杠删除,再 ...

  3. Windows7下驱动开发与调试体系构建——0.概述

    本文集内容为windows7x64下驱动开发与调试体系构建,内容目录如下: 1.驱动开发的环境准备 2.R3与R0的通信示例 3.自建调试体系概述 4.在x64下使用汇编代码 5.实战反调试标记位(N ...

  4. FileNotFoundError: Could not find module libmxnet.dll

    解决方法:把CUDA的bin目录下的dll文件全部复制到libmxnet.dll所在的目录 问题原因:libmxnet.dll引用了一些CUDA的dll,但是找不到路径.

  5. 【lwip】09-IPv4协议&超全源码实现分析

    目录 前言 9.1 IP协议简述 9.2 IP地址分类 9.2.1 私有地址 9.2.2 受限广播地址 9.2.3 直接广播地址 9.2.4 多播地址 9.2.5 环回地址 9.2.6 本地链路地址 ...

  6. Redis Cluster 数据分片

    介绍 Redis Cluster Redis 集群是 Redis 提供的分布式数据库方案, 集群通过分片(sharding) 来进行数据共享, 并提供复制和故障转移功能. 节点 一个 Redis 集群 ...

  7. 数据库json字段类型总结

    ----------------------------------------=================以下是个人自己总结,可能只有自己看的懂.===================---- ...

  8. Git+Github协作开发流程

    采用合作开发者的方式进行协作开发,下面以zlcook和zlserver合作开发iqas-ios-record项目为例进行讲解,zlcook为项目创建者,zlserver为项目参与者.协作开发步骤如下: ...

  9. conky配置(附配置项作用解释)

    alignment top_right #是否嵌入桌面 background yes #是否绘制窗口边框 draw_borders no #窗口边框 border_width 10 #cpu_avg_ ...

  10. 谁说.NET没有GC调优?只改一行代码就让程序不再占用内存

    经常看到有群友调侃"为什么搞Java的总在学习JVM调优?那是因为Java烂!我们.NET就不需要搞这些!"真的是这样吗?今天我就用一个案例来分析一下. 昨天,一位学生问了我一个问 ...