javaweb-数据库

数据库管理系统(D ataB ase M anagement System,简称DBMS)

MySQL

官网:MySQL :: Developer Zone

安装

官网下载地址:MySQL :: Download MySQL Community Server (Archived Versions)

图形化工具

通常为了提高开发效率,都会借助于现成的图形化管理工具来操作数据库。

Jetbrains公司已经将DataGrip这款工具的功能已经集成到了 IDEA当中,所以我们就可以使用IDEA来作为一款图形化界面工具来操作Mysql数据库。

操作

DDL

DDL英文全称是Data Definition Language(数据定义语言)

数据库操作

查询数据库
查询所有数据库:
复制代码
show databases;

查询当前数据库:

复制代码
select database();
创建数据库

语法:

复制代码
create database [ if not exists ] 数据库名;

-- 数据库不存在,则创建该数据库;如果存在则不创建

create database if not extists itcast;

使用数据库

语法:

复制代码
use 数据库名 ;

我们要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则不能操作。

删除数据库

语法:

复制代码
drop database [ if exists ] 数据库名 ;

如果删除一个不存在的数据库,将会报错。

可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。

表操作
创建
复制代码
create table  表名(
    字段1  字段1类型 [约束]  [comment  字段1注释 ],
    字段2  字段2类型 [约束]  [comment  字段2注释 ],
    ......
    字段n  字段n类型 [约束]  [comment  字段n注释 ] 
) [ comment  表注释 ] ;

注意: [ ] 中的内容为可选参数; 最后一个字段后面没有逗号

约束
约束 描述 关键字
非空约束 限制该字段值不能为null not null
唯一约束 保证字段的所有数据都是唯一、不重复的 unique
主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key
默认约束 保存数据时,如果未指定该字段值,则采用默认值 default
外键约束 让两张表的数据建立连接,保证数据的一致性和完整性 foreign key

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

主键自增:auto_increment

  • 每次插入新的行记录时,数据库自动生成id字段(主键)下的值

  • 具有auto_increment的数据列是一个正数序列开始增长(从1开始自增)

数值类型
类型 大小 有符号(SIGNED)范围 无符号(UNSIGNED)范围 描述
TINYINT 1byte (-128,127) (0,255) 小整数值
SMALLINT 2bytes (-32768,32767) (0,65535) 大整数值
MEDIUMINT 3bytes (-8388608,8388607) (0,16777215) 大整数值
INT/INTEGER 4bytes (-2147483648,2147483647) (0,4294967295) 大整数值
BIGINT 8bytes (-2^63,2^63-1) (0,2^64-1) 极大整数值
FLOAT 4bytes (-3.402823466 E+38,3.402823466351 E+38) 0 和 (1.175494351 E-38,3.402823466 E+38) 单精度浮点数值
DOUBLE 8bytes (-1.7976931348623157 E+308,1.7976931348623157 E+308) 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) 双精度浮点数值
DECIMAL 依赖于M(精度)和D(标度)的值 依赖于M(精度)和D(标度)的值 小数值(精确定点数)
复制代码
示例: 
    年龄字段 ---不会出现负数, 而且人的年龄不会太大
    age tinyint unsigned
    
    分数 ---总分100分, 最多出现一位小数
    score double(4,1)

字符串类型

类型 大小 描述
CHAR 0-255 bytes 定长字符串(需要指定长度)
VARCHAR 0-65535 bytes 变长字符串(需要指定长度)
TINYBLOB 0-255 bytes 不超过255个字符的二进制数据
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据

char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性能会更高些。

复制代码
示例: 
    用户名 username ---长度不定, 最长不会超过50
    username varchar(50)
    
    手机号 phone ---固定长度为11
    phone char(11)

日期时间类型

类型 大小 范围 格式 描述
DATE 3 1000-01-01 至 9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59 至 838:59:59 HH:MM:SS 时间值或持续时间
YEAR 1 1901 至 2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00 至 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:01 至 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳

示例:

生日字段 birthday ---生日只需要年月日

birthday date

创建时间 createtime --- 需要精确到时分秒

createtime datetime

查询

查看指定表结构

复制代码
desc 表名 ;#可以查看指定表的字段、字段的类型、是否可以为NULL、是否存在默认值等信息

查询指定表的建表语句

复制代码
show create table 表名 ;
修改

添加字段

复制代码
alter table 表名 add  字段名  类型(长度)  [comment 注释]  [约束];

修改数据类型

复制代码
alter table 表名 modify  字段名  新数据类型(长度);
复制代码
alter table 表名 change  旧字段名  新字段名  类型(长度)  [comment 注释]  [约束];

删除字段

复制代码
alter table 表名 drop 字段名;

修改表名

复制代码
rename table 表名 to  新表名;
删除

删除表语法:

复制代码
drop  table [ if exists ]  表名;

if exists :只有表名存在时才会删除该表,表名不存在,则不执行删除操作(如果不加该参数项,删除一张不存在的表,执行将会报错)。

