找往期文章包括但不限于本期文章中不懂的知识点:
个人主页:我要学编程(ಥ_ಥ)-CSDN博客
所属专栏: MYSQL
目录
数据库的概念
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。因此,为了高性能的处理数据,便诞生了数据库。
数据库也分为两种:一种是关系型数据库,另一种是非关系型数据库。顾名思义:关系型数据库,肯定是数据与数据之间建立的一定的关联、关系。
关系型数据库的概念:是指采用了关系模型来组织数据的数据库。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
常见的关系型数据库有:MYSQL、Oracle、SQL Server。
既然有了数据库,那么肯定也要有操作数据库的东西或者说是工具——SQL语句。
数据库的相关操作
1、创建数据库
语法:
CREATE DATABASE 数据库名;
在创建数据库时,我们也可以去指定其对应的字符集和排序规则,在上述代码后面直接加上:
CHARACTER SET 字符集编码 collate 排序规则;
-- 这个是SQL语句中的注释写法
-- 字符集编码在8.0版本中采用的是:utf8mb4
-- 排序规则在8.0版本中采用的是:utf8mb4_0900_ai_ci
注意:如果有一个数据库之后,我们再去创建一个同名的数据库时,就会报错。因此,我们在创建数据库时,要加上一些校验:
有两种不同形式的校验:
(1)不管存不存在先删除它,再去创建它:(由于删除暂时未学,我们待会再学习)
(2)在创建之前,我们先去检验一下这个数据库是否存在:
CREATE DATABASE IF NOT EXISTS 数据库名;
注意:在SQL语法中建议是全部大写,但是小写也是没关系的,看个人的习惯吧。
既然有创建数据库,那么肯定也有删除数据库。
2、删除数据库
语法:
DROP DATABASE 数据库名;
同样我们删除的数据库可能是不存在的,如果不存在的话,就会报错。因此也得加上校验。
DROP DATABASE IF EXISTS 数据库名;
其实在删除之前,我们完全可以进行一次查看操作。如果有,再删除也不迟。
SHOW DATABASES;
这里查看的是本级的所有数据库。
因此,上面创建数据库的校验可以这样写:
-- 先是直接删除
DROP DATABASE IF EXISTS 数据库名;
-- 再去创建即可(这里不需要进行检验了,因为不可能存在要创建的数据库名)
CREATE DATABASE 数据库名;
我们现在就可以在命令行中进行操作。
下面是打开数据库的操作,输入:mysql -uroot -p ,然后再输入密码即可
创建数据库——>查看数据库——删除数据库
可能有小伙伴会好奇:为什么在SQL语句中大小写都可以,究其原因还是因为字符集编码和排序的的问题。utf8mb4 这个字符集是支持中文的,但是在5.0的版本中却是不支持的,因为其字符集为Latin1。排序规则中是支持大小写、口音不敏感。
常用的数据类型
数值型
数据类型 | 大小 | 说明 | 对应Java中的类型 |
BIT [ (M) ] | M为指定的位数,默认情况下是1 | 因为BIT只能是0~8,因此M的范围也是有限的。M【1,64】 | 常用Boolean来对应BIT,此时默认是1位,即只能存1和0 |
TINYINT | 1字节 | Byte | |
SMALLINT | 2字节 | Short | |
INT | 4字节 | Integer | |
BIGINT | 8字节 | Long | |
FLOAT(M, D) | 4字节 | 单精度,M指定总长度,D指定小数位长度。会发生精度丢失 | Float |
DOUBLE(M, D) | 8字节 | 双精度,其余与FLOAT一样 | Double |
DECIMAL(M, D) | 依赖于M和D的值 | 双精度,M指定总长度,D表示小数点位数。不会发生精确数值 | BigDecimal |
NUMERIC(M, D) | 依赖于M和D的值 | 和DECIMAL一样 | BigDecimal |
注意:由于FLOAT和DOUBLE在表示精度方面有缺失,因此涉及到钱相关的计算时,都是用DECIMAL来代替,也就是说这个DECIMAL是用来表示金额的。
字符串类型
数据类型 | 大小 | 说明 | 对应Java中的类型 |
VARCHAR(SIZE) | 0-65, 535字节 | 可变长度字符串 | String |
TEXT | 0-65, 535字节 | 长文本数据 | String |
MEDIUMTEXT | 0-16, 777, 215字节 | 中等长度文本数据 | String |
BLOB | 0-65,535字节 | 二进制形式的长文本数据 | byte[ ] |
注意:
1、我们常用的也就是VARCHAR和TEXT两种类型;
2、VARCHAR() 中的SIZE是指字符串的长度,也就是字符的个数,并不是字节的个数;
3、BLOB中存储的是文本的二进制,因此是一个byte[ ]数组。
日期类型
数据类型 | 大小 | 说明 | 对应Java中的类型 |
DATATIME | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换 | java.util.Date、java.sql.Timestamp |
TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换 | java.util.Date、 java.sql.Timestamp |
这里的日期会精确到小时-分钟-秒。
数据表的相关操作
一个数据库服务是能够支持多个数据库的,而一个数据库中是有多个数据表的,而一个数据表中又是有多个数据记录(数据行)的,一个数据记录(数据行)是由若干个列组成的。
因此我们操作数据库,最终操作的还是数据表中的数据行。因此下面我们就来学习数据表的相关操作。创建数据表等都是要在一个具体的数据库中进行的,即先得使用具体的数据库。
1、使用数据库
USE 数据库; --注意这里分号可有可无,建议带上
当然如果我们不确定是否使用了这个数据库的话,还可以进行查看当前选择的数据库
SELECT DATABASE(); -- 这里就会查询到我们使用的数据库
2、创建、查看与删除数据表
(1)创建数据表:
这里直接采用校验的写法:
DROP TABLE IF EXISTS 表名;
CREATE TABLE 表名 (
column1 datatype,
column2 datatype,
...
);
这里的column是指表中的字段(属性)。例如,我们现在创建一个学生表,那么这个学生表中就有一下字段(属性):学号、姓名、年龄、性别......后面的datatype是指这些字段(属性)对应的数据类型。比如,学号对应的就是整型、姓名对应的字符串型、年龄同样对应整型、性别既可以是整型,也可以是字符串型。
当然也可以使用comment增加字段说明,在数据类型的后面。
(2)查看数据表:
查看数据表主要是观察其表的结构:
DESC 表名;
下面是查看结果:
(3)删除数据表
DROP TABLE IF EXISTS 表名;
学习了这些语法之后,我们就来进行实操。
练习
有一个商店的数据,记录客户及购物情况,有以下三个表组成:
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)
思路:首先,得单独创建一个存储商店数据的数据库,然后再去创建相应的数据表。
代码实现:
-- 创建一个商店数据库
DROP DATABASE IF EXISTS shop;
CREATE DATABASE shop;
-- 创建三个表
-- 因为这是新建的数据库,其中不会存在表,因此无需做检查
USE shop;
-- 商品表
CREATE TABLE goods (
goods_id bigint comment '商品编号',
goods_name varchar(50) comment '商品名',
unitprice decimal(10, 2) comment '单价',
category varchar(50) comment '商品类别',
provider varchar(50) comment '供应商'
);
-- 客户表
CREATE TABLE customer (
customer_id bigint comment '客户号',
name varchar(50) comment '姓名',
address varchar(50) commnet '住址',
email varchar(25) comment '邮箱',
sex bit(1) commnet '性别',
card_id varchar(18) commment '身份证'
);
-- 购买表
CREATE TABLE purchase (
order_id bigint comment '购买订单',
customer_id bigint comment '客户号'
goods_id bigint comment '商品号'
nums int comment '购买数量'
);
注意:
1、通过上面的代码,我们会发现表中的字段只有在最后一个才的末尾才不要加上逗号,其余的都需要在末尾加上逗号;
2、对于编号这些数据,我们通常采用的都是 bigint 来记录;
3、对于性别这种只有少数选择项的(男、女),我们通常采用的是 bit 来记录。
好啦!本期 初始MYSQL数据库(1)——创建、删除数据库和数据表的相关操作 的学习之旅就到此结束啦!我们下一期再一起学习吧!