数据库简介
理解
-
用于持久化保存数据的管理软件
-
保存数据技术
- 1、将数据保存到内存中:变量、对象、数组、集合
特点:易失性 - 2、持久化保存技术:IO
特点:可操作性比较差,效率低 - 数据库:是一个存储数据的仓库本质上是一个文件系统、可以通过结构化查询语言简称sql对里面的数据进行CRUD(增删改查)
- 1、将数据保存到内存中:变量、对象、数组、集合
特点
- 可以持久化保存数据
- 保存数据是有组织、有结构
- 以表的形式保存数据 方便操作
- 提供丰富的sql语句 操作数据
数据库分类
-
关系型数据库
-
Orcale、MySQL、SQLServer、DB2...
-
存储数据是以行和列的形式存储、这一系统的行与列构成了表、若干张表构成库。数据与数据之间有关联关系
-
特征
- java类名对应数据库的表名
- java类中的属性对应数据库表中字段
- java类中的属性的类型对应数据库中表中字段类型
- java类中创建一个对象对应数据库中表中一条数据
-
-
非关系型数据库
-
redis、MongDB、HBase...
-
应用场景
- 数据要被查询
- 数据不易修改
-
数据是列、图片、文档、字符串..等形式进行存储、数据与数据之间没有任何关系
-
-
区别
- 关系型数据库将数据存储在硬盘、非关系型数据库存储内存中
- 非关系检索效率要远远高于关系型数据库
数据库系统结构
- DB:数据库,存储数据的容器
- DBMS: 数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
- SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,数据库通用语言
SQL基本分类
结构化查询语言是一门特殊的编程语言
主要用途:用于对数据库中数据增删改查
DDL
-
数据定义语言:对数据库的创建和删除 以及对数据库表的创建删除和修改
-
关键字
- create、drop、alter
DML
-
数据库查询语言:对数据库表中数据 增、删、改、查
-
关键字
- insert、delete、update
DQL
-
数据查询语言:对数据库表中数据查询
-
关键字
- select
DCL
-
数据控制语言:指定用户 分配权限
-
关键字
- grant、reoke
数据类型
整型
- tinyint/smallint/int/bigint
浮点型
- float(n,m)/double(n,m)/decimal(n,m) 准确值 n和m可以省略
- n:整数位+小数位的个数
- m:小数位的个数
字符型
- varchar(n) 变长字符串 n必选 保存字符串最大个数 性能低
- char(n) 定义字符串 n可选 默认为1 保存字符最大个数 性能高
日期
-
date 日期 年月日
-
time 时分秒
-
datetime 日期 年月日时分秒
-
timestamp 时间戳 1970年开始 2037年12月31日 23:59:59
-
datetime和timesstamp区别
- datetime最大表示日期是9999年12月31日 23:59:59、timestamp最大表示日期是 2037年12月31日 23:59:59
- datetime默认是null、而timestamp默认值是当前日期
注意
- mysql中没有boolean类型、通常我们会使用int类型来表示boolean类型 0:false 1:true
DDL
库的管理
-
关键字
- create创建 drop删除 alter修改 show展示 database数据库
-
查看所有的数据库
- show databases
-
创建数据库
- 语法一:create database 数据库名称;
- 语法二:create database if not exists 数据库名称;
-
删除数据库
- 语法一:drop database 数据库名称
- 语法二:drop database if exists 数据库名称;
-
使用库
- use 数据库名称;
-
查看创建数据库语句
- show create database 数据库名称;
表的管理
-
关键字
- show 展示 alter 修改 create 创建 table 表 drop 删除
-
查看所有表
- show tables;
-
创建表
-
语法一
- create table 表名称(
字段名称 数据类型.
字段名称 数据类型,
字段名称 数据类型
...
);
- create table 表名称(
-
语法二
- create table if not exists 表名称(
字段名称 数据类型.
字段名称 数据类型,
字段名称 数据类型
...
);
- create table if not exists 表名称(
-
-
删除表
- drop table 表名称;
-
查看表结构(查询表的列数和每列表对应的数据类型)
- desc 表名称;
-
查看创建表语句
- show create table 表名称;
表的修改
-
修改表名
- alter table 表名称 rename 新名称;
-
修改列名
- alter table 表名称 change 原列名 新列名 数据类型;
-
修改列类型
-
方式一
- alter table 表名称 modify 列名称 新类型;
-
方式二
- alter table 表名称 change 原列名 新列名 数据类型;
-
-
添加列
- alter table 表名 add 列名 数据类型;
-
删除列
- alter table 表名 drop 列名;
DML
关键字
- 增insert 删delete 改update
插入
-
不指定字段插入
-
insert into 表名 values(值1,值2,值3...);
-
注意
- 数值直接给值
- 除数值之外的任意类型都需要加引号
- 默认给所有的字段插入值
-
-
指定字段插入
- insert into 表名 (字段1,字段2,字段3,字段n) values(值1,值2,值3,值n);
- 注意:字段和值必须一一对应
-
方式三
- insert into 表名 set 字段1=值1,字段2=值2,字段3=值3,字段N=值N
-
批量插入
- insert into 表名 (字段1,字段2,字段3,字段n) values(值1,值2,值3,值N),(值1,值2,值3,值n),(值1,值2,值3,值n)
删除
-
删除单个
- delete from 表名 [where 条件];
-
删除所有
- delete from 表名;
- truncate table 表名;
-
delete删除和truncate删除的区别
- 方式上:delete会逐行删除、truncate删除整张表、重新创建一个一模一样的表结构
- 效率上:delete效率低、truncate效率高
- 回滚上:delete删除数据可以回滚(找回来)truncate一旦删除数据将无法回滚
- 主键自增序列上:delete删除会保留原有自增序列、truncate删除不会保留
修改
-
修改单个
- update 表名 set 字段1=值1,字段2=值2,字段3=值3,字段N=值N [where 条件]
-
修改全部
- update user set password =‘456‘,sex=‘男‘;
MySQL常见约束
概述
- 用于限定当前列中的值 保证数据的准确性和有效性
常见约束
- not null被约束的列不能为空
- unique 唯一约束 被约束的列的值不允许重复 null可以有多个
- primary key 主键约束 值不能重复,不能为null
提高查询效率(主键约束默认回给当前列创建一个索引)一个表通常只有一个主键 - default 默认约束 指定默认值
- foreign key 外键约束 描述两个表之间的关系, 从一个表中(从表)某一列的值 来源于另一个表(主表)的主键值
除not null和default都支持表级约束
- 表级约束可以同时约束多列、列级约束只能约束一列
添加约束
-
方式一:创建表的时候添加约束
create table person(
字段名 字段类型 约束, #列级约束写法
字段名 字段类型 约束
) -
create table person(
字段名 字段类型 ,
字段名 字段类型 ,
#表级约束写法
约束(约束的字段)
) -
方式二:给已存在的表上添加约束(注意当前表中数据没有违反约束行为)
alter table 表名 modify 字段名 字段类型 约束; -
添加主键自增约束:将主键的维护全交给数据进行管理
- 要求当前列必须设置主键
- 主键列必须是int类型
- 自增量为1
- create table person(
字段名 primary key auto_increment,
字段名 字段类型 约束
)
-
万能公式
- alter table 表名 modify 字段名 字段类型 约束;
删除约束
-
删除列级约束
- alter table 表名 modify 列名 数据类型
-
删除表级约束
-
主键约束2步
- 1-1 alter table 表名 drop primary key
- 1-2 alter table 表名 modify 列名 数据类型
-
删除唯一约束
- alter table 表名 drop index 索引名称
-