当前位置: 首页 > news >正文

MySQL数据库创建、删除、修改

一:建库建表

我们以学校体系进行建表。将数据库命名为school。

以下代码中的大写均可小写不影响。如CREATE DATABASE与create database相同

四个关键的实体分别是学院、老师、学生和课程,其中,学生跟学院是从属关系,这个关系从数量上来讲是多对一关系,因为一个学院可以有多名学生,而一个学生通常只属于一个学院;同理,老师跟学院的从属关系也是多对一关系。一名老师可以讲授多门课程,一门课程如果只有一个授课老师的话,那么课程跟老师也是多对一关系;如果允许多个老师合作讲授一门课程,那么课程和老师就是多对多关系。简单起见,我们将课程和老师设计为多对一关系。学生和课程是典型的多对多关系,因为一个学生可以选择多门课程,一门课程也可以被多个学生选择,而关系型数据库需要借助中间表才能维持维持两个实体的多对多关系。最终,我们的学校选课系统一共有五张表,分别是学院表(tb_college)、学生表(tb_student)、教师表(tb_teacher)、课程表(tb_course)和选课记录表(tb_record),其中选课记录表就是维持学生跟课程多对多关系的中间表。

使用create database进行创建数据库。

-- 如果存在名为school的数据库就删除它
DROP DATABASE IF EXISTS `school`;-- 创建名为school的数据库并设置默认的字符集和排序方式
CREATE DATABASE `school` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

 CREATE DATABASE school:创建一个名为school的新数据库。

DEFAULT CHARACTER SET utf8mb4:指定数据库的默认字符集为utf8mb4utf8mb4是UTF-8编码的一个变体,支持完整的Unicode字符集,包括一些特殊的表情符号和更广泛的字符范围(如某些语言中的特殊字符)。

COLLATE utf8mb4_general_ci:指定数据库的默认排序规则为utf8mb4_general_cigeneral_ci表示不区分大小写的排序规则(ci代表Case Insensitive),这意味着在字符串比较时,不会区分大小写。

切换到我们的数据库 使用USE+数据库名称

USE `school`;

创建学院表:

-- 创建学院表
CREATE TABLE `tb_college`
(
`col_id`    int unsigned AUTO_INCREMENT      COMMENT '编号',
`col_name`  varchar(50)  NOT NULL            COMMENT '名称',
`col_intro` varchar(500) NOT NULL DEFAULT '' COMMENT '介绍',
PRIMARY KEY (`col_id`)
);

其中col_id、col_name、col_intro是字段名称,表示存储编码的列。

int是整型,varchar是字符型(50)代表最大50个字符长度。

unsigned是约束修饰符,表示字段仅存储非负整数(范围变为0到约42亿),适合编号这种无负值的场景。

auto_increment是约束修饰符,表示该字段的值会自动递增。通常用于主键字段,以便在插入新记录时自动生成唯一的编号。

comment是注释说明,便于维护时理解字段含义。

not null 约束条件,表示该字段不允许存储NULL值(必须始终有值),确保名称必填。

default为默认值设置,表示如果插入新记录时未提供col_intro的值,则该字段将默认设置为空字符串''。这确保了即使没有提供介绍信息,字段也不会为NULL

primary key col_id 是表示主键为col_id,主键是表中用于唯一标识每条记录的字段或字段组合。

创建学生表:

CREATE TABLE `tb_student`
(
`stu_id`    int unsigned NOT NULL           COMMENT '学号',
`stu_name`  varchar(20)  NOT NULL           COMMENT '姓名',
`stu_sex`   boolean      NOT NULL DEFAULT 1 COMMENT '性别',
`stu_birth` date         NOT NULL           COMMENT '出生日期',
`stu_addr`  varchar(255) DEFAULT ''         COMMENT '籍贯',
`col_id`    int unsigned NOT NULL           COMMENT '所属学院',
PRIMARY KEY (`stu_id`),
CONSTRAINT `fk_student_col_id` FOREIGN KEY (`col_id`) REFERENCES `tb_college` (`col_id`)
);

其中大部分的约束与上述学院表类似,不过多赘述。

下面这段表示一个外键的约束定义。

CONSTRAINT `fk_student_col_id` FOREIGN KEY (`col_id`) REFERENCES `tb_college` (`col_id`)
)

constraint fk_student_col_id定义了一个为 fk_student_col_id的约束,名称可以变化,命名为了数据库中识别和管理约束。

foreign key col_id 指定col_id字段为外键。外键用于建立当前表(假设为tb_student)与另一个表之间的引用关系。

references tb_college col_id 指定外键引用的目标表和字段。在这里,tb_college是目标表,col_id是目标表中的字段。这意味着当前表中的col_id字段的值必须存在于tb_college表的col_id字段中。

创建教师表:

CREATE TABLE `tb_teacher`
(
`tea_id`    int unsigned NOT NULL                COMMENT '工号',
`tea_name`  varchar(20)  NOT NULL                COMMENT '姓名',
`tea_title` varchar(10)  NOT NULL DEFAULT '助教' COMMENT '职称',
`col_id`    int unsigned NOT NULL                COMMENT '所属学院',
PRIMARY KEY (`tea_id`),
CONSTRAINT `fk_teacher_col_id` FOREIGN KEY (`col_id`) REFERENCES `tb_college` (`col_id`)
);

创建课程表:

CREATE TABLE `tb_course`
(
`cou_id`     int unsigned NOT NULL COMMENT '编号',
`cou_name`   varchar(50)  NOT NULL COMMENT '名称',
`cou_credit` int          NOT NULL COMMENT '学分',
`tea_id`     int unsigned NOT NULL COMMENT '授课老师',
PRIMARY KEY (`cou_id`),
CONSTRAINT `fk_course_tea_id` FOREIGN KEY (`tea_id`) REFERENCES `tb_teacher` (`tea_id`)
);

