MySQL——数据库的操作,数据类型,表的操作

1. 数据库的操作

1.1 显示当前数据库

语法:

show databases;

在这里插入图片描述

其中:

  • 红色下划线的是MySQL自带的数据库,不要轻易进行改动!
  • 蓝色下划线的是自己创建的数据库

注意:

  • 在使用数据库时,只使用自己的数据库,其他的数据库不要动
  • databases 是复数

1.2 创建数据库

语法:
在这里插入图片描述

说明:

  1. 蓝色字体且是大写的是关键字

  2. {}里的表示必选项,|表示或的意思,DATABASE和SCHEMA都表示数据库的意思,在创建时必须选择一个

  3. []表示可选项,可有可无,if not exists建议在创建数据库时都加上

  4. CHARACTER SET表示指定数据库采用的字符集,COLLATE表示数据库字符集采用的排序规则,强烈建议在创建数据库时手动指定为utf8mb4和utf8mb4_0900_ai_ci

    在MySQL8.0中默认是utf8mb4和utf8mb4_0900_ai_ci,而在5.17中,默认是latin1和utf8mb4_general_ci,而latin1是不支持中文的

  5. ENCRYPTION表示是否加密,在后续学习过程中不用,了解即可

演示:

  1. 创建一个名为test的数据库

    在这里插入图片描述

  2. 创建一个名为test2的数据库,并指定字符集编码规则为utf8mb4,排序规则为utf8mb4_0900_ai_ci

在这里插入图片描述

  1. 再次尝试创建一个test数据库

在这里插入图片描述

代码执行成功,但是出现了一个警告,用show warnings来查看警告信息

在这里插入图片描述

说明要创建的数据库已经存在了

如果不加if not exists的话,就直接报错了

在这里插入图片描述

在实际工作中,执行SQL语句,不是手动一条一条执行的,而是批量一起执行的,因此,为了不因为某一条语句的错误而影响整个执行流程,都会加上一些类似于if not exists的校验,防止因为某一条SQL语句出错而导致整个SQL中断执行

  1. 假如想要创建一个名为create的数据库,显然按部就班地去创建是不可行的,那么改怎么办呢?需要将create两边加一对反引号 `create`,但实际上不建议这样给数据库命名

    在这里插入图片描述

舍弃当前所写的SQL语句

另外,如果在写了很多SQL语句时,发现前面有错误,可以使用ctrl+c将这些SQL语句舍弃掉,并另起一行

在这里插入图片描述

查看当前数据库服务全局的默认字符集

在这里插入图片描述

1.3 使用数据库

use 数据库名;

在这里插入图片描述

1.4 查看当前操作的数据库

select database();

database()是MySQL提供的一个方法,用于查看当前操作的数据库

当未选择(使用)任何数据库时,查看当前操作的数据库:

在这里插入图片描述

当使用test数据库时,查看当前操作的数据库:

在这里插入图片描述

查看MySQL的帮助

\?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在命令行中,既可以使用\q,也可以使用ctrl+z,退出程序

1.5 删除数据库

drop database [if exists] 数据库名;

写在最前面,删除数据库是一项非常危险的操作,需要慎之又慎,深思熟虑!

下面演示删除test2数据库:

在这里插入图片描述

2. 常见数据类型

2.1 数值类型

数据类型大小说明对应Java类型
bit[(M)]M指定位数,默认为1二进制数,M的范围从1到64,存储数值范围从0到2^M-1常用Boolean对应bit,此时默认是1位,即只能存0和1
tinyint1字节Byte
smallint2字节Short
int4字节Integer
bigint8字节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

在这个表中,值得注意的是:

  1. bit(1)就相当于Java中的Boolean类型,用1表示true,用0表示false
  2. 由于float类型和double类型在表示小数时不是特别的精准,所以用decimal类型去表示小数
  3. M中是不计算小数点和负号的,如果D为0,则具体的值不保存小数,只保留整数
  4. decimal(M,D)中的M最大值为65,D最大值为30
  5. 如果省略D,则默认为0;如果省略M,则默认为10

2.2 字符串类型

