SQL— DDL语句学习【后端 9】
SQL— DDL语句学习
在数据管理的广阔领域中,SQL(Structured Query Language)作为操作关系型数据库的编程语言,扮演着举足轻重的角色。它不仅定义了操作所有关系型数据库的统一标准,还为我们提供了强大的工具来管理、查询和修改数据库中的数据。今天,我们将一起走进SQL的世界,了解其语法、分类以及在数据库操作中的应用。
SQL语法基础
在学习SQL的具体语句之前,了解其基本语法是非常重要的。SQL语句的书写具有一定的灵活性,但也有一些基本的规则需要遵循:
- 语句结构:SQL语句可以单行或多行书写,但每条语句的结束需要以分号(
;)作为标记。 - 可读性:为了提高代码的可读性,SQL语句中可以使用空格和缩进来组织代码结构。
- 大小写敏感性:在MySQL数据库中,SQL语句是不区分大小写的,这意味着
SELECT、select或SeLeCt都会被正确执行。但出于代码规范和可读性的考虑,建议使用统一的大小写规则。 - 注释:SQL支持两种注释方式,单行注释可以使用
--(或MySQL特有的#)后跟注释内容,而多行注释则使用/* 注释内容 */。
SQL语句分类
SQL语句根据其功能被划分为四大类:DDL、DML、DQL和DCL,每一类都对应着数据库管理中的不同方面。
| 分类 | 全称 | 说明 |
|---|---|---|
| DDL | Data Definition Language | 数据定义语言,用于定义数据库对象(如数据库、表、字段) |
| DML | Data Manipulation Language | 数据操作语言,用于对数据库表中的数据进行增、删、改操作 |
| DQL | Data Query Language | 数据查询语言,用于查询数据库中表的记录 |
| DCL | Data Control Language | 数据控制语言,用于创建数据库用户、控制数据库的访问权限 |
DDL:数据定义语言
DDL是SQL中用于定义数据库结构的部分,它允许我们创建、修改或删除数据库对象。在数据库设计阶段,DDL语句是不可或缺的工具。
DDL的常见操作
- 查询数据库:虽然DDL主要用于定义数据库对象,但了解如何查询现有数据库也是数据库管理的一部分。不过,需要注意的是,DDL本身并不直接提供查询数据库的语句(这通常属于DQL的范畴),但我们可以使用
SHOW DATABASES;(MySQL)等命令来查看数据库列表。 - 创建数据库:使用
CREATE DATABASE dbname;语句来创建一个新的数据库。 - 创建表:通过
CREATE TABLE tablename (column1 datatype, column2 datatype, ...);语句来定义表的结构。 - 修改数据库/表:DDL也提供了修改数据库和表结构的机制,但需要注意的是,直接修改表结构(如添加或删除列)通常需要使用
ALTER TABLE语句,而修改数据库本身(如重命名)则可能依赖于特定数据库的特定命令。 - 删除数据库/表:使用
DROP DATABASE dbname;和DROP TABLE tablename;语句可以分别删除整个数据库和单个表。这是一个非常危险的操作,因为一旦执行,数据将不可恢复,因此在使用时需要格外小心。
1 有关数据库的DDL语句
在数据库管理中,DDL(Data Definition Language,数据定义语言)是一组用于定义和修改数据库结构的SQL语句。DDL语句主要用于创建、修改、删除数据库及其对象(如表、索引等)。下面,我们将详细介绍几个常见的DDL语句,包括查询数据库、创建数据库、使用数据库以及删除数据库。
查询所有数据库
要查看MySQL服务器中所有现有的数据库,可以使用SHOW DATABASES;命令。
show databases;
执行该命令后,将列出MySQL服务器上所有的数据库。
查询当前数据库
如果你想要知道当前正在使用哪个数据库,可以使用SELECT DATABASE();语句。
select database();
注意,这里的DATABASE()是一个函数,用于返回当前数据库的名称。
创建数据库
创建数据库的基本语法如下:
create database [if not exists] 数据库名;
[if not exists]是一个可选参数,用于防止在数据库已存在时执行创建操作时出现错误。
例如,创建一个名为itcast的数据库:
create database itcast;
或者,使用if not exists防止重复创建:
create database if not exists itcast;
注意:原笔记中的extists应为exists,这是一个常见的拼写错误。
使用数据库
在创建或选择了一个数据库之后,你需要使用USE语句来指定接下来要操作的数据库。
use 数据库名;
例如,切换到itcast数据库:
use itcast;
只有在使用了USE语句之后,你才能在该数据库下创建表、插入数据等。
删除数据库
如果某个数据库不再需要,可以使用DROP DATABASE语句来删除它。为了防止删除不存在的数据库时出错,可以使用IF EXISTS选项。
drop database [if exists] 数据库名;
例如,删除itcast数据库(如果存在):
drop database if exists itcast;
额外说明
在SQL中,DATABASE和SCHEMA这两个词经常可以互换使用,特别是在MySQL中。因此,CREATE DATABASE和CREATE SCHEMA、SHOW DATABASES和SHOW SCHEMAS等命令在MySQL中是等价的。但在其他数据库管理系统中,这种等价性可能不成立,因此在使用时需要注意。
DDL语句是数据库管理和维护的重要工具,掌握它们对于进行高效的数据库设计和管理至关重要。
2 有关表的DDL语句表的DDL语句详解
在数据库管理中,表是存储数据的基本结构。通过DDL(Data Definition Language,数据定义语言)语句,我们可以对表结构进行创建、查询、修改和删除等操作。下面,我们将详细探讨这些操作,特别是关于创建表的语法和注意事项。
创建表
语法
创建表的基本语法如下:
create table 表名( 字段1 字段1类型 [约束] [comment 字段1注释], 字段2 字段2类型 [约束] [comment 字段2注释], ...... 字段n 字段n类型 [约束] [comment 字段n注释]
) [comment 表注释];
[ ]中的内容为可选参数。- 最后一个字段后面没有逗号。
示例
假设我们要创建一个用户表tb_user,包含ID、用户名、姓名、年龄和性别等字段,其建表语句如下:
create table tb_user ( id int comment 'ID,唯一标识', username varchar(20) comment '用户名', name varchar(10) comment '姓名', age int comment '年龄', gender char(1) comment '性别'
) comment '用户表';
约束
在创建表时,我们可以为字段添加约束以保证数据的正确性、有效性和完整性。MySQL中常见的约束包括:
| 约束 | 描述 | 关键字 |
|---|---|---|
| 非空约束 | 字段值不能为null | not null |
| 唯一约束 | 字段值必须唯一 | unique |
| 主键约束 | 字段值非空且唯一,作为行的唯一标识 | primary key |
| 默认约束 | 字段值未指定时采用默认值 | default |
| 外键约束 | 关联两个表,保证数据一致性和完整性 | foreign key |
示例(包含约束)
create table tb_user ( id int primary key auto_increment comment 'ID,唯一标识', username varchar(20) not null unique comment '用户名', name varchar(10) not null comment '姓名', age int comment '年龄', gender char(1) default '男' comment '性别'
) comment '用户表';
在这个例子中,id字段被设置为主键并自动增长,username字段被设置为非空且唯一,name字段被设置为非空,gender字段具有默认值“男”。
主键自增
auto_increment关键字用于自动增长主键的值,每次插入新记录时,数据库会自动生成一个唯一的ID。
数据类型
MySQL支持多种数据类型,主要分为数值类型、字符串类型和日期时间类型。
数值类型
| 类型 | 大小 | 有符号范围 | 无符号范围 | 描述 |
|---|---|---|---|---|
| TINYINT | 1byte | (-128, 127) | (0, 255) | 小整数值 |
| SMALLINT | 2bytes | (-32768, 32767) | (0, 65535) | 大整数值 |
| MEDIUMINT | 3bytes | (-8388608, 8388607) | (0, 16777215) | 大整数值 |
| INT/INTEGER | 4bytes | (-2147483648, 2147483647) | (0, 4294967295) | 大整数值 |
| BIGINT | 8bytes | (-263, 263-1) | (0, 2^64-1) | 极大整数值 |
| FLOAT | 4bytes | (-3.402823466 E+38, 3.402823466351 E+38) | 0 和 (1.175494351 E-38, 3.402823466 E+38) | 单精度浮点数值 |
| DOUBLE | 8bytes | (-1.7976931348623157 E+308, 1. |
对于数值类型,TINYINT、DOUBLE等是常用的数据类型,它们分别适用于不同范围的数值存储需求。
-
年龄字段(
age)- 考虑到年龄通常不会为负数,且人的年龄范围相对固定,使用
TINYINT UNSIGNED是一个合理的选择。这样既保证了数据的非负性,又有效地限制了存储空间。
age TINYINT UNSIGNED - 考虑到年龄通常不会为负数,且人的年龄范围相对固定,使用
-
分数(
score)- 如果分数总分是100分,且最多出现一位小数,可以使用
DOUBLE(4,1)来存储。但考虑到分数的精度和存储效率,使用DECIMAL(3,1)可能更为合适,因为它更适合存储精确的十进制数。
score DECIMAL(3,1) - 如果分数总分是100分,且最多出现一位小数,可以使用
字符串类型
字符串类型包括CHAR、VARCHAR、TEXT等,它们适用于存储不同长度的文本数据。
-
用户名(
username)- 用户名长度通常不定,但会有一个最大长度限制。在这种情况下,使用
VARCHAR(50)是一个好的选择,因为它可以根据实际存储的字符串长度动态调整存储空间。
username VARCHAR(50) - 用户名长度通常不定,但会有一个最大长度限制。在这种情况下,使用
-
手机号(
phone)- 手机号是固定长度的字符串(通常为11位数字),因此使用
CHAR(11)是合适的。这样可以确保每个手机号都占用相同的存储空间,提高查询效率。
phone CHAR(11) - 手机号是固定长度的字符串(通常为11位数字),因此使用
日期和时间类型
日期和时间类型包括DATE、TIME、DATETIME等,它们用于存储日期和时间信息。
-
生日(
birthday)- 生日只需要存储年月日信息,因此使用
DATE类型是最合适的。
birthday DATE - 生日只需要存储年月日信息,因此使用
-
创建时间(
createtime)- 创建时间需要精确到时分秒,因此使用
DATETIME类型是最合适的。它可以存储日期和时间信息,满足大多数应用场景的需求。
createtime DATETIME - 创建时间需要精确到时分秒,因此使用
数据库表结构的查询 修改 删除
在数据库管理中,对表结构的查询、修改、删除等操作是日常工作中不可或缺的一部分。尽管现代数据库管理工具提供了图形化界面来简化这些操作,但了解背后的SQL命令仍然非常重要。以下将详细介绍如何在MySQL数据库中查询、修改和删除表结构。
查询
查询当前数据库所有表
要查看当前数据库中所有的表,可以使用SHOW TABLES;命令。这个命令会列出当前数据库中的所有表名。
SHOW TABLES;
查看指定表结构
要查看某个表的具体结构,包括字段名、字段类型、是否允许为空、默认值等信息,可以使用DESC命令或DESCRIBE命令(两者是等价的)。
DESC 表名;
-- 或者
DESCRIBE 表名;
查询指定表的建表语句
如果你需要查看某个表的完整建表语句,包括所有的字段定义、索引、约束等,可以使用SHOW CREATE TABLE命令。
SHOW CREATE TABLE 表名;
修改
添加字段
向表中添加新字段,可以使用ALTER TABLE命令配合ADD子句。
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT '注释'] [约束];
案例:为tb_emp表添加名为qq的字段,字段类型为VARCHAR(11),并添加注释“QQ号码”。
ALTER TABLE tb_emp ADD qq VARCHAR(11) COMMENT 'QQ号码';
修改数据类型
修改表中字段的数据类型,可以使用MODIFY子句或CHANGE子句。MODIFY用于修改字段的数据类型和长度,而CHANGE还可以修改字段名。
修改数据类型:
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
案例:将tb_emp表中的qq字段长度由11修改为13。
ALTER TABLE tb_emp MODIFY qq VARCHAR(13) COMMENT 'QQ号码';
修改字段名和数据类型:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT '注释'] [约束];
案例:将tb_emp表中的qq字段名改为qq_num,字段类型保持为VARCHAR(13)。
ALTER TABLE tb_emp CHANGE qq qq_num VARCHAR(13) COMMENT 'QQ号码';
删除字段
从表中删除字段,可以使用DROP子句。
ALTER TABLE 表名 DROP 字段名;
案例:删除tb_emp表中的qq_num字段。
ALTER TABLE tb_emp DROP qq_num;
修改表名
修改表名,可以使用RENAME TABLE命令。
RENAME TABLE 表名 TO 新表名;
案例:将tb_emp表名修改为emp。
RENAME TABLE tb_emp TO emp;
删除
删除表
删除表及其所有数据,可以使用DROP TABLE命令。为了避免在表不存在时执行删除操作导致错误,可以添加IF EXISTS子句。
DROP TABLE [IF EXISTS] 表名;
案例:如果tb_emp表存在,则删除它。
DROP TABLE IF EXISTS tb_emp; -- 在删除表时,表中的全部数据也会被删除。
尽管图形化界面提供了便捷的操作方式,但掌握SQL命令对于深入理解数据库结构和进行复杂操作至关重要。希望以上内容能帮助你更好地管理数据库表结构。
相关文章:
SQL— DDL语句学习【后端 9】
SQL— DDL语句学习 在数据管理的广阔领域中,SQL(Structured Query Language)作为操作关系型数据库的编程语言,扮演着举足轻重的角色。它不仅定义了操作所有关系型数据库的统一标准,还为我们提供了强大的工具来管理、查…...
线程池介绍
1.线程池简介 import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class CallableDemo {public sta…...
如何备份电脑所有数据?有哪些方法值得参考借鉴?
备份电脑所有数据是防护数据丢失和泄密的重要一项措施,备份数据也有不同的方式和工具,正确的工具能帮你省时省力,下面盘点了几个方法,来看哪一种最适合你。 一、使用专业备份软件 第三方服务器文件自动备份软件:如安企…...
初识--树(1)
下面就是这篇博客要讲的内容 树 二叉树堆 树概念及结构二叉树的概念及结构二叉树的实现堆的概念及运用 这篇博客主要以二叉树为主要内容。 1、树的概念及结构 1.1树的概念: 树是一种非线性的数据结构,它是由n(n>0)个有限…...
渗透测试实战-菠菜站渗透测试(Nacos反序列化漏洞利用)
免责声明:文章来源于真实渗透测试,已获得授权,且关键信息已经打码处理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本…...
Pytest框架直接右键运行 testcase.py,不执行最外层conftest
随笔记录 目录 1. 背景介绍 2. workaround method 2.1 通过命令行执行 某个测试用例 1. 背景介绍 Pytest 框架结构如下: TestCases:conftest.pyInstanta: conftest.pytest_instanta_tcpdump_pack_len.py# 当直接右键直接 运行 test_instanta_tcpdump_pack_l…...
Cxx primer-chap15-Object-Oriented Programming
面向对象编程的三个基本概念:数据抽象、继承和动态绑定(多态):基类应该提供一些类型无关的成员函数定义,将与类相关的函数留给不同的派生类定义:,派生类是通过类派生列表(class derivation list…...
当黑神话遇上AI:悟空背后的策划逆袭战
声明:此篇为 ai123.cn 原创文章,转载请标明出处链接:https://ai123.cn/2192.html 哈喽,亲爱的游戏迷,随着《黑神话:悟空》的上线,大家都在忙着“直面天命”了吧?今天我想和大家分享最…...
外呼触发通知发送闪信(mod_cti基于FreeSWITCH)
文章目录 前言联系我们手动外呼配置方法例子一:接收到180或183时触发闪信发送例子二:挂断后触发闪信发送 自动外呼配置方法例子:接收到180或183时触发闪信发送 前言 在呼叫中心中间件中,自动外呼触发闪信发送,我们可以…...
8.Java基础概念-方法
欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words! 什么是方法 方法是程序…...
360安全浏览器如何彻底卸载
360安全浏览器是一款广泛使用的网络浏览工具,然而由于各种原因,用户可能需要将其从计算机中彻底移除。下面小编就给大家分享几种彻底卸载360安全浏览器的方法,避免留下影响系统性能的残留信息。(本文由https://chrome.cmrrs.com/站…...
构建基于LLM的应用程序——使用LLM的搜索和推荐引擎
在上一章中,我们介绍了构建对话应用程序的核心步骤。我们从一个基础的聊天机器人开始,然后逐步添加了更复杂的组件,例如记忆、非参数化知识和外部工具。借助LangChain的预构建组件以及Streamlit的UI渲染,这一切都变得相对简单。尽…...
Unity3D 模型碰撞检测问题详解
前言 在Unity3D游戏开发中,模型碰撞检测是至关重要的一环,它负责处理物体之间的交互、触发事件以及物理效果的实现。通过精确的碰撞检测,游戏世界得以呈现出更为真实和动态的交互体验。本文将详细介绍Unity3D中的碰撞检测原理、技术实现以及…...
springcloud集成seata实现分布式事务
Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 官网:Apache Seata 文章目录 一、部署1.下载2.修改配置,nacos作注册中心,db存储 二、集成到springcloud项目1.引入依赖2.修改…...
[Leetcode 61][Medium]-旋转链表
目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题链接 二、整体思路 首先发现这样的规律:当k大于等于链表中节点总数n时,会发现此时旋转后的链表和kk%n时的旋转后的链表一样。同时对于特殊情况n0和n1时,无论k的值为多少都可以…...
高效分页策略:掌握 LIMIT 语句的正确使用方法与最佳实践
本文主要介绍limit 分页的弊端及线上应该怎么用 LIMIT M,N 平时经常见到使用 <limit m,n> 合适的 order by 来实现分页查询,这样做到底性能如何呢? 先来简单分析下,然后再实际验证一下。 无索引条件下,需要做大量的文件排…...
拼图游戏02
文章目录 概要整体架构流程代码过程小结 概要 现在需要将图片添加界面中 关键点在于它如何动态地根据游戏状态更新用户界面。它使用了Swing的布局管理器来定位组件,并且通过ImageIcon和JLabel来显示图像。注意,路径字符串中的反斜杠在Java中是转义字符…...
在本地进行Django支付宝扫码支付-当面付开发
这几天涉及到一个个人项目的支付开发场景,正好完成之后,做一下开发记录,给有需要的朋友做一下参考 涉及安装Python环境请参考我专栏中的历史文章,这里不再重复说明 环境: Python3.11 使用Django框架 因本次代码为沙…...
redis-RedisTemplate.opsForGeo 的geo地理位置相关的方法演示
主要方法:add : 添加一个地理位置distance: 计算两个元素之间的距离hash: 获取元素经纬度坐标经过geohash算法生成的base32编码值position: 获取集合中任意元素的经纬度坐标,可以一次获取多个radius:查询某个坐标或某个成员&#…...
做短视频矩阵要十几人团队吗?云微客助阵,一人即可
现在市面上主流的新媒体平台都进军了短视频赛道,对于众多企业和个人来说,短视频矩阵更是成为了提升影响力和拓展业务的关键。企业或个人可以根据自身产品特点和目标用户群体,构建账号矩阵,在多平台上建立账号矩阵,还可…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