创建选课记录表:

CREATE TABLE `tb_record`
(
`rec_id`   bigint unsigned AUTO_INCREMENT COMMENT '选课记录号',
`stu_id`   int unsigned    NOT NULL       COMMENT '学号',
`cou_id`   int unsigned    NOT NULL       COMMENT '课程编号',
`sel_date` date            NOT NULL       COMMENT '选课日期',
`score`    decimal(4,1)                   COMMENT '考试成绩',
PRIMARY KEY (`rec_id`),
CONSTRAINT `fk_record_stu_id` FOREIGN KEY (`stu_id`) REFERENCES `tb_student` (`stu_id`),
CONSTRAINT `fk_record_cou_id` FOREIGN KEY (`cou_id`) REFERENCES `tb_course` (`cou_id`),
CONSTRAINT `uk_record_stu_cou` UNIQUE (`stu_id`, `cou_id`)
);

ps:其中数据库名、表名、字段名都被反引号(`)包裹起来,反引号并不是必须的,但是却可以解决表名、字段名等跟 SQL 关键字(SQL 中有特殊含义的单词)冲突的问题。

二:删除表和修改表

DROP TABLE `tb_student`;
或者
DROP TABLE IF EXISTS `tb_student`;

需要注意的是,如果学生表已经录入了数据而且该数据被其他表引用了,那么就不能删除学生表,否则上面的操作会报错。

修改表,添加一个新列

例如给学生表添加一个联系电话的列。

ALTER TABLE `tb_student` ADD COLUMN `stu_tel` varchar(20) NOT NULL COMMENT '联系电话';

ps:如果新增列的时候指定了非空约束(not null),那么学生表不能够有数据,否则原来的数据增加了 stu_tel 列之后是没有数据的,这就违反了非空约束的要求;当然,我们在添加列的时候也可以使用默认值约束来解决这个问题。

修改表,修改列的数据类型

例如将学生表的 stu_sex 修改为字符。

ALTER TABLE `tb_student` MODIFY COLUMN `stu_sex` char(1) NOT NULL DEFAULT 'M' COMMENT '性别';

 修改表,修改列的命名

例如将学生表的 stu_sex 修改为 stu_gender。

ALTER TABLE `tb_student` CHANGE COLUMN `stu_sex` `stu_gender` boolean DEFAULT 1 COMMENT '性别';

 修改表,删除约束条件

例如删除学生表的 col_id 列的外键约束。

ALTER TABLE `tb_student` DROP FOREIGN KEY `fk_student_col_id`;

修改表,添加约束条件

例如给学生表的 col_id 列加上外键约束。

ALTER TABLE `tb_student` ADD FOREIGN KEY (`col_id`) REFERENCES `tb_college` (`col_id`);
或者
ALTER TABLE `tb_student` ADD CONSTRAINT `fk_student_col_id` FOREIGN KEY (`col_id`) REFERENCES `tb_college` (`col_id`);

 修改表的名字

例如将学生表的名字修改为 tb_stu_info。轻易不要修改数据库或者表的名字。

ALTER TABLE `tb_student` RENAME TO `tb_stu_info`;

三:常用的库、表、数据等查询方式

 查看所有的数据库

show databases;

切换到特定库 

使用use加库名。

use school

展示库中的表

show tables;

 展示表中的属性

show columns from 表名

show columns from tb_college;

 

 查看表中的数据

select 列名 from 表名

select col_name from tb_college;

http://www.xdnf.cn/news/336853.html

相关文章:

  • Android NDK版本迭代与FFmpeg交叉编译完全指南
  • ubuntu24.04安装anaconda
  • SwiftData 数据持久化解决方案
  • 如何使用极狐GitLab 软件包仓库功能托管 python?
  • git设置tabsize
  • Kubernetes client-go 客户端类型与初始化指南
  • 驱动开发硬核特训 · Day 30(上篇):深入理解 I2C 总线驱动模型(以 at24 EEPROM 为例)
  • Dynamic Causal Modeling在医疗AI领域的编程案例与应用研究
  • 〖 Linux 〗解决 VS Code 远程连接服务器的常见问题
  • iPhone手机连接WiFi异常解决方法
  • 【hadoop】案例:Sqoop迁移仓库数据
  • 5、开放式PLC梯形图编程组件 - /自动化与控制组件/open-plc-programming
  • Lua学习笔记
  • 无刷电机控制算法策略
  • AI驱动的制造工艺:系统化探索与创新
  • 【hadoop】Hbase java api 案例
  • 【嵌入式开发-CAN】
  • 美化IDEA注释:Idea 中快捷键 Ctrl + / 自动注释的缩进(避免添加注释自动到行首)以及 Ctrl + Alt + l 全局格式化代码的注释缩进
  • Java 异常
  • 深入理解 Docker 网络原理:构建高效、灵活的容器网络
  • 缓存局部性保留
  • 【Python】PDF文件处理(PyPDF2、borb、fitz)
  • 2022年8月,​韩先超对中移信息进行微服务架构原理(Docker+k8s+DevOps+Go等)培训
  • MYSQL的行级锁到底锁的是什么东西
  • iOS 模块化开发流程
  • DeepSeek多尺度数据:无监督与原则性诊断方案全解析
  • 查看jdk是否安装并且配置成功?(Android studio安装前的准备)
  • Vue3 + Node.js 实现客服实时聊天系统(WebSocket + Socket.IO 详解)
  • 大模型深度思考与ReAct思维方式对比
  • Linux下部署Keepalived