DML

DML英文全称是Data Manipulation Language(数据操作语言)

增加(insert)

insert语法:

  • 向指定字段添加数据

    复制代码
    insert into 表名 (字段名1, 字段名2) values (值1, 值2);
  • 全部字段添加数据

    复制代码
    insert into 表名 values (值1, 值2, ...);
  • 批量添加数据(指定字段)

    复制代码
    insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2);
  • 批量添加数据(全部字段)

复制代码
    insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);
修改(update)

update语法:

复制代码
update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [where 条件] ;
删除(delete)

delete语法:

复制代码
delete from 表名  [where  条件] ;

DQL

DQL英文全称是Data Query Language(数据查询语言)

SELECT

DQL查询语句,语法结构如下:

复制代码
SELECT
    字段列表
FROM
    表名列表
WHERE
    条件列表
GROUP  BY
    分组字段列表
HAVING
    分组后条件列表
ORDER BY
    排序字段列表
LIMIT
    分页参数
基本查询
  • 查询多个字段

    复制代码
    select 字段1, 字段2, 字段3 from  表名;
  • 查询所有字段(通配符)

    复制代码
    select *  from  表名;
  • 设置别名

    复制代码
    select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ]  from  表名;
  • 去除重复记录

    复制代码
    select distinct 字段列表 from  表名; 
条件查询

语法:

复制代码
select  字段列表  from   表名   where   条件列表 ; -- 条件列表:意味着可以有多个条件
比较运算符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
between ... and ... 在某个范围之内(含最小、最大值)
in(...) 在in之后的列表中的值,多选一
like 占位符 模糊匹配(_匹配单个字符, %匹配任意个字符)
is null 是null

常用的逻辑运算符如下:

逻辑运算符 功能
and 或 && 并且 (多个条件同时成立)
or 或 || 或者 (多个条件任意一个成立)
not 或 ! 非 , 不是
聚合函数

语法:

复制代码
select  聚合函数(字段列表)  from  表名 ;

注意 : 聚合函数会忽略空值,对NULL值不作为统计。

常用聚合函数:

函数 功能
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
排序查询

语法:

复制代码
select  字段列表  
from   表名   
[where  条件列表] 
[group by  分组字段 ] 
order  by  字段1  排序方式1 , 字段2  排序方式2 … ;
  • 排序方式:

    • ASC :升序(默认值)

    • DESC:降序

分页查询

分页查询语法:

复制代码
select  字段列表  from   表名  limit  起始索引, 查询记录数 ;

多表查询

  1. 连接查询

    • 内连接:相当于查询A、B交集部分数据

    • 外连接

      • 左外连接:查询左表所有数据(包括两张表交集部分数据)

      • 右外连接:查询右表所有数据(包括两张表交集部分数据)

  2. 子查询

内连接

隐式内连接语法:

复制代码
select  字段列表   from   表1 , 表2   where  条件 ... ;

显式内连接语法:

复制代码
select  字段列表   from   表1  [ inner ]  join 表2  on  连接条件 ... ;
外连接

左外连接语法结构:

复制代码
select  字段列表   from   表1  left  [ outer ]  join 表2  on  连接条件 ... ;

左外连接相当于查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。

右外连接语法结构:

复制代码
select  字段列表   from   表1  right  [ outer ]  join 表2  on  连接条件 ... ;

右外连接相当于查询表2(右表)的所有数据,当然也包含表1和表2交集部分的数据。

子查询
复制代码
SELECT  *  FROM   t1   WHERE  column1 =  ( SELECT  column1  FROM  t2 ... );

子查询外部的语句可以是insert / update / delete / select 的任何一个,最常见的是 select。

子查询可以书写的位置:

  1. where之后

  2. from之后

  3. select之后

事务

事务作用:保证在一个事务中多次操作数据库表中数据时,要么全都成功,要么全都失败。

SQL语句 描述
start transaction; / begin ; 开启手动控制事务
commit; 提交事务
rollback; 回滚事务

-- 开启事务

start transaction ;

-- 提交事务 (成功时执行)

commit ;

-- 回滚事务 (出错时执行)

rollback ;

四大特性

  • 原子性(Atomicity):事务是不可分割的最小单元,要么全部成功,要么全部失败。

  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

事务的四大特性简称为:ACID

索引

索引(index):是帮助数据库高效获取数据的数据结构 。

创建索引

复制代码
create  [ unique ]  index 索引名 on  表名 (字段名,... ) ;

查看索引

复制代码
show  index  from  表名;

删除索引

复制代码
drop  index  索引名  on  表名;
相关推荐
Karoku0669 分钟前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
小技与小术1 小时前
数据库表设计范式
数据库·mysql
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer1 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体1 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪2 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
一只爱撸猫的程序猿2 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员
无敌岩雀2 小时前
MySQL中的索引
数据库·mysql
a_安徒生2 小时前
linux安装TDengine
linux·数据库·tdengine