数据类型大小说明对应Java类型
varchar(size)0-65,535字节可变长度字符串String
text0-65,535字节长文本数据String
mediumtext0-16,777,215中等长度文本数据String
blob0-65,535二进制形式的长文本数据byte[]

注意:

  • varchar(size)中的size是指存入字符串的最大长度,不是字节数

2.3 日期类型

数据类型大小说明范围对应Java类型
data3字节用于存储日期,通常以 YYYY-MM-DD 格式表示通常支持从 1000-01-01 到 9999-12-31
time3字节用于存储时间,通常以 HH:MM:SS 格式表示通常支持从 ‘-838:59:59’ 到 ‘838:59:59’(具体范围因数据库而异)
datetime8字节范围从1000到9999,不会进行失去的检索及转换用于存储日期和时间的组合,通常以 YYYY-MM-DD HH:MM:SS 格式表示java.util.Date、java.sql.Timestamp
timestamp4字节类似于 DATETIME,但通常用于表示时间戳,能够记录自1970年1月1日以来的秒数范围从1970到2038年,自动检索当前时区并进行转换java.util.Date、java.sql.Timestamp
year1字节用于存储年份,通常以 YYYY 格式表示通常支持从 1901 到 2155

演示:

-- 创建一个表,包含各种日期时间类型  
CREATE TABLE events (  
    event_id INT PRIMARY KEY,  
    event_name VARCHAR(100),  
    event_date DATE,  
    event_time TIME,  
    event_timestamp TIMESTAMP,  
    event_year YEAR  
);  

-- 插入数据  
INSERT INTO events (event_id, event_name, event_date, event_time, event_timestamp, event_year)  
VALUES (1, 'Birthday Party', '2024-08-13', '18:00:00', '2024-08-13 18:00:00', 2024);

其中记录data,time,timestamp类型的时间时需要使用单引号 ,而year不用

参考文章:SQL之时间日期类型

3. 表的操作

创建好数据库后,可以在当前的数据库里对表进行操作,但是对表进行操作之前 ,需要指定是哪一个数据库,即需选择(使用)数据库

use 数据库名;

3.1 创建表

create table [if not exists]表名(
	字段名 数据类型,
    字段名 数据类型,
    字段名 数据类型
);

说明:

  1. 可以使用comment对字段进行说明,相当于Java中的注释
  2. 多个字段之间使用逗号隔开,最后一个字段后面没有逗号了!
  3. 小括号外面的最后面还有个分号别忘了!

示例:创建一个学生类,包含id,name字段

在这里插入图片描述

注:

  • 强烈建议每张表都设计一个编号字段,数据类型为bigint
  • varchar(size)里的长度记得指定

3.2 查看表的结构

desc 表名;

在这里插入图片描述

注解:

  • Field表示当前表中有哪些字段,Type是对应字段的数据类型,NULL表示当前这个字段是否允许为null
  • Default表示当前字段的默认值,即什么都不指定时的默认值
  • Extra表示其他的一些扩展内容

3.3 查看当前数据库中有哪些表

show tables;

在这里插入图片描述

3.4 删除表

drop [temporary] table [if exists] 表名1[,表名2]...;

注:

  • temporary表示用户创建的临时表
  • 一条drop语句可以同时删除很多张表,每个表名之间用逗号隔开
  • 同样地,删表操作也是一种很危险的操作,丝毫不亚于删库操作

4. 综合应用

  • 有一个商店的数据,记录客户及购物情况,有以下三个表组成:
    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)
use test;

create table if not exists goods (
	goods_id bigint,
	goods_name varchar(50),
	unitpirce decimal(10,2),
	provider varchar(50)
);

desc goods;

create table if not exists customer(
	customer_id bigint,
	name varchar(10),
	address varchar(50),
	email varchar(20),
	gender tinyint(1),
	card_id varchar(20)
);

desc customer;

create table if not exists purchase(
	order_id bigint,
	customer_id bigint,
	good_id bigint,
	nums bigint
);

desc purchase;

show tables;

结果一:

在这里插入图片描述

结果二:
在这里插入图片描述

结果三:

请添加图片描述

结果四:
请添加图片描述

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值