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

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.rhkb.cn/news/404579.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins最佳实践(二):Pipeline流水线部署springCloud微服务项目

各位小伙伴们大家好呀,我是小金,本篇文章我们将介绍如何使用Pipeline流水线部署我们自己的微服务项目,之前没怎么搞过部署相关的,以至于构建流水线的过程中中也遇到了很多自己以前没有考虑过的问题,特写此篇&#xff0…

【Redis】数据类型详解及其应用场景

目录 Redis 常⻅数据类型预备知识基本全局命令小结 数据结构和内部编码单线程架构引出单线程模型为什么单线程还能这么快 Redis 常⻅数据类型 Redis 提供了 5 种数据结构,理解每种数据结构的特点对于 Redis 开发运维⾮常重要,同时掌握每种数据结构的常⻅…

Postman接口测试项目实战

第 1 章 什么是接口测试 1.1、为什么要进行接口测试 目前除了特别Low的公司外,开发都是前后端分离的,就是说前端有前端的工程师进行编码,后端有后端的工程师进行编码,前后端进行数据基本都是通过接口进行交互的。 1.2、接口测…

zookeeper源码分析之事务请求处理

一.参考 zookeeper启动和选举的源码分析参考之前的帖子. 二.源码 1.职责链模式. 每次经过的processor都是异步处理,加入当前processor的队列,然后新的线程从队列里面取出数据处理. PrepRequestProcessor 检查ACL权限,创建ChangeRecord. SyncRequest…

ArcGIS空间自相关Moran‘s I——探究人口空间格局的20年变迁

先了解什么是莫兰指数? 莫兰指数(Morans I)是一种用于衡量空间自相关性的统计量,即它可以帮助我们了解一个地理区域内的观测值是否彼此相关以及这种相关性的强度和方向。 莫兰指数分类: 全局莫兰指数 (Global Moran…

聊聊如何利用ingress-nginx实现应用层容灾

前言 容灾是一种主动的风险管理策略,旨在通过构建和维护异地的冗余系统,确保在面临灾难性事件时,关键业务能够持续运作,数据能够得到保护,从而最大限度地减少对组织运营的影响和潜在经济损失。因此容灾的重要性不言而…

zabbix实战-磁盘空间告警

1.创建监控项 选择&#xff1a;键值&#xff1a;vfs.fs.size[fs,<mode>] 。 直接写 vfs.fs.size[fs,<mode>]是不出数据的。我们要写具体的值 &#xff1a;vfs.fs.size[/,free] &#xff0c;这个表示查看根的剩余空间。 2.创建图形 为磁盘剩余空间监控项创建图形&am…

redis 遍渐进式历

1.scan cursor [match pattern] [coutn] [type]:以渐进式的方式进行建的遍历 cursor:是光标 指向当前遍历的位置 设置成0表示当前从0开始获取 math parttern &#xff1a;和keys命令一样的 keys * count: 限制一次遍历能够获取到多少个 元素默认是10 type :这次遍历只想获取…

[Python学习日记-10] Python中的流程控制(if...else...)

[Python学习日记-10] Python中的流程控制&#xff08;if...else...&#xff09; 简介 缩进 单分支 双分支 多分支 练习 简介 假如把写程序比做走路&#xff0c;那我们到现在为止&#xff0c;一直走的都是直路&#xff0c;还没遇到过分叉口&#xff0c;想象现实中&#x…

【python】Python实现XGBoost算法的详细理论讲解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Python编码系列—Python数据可视化:Matplotlib与Seaborn的实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

Ps:首选项 - 单位与标尺

Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K Photoshop 首选项中的“单位与标尺” Units & Rulers选项卡允许用户根据工作需求定制 Photoshop 的测量单位和标尺显示方式。这对于保持工作的一致性和精确性&#xff0c;尤其是在跨设备或跨平台…

专题--自底向上的计算机网络(物理层)

目录 计算机网络概述 物理层 数据链路层 网络层 运输层 应用层 网络安全 详细见http://t.csdnimg.cn/MY5aI http://t.csdnimg.cn/8Ipa4 http://t.csdnimg.cn/uvMxS 信道复用技术不仅在物理层有运用&#xff0c;在数据链路层也确实需要信道复用技术。‌ 数据链路层是…

第N8周:使用Word2vec实现文本分类

本文为365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 一、数据预处理 任务说明: 本次将加入Word2vec使用PyTorch实现中文文本分类&#xff0c;Word2Vec 则是其中的一种词嵌入方法&#xff0c;是一种用于生成词向量的浅层神经网络模型&#xff0c;由Tomas M…

隐语隐私计算实训营「数据分析」第 5 课:隐语PSI介绍及开发实践

深入理解隐语(SecretFlow)中的PSI技术 隐私集合求交(Private Set Intersection, PSI)是隐私计算中的一个重要技术,它允许多方在不泄露自己数据的前提下找出共同的数据交集。在本文中,我们将深入探讨SecretFlow(隐语)中PSI的实现和应用。 PSI的基本概念 PSI是一种特殊的安全多…

鸿蒙内核源码分析(时钟任务篇)

时钟概念 时间是非常重要的概念&#xff0c;我们整个学生阶段有个东西很重要,就是校园铃声. 它控制着上课,下课,吃饭,睡觉的节奏.没有它学校的管理就乱套了,老师拖课想拖多久就多久,那可不行,下课铃声一响就是在告诉老师时间到了,该停止了让学生HAPPY去了. 操作系统也一样&…

php源码编译与初始化

1 php源码编译 解压 yum install -y bzip2 # 安装解压工具 tar -xf php-7.4.12.tar.bz2 # 解压文件./condigure ./configure --prefix/usr/local/php --with-config-file-path/usr/local/php/etc --enable-fpm --with-fpm-usernginx --with-fpm-groupnginx --with-curl --wi…

线程面试题

1.JDK自带的线程池有哪些&#xff1f; 2.线程池中核心线程数与最大线程数与缓冲任务队列的关系&#xff1f; 先使用核心线程执行任务。 当核心线程不足时&#xff0c;新任务入队列等待。 当队列满且线程数未达最大值时&#xff0c;增加非核心线程执行任务。 当队列满且线程…

Leetcode每日刷题之209.长度最小的子数组(C++)

1.题目解析 根据题目我们知道所给的数组均是正整数&#xff0c;我们需要找到的是该数组的子数组&#xff0c;使其子数组内所有元素之和大于或等于给出的目标数字target&#xff0c;然后返回其长度&#xff0c;最终找出所以满足条件的子数组&#xff0c;并且要返回长度最小的子数…

网络硬盘录像机NVR程序源码海思3520D NVR 安防监控智能升级运用方案

随着安防技术的不断发展&#xff0c;传统的监控系统正逐步向智能化方向转变。海思Hi3520D作为一款高性能的网络视频处理芯片&#xff0c;在NVR&#xff08;网络视频录像机&#xff09;领域有着广泛的应用。本方案旨在探讨如何利用海思Hi3520D芯片的强大功能对现有的NVR系统进行…