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

【教程】MySQL数据库学习笔记(三)——数据定义语言DDL(持续更新)

文首标志
写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!


【MySQL数据库学习】系列文章

第一章 《认识与环境搭建》
第二章 《数据类型》
第三章 《数据定义语言DDL》


文章目录

  • 【MySQL数据库学习】系列文章
  • 一、DDL介绍
  • 二、DDL数据库操作
    • (一)查看数据库
    • (二)创建数据库
    • (三)选择数据库
    • (四)删除数据库
    • (五)转换数据库编码
  • 三、DDL表结构操作
    • (一)创建表
    • (二)查看所有表
    • (三)查看表创建语句
    • (四)查看表结构
    • (五)删除表
    • (六)修改表结构
      • 1.添加列
      • 2.更改列
      • 3.删除列
      • 4.修改表名


一、DDL介绍

DDL(Data Definition Language,数据定义语言) 是用于定义和管理数据库对象(如表、视图、索引等)的语言。它是一种结构化查询语言(SQL)的子集。该语言部分包括以下内容:

  • 对数据库的常用操作
  • 对表结构的常用操作
  • 修改表结构

二、DDL数据库操作

以下是DDL对数据库的常用操作。

功能SQL语句
查看所有数据库SHOW DATABASES;
创建数据库CREATE DATABASE [IF NOT EXISTS] 数据库 [CHARSET=utf8];
切换据库USE 数据库;
删除数据库DROP DATABASE [IF EXISTS] 数据库;
修改数据库编码ALTER DATABASE 数据库 CHARACTER SET 编码样式;

需要指出的是,由于SQL语言大小写不敏感,所以为了可读性一般会将标识符大写,但使用小写也不影响程序运行。另外,使用[]内的语句代表着可选。

(一)查看数据库

下面是代码实验。进入Navicat后,点击左侧连接好的MySQL,会发现有一些默认数据库,点击“新建查询”,即可输入SQL语言代码进行操作。

-- 查看数据库
SHOW DATABASES;

此时在弹出的结果栏可以查看目前MySQL存在的数据库。

(二)创建数据库

-- 创建数据库
CREATE DATABASE mydb1;

运行后可以看到结果栏中出现mydb1这个新创建的数据库。同时,在左侧的库显示栏右键刷新后也可以看到新创建的库。
但当重复运行创建数据库的语句时,会报错“> 1007 - Can’t create database ‘mydb1’; database exists”,即数据库已存在,不可创建。所以会加上IF NOT EXISTS的判断语句,这样就不会报错。

CREATE DATABASE IF NOT EXISTS mydb1;

(三)选择数据库

当选择使用哪一个数据库进行编辑时,使用如下语句。

-- 选择使用数据库
USE mydb1;

(四)删除数据库

而当要删除此处已经创建的mydb1数据库时,则使用以下语句。

-- 删除数据库
DROP DATABASE mydb1;

刷新即可发现创建的数据库mydb1已经被删除。
然而当重复运行删除数据库的语句时,会报错“> 1008 - Can’t drop database ‘mydb1’; database doesn’t exist”,即数据库不存在,不可删除。所以加上IF EXISTS的判断语句就可以不报错。

(五)转换数据库编码

至于转换编码则一般不需要,因为在初始化的时候已经默认将MySQL设置为utf8编码了,但如果进行操作时,语句也一般如下。

-- 修改数据库的编码
ALTER DATABASE mydb1 CHARACTER SET utf8;

三、DDL表结构操作

以下是DDL对表结构的常用操作。

功能SQL语句
创建表CREATE TABLE 表名();
查看当前数据库所有表SHOW TABLES;
查看指定表的创建语句SHOW CREATE TABLE 表名;
查看表结构DESC 表名;
删除表DROP TABLE 表名;

(一)创建表

创建表是在数据库中构建一张空表,制定这个表的名字,这个表的列数和列名,以及每一列储存的数据类型。具体语法如下。

CREATE TABLE [IF NOT EXISTS]表名(字段名1 类型[(宽度)] [约束条件] [COMMENT '字段说明'],字段名2 类型[(宽度)] [约束条件] [COMMENT '字段说明'],字段名3 类型[(宽度)] [约束条件] [COMMENT '字段说明'],
)[其他表设置];

其中,字段名实际上就是列名,类型则是需要选择的数据类型。

-- 创建表
CREATE DATABASE IF NOT EXISTS mydb1;
USE mydb1;
CREATE TABLE IF NOT EXISTS student(sid INT,name VARCHAR(20),gender VARCHAR(10),age INT,birth DATE,address VARCHAR(20),score DOUBLE
);

