目录
1.初识数据库
定义:安装完数据库服务器后,这个数据库服务器可以在逻辑上划分出多个不同的数据集合,每个数据集合就称为一个数据库。
MySQL客户端:与客户直接打交道;
命令行客户端 / 其他的图形化客户端
MySQL服务器:数据库的本体,用于存储和管理数据;
操作机理:
1.用户在客户端输入SQL;
2.客户端把SQL通过网络发送给服务器;
3.服务期执行这个SQL,并把结果返回给客户端;
4.客户端收到结果,并显示到界面上。
2.常用数据类型
下列表格中高光类型需重点掌握!
2.1数值类型
数据类型 | 大小 | 说明 | 对应Java类型 |
---|---|---|---|
BIT [(M)] | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围从0到2^M-1 | 常用Boolean对应BIT,此时默认是1位,即只能存0和1 |
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 | D同ECIMAL | BigDecimal |
注意:1> DECIMAL能够精确表示小数,float和double不能精确表示小数;
2> DECIMAL虽然能够精确存储和计算,但是存储空间占用更多,计算速度更慢。
2.2字符串类型
数据类型 | 大小 | 说明 | 对应Java类型 |
---|---|---|---|
VARCHAR(SIZE) | 0-65,535字节 | 可变长度字符串 | String |
TEXT | 0-65,535字节 | 长文本数据 | String |
MEDIUMTEXT | 0-16,777,215字节 | 中等长度文本数据 | String |
BLOB | 0-65,535字节 | 二进制形式的长文本数据 | byte[ ] |
注意:VARCHAR属于可变长的字符串,SIZE表示最大长度,单位是字符(不是字节!!)
例:varchar(10) --> 最多十个字,不论是汉字还是啥文字,都是十个。
2.3日期类型
数据类型 | 大小 | 说明 | 对应Java类型 |
---|---|---|---|
DATETIME | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换 | java.util.Date java.sql.Timestamp |
TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换 | java.util.Date java.sql.Timestamp |
注意:此为时间戳,是计算机表示时间的方式,之前在C语言中也见过了。其中TIMESTAMP是以1970年1月1日0时0分0秒为基准,计算当前时刻和基准时刻的秒数/毫秒数之差,因为只有4个字节,太短了,只能表示到2038年,建议使用范围更广的DATETIME。
3.数据库基本操作
3.1创建数据库
格式:create database 数据库名;
注意:1> create,database……相当于“关键字”;
2> SQL的关键字不区分大小写;
3> 创建的数据库名不能重复;
4> 单词之间至少有一个空格;
5> 输入的命令必须以分号进行结尾;
6> 可使用 if not exists 来避免重复建库的问题。
此处0.00 sec 是指时间小于 10ms
//字符集
分类:gbk,utf8……
gbk:使用两个字节表示一个汉字;
uft8:使用三个字节表示一个汉字;
说明:
1> 之前在C语言中学习的是两个字节表示一个汉字,因为VS使用的编码方式是跟随系统,而windows简体中文版系统编码就是gbk;
2> 目前更主流的是utf8,因为除了汉字外,其他国家的语言文字符号utf8都能表示;
3> Java的字符集是在编译运行的时候,通过命令行参数显式指定的,一般默认是utf8;
4> 手动设定一个字符集十分关键,后续如果要插入一些中文,不是utf8/gbk之类的话中文就会乱码;
5> MySQL的utf8是残缺的,残缺了一些emoji表情,utf8mb4是完整版;
6> MySQL默认字符集是拉丁文,无法表示中文。
创建数据库同时指定数据库的字符集: character set / charset 均可
3.2查看所有数据库
格式:show databases;
注意:1> 可能有多个数据库,所以使用databases;
2> 系统会自带几个数据库,不要乱改!!
3.3选中指定数据库
格式:use 数据库名;
注意:一旦选中某个指定的数据库,后续操作就都是针对该数据库展开。
3.4删除数据库
格式:drop database 数据库名;
注意:这个操作十分危险!一旦删掉数据库,数据库中所有数据就没有了,且很难恢复;
若删掉的是系统自带数据库,重装MySQL服务器即可;但删掉自定义数据库就寄了!!
4.数据表基本操作
关系数据库中,数据是以“表”的方式来进行组织的,类似于Excel
每个数据库中可以有很多数据表,每个表可以有很多行,每一行又可以有很多列(字段)。
4.1创建表
格式:create table 表名 ( 列名 类型 , 列名 类型 , ……);
注意:1> 创建表之前要确定表的类型,后续插入数据也要遵循当前表的类型;
2> 所有和表相关的操作,都要先选中数据库
3> 和数据库相似,可加上 if exists 或 if not exists
//注释
comment:创建表时的专属注释。
但不建议使用comment进行注释,建议使用 -- 或 # 。
4.2查看当前数据库中的所有表
格式:show tables;
注意:和数据库类似,要使用tables。
4.3查看指定表的结构
格式:desc 表名;
注意:下列表中:
Filed:字段,表中一行里有几列;
Type:每一列的类型;
其中int (11) 中 11 表示的是该列在打印显示时最多占11个字符这么宽,与存储无关;
Null:该列是否允许为空;
Default:默认值;
Extra:额外补充信息。
4.4删除表
格式:drop table 表名;
注意:会删除整个表中的所有数据,和删除数据库差不多,都是非常危险的操作!
5.练习题
有一个商店的数据,记录客户及购物情况,由以下三个表组成:
1> 商品goods (商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供应商provider)
2> 客户customer (客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证
card_id)
3> 购买purchase (购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)
思考:
价格使用什么类型表示?
double 精度不行有误差,decimal 精度够了但是慢,int 精度和速度都有,单位使用“分”,如9.99元,记成999分。
mysql> use javasql;
Database changed
mysql> create table goods (goodsId int,
-> goodsName varchar(20),
-> unitPrice int,
-> category varchar(50),
-> provider varchar(50)
-> );
Query OK, 0 rows affected (0.03 sec)
mysql> create table customer (customerId int,
-> name varchar(20),
-> address varchar(50),
-> email varchar(20),
-> sex varchar(10),
-> cardId int
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> create table purchase (orderId int,
-> customerId int,
-> goodsId int,
-> nums int
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+-------------------+
| Tables_in_javasql |
+-------------------+
| customer |
| goods |
| purchase |
| test |
+-------------------+
4 rows in set (0.00 sec)
总的来说,数据库基础还是很简单的,只是一些命令的输入,路漫漫其修远兮,吾将上下而求索,Keep going ~ ~ !!
(六一快乐呀!!谁还不是个宝宝呢 ~~)