文章目录
前言
上一篇博客我们学习Mysql数据库的安装与配置,今天我们学习
Mysql数据库基础
1.常用的可视化工具
常用的可视化工具有:Mysql Workbench:Mysql自带的可视化软件,Navicat 以及 Datagrip
因为涉及到了版权原因,在这里就不做演示了。
在这里我使用命令行来进行演示
2.SQL分类
SQL语言是数据库编程的语言,可能在具体的数据库中SQL语言有些许的差别,但是大同小异。
- DDL数据定义语言,用来维护存储数据的结构
代表指令:create drop alter - DML数据操作语言,用来对数据进行操作
代表指令: insert delete update- DML中有单独分了一个DQL,数据查询语言,代表指令:select
- DCL数据库控制操作,主要负责权限管理和和事务
代表指令:grant,revoke,commit
3.数据库的操作(DDL)
3.1.查看数据库
show databases;
在操作中,难免会有些会发生错误,例如:
遇到此类情况,不要着急,可以直接进行拿出翻译软件进行翻译,然后解决错误;
如果提前发现有错误的话,直接输入Ctrl+C,另起一行
3.2.创造数据库
语法:
REATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] …]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
其中
charset_name(字符集):
8.0中默认的是utf8mb4
5.7中默认的是latin1(不能存储中文)
collation_name(排序规则)
8.0默认的是utf8mb4_0900_ai_ci
5.7默认的是utf8mb4_general_ci
说明:
- 大写的表示关键字
- [] 是可选项
- CHARACTER SET: 指定数据库采用的字符集
- COLLATE: 指定数据库字符集的校验规则
例如:
创造一个名为test的数据库
create database test;
如果系统没有 test2 的数据库,则创建一个名叫 test2 的数据库,如果有则不创建
create database if not exists test2;
我们在运行一次上述的代码,会发现如下情况:
我们在创建完test2完后,如果再一次执行创建test2数据库(不加入if not exists)会发生什么事情呢?
因此,在现实工作中,执行sql语句,并不是手动一条一条执行的,而是批量执行的,为了不让某一条语句的错误而影响整个执行流程,都会加上一些类似于if not exists 的校验,防止因为某条sql出错
导致整个SQL中断执行。
创建test3数据库,并且指定字符集和排序规则
create database if not exists test3 character set utf8mb4 collate utf8mb4_0900_ai_ci;
创建一个名为database的数据库
因为database属于关键字,如果非要创建这个数据库的话,要用
这个符号引住(``),这个符号位于键盘Tab键的上面,Esc的下面,反引号
create database `database`;
3.3.使用数据库
语法:
use 数据库;
例如:使用数据库test2;
use test2;
使用完这个操作,就可以在test2的数据库中创建表,进行一系列操作。
3.4.删除数据库
语句:
DROP DATABASE [IF EXISTS] db_name
例如删除数据库test2;
drop database if exists test2;
数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除.
为了以后操作的方便,我只留下test这一个数据库,剩余无关紧要的我都删了。
4.常用的数据类型
4.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 | 和DECIMAL 一样 | BigDecimal |
4.2.字符串类型
数据类型 | 大小 | 说明 | 对应的Java类型 |
---|---|---|---|
VARCHAR(SIZE) | 0~65535字节 | 可变长度字符串 | String |
TEXT | 0~65535字节 | 长文本数据 | String |
MEDIUMTEXT | 0~16777215字节 | 中等长度文本数据 | String |
BLOB | 0~65535字节 | 二进制形式的长文本数据 | byte[] |
4.3.日期型
数据类型 | 大小 | 说明 | 对应的Java类型 |
---|---|---|---|
DATETIME | 8字节 | 范围从1000到9999年,不会进行时区的检索以及转化 | java.util.Date、java.sql.Timestamp |
TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换 | java.util.Date、java.sql.Timestamp |
5.表的操作
需要操作数据库中的表时,需要先使用该数据库:
例如使用test数据库
use test;
5.1.创建表
语法:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
);
可以使用comment增加字段说明
例如:
创建一个名字为student的学生表,表中包含两个字段,id表示编号,name表示姓名,长度为50
create table student (
id bigint comment "编号",
name varchar(50)comment "姓名"
);
查看数据库中有哪些表
show tables;
5.2.查看表结构
desc 表名;
5.3.删除表
语法:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] …
实例:
删除test中的student表
drop table student;
6.练习
有一个商店的数据,记录客户及购物情况,有以下三个表组成:
商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供
应商provider)
客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别gender,身份证
card_id)
购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)
use test;
-- 商品
create table goods(
good_id bigint,
goods_name varchar(50),
unitprice decimal(10,2),
category varchar(20),
provider varchar(50)
);
-- 客户
create table customer(
customer_id bigint,
name varchar(50),
address varchar(255),
email varchar(255),
gender bool,
card_id varchar(50)
);
-- 购买
create table purchase(
order_id bigint,
customer_id binary,
good_id bigint,
nums int
);