SQL— DDL语句学习【后端 9】

news2024/9/23 9:31:54

SQL— DDL语句学习请添加图片描述

在数据管理的广阔领域中,SQL(Structured Query Language)作为操作关系型数据库的编程语言,扮演着举足轻重的角色。它不仅定义了操作所有关系型数据库的统一标准,还为我们提供了强大的工具来管理、查询和修改数据库中的数据。今天,我们将一起走进SQL的世界,了解其语法、分类以及在数据库操作中的应用。

SQL语法基础

在学习SQL的具体语句之前,了解其基本语法是非常重要的。SQL语句的书写具有一定的灵活性,但也有一些基本的规则需要遵循:

  1. 语句结构:SQL语句可以单行或多行书写,但每条语句的结束需要以分号(;)作为标记。
  2. 可读性:为了提高代码的可读性,SQL语句中可以使用空格和缩进来组织代码结构。
  3. 大小写敏感性:在MySQL数据库中,SQL语句是不区分大小写的,这意味着SELECTselectSeLeCt都会被正确执行。但出于代码规范和可读性的考虑,建议使用统一的大小写规则。
  4. 注释:SQL支持两种注释方式,单行注释可以使用--(或MySQL特有的#)后跟注释内容,而多行注释则使用/* 注释内容 */

SQL语句分类

SQL语句根据其功能被划分为四大类:DDL、DML、DQL和DCL,每一类都对应着数据库管理中的不同方面。

分类全称说明
DDLData Definition Language数据定义语言,用于定义数据库对象(如数据库、表、字段)
DMLData Manipulation Language数据操作语言,用于对数据库表中的数据进行增、删、改操作
DQLData Query Language数据查询语言,用于查询数据库中表的记录
DCLData 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中,DATABASESCHEMA这两个词经常可以互换使用,特别是在MySQL中。因此,CREATE DATABASECREATE SCHEMASHOW DATABASESSHOW 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中常见的约束包括:

约束描述关键字
非空约束字段值不能为nullnot 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支持多种数据类型,主要分为数值类型、字符串类型和日期时间类型。

数值类型
类型大小有符号范围无符号范围描述
TINYINT1byte(-128, 127)(0, 255)小整数值
SMALLINT2bytes(-32768, 32767)(0, 65535)大整数值
MEDIUMINT3bytes(-8388608, 8388607)(0, 16777215)大整数值
INT/INTEGER4bytes(-2147483648, 2147483647)(0, 4294967295)大整数值
BIGINT8bytes(-263, 263-1)(0, 2^64-1)极大整数值
FLOAT4bytes(-3.402823466 E+38, 3.402823466351 E+38)0 和 (1.175494351 E-38, 3.402823466 E+38)单精度浮点数值
DOUBLE8bytes(-1.7976931348623157 E+308, 1.

对于数值类型,TINYINTDOUBLE等是常用的数据类型,它们分别适用于不同范围的数值存储需求。

  • 年龄字段(age

    • 考虑到年龄通常不会为负数,且人的年龄范围相对固定,使用TINYINT UNSIGNED是一个合理的选择。这样既保证了数据的非负性,又有效地限制了存储空间。
    age TINYINT UNSIGNED
    
  • 分数(score

    • 如果分数总分是100分,且最多出现一位小数,可以使用DOUBLE(4,1)来存储。但考虑到分数的精度和存储效率,使用DECIMAL(3,1)可能更为合适,因为它更适合存储精确的十进制数。
    score DECIMAL(3,1)
    
字符串类型

字符串类型包括CHARVARCHARTEXT等,它们适用于存储不同长度的文本数据。

  • 用户名(username

    • 用户名长度通常不定,但会有一个最大长度限制。在这种情况下,使用VARCHAR(50)是一个好的选择,因为它可以根据实际存储的字符串长度动态调整存储空间。
    username VARCHAR(50)
    
  • 手机号(phone

    • 手机号是固定长度的字符串(通常为11位数字),因此使用CHAR(11)是合适的。这样可以确保每个手机号都占用相同的存储空间,提高查询效率。
    phone CHAR(11)
    
日期和时间类型

日期和时间类型包括DATETIMEDATETIME等,它们用于存储日期和时间信息。

  • 生日(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命令对于深入理解数据库结构和进行复杂操作至关重要。希望以上内容能帮助你更好地管理数据库表结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2054017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20240819用SDDiskTool_v1.72写IMG固件到256GB的TF卡后再用它给飞凌OK3588-C核心板刷机

20240819用SDDiskTool_v1.72写IMG固件到256GB的TF卡后再用它给飞凌OK3588-C核心板刷机 2024/8/19 10:35 1、精简的配置HDMI0为主显示屏的步骤: 在串口终端中启动到uboot阶段,按空格进入 显示配置模式。 按 2 进入:2:Display type 按 a 两次…

2、Future与CompletableFuture实战

Future与CompletableFuture实战 Callable与Future与FutureTask介绍Callable详解Future介绍FutureTask使用使用案例:促销活动中商品信息查询 Future的局限性 CompletableFuture使用详解应用场景创建异步操作runAsync&supplyAsync 获取结果join&get 结果处理w…

《亿级流量系统架构设计与实战》第十一章 Timeline Feed服务

Timeline Feed服务 一、概述1、分类2、功能 二、设计原理1、拉模式与用户发件箱2、推模式与用户收件箱3、推拉模式结合 三、关键技术1、内容与用户收件箱的交互(推模式)2、推送拆分子任务3、收件箱模型设计 内容总结自《亿级流量系统架构设计与实战》 一…

[linux#39][线程] 详解线程的概念

线程:是进程内的一个执行分支。线程的执行粒度比进程要细 什么是线程? • 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程 是“一个进程内部的控制序列” • 一切进程至少都有一个执行线程 • …

使用Virtio Driver实现一个计算阶乘的小程序——QEMU平台

目录 一、概述 二、代码部分 1、Virtio 前端 (1) User Space (2) Kernel Space 2、Virtio 后端 三、运行 QEMU Version:qemu-7.2.0 Linux Version:linux-5.4.239 一、概述 本篇文章的主要内容是使用Virtio前后端数据传输的机制实现一个计算阶乘的…

基于vue框架的爱喵星人服务平台设计与实现80sgi(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,猫食分类,猫粮信息,养护知识,流浪猫信息,申请领养,志愿者招募,申请加入,猫咪品种,团队活动 开题报告内容 基于Vue框架的爱喵星人服务平台设计与实现 开题报告 一、研究背景与意义 1.1 研究背景 随着社会的快速发展和人们生活水…

使用 onBeforeRouteUpdate 组合式函数提升应用的用户体验

title: 使用 onBeforeRouteUpdate 组合式函数提升应用的用户体验 date: 2024/8/15 updated: 2024/8/15 author: cmdragon excerpt: 摘要:本文介绍如何在Nuxt 3开发中使用onBeforeRouteUpdate组合式函数来提升应用用户体验。通过在组件中注册路由更新守卫&#xf…

Markdown导出为 Excel文件 Vue3

直接复制到单文件内即可使用 需要用到的插件 xlsx 0.17.5marked 14.0.0file-saver 2.0.5vue 3.4.29 直接SFC单文件内使用 <script setup> import {reactive} from vue; import xlsx from xlsx; import {marked} from marked; import {saveAs} from file-saver;const…

鸿蒙(API 12 Beta3版)【元数据(C/C++)】媒体相机开发指导

元数据&#xff08;Metadata&#xff09;是对相机返回的图像信息数据的描述和上下文&#xff0c;针对图像信息&#xff0c;提供的更详细的数据&#xff0c;如照片或视频中&#xff0c;识别人像的取景框坐标等信息。 Metadata主要是通过一个TAG&#xff08;Key&#xff09;&…

Linux基础知识学习(三)

3. Vim 编辑器 1> 定义 im 通过一些插件可以实现和IDE一样的功能&#xff01; vi 是老式的字处理器。 Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。 键盘图为&#xff1a; ps &#xff1…

JMeter——设置全局变量和非全局变量

在用JMeter写接口case&#xff0c;遇到一种情况&#xff0c;接口1查看列表接口&#xff0c;接口2查看详情接口&#xff0c;接口2需要传入接口1列表的第一条数据的id。 如果这个id后续改变较多&#xff0c;可以使用非全局变量的设置方法&#xff1b; 如果这个id在整个case都比较…

vs2019使用setup打包exe学习记录

仅记录一下自己的学习过程&#xff0c;如果有问题&#xff0c;请多指正&#xff01; 开头注意&#xff1a;在打包之前一定要确保自己的工程是正常运行的&#xff0c;以及相关环境变量的配置是正确的&#xff0c;我后面就因为QT的环境变量问题报错。 我使用vs2019的QT项目写了…

本庄村果园预售系统的设计与实现bootpf

TOC springboot441本庄村果园预售系统的设计与实现bootpf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思…

代码随想录算法训练营 | 动态规划 part06

322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是…

【人工智能】Python融合机器学习、深度学习和微服务的创新之路

1. &#x1f680; 引言1.1 &#x1f680; 人工智能的现状与发展趋势1.2 &#x1f4dc; 机器学习、深度学习和神经网络的基本概念1.3 &#x1f3c6; 微服务架构在人工智能中的作用 2. &#x1f50d; 机器学习的演变与创新2.1 &#x1f31f; 机器学习的历史回顾2.2 &#x1f9e0;…

3个常用zip压缩包文件打来密码删除方法

ZIP压缩包作为一种广泛使用的文件压缩格式&#xff0c;常常用于节省存储空间或便于文件传输。一般情况下为保护文件数据的安全我们会给zip压缩文件设置密码安全保护&#xff0c;但如果后续不需要密码保护了&#xff0c;如何删除密码呢&#xff1f;下面小编给大家介绍三种常用的…

ubuntu22.04安装QQ

QQ官方网址&#xff1a;QQ-轻松做自己 选择【Linux】 接下来根据架构的版本&#xff0c;选择相应的安装包。 可使用 uname -a 指令来查看架构的版本&#xff0c;如下指令所示&#xff0c; wjjwjj-MS-7D31:~/桌面$ uname -a Linux wjj-MS-7D31 6.5.0-45-generic #45~22.04.1-U…

项目申报管理系统pf

TOC springboot375项目申报管理系统pf 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff…

[C++游戏开发] 超大地图多人在线扫雷

[C游戏开发] 超大地图多人在线扫雷 前言游戏截图注册方法游戏功能介绍操作方法介绍游戏特性介绍1.颜色标识2.生存方法 使用的技术核心代码尾声***如果你不介意的话&#xff0c;你应该点个赞&#xff0c;然后收藏&#xff0c;然后关注对不对。*** 前言 唉&#xff0c;写文章要什…

【秋招笔试题】合并最小值 DP

题面 解法&#xff1a;与leetcode321不一样的是&#xff0c;那个是最大值&#xff0c;这个是最小值&#xff0c;且需要处理0首位问题。那道题是Hard题中的Hard&#xff0c;无论是思维量还是代码量都是顶级&#xff0c;这道题难度并不弱于那道。 观察到数据量为500级别&#x…