初识数据库
1.数据库介绍
1.1 什么是数据库
存储数据用文件就可以了,为什么还需要数据库呢?
用文件保存数据有以下几个缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
使用数据库来为了解决上述问题,它能够跟有效地管理数据。数据库可以提供远程服务,通过远程连接来使用数据库,因此也称为数据库服务器。
1.2 一些名词解释
服务器:
- 硬件: 提供远程主机的服务
- 软件: 网络上提供服务的软件
(1)数据库服务器:提供管理数据(增删改查)的服务给远程来管理。
(2)Web服务器:提供Web(浏览器访问)提供的远程服务。
服务端:
数据库服务器就是数据库服务端(软件)。
客户端:
需要通过客户端先连接到服务端,来操作数据。
如果(客户端)连接到远程的数据库服务器(服务端),数据都是保存在服务端。
数据库和数据结构的区别:
数据库:数据保存在硬盘
数据结构:数据保存在内存
硬盘和内存的区别:
- 硬盘大,内存小。
- 内存的成本相对于硬盘更高。
- 内存中的数据,不用担心断电的问题。
- 内存访问速度更快,硬盘中的数据访问及保存要慢很多。
1.3 数据库学习内容
(1)设计数据库表结构----类似数据结构中,要保存对象时,定义对象的属性。
(2)SQL语句(增删改查)
(3)通过Java来操作数据库
2. 数据库的操作
2.1 显示当前的数据库
show databases;
2.2 创建数据库
语法:
create database [if not exisis] db_name [create_specification[,create_specification]...]
create_specification:
[default] character set charset_name
[default] collate collation_name
说明:
- 大写的表示关键字
- []是可选项
- character set:指定数据库采用的字符集
- collate:指定数据库字符集的校验规则
示例:
- 创建名为db_test1的数据库
create database db_test1;
说明: 当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf-8
- 如果不存在名为db_test2的数据库,则创建一个名叫db_test2的数据库,如果存在则不创建
create database if not exists db_test2;
- 如果系统没有db_test的数据库,则创建一个使用
utf8mb4
字符集的do_test
数据库,如果有则不创建
create database if not exists db_test character set utf8mb4;
注意:
- 我们在创建的时候常常结合
if not exists
来操作,避免报错,如果不存在才创建,已经存在的话就不做任何操作。 - MYSQL的utf8编码不是真正的utf8编码,其中没有包含某些复杂的中文字符。MYSQL真正的utf8是使用
utf8mb4
。
2.3 使用数据库
use 数据库名;
2.4 删除数据库
语法:
drop database [if exists] db_name;
注意:
- 数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除。
- 删除常常结合
if exists
来操作,避免报错,如果存在才删除,没有就不做任何操作。
drop database if exists db_test1;
drop database if exists db_test2;
3. 常用数据类型
3.1 数值类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
bit[(M)] | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围: 0 − 2 M − 1 0-2^M-1 0−2M−1,适合存储只有两个值的数据 | Boolean |
tinyInt | 1字节 | Byte | |
smallInt | 2字节 | Short | |
Int | 4字节 | Integer | |
bigInt | 8字节 | Long | |
float(M,D) | 4字节 | 单精度,M指定长度,D指定小数位数,会发生精度丢失。 | Float |
double(M,D) | 8字节 | Double | |
decimal(M,D) | M/D最大值+2 | 双精度,M指定长度,D表示小数点位数,精确数值。 | BigDecimal |
numeric(M,D) | M/D最大值+2 | 和demical一样 | BigDecimal |
3.2 字符串类型
数据类型 | 大小 | 说明 | 对应Java类型 |
---|---|---|---|
varchar(size) | 0-65,535字节 | 可变长度字符串 | String |
text | 0-65,535字节 | 长文本数据 | String |
mediumtext | 0-16777215字节 | 中等长度文本数据 | String |
blob | 0-65,535字节 | 二进制形式的长文本数据 | byte[] |
说明:
- 对于字符串的存储,比较小的话就使用
varchar
;比较多的长文本使用text
,更长可以使用mediumtext
。 - 对于二进制数据,如文件,视频,音乐等等,一般不在数据库中存储(网络流量有限,假如把文件保存在数据库,那么花费在文件数据传输的流量就会多,真实的数据传输速度下降,一般是把文件存储在专门的文件服务器上)
3.3 日期类型
数据类型 | 大小 | 说明 | 对应Java类型 |
---|---|---|---|
datetime | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换 ,即不带时区 | java.util.Date、java.sql.Timestamp |
timestamp | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换,即带时区 | java.util.Date、java.sql.Timestamp |
说明:MYSQL中也自带了一些日期的函数/变量:now()
表示当前日期,日期包含:年月日时分秒毫秒
- 插入,where条件查询,使用日期的时候,建议带’当做字符串查询。
- 格式:yyyy-MM-dd HH:mm:ss(默认)。
4. 表的操作
需要操作数据库中的表时,需要先使用该数据库:
use db_test;
4.1 查看表结构
显示当前数据库中的所有表
show tables;
显示表的结构
desc 表名;
数据库与Java的对应关系
4.2 创建表
语法:
create table table_name(
field1 datatype,
field2 datatype,
field3 datatype
);
可以使用comment增加字段说明
示例:
create table stu_test(
id int,
name varchar(20) comment '姓名',
password varchar(50) comment '密码',
age int,
sex varchar(1),
birthday timestmp,
amout decimal(13,2),
resume text
);
注意:最后的字段不要带" , "
4.3 删除表
语法格式:
drop [temporary] table [if exists] tbl_name [, tbl_name]
示例:
--删除 stu_test表
drop table stu_test;
--如果存在 stu_test表,则删除 stu_test表
drop table if exists stu_test;
5. 总结
SQL注意事项:
- 在命令行工具写sql时,最后;表示结束整个语句
本质是输入;+回车,客户端才会发送sql语句到服务器,由服务端执行这条语句。 - sql的注释 – 注释内容(–后面要有一个空格)
创建表时使用comment,可以加在表、字段上,可以在表结构中看到。 - 写sql时,表名、字段名尽量避免使用关键字,如果是关键字,在前后加’,如表名desc,创建时就应该写成create table ‘desc’ stu_test。
- 字符串,都需要使用单引号’字符串内容’。