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

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/401252.html

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

相关文章

机器人阻抗控制之设计方法

机器人阻抗控制的设计方法主要围绕调整机器人与环境之间的动态关系,使其等效为由弹簧-阻尼-质量组成的二阶系统。这一控制策略不是直接控制机器人的运动或其与外界的接触力,而是控制这二者之间的动态关系。以下是机器人阻抗控制设计方法的详细阐述&#…

Docker最佳实践进阶(二):Docker Compose容器编排

大家好,在上篇文章中博主演示了Dockerfile常用的命令,以及如何利用Dockerfile构建镜像,生成容器服务,但是在实际应用环境中,特别是在微服务架构中,一个应用系统可能包含多个微服务,每个微服务可…

【vue】h 函数的使用

文章目录 1. 引言2. h 函数3. h 函数的使用3.1 v-if3.2 v-for3.3 v-on3.4 组件3.5 渲染插槽 4. h函数的使用场景参考链接 1. 引言 在绝大多数情况下,Vue 推荐使用模板语法来创建应用。然而在某些使用场景下,我们真的需要用到 JavaScript 完全的编程能力。…

Java开发代码规范文档

优质博文:IT-BLOG-CN 一、命令规范 包命名规范 包Package的作用是将功能相似或相关的类或者接口进行分组管理,便于类的定位和查找,同时也可以使用包来避免类名的冲突和访问控制,使代码更容易维护。通常,包命使用小写…

安卓中Room持久化库的使用

在Android开发中,Room是Google提供的一个持久化库,旨在为应用提供SQLite的抽象层,以简化数据库的访问和操作。相比直接使用SQLite,Room提供更清晰、更简洁的数据库访问机制。 1. Room的基础知识 1.1 引入Room依赖 首先&#xff…

GB/T 38082-2019 生物降解塑料购物袋检测

生物降解塑料购物袋是指以生物降解树脂为主要原料制得的,具有提携结构的,在销售、服务等场所用于盛装及携提商品的袋制品。 GB/T 38082-2019 生物降解塑料购物袋检测项目: 检测项目 测试标准 尺寸偏差 GB/T 38082 感官 GB/T 38082 提掉…

谷粒商城实战笔记-190-192商城业务-检索服务-面包屑导航

文章目录 一,什么是面包屑导航1,京东商城的面包屑2,面包屑是怎么产生的 二,面包屑导航的后台实现 这三节的主要内容是开发面包屑的前后端功能。 190-商城业务-检索服务-面包屑导航191-商城业务-检索服务-条件删除与URL编码问题192…

阿一网络安全实战演练之利用 REST URL 中的服务器端参数污染

所需知识 要解决这个实验室问题,您需要了解以下内容: 如何确定用户输入是否包含在服务器端的 URL 路径或查询字符串中。如何使用路径遍历序列尝试更改服务器端请求。如何查找 API 文档。 这些内容在我们的 API 测试学院主题中有涵盖。 进入实验室 研…

【Docker安装】Ubuntu系统下离线部署Docker环境教程

【Docker安装】Ubuntu系统下离线部署Docker环境教程 前言一、本次实践介绍1.1 本次实践规划1.2 本次实践简介二、检查本地环境2.1 检查操作系统版本2.2 检查内核版本2.3 更新软件源三、卸载Docker四、下载安装包4.1 创建目录4.2 官网下载五、部署Docker环境5.1 解压安装包5.2 复…

Web Image scr图片从后端API获取基本实现

因系统开发中需求,会有页面显示图片直接从后端获取后显示,代码如下: 后端: /*** 获取图片流* param response* param fileName*/RequestMapping(value"getImgStream",method RequestMethod.GET)public void getImgStr…

Yearning开源SQL审核平台本地Linux系统部署与远程登录语句审核

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 本文主要介绍在 Linux 系统简单部署 Yearning 并结合 cpolar 内网穿透工具实现远程访问,破除…

Java基础入门15:算法、正则表达式、异常

算法(选择排序、冒泡排序、二分查找) 选择排序 每轮选择当前位置,开始找出后面的较小值与该位置交换。 选择排序的关键: 确定总共需要选择几轮:数组的长度-1。 控制每轮从以前位置为基准,与后面元素选择…

Typescript在AI产品中应用越来越广泛

AI产品中的应用 TypeScript 在 AI 产品中的应用逐渐增多,主要得益于其提供的类型安全、面向对象编程和模块化等特性,这些特性使得开发者能够构建可维护、可扩展和高性能的应用程序。 首先,TypeScript 作为 JavaScript 的超集,通…

15.基于session实现登录 前端项目部署

前端项目nginx部署 nginx配置文件 worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/json;sendfile on;keepalive_timeout 65;server {listen 8080;server_name localhost;# 指定前端项目所…

线性DP(动态规划)

文章目录 数字三角形思路代码 最长上升子序列1思路代码 最长公共子序列思路代码 其实和背包一样,都不固定,这种类型的题每一道题都需要自己从之前的经验中去摸索。 数字三角形 题目链接 思路 只能从左上或者右上走过来,用一个二维数组&am…

python-A+B again

[题目描述] 小理有一个非常简单的问题给你,给你两个整数 A 和 B,你的任务是计算 AB。输入格式: 输入共 2∗T1 行。 输入的第一行包含一个整数 T 表示测试实例的个数,然后 2∗T 行,分别表示 A 和 B 两个正整数。注意整数…

计算机网络面试题汇总

文章目录 计算机网络基础计算机网络体系结构(网络分层模型)OSI 七层模型是什么?每一层的作用是什么?TCP/IP 四层模型是什么?每一层的作用是什么?五层体系结构以及对应的协议为什么网络要分层,分层的好处?常见网络协议有哪些,每一层常见协议有哪些?应用层有哪些常见的协…

mysql5.7安装

1.创建一个software文件 2.先下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 3安装源包 rpm -ivh mysql-community-release-el7-5.noarch.rpm 可能会报错 改成命令 rpm -ivh mysql-community-release-el7-5.noarch.rpm --nodeps…

目标检测 | yolov6 原理和介绍

前言:目标检测 | yolov5 原理和介绍 后续: 1.简介 YOLOv6是由美团视觉智能部研发的一款目标检测框架,专注于工业应用,致力于提供极致的检测精度和推理效率。相较于YOLOv4和YOLOv5,YOLOv6在网络结构方面进行了深入优化…

在LabVIEW中高效读取大型CSV文件的方法

当尝试使用“读取分隔的电子表格VI”从大型CSV文件(数百MB)中读取数据时,可能会遇到内存已满错误。这是因为该VI会一次性读取整个文件并将其转换为数值数组,导致占用大量内存。 解决方案 可以使用“从文本文件VI读取”来部分读取…