首页 > 数据库 >SQL— DDL语句学习【后端 10】

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

时间:2024-08-15 20:27:08浏览次数:16  
标签:语句 10 数据库 DDL comment SQL TABLE

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

标签:语句,10,数据库,DDL,comment,SQL,TABLE
From: https://blog.csdn.net/delepaste/article/details/141230912

相关文章

  • sqli-labs靶场通关攻略
    Less-1sql手工注入攻击流程步骤一:确定攻击点,确定网站可以注入的参数http://127.0.0.1/Less-1/?id=1步骤二:判断闭合方式'--+步骤三:判断字段列数orderby1.http://127.0.0.1/Less-1/?id=1'orderby3--+页面正常说明存在3列2.http://127.0.0.1/Less-1/?id=1'or......
  • sqli-labs靶场通关攻略 1-5
    通过https://github.com/Audi-1/sqli-labs  下载sqli-labs靶场压缩包把靶场环境放入phpstudy_pro的www里面输入数据库密码使用php5.4.45nts版本输入127.0.0.1点击setup靶场建立第一关:less-1步骤一:根据提示确立攻击点,确定注入参数为id步骤二:判断闭合方式:id=1......
  • [lnsyoj4029/luoguP4109/HEOI2015]定价
    题意记\(x'\)为\(x\)去除后导零的值,则定义\(f(x)=2(\lfloor\log_{10}x'\rfloor+1)-[x'\equiv5\pmod{10}]\),给定区间\([L,R]\),求该区间中最小的\(f(x)\)值。sol一道贪心题,思想比较好想,我们需要使得前面的非0数字部分长度最小,且末尾尽可能为\(5\)。具体实现中,我......
  • 云计算实训30——mysql主从复制同步、mysql5.7版本安装配置、python操作mysql数据库、
    一、mysql主从复制及同步1、mysql主从自动开机同步2、配置mysql5.7版本mysql-5.7.44-linux-glibc2.12-x86_64.tar启动服务、登录对数据库进行基本操作3、使用python操纵mysql数据库4、编辑python脚本自动化操纵mysql数据库二、mycat读写分离......
  • Windows、Ubuntu安装mysql
    今天我们来学习一下如何在Windows、Ubuntu安装mysql。Windows安装mysql第一步:在官网找到需要安装的mysql版本,下载第二步:下载后打开安装包,进行安装。 点击“Next”: 默认就行,单击next:单击“Excute”等待所有进程结束就安装成功了!接下来配置环境变量:找到mysql的bi......
  • 一文搞懂后端面试之数据库分布式事务【中间件 | 数据库 | MySQL | ACID】
    单库拆分为分库分表之后,一个巨大的挑战就是本地事务变成了分布式事务。事实上,即使没有分库分表,在微服务架构之下我们也还是会面临分布式事务的问题。前置知识分布式事务既可以是纯粹多个数据库实例之间的分布式事务,也可以是跨越不同中间件的业务层面上的分布式事务。前表......
  • 2024牛客暑期多校训练营10
    Preface最后一场牛客多校了,本来感觉可以来个完美谢幕的结果最后2h和祁神双开双卡本来开局就因为大雨导致晚开+浑身湿透,中间一直冷的发抖硬是撑了下来J题写法因为常数问题一直卡着十连重测;而C题因为有概率为\(0\)的情况需要繁琐的判断,最后两个题都没过赛后我用priority......
  • sqli-labs靶场通关攻略
    SQL注入第一关首先我们进入靶场进入第一关我们要进行sql注入,先得确定此网站的闭合点在网址栏后+ /?id=1 回车判断字段列数orderbyhttp://127.0.0.1/Less-1/?id=1'orderby1--+页面正常说明存在1列http://127.0.0.1/Less-1/?id=1'orderby2--+页面正常......
  • wookteam协作平台api/users/searchinfo接口存在SQL注入漏洞 附POC
    @[toc]免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。1.wookteam协作平台简介微信公众号搜索:南风漏洞复现文......
  • 泛微 e-office 10 schema_mysql.sql文件存在敏感信息泄露 附POC
    @[toc]免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。1.泛微e-office10简介微信公众号搜索:南风漏洞复现文......