关系数据库——MySQL
数据库
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索引底层
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的更多相关文章
- ES数据架构与关系数据库Mysql
		ES数据架构的主要概念(与关系数据库Mysql对比) MySQL ElasticSearch Database Index Table Type Row Document Column Field S ... 
- Django
		一.Django 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统) ... 
- 大数据存储:MongoDB实战指南——常见问题解答
		锁粒度与并发性能怎么样? 数据库的读写并发性能与锁的粒度息息相关,不管是读操作还是写操作开始运行时,都会请求相应的锁资源,如果请求不到,操作就会被阻塞.读操作请求的是读锁,能够与其它读操作共享,但是当 ... 
- python爬虫抓取数据
		URL管理器实现方式:1. 内存python内存待爬取URL集合:set()已爬取URL集合:set() 2. 关系数据库MySQLurls(url, is_crawled) 3. 缓存数据库(高性能 ... 
- 分区表,桶表,外部表,以及hive一些命令行小工具
		hive中的表与hdfs中的文件通过metastore关联起来的.Hive的数据模型:内部表,分区表,外部表,桶表受控表(managed table):包括内部表,分区表,桶表 内部表: 我们删除表的 ... 
- Elasticsearch简单介绍
		如何对站内的数据进行检索? ElasticSearch是比较著名的一个分布式检索解决方案.传统的数据库例如mysql,oracle等,对一个关键词进行检索通常都是采用like的匹配,对性能或者数据量的 ... 
- sqoop关系型数据迁移原理以及map端内存为何不会爆掉窥探
		序:map客户端使用jdbc向数据库发送查询语句,将会拿到所有数据到map的客户端,安装jdbc的原理,数据全部缓存在内存中,但是内存没有出现爆掉情况,这是因为1.3以后,对jdbc进行了优化,改进j ... 
- 【转】Elasticsearch学习
		原作者:铭毅天下,原文地址:blog.csdn.net/laoyang360 https://blog.csdn.net/wojiushiwo987/article/details/52244917 ... 
- spark之JDBC开发(连接数据库测试)
		spark之JDBC开发(连接数据库测试) 以下操作属于本地模式操作: 1.在Eclipse4.5中建立工程RDDToJDBC,并创建一个文件夹lib用于放置第三方驱动包 [hadoop@CloudD ... 
- spark之JDBC开发(实战)
		一.概述 Spark Core.Spark-SQL与Spark-Streaming都是相同的,编写好之后打成jar包使用spark-submit命令提交到集群运行应用$SPARK_HOME/bin#. ... 
随机推荐
- Vue学习之--------绑定样式、条件渲染、v-show和v-if的区别(2022/7/12)
			文章目录 1.绑定样式 1.1 基础知识 1.2 代码实例 1.3 测试效果 2.条件渲染 2.1 基本知识 2.2 代码实例 2.3 测试效果 1.绑定样式 没啥好说的.我觉得还没直接引入外部写好的 ... 
- 解决@Url.Action("Action", "Controller",new {p1=v1,p2=v2 })的传参问题
			1.首先@Url.Action("Action", "Controller",new {p1=v1,p2=v2 })后面的model参数不可以直接用变量 需要先 ... 
- Netty学习记录-入门篇
			你如果,缓缓把手举起来,举到顶,再突然张开五指,那恭喜你,你刚刚给自己放了个烟花. 模块介绍 netty-bio: 阻塞型网络通信demo. netty-nio: 引入channel(通道).buff ... 
- onps栈移植说明(1)——onps栈的配置及裁剪
			onps栈的移植涉及几个部分:1)系统配置及裁剪:2)基础数据类型定义:3)RTOS适配层实现:4)编写网卡驱动并注册网卡.本文作为onps栈移植的指导性文件将给出一般性的移植说明及建议,具体的移植样 ... 
- Spring Boot框架下实现Excel服务端导入导出
			Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.今天 ... 
- 国产图形化的msf——Viper初体验
			目录 免责声明: Viper简介 安装 使用 免责声明: 本文章仅供学习和研究使用,严禁使用该文章内容对互联网其他应用进行非法操作,若将其用于非法目的,所造成的后果由您自行承担,产生的一切风险与本文作 ... 
- 【云原生 · Kubernetes】apiserver高可用
			个人名片: 因为云计算成为了监控工程师 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying 7.1 高可用选型 ipvs+keepalived nginx+keepalived hap ... 
- requests模块/openpyxl模块/简单爬虫实战
			内容概要 第三方模块的下载及使用 网络爬虫及requests模块 网络爬虫实战爬取二手房信息 自动化办公领域模块openpyxl 练习题及答案 第三方模块的下载 第三方模块就类似与别人写好的模块,我们 ... 
- GeoServer 2.15.0 开启跨域设置
			GeoServe老版本可能开启跨域设置比较麻烦,但2.15.0版本还是比较简单的. 首先找到安装目录下的 webapps\geoserver\WEB-INF\web.xml 文件,打开进行编辑,建议编 ... 
- Datawhale组队学习_Task03:详读西瓜书+南瓜书第4章
			第4章 决策树 4.1 基本流程 #输入:训练集D={${(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}$}; #属性集A=${{a_1,a_2,...,a_d}}$. #过程: ... 
 
			
		