以上代码重新创建了数据库mydb1,并确定使用此数据库进行编辑。随后,创建了一个表student,表中有7个列,分别是学生号sid、名字name、性别gender、年龄age、出生日期birth、地址address和成绩score
在Navicat中点击mydb1库进入表即可看到student表的空表如下。
创建表

(二)查看所有表

-- 查看所有表
SHOW TABLES;

输入以上命令,结果栏即可查看当前数据库的所有表。当然,作为图形化界面,在Navicat的左侧依然可以查看到所有的库和表。

(三)查看表创建语句

-- 查看表创建语句
SHOW CREATE TABLE student;

承接之前创建的表student,输入以上命令就能在结果栏返回当时创建表student的语句。返回结果如下。

CREATE TABLE `student` (
`sid` int DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`age` int DEFAULT NULL,
`birth` date DEFAULT NULL,
`address` varchar(20) DEFAULT NULL,
`score` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3

(四)查看表结构

-- 查看表结构
DESC student;

使用以上语句,就可以查询到表student的相应表结构。返回结果如下图。
查看表结构返回结果

(五)删除表

-- 删除表
DROP TABLE student;

使用以上语句即可删除刚刚创建和操作的表student

(六)修改表结构

在创建表后,若希望增添或者删除表的某列,修改表名等操作,就需要用到对表结构的修改语句。

1.添加列

ALTER TABLE 表名 ADD 列名 类型(长度) [约束];

使用以上的语法结构再给表student中添加一个系别(department)字段名dept,其代码如下。

ALTER TABLE student ADD dept VARCHAR(20);

使用DESC命令即可查看添加后的表结构如图所示。
添加列

2.更改列

ALTER TABLE 表名 CHANGE 旧列名 新列名 类型(长度) [约束];

使用以上的语法结构给表student中刚刚添加的系别字段名dept更改为department,其代码如下。

ALTER TABLE student CHANGE dept department VARCHAR(30);

此时查看的表结构如图所示。
更改列

3.删除列

ALTER TABLE 表名 DROP 列名;

使用以上的语法结构将表student的系别列删除,其代码如下。

ALTER TABLE student DROP department;

如此,再使用DESC命令查看表结构,发现此列已经删除。
删除列

4.修改表名

RENAME TABLE 旧表名 TO 新表名;

使用以上的语法将表student的更名为stu,其代码如下。

RENAME TABLE student TO stu;

此时左侧库中的表名就可以发现从student改名为stu。


我是EC,一个永远在学习中的探索者,关注我,让我们一起进步!

文末标志

相关文章:

【教程】MySQL数据库学习笔记(三)——数据定义语言DDL(持续更新)

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 文章目录 【MyS…...

[leetcode]买卖股票的最佳时机 (动态规划)

121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从…...

隐函数的求导【高数笔记】

1. 什么是隐函数? 2. 隐函数的做题步骤? 3. 隐函数中的复合函数求解法,与求导中复合函数求解法有什么不同? 4. 隐函数求导的过程中需要注意什么?...

SG3225EEN晶体振荡器规格书

SG3225EEN 晶振是EPSON/爱普生的一款额定频率25 MHz至500 MHz的石英晶体振荡器,6脚贴片,LV-PECL输出,3225封装常规有源晶振,具有小尺寸,轻薄型,高稳定性,低相位抖动,低电源电压&…...

ESP8266 常用AT指令

一、ESP8266的AT指令要点、常见错误 AT指令要大写;以"\r\n"作结尾;串口通信,115200-None-8-1;支持2.4G频段,不支持5G频段 (如果用手机创建热点,注意选择2.4G)不支持中文的wifi名称工作模式,上电…...

esbuild 构建工具为什么很快?

esbuild 构建工具之所以很快,主要有以下几个原因: Go语言编写:esbuild 是用 Go 语言编写的,Go 语言以其高效的并发模型和编译速度而闻名。与一些其他构建工具相比,Go 语言在并发处理和内存管理方面表现出色&#xff0c…...

解决vscode报错,在赋值前使用了变量“XXX“

问题:如图所示 解决方法: 法一: 补全函数使其完整 法二: 使用断言...

python自动定时任务schedule库的使用方法

当你需要在 Python 中定期执行任务时,schedule 库是一个非常实用的工具。它可以帮助你自动化定时任务。以下是一些使用示例: 基本使用: import schedule import timedef job():print("Im working...")schedule.every(10).minutes.d…...

用机器学习方法重构期货商品板块

用机器学习方法重构期货商品板块 阿岛格 参考专栏:低门槛搭建个人量化平台 https://www.zhihu.com/column/c_1441014235068944386 摘 要 金融市场商品期货的板块分类,通常根据不同交易所、监管机构和证券商标准,按照期货标的属性、或产业链关系等进行分类,各自分类略有差…...

51单片机项目(29)——基于51单片机的避障跟随小车

1.功能设计 按键模式:按下按键,小车可以前后左右地运动 自动模式:根据红外传感器的状态,自行决定运动状态。检测到前方有物体时,车子移动,起到一个跟随的效果。 演示视频如下: 51单片机智能避障…...

人工智能学习与实训笔记(六):百度飞桨套件使用方法

目录 八、百度飞桨套件使用 8.1 飞桨预训练模型套件PaddleHub 8.1.1 一些本机CPU可运行的飞桨预训练简单模型(亲测可用) 8.1.1.1 人脸检测模型 8.1.1.2 中文分词模型 8.1.2 预训练模型Fine-tune 8.2 飞桨开发套件 8.2.1 PaddleSeg - 图像分割 8…...

Linux第一个小程序-进度条

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、回车和换行 二、行缓冲区概念 三、倒计时 四、进度条代码 版本一: ​编辑 版本二: 总结 前言 世上有两种耀眼的光芒,一…...

YoloV8改进策略:Block改进|Mamba-UNet改进YoloV8,打造全新的Yolo-Mamba网络

摘要 本文尝试使用Mamba的VSSBlock替换YoloV8的Bottleneck,打造最新的Yolo-Mamba网络。 论文:《Mamba-UNet:用于医学图像分割的类似UNet的纯视觉Mamba网络》 在医学图像分析的最新进展中,卷积神经网络(CNN)和视觉转换器(ViT)都取得了显著的基准成绩。前者通过其卷积…...

数据分析基础之《pandas(8)—综合案例》

一、需求 1、现在我们有一组从2006年到2016年1000部最流行的电影数据 数据来源:https://www.kaggle.com/damianpanek/sunday-eda/data 2、问题1 想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取? 3、问题…...

(17)Hive ——MR任务的map与reduce个数由什么决定?

一、MapTask的数量由什么决定? MapTask的数量由以下参数决定 文件个数文件大小blocksize 一般而言,对于每一个输入的文件会有一个map split,每一个分片会开启一个map任务,很容易导致小文件问题(如果不进行小文件合并&…...

define和typedef

目录 一、define 二、typedef 三、二者之间的区别 一、define 在我们写代码的日常中,经常会用到define去配合数组的定义使用 #define N 10 arr[N]{0}; define不仅仅能做这些 #define是一种宏,我们首先来了解一下宏定义。 宏定义一般作用在C语言的预…...

SpringCloud之Nacos用法笔记

SpringCloud之Nacos注册中心 Nacos注册中心nacos启动服务注册到Nacosnacos服务分级模型NacosRule负载均衡策略根据集群负载均衡加权负载均衡Nacos环境隔离-namespace Nacos与eureka的对比临时实例与非临时实例设置 Nacos配置管理统一配置管理微服务配置拉取配置自动刷新远端配置…...

【c++】拷贝构造函数

1.特征 1.拷贝构造函数是构造函数的一个重载形式。 2.若显示定义了拷贝构造函数,编译器就不会自动生成构造函数了。 3.拷贝构造函数的参数只有一个且必须是类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。 4.若未显…...

17.3.1.2 曝光

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 基本算法:先定义一个阈值,通常取得是128 原图像:颜色值color(R,G&#…...

【Win10 触摸板】在插入鼠标时禁用触摸板,并在没有鼠标时自动启用触摸板。取消勾选连接鼠标时让触摸板保持打开状态,但拔掉鼠标后触摸板依旧不能使用

出现这种问题我的第一反应就是触摸板坏了,但是无意间我换了一个账户发现触摸板可以用,因此推断触摸板没有坏,是之前的账户问题,跟系统也没有关系,不需要重装系统。 解决办法:与鼠标虚拟设备有关 然后又从知…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...

uniapp获取当前位置和经纬度信息

1.1. 获取当前位置和经纬度信息&#xff08;需要配置高的SDK&#xff09; 调用uni-app官方API中的uni.chooseLocation()&#xff0c;即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...

2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】

1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...

网络安全问题及对策研究

摘 要 网络安全问题一直是近年来社会乃至全世界十分关注的重要性问题&#xff0c;网络关乎着我们的生活&#xff0c;政治&#xff0c;经济等多个方面&#xff0c;致力解决网络安全问题以及给出行之有效的安全策略是网络安全领域的一大目标。 本论文简述了课题的开发背景&…...