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:
指定数据库的默认字符集为utf8mb4
。utf8mb4
是UTF-8编码的一个变体,支持完整的Unicode字符集,包括一些特殊的表情符号和更广泛的字符范围(如某些语言中的特殊字符)。
COLLATE utf8mb4_general_ci:
指定数据库的默认排序规则为utf8mb4_general_ci
。general_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;
相关文章:

MySQL数据库创建、删除、修改
一:建库建表 我们以学校体系进行建表。将数据库命名为school。 以下代码中的大写均可小写不影响。如CREATE DATABASE与create database相同 四个关键的实体分别是学院、老师、学生和课程,其中,学生跟学院是从属关系,这个关系从…...
招行数字金融挑战赛数据赛道赛题一
赛题描述:根据提供的用户行为数据,选手需要分析用户行为特征与广告内容的匹配关系,准确预测用户对测试集广告的点击情况,通过AUC计算得分。 得分0.6120,排名60。 尝试了很多模型都没有能够提升效果,好奇大…...

【氮化镓】GaN在不同电子能量损失的SHI辐射下的损伤
该文的主要发现和结论如下: GaN的再结晶特性 :GaN在离子撞击区域具有较高的再结晶倾向,这导致其形成永久损伤的阈值较高。在所有研究的电子能量损失 regime 下,GaN都表现出这种倾向,但在电子能量损失增加时,其效率会降低,尤其是在材料发生解离并形成N₂气泡时。 能量损失…...
容器化-Docker-私有仓库Harbor
一、Harbor 的含义与作用 Harbor 是一个开源的企业级 Docker 镜像仓库,它为用户提供了安全、高效的 Docker 镜像管理方案。其核心功能是集中管理 Docker 中所有的镜像,涵盖了镜像的存储、分发、版本控制等全生命周期管理。通过使用 Harbor,企业和团队能够显著提升 Docker…...
【Leetcode 每日一题】1550. 存在连续三个奇数的数组
问题背景 给你一个整数数组 a r r arr arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 t r u e true true;否则,返回 f a l s e false false。 数据约束 1 ≤ a r r . l e n g t h ≤ 10…...
C#中SetProperty方法使用
SetProperty 是 MVVM(Model-View-ViewModel) 模式中用于实现 属性变更通知(INotifyPropertyChanged) 的核心方法,主要用于在属性值变化时自动更新 UI 绑定。 1. SetProperty 的基本作用 更新字段值:修改属性…...

防火墙来回路径不一致导致的业务异常
案例拓扑: 拓扑描述: 服务器有2块网卡,内网网卡2.2.2.1/24 网关2.2.254 提供内网用户访问; 外网网卡1.1.1.1/24,外网网关1.1.1.254 80端口映射到公网 这个时候服务器有2条默认路由,分布是0.0.0.0 0.0.0.0 1…...

WTK6900C-48L:离线语音芯片重构玩具DNA,从“按键操控”到“声控陪伴”的交互跃迁
一:开发背景 随着消费升级和AI技术进步,传统玩具的机械式互动已难以满足市场需求。语音控制芯片的引入使玩具实现了从被动玩耍到智能交互的跨越式发展。通过集成高性价比的语音识别芯片,现代智能玩具不仅能精准响应儿童指令,还能实…...
[Java实战]Spring Boot 中Starter机制与自定义Starter实战(九)
[Java实战]Spring Boot 中Starter机制与自定义Starter实战(九) 引言 Spring Boot 的 Starter 是其“约定优于配置”理念的核心体现,通过简化依赖管理和自动配置,极大提升了开发效率。本文将深入剖析 Starter 的设计思想、实现原…...
电商双十一美妆数据分析
1. 数据读取与基础查看 库导入:使用 import numpy as np 和 import pandas as pd 导入常用数据分析库。数据读取: df pd.read_csv(双十一_淘宝美妆数据.csv) 读取数据文件。数据查看:通过 df.head() 查看数据前几行; df.info() 了…...

Python 数据分析与可视化:开启数据洞察之旅(5/10)
一、Python 数据分析与可视化简介 在当今数字化时代,数据就像一座蕴藏无限价值的宝藏,等待着我们去挖掘和探索。而 Python,作为数据科学领域的明星语言,凭借其丰富的库和强大的功能,成为了开启这座宝藏的关键钥匙&…...

gitkraken 使用教程
一、安装教程 安装6.5.3,之后是收费的,Windows版免安装 二、使用教程 0. 软件说明 gitkraken是一个git本地仓库管理软件,可以管理多个仓库,并且仓库可以属于多个网站多个账户。 1. 克隆仓库 选择要克隆到什么位置࿰…...
如何避免 JavaScript 中常见的闭包陷阱?
文章目录 1. 引言2. 什么是闭包?3. 常见的闭包陷阱及解决方案3.1 循环中的闭包陷阱3.2 内存泄漏3.3 意外的全局变量3.4 React 中的闭包陷阱 4. 总结 1. 引言 闭包(Closure)是 JavaScript 中一个强大而常用的特性,它允许函数访问其…...

【LeetCode 热题 100】二叉树 系列
📁 104. 二叉树的最大深度 深度就是树的高度,即只要左右子树其中有一个不为空,就继续往下递归,知道节点为空,向上返回。 int maxDepth(TreeNode* root) {if(root nullptr)return 0;return max(maxDepth(root->lef…...

用drawdb.app可视化创建mysql关系表
平时自己建表,没有可视化图形参考 为了便于理解,用drwadb画mysql关系表 drawDB | Online database diagram editor and SQL generator...

火绒互联网安全软件:自主引擎,精准防御
在数字时代,网络安全是每一个用户都必须重视的问题。无论是个人用户还是企业用户,都需要一款高效、可靠的反病毒软件来保护设备免受恶意软件的侵害。今天,我们要介绍的 火绒互联网安全软件,就是这样一款由资深工程师主导研发并拥有…...
Golang 应用的 CI/CD 与 K8S 自动化部署全流程指南
一、CI/CD 流程设计与工具选择 1. 技术栈选择 版本控制:Git(推荐 GitHub/GitLab)CI 工具:Jenkins/GitLab CI/GitHub Actions(本文以 GitHub Actions 为例)容器化:Docker Docker Compose制品库…...

【前端基础】8、CSS的选择器
一、什么是选择器? 根据一定的规则选出符合条件的HTML元素,从而为他们添加各种特定的样式。 二、选择器分类 通用选择器元素选择器类选择器id选择器属性选择器后代选择器兄弟选择器选择器组伪类 三、通用选择器(*) 作用&…...

Gitee Team:关键领域行业DevSecOps落地的项目管理引擎
在全球数字化转型浪潮下,关键领域行业的软件研发正面临前所未有的挑战与机遇。国产化进程的加速推进与国防装备的智能化转型,对软件研发效能和质量提出了更高要求。在这样的背景下,Gitee Team作为国内领先的研发协作平台,正在为关…...
【Redis】键值对数据库实现
目录 1、背景2、五种基本数据类型对应底层实现3、redis数据结构 1、背景 redis是一个(key-value)键值对数据库,其中value可以是五大基本数据类型:string、list、hash、set、zset,这五大基本数据类型对应着不同的底层结…...
什么是 NoSQL 数据库?它与关系型数据库 (RDBMS) 的主要区别是什么?
我们来详细分析一下 NoSQL 数据库与关系型数据库 (RDBMS) 的主要区别。 什么是 NoSQL 数据库? NoSQL (通常指 “Not Only SQL” 而不仅仅是 “No SQL”) 是一类数据库管理系统的总称。它们的设计目标是解决传统关系型数据库 (RDBMS) 在某些场景下的局限性…...

网址为 http://xxx:xxxx/的网页可能暂时无法连接,或者它已永久性地移动到了新网址
这是由于浏览器默认的非安全端口所导致的,所谓非安全端口,就是浏览器出于安全问题,会禁止一些网络浏览向外的端口。 避免使用6000,6666这样的端口 6000-7000有很多都不行,所以尽量避免使用这个区间 还有在云服务器中,…...
《智能网联汽车 自动驾驶功能场地试验方法及要求》 GB/T 41798-2022——解读
目录 1. 适用范围与核心目标 2. 试验核心要求 2.1 试验场地与环境 2.2 试验设备与数据采集 2.3 试验车辆要求 3. 试验过程与通过条件 4. 关键试验场景与方法 4.1 交通信号识别及响应 4.2 基础设施与障碍物识别 4.3 行人及非机动车场景 4.4 紧急避险与风险策略 5. 特…...

鸿蒙跨平台开发教程之Uniapp布局基础
前两天的文章内容对uniapp开发鸿蒙应用做了一些详细的介绍,包括配置开发环境和项目结构目录解读,今天我们正式开始写代码。 入门新的开发语言往往从Hello World开始,Uniapp的初始化项目中已经写好了一个简单的demo,这里就不再赘述…...

uniapp使用npm下载
uniapp的项目在使用HBuilder X创建时是不会有node_modules文件夹的,如下图所示: 但是uni-app不管基于哪个框架,它内部一定是有node.js的,否则没有办法去实现框架层面的一些东西,只是说它略微有点差异。具体差异表现在…...
uni-app微信小程序登录流程详解
文章目录 uni-app微信小程序登录流程实战详解微信小程序登录流程概述1. 获取登录凭证(code)2. 发送登录请求3. 保存登录态4. 登录状态管理5. 应用登录状态请求拦截器中添加 token自动登录页面路由守卫 使用 Vuex 集中管理登录状态登录组件示例登录流程最…...
【C++游戏引擎开发】第34篇:C++实现反射
一、反射系统概述 1.1 反射的核心概念 1.1.1 运行时自省能力 反射允许程序在运行时动态获取和操作自身的类型信息。这种能力突破了静态类型语言的限制,使得开发者可以: 检查对象类型及其成员结构动态创建未在编译期确定的类型实例实现类型无关的通用操作接口1.1.2 元数据驱…...

C# 的异步任务中, 如何暂停, 继续,停止任务
namespace taskTest {using System;using System.Threading;using System.Threading.Tasks;public class MyService{private Task? workTask;private readonly SemaphoreSlim semaphore new SemaphoreSlim(0, 1); // 初始为 0,Start() 启动时手动放行private read…...
langchain4j中使用milvus向量数据库做RAG增加索引
安装milvus向量数据库 官方网址 https://milvus.io/zh 使用docker安装milvus mkdir -p /data/docker/milvus cd /data/docker/milvus wget https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh#在docker中启动milvus sh standalone_emb…...
MySQL SQL Mode及其说明
以下是MySQL中所有支持的SQL Mode及其说明,综合了多个来源的信息并进行了分类整理: 一、严格模式相关 STRICT_TRANS_TABLES 对事务型存储引擎(如InnoDB)启用严格数据校验。若插入非法值(如类型不符、超出范围等&#…...