快考试了,还是勉强学一下这个数据库吧(虽然我讨厌这玩意)

数据库相关概念

名称 全称 简称
数据库 存储数据的仓库,数据是有组织的进行存储 DataBase(DB)
数据库管理系统 操纵和管理数据库的大型软件 DataBase Management System(DBMS)
SQL 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 Structured Query Languague(SQL)

主流的关系型数据库管理系统:

  • Oracle
  • MySQL
  • Microsoft SQL Server
  • PostgreSQL
  • IBM Db2
  • Microsoft Acess
  • SQLite
  • MariaDB
  • Microsoft Azure SQL Database
  • Hive

MySQL怎么下载不说了,我们直接学SQL

因为现在基本上没有人使用命令行了,基本上就是用 navicat 或者 其他可视化工具,不过还是学习一下吧(毕竟要考 悲)

MsSQL的启动和停止方式

方式一

首先我们输入 Win +R 并在窗口输入 services.msc

1
services.msc

image-20260109134356762

image-20260109134449166

此时可以看到MySQL默认是启动了,也可以手动关掉

方式二

image-20260109134644478

直接在命令行(以管理员身份运行)输入指令

1
net start mysql80    //启动
1
net stop mysql80      //停止

image-20260109134940182

客户端连接

同样的也是有两种方式

方式一

用这个东西,也就是一个控制台

image-20260109135216876

进入后输入密码(就是你下载MySQL自己设置的那个密码)

image-20260109135328086

方式二

image-20260109135552291

但是这个有要求—–需要配置 Path路径

image-20260109135653067

首先我们输入 Win +R 输入 sysdm.cpl

1
sysdm.cpl

image-20260109135924219

高级 里打开 环境变量

image-20260109140050531

然后找到path

image-20260109140231482

然后就是点击 新建 把 MySQL server的路径放进去(吐槽一下,不知道为什么这个默认在C盘,直接让我C盘红了)

image-20260109140322713

image-20260109140455495

完成后需要一路点击确定来保存

然后我们 进入 CMD 窗口

Win + R输入 cmd

1
cmd

image-20260109140958492

1
mysql -u root -p

image-20260109141118911

可以看到打开了

MySQL数据模型

image-20260109141401064

image-20260109141726045

在一个数据库中可以创建多个服务器,在一个服务器中又可以创建多张表

SQL语句

Sql的分类

image-20260109142250339

image-20260109142356738

SQL的图形化界面软件

image-20260112222421259

image-20260112223619816

image-20260112223331268

如你所见,这两个工具可以让所有操作轻而易举,真的 也不需要敲什么命令行了 全都是自动化的

学校也不知道怎么回事,老师只知道教学生使用命令行,还有课本上的古董伪代码,真的是严重脱离实际,关键是还要求什么手写代码,根本没有上机练习,不知道有什么意义,真的是无语死了

一 : DDL

image-20260109142759904

① 数据库操作

① 显示所有数据库:
1
SHOW DATABASES;

我们先使用第一个命令看看

image-20260109144646350

② 查询当前数据库:
1
SELECT DATABASE();

记住在使用查询功能先要使用数据库

image-20260109153145749
③ 创建数据库:
1
CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];

我们也可以新建一个

1
CREATE DATABASE itcast;

image-20260109145017489

但是假如我们再次创建相同名字的数据库会不会覆盖原来的呢——–答案是,不会,MySQL会直接报错

image-20260109145227525

我们可以这么干,判断当前是否存在,不存在就创建,存在就不创建

1
CREATE DATABASE if not exists itcast;

image-20260109145450344

或者也可以指定数据库字符的编码格式

1
create database huyang default charset utf8mb4;

image-20260109151701582

注意:

UTF8字符集长度为3字节,有些符号占4字节,所以推荐用utf8mb4字符集

④ 删除数据库:
1
DROP DATABASE [ IF EXISTS ] 数据库名;

image-20260109152049014

和创建是一样的,可以增加判断条件

1
drop database if exists itcast;

image-20260109152423489

⑤ 使用数据库:
1
USE 数据库名;

image-20260109152859939

② 表操作

① 查询

image-20260109153529843

① 查询当前数据库所有表:
1
SHOW TABLES;

image-20260109154105342

因为是才创建的所以是空表

② 查询表结构:
1
DESC 表名;
③ 查询指定表的建表语句:
1
SHOW CREATE TABLE 表名;

这两个指令暂时不讲等会说

② 创建

image-20260109154515286

1
2
3
4
5
6
7
CREATE TABLE 表名(
字段1 字段1类型 [COMMENT 字段1注释],
字段2 字段2类型 [COMMENT 字段2注释],
字段3 字段3类型 [COMMENT 字段3注释],
...
字段n 字段n类型 [COMMENT 字段n注释]
)[ COMMENT 表注释 ];

注意这个最后一个字段没有逗号(别问我怎么知道的)

image-20260109160000403

ok创建完了,我们使用刚才的两个命令了(即 DESC 表名; SHOW CREATE TABLE 表名; )

image-20260109160402528

image-20260109160556619

ENGINE=InnoDB 表示存储引擎

DEFAULT CHARSET=utf8mb4 表示存储编码格式

COLLATE=utf8mb4_0900_ai_ci表示排序规则

这几个都是默认的

③ 修改
① 添加字段

image-20260112213906522

1
2
3
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];`

例:ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';

image-20260112214833929

​ 修改后

image-20260112214945737

② 修改数据类型和修改字段名和字段类型

image-20260112215043405

1
2
3
4
5
6
7
8
修改数据类型:
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

修改字段名和字段类型:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

例:将emp表的nickname字段修改为username,类型为varchar(30)
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称';

image-20260112215701655

image-20260112215601744

③ 删除字段

image-20260112215818712

1
2
删除字段:
ALTER TABLE 表名 DROP 字段名;

image-20260112220059574

④ 修改表名

image-20260112220244542

1
2
修改表名:
ALTER TABLE 表名 RENAME TO 新表名

image-20260112220525695

⑤ 删除表

image-20260112220833927

1
2
3
4
5
删除表:
DROP TABLE [IF EXISTS] 表名;

删除表,并重新创建该表:
TRUNCATE TABLE 表名;

image-20260112221140748

image-20260112221420200

注意,这两种删除方式无论是哪种方式都会将表中的数据全部删除

③ 数据类型

image-20260109163843708

① 数值类型
image-20260109161850172
② 字符串类型

image-20260109162406026

char和varchar的区别:

  • char: 例如char[10] 即使存储一个字符,也会占用10个字符的空间,因为其他空间会使用空格占用,
  • varchar: 例如 varchar[10] 存储几个字符就占用几个空间
  • 相比varchar来说char的性能更好,因为varchar需要根据内容来计算所需的内存空间,消耗物理计算资源
  • 对于用户名来说用varchar更好一些,对于性别这种char更好一些
③ 日期时间类型
image-20260109164102830

一般来说DATE TIME DATETIME 用的比较多一些

生日用date更好一些

④ 案例

image-20260111234410580

1
2
3
4
5
6
7
8
9
create table emp(
id int COMMENT '编号',
workno varchar(10) COMMENT '工号',
name varchar(10) COMMENT '姓名',
gender char(1) COMMENT '性别',
age tinyint unsigned COMMENT '年龄',
idcard varchar(18) COMMENT '身份证号',
entrydate date COMMENT '入职日期'
) COMMENT '员工表';

image-20260111235603314

image-20260112222129260