springbootday06 mysql
一、MySql
1. 数据库概述
数据库( Database )是按照数据结构来组织、存储和管理数据的仓库 。 数据按照特定的格式存储起来,用户可以通过
SQL (Structured Query Language)
对数据库中的数据进行增删改查, 这比咱们之前使用文件来管理数据要方便得多。
- 数据库 & 表
数据库管理系统(DataBase Manager System ) , 简称 DBMS , 是指一种操作和管理数据库的软件,这类软件用于创建、使用、维护数据库,对数据库进行统一管理和控制,以保证数据的完整性和安全性。我们可以通过它访问数据库中的表数据
数据库其实是存储数据的仓库,在数据库中有数据表,我们所存的数据其实都是往数据表里面存储,而数据库又管理者很多张表,表示这几张表示一批数据的集合。正如我们第一天使用文件存储学生数据一样,如果使用数据库来存储,我们就会有一个表叫做
student
表,如果还需要存储教师信息,那么还应该有一个teacher
表 ,而这两张表正好位于一个数据库中。
- 常见的数据库 SQL 适合做
- mysql 开源免费 , 小型数据库, oracle收购
- oracle 收费 ,大型数据库,oracle公司产品
- sql server 收费 微软产品
- SQLite 嵌入式小数据库 、 移动端常用(Android | ios)
- DB2 收费 , IBM 产品
- H2 开源 ,嵌入式 | 内存版 数据库,纯java实现
...
以上数据库都是关系型数据库 ---> 里面存储的数据,可以建立关系。
非关系型数据库。 NoSql not only sql 不仅仅是sql 适合做缓存 购物车
mogodb redis ... 秒杀 抢购
2. MySql 安装
mysql安装
可视化工具安装
3. 数据库操作
先使用可视化工具演练过一次后,再使用命令演示
- 创建数据库
create database xxx;
- 删除数据库
drop database xxx;
- 修改数据库
# 一般很少修改数据库 , 如果修改,只会修改数据库的编码,这一般很少修改。
alter database xxx character set gbk;
alter database xxx character set utf8;
- 显示数据库
show databases;
# 显示这个数据库创建的语句,以及编码是什么
show create database xxxx;
4.字段类型介绍
java mysql
int int
float float
double double
char(字符)/String(字符串) char/varchar 固定长度(即便长度不够,会补空格) | 可变长度 (数据多长,长度多长)
Date date(日期)|time(时间)|datetime (日期和时间)| timestamp(日期时间 ,会自动使用当前时间):
文件类型 BLOB | TEXT : TEXT 文本类型 , BLOB 二进制类型
约束:
单表约束:
主键约束: primary key
唯一约束: unique
非空约束: not null
5. 数据库表操作
先使用可视化工具演练过一次后,再使用命令演示
- 创建数据表
语法: create table 表名(字段名 类型(长度) 【约束】 , 字段名 类型(长度)[约束]);
CREATE TABLE aa (id INTEGER PRIMARY KEY AUTO_INCREMENT , username VARCHAR(25));
- 删除数据表
语法: delete from --表名
delete from aa; -- 只会清空表数据,不释放空间(序号接上以前),表依然存在
truncate table aa ; -- 清空表数据,释放空间(序号从1开始),表依然存在
DROP TABLE aa; -- 删除表,一切都消失
- 修改数据表
alter table 表名 add 列名 类型(长度) 约束; --修改表添加列.
alter table 表名 modify 列名 类型(长度) 约束; --修改列的类型长度及约束.
alter table 表名 change 旧列名 新列名 类型(长度) 约束; --修改列名.
alter table 表名 drop 列名; --删除列.
rename table 表名 to 新表名; --修改表名(比较少用)
- 显示数据表
show tables ; -- 显示当前数据库的所有表
desc aa; --查看具体某张表的结构
show create table aa; --显示建表语句
6. 约束介绍
- 主键约束:primary key
关键字(primary key) 是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录 。 比如如何突出一名学生的唯一性,一般我们采用学号来表示,如何表示一个人的唯一,我们可以使用身份证号来表示。但是在数据库范畴里面,表示一条记录的唯一,我们通过会增加id 列来表示主键。
主键必须是唯一、 不能为空 , 可以设置为自增长。
# 主键约束可以在建表的时候就给定
create table stu(id int primary key auto_increment , name varchar(25));
# 也可以后面在修改,增加主键约束
create table stu(id int , name varchar(25));
alter table stu modify id int primary key ;
# 如果还想增加自增长,那么还可以继续修改
alter table stu modify id int auto_increment;
- 唯一约束:unique 主键的值 也是唯一的。
唯一约束指的是表示某个列的值唯一不允许重复。
# 可以在建表的时候给出
create table stu(id int primary key auto_increment , name varchar(25) unique);
# 或者后面再修改
create table stu(id int primary key auto_increment , name varchar(25));
alter table stu modify name varchar(25) unique;
- 非空约束:not null
非空约束,指的是具体某一列不允许为空,必须有值。
# 可以在建表的时候给出
create table stu(id int primary key auto_increment , name varchar(25) not null);
# 或者后面再修改
create table stu(id int primary key auto_increment , name varchar(25));
alter table stu modify name varchar(25) not null;
7. 表记录CRUD
该小节注重的是表中数据的操作。
1. 增加
--添加一条记录,对具体某些列赋值。顺序要对应 ,若是字符或者日期需要添加 '' 引号
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..);
--添加一条记录,表中的所有列都要赋值。
insert into 表 values (值1,值2,值3..);
2. 删除
-- 删除的命令和上面删除表的命令非常相似。 只是多了where条件而已。
delete from 表名 [where 条件];
3. 修改
-- 修改表,针对具体某一列进行赋值
update 表名 set 字段名=值,字段名=值 [where 条件];
-- 如: 更新张三的年龄 ,后面的where 用于限定找到张三
update student set age = 18 where name = '张三';
--如果后面不带where, 那么将会把整张表的所有学生年龄都改为18
update student set age = 18;
4. 查询
- 简单查询
--语法如下:
select [distinct]*[列名,列名] from 表 [where 条件].
--例子:
* 1.查询所有的商品. select * from product;
* 2.查询商品名和商品价格. select pname,price from product;
* 3.别名查询.使用的关键字是as.as可以省略的.
* 3.1表别名: select * from product as p;
* 3.2列别名:select pname as pn from product;
* 4.去掉重复值. select distinct price from product;
图书借阅系统,
谁来借图书。
张三 1
张三 1
张三 1
- 条件查询
* 1.查询商品名称为十三香的商品所有信息:
* select * from product where pname = '十三香';
* 2.查询商品价格>60元的所有的商品信息:
* select * from product where price > 60;
-- where后的条件写法:
* > ,<,=,>=,<=,<>
* like 使用占位符 _ 和 % _代表一个字符 %代表任意个字符.
* select * from product where pname like '%新%';
* in 在某个范围中获得值.
* select * from product where pid in (2,5,8);
* between 12 and 56
- 排序查询
* 1.查询所有的商品,按价格进行排序.(asc-升序,desc-降序)
* select * from product order by price;
* 2.查询名称有新的商品的信息并且按价格降序排序.
* select * from product where pname like '%新%' order by price desc;
按价格排序 、 分数排序 、 日期 、 年龄...
order by 列 asc(升序) | desc(降序)
- 聚合查询
* sum(),avg(),max(),min(),count();
* 1.获得所有商品的价格的总和.--select sum(price) from product;
* 2.获得所有商品的平均价格.--select avg(price) from product;
* 3.获得所有商品的个数.--select count(*) from product;
- 分组查询
* 1.根据cno字段分组,分组后统计商品的个数.
* select cno,count(*) from product group by cno;
* 2.根据cno分组,分组统计每组商品的平均价格,并且平均价格> 60;
* select cno,avg(price) from product group by cno having avg(price)>60;
having 关键字可以让我们筛选成组后的各种数据,可以理解为对分组后的数据进行再次过滤
- 分页查询
-- 第一个?表示跳过前面多少条 , 第二个?表示返回多少条记录。
select * from product limit ? , ? ;
springbootday06 mysql的更多相关文章
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- mysql每秒最多能插入多少条数据 ? 死磕性能压测
前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...
- LINUX篇,设置MYSQL远程访问实用版
每次设置root和远程访问都容易出现问题, 总结了个通用方法, 关键在于实用 step1: # mysql -u root mysql mysql> Grant all privileges o ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 闰秒导致MySQL服务器的CPU sys过高
今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
随机推荐
- 使用taobao cnpm 源解决npm无法安装module问题
npm 安装nativescript时出现异常,一直停着不动.应该是源被墙了的问题可以使用淘宝仓库,执行下面的命令: alias cnpm="npm --registry=https://r ...
- B4260 Codechef REBXOR
真是6块钱cpu(笑 爆炸入口 踹树练习(汗 对于二进制异或和弹性,我们可以贪心的来做. 瓶颈在于快速贪心. 我们可以维护一个trie树,储存异或前缀和.每次在trie树上贪心的跑. 正向and反向跑 ...
- 第24章 SPI—读写串行FLASH—零死角玩转STM32-F429系列
第24章 SPI—读写串行FLASH 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- image retrieval数据集
1. Oxford,vgg组,主要是building方面的数据.http://www.robots.ox.ac.uk/~vgg/data/oxbuildings/index.html 2. Calte ...
- java 基础词汇 必须 第九天
Collection 集合 List 列表集合 Set 不重复集合 Linked 链表 Vector 线程安全集合 Hash 哈希值 tree 树型结构 Map 键值对集合 add 增加 remove ...
- 简单了解,使用oracle中的索引,表分区
索引的分类 如下: 物理分类 逻辑分类 分区或非分区索引 单列或组合索引 B树索引(标准索引) 唯一或非唯一索引 正常或反向键索引 基于函数索引 位图索引 B树索引 b树索引通常也称为标准索引,索 ...
- A Country on Wheels【车轮上的国家】
A Country on Wheels As cultural symbols go, the American car is quite young. 作为文化象征的美国汽车还相当年轻. The ...
- PAT (Basic Level) Practice 1006 换个格式输出整数
个人练习 让我们用字母B来表示“百”.字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为BBSSS1234,因为 ...
- 工作中遇到的比较奇怪的一些sql(一些子查询)
在列中进行子查询 1.在一个表中有多个员工ID,比如一个下单员工,一个修改订单的员工,可以使用在列中进行子查询,具体如下: ( SELECT staff_name FROM sp_staff_basi ...
- scrapy进行分布式爬虫
今天,参照崔庆才老师的爬虫实战课程,实践了一下分布式爬虫,并没有之前想象的那么神秘,其实非常的简单,相信你看过这篇文章后,不出一小时,便可以动手完成一个分布式爬虫! 1.分布式爬虫原理 首先我们来看一 ...