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:查询某个坐标或某个成员&#…...

做短视频矩阵要十几人团队吗?云微客助阵,一人即可
现在市面上主流的新媒体平台都进军了短视频赛道,对于众多企业和个人来说,短视频矩阵更是成为了提升影响力和拓展业务的关键。企业或个人可以根据自身产品特点和目标用户群体,构建账号矩阵,在多平台上建立账号矩阵,还可…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...