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,每一类都对应着数据库管理中的不同方面。

分类 全称 说明
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;命令。

mysql 复制代码
show databases;

执行该命令后,将列出MySQL服务器上所有的数据库。

查询当前数据库

如果你想要知道当前正在使用哪个数据库,可以使用SELECT DATABASE();语句。

mysql 复制代码
select database();

注意,这里的DATABASE()是一个函数,用于返回当前数据库的名称。

创建数据库

创建数据库的基本语法如下:

mysql 复制代码
create database [if not exists] 数据库名;
  • [if not exists]是一个可选参数,用于防止在数据库已存在时执行创建操作时出现错误。

例如,创建一个名为itcast的数据库:

mysql 复制代码
create database itcast;

或者,使用if not exists防止重复创建:

mysql 复制代码
create database if not exists itcast;

注意:原笔记中的extists应为exists,这是一个常见的拼写错误。

使用数据库

在创建或选择了一个数据库之后,你需要使用USE语句来指定接下来要操作的数据库。

mysql 复制代码
use 数据库名;

例如,切换到itcast数据库:

mysql 复制代码
use itcast;

只有在使用了USE语句之后,你才能在该数据库下创建表、插入数据等。

删除数据库

如果某个数据库不再需要,可以使用DROP DATABASE语句来删除它。为了防止删除不存在的数据库时出错,可以使用IF EXISTS选项。

mysql 复制代码
drop database [if exists] 数据库名;

例如,删除itcast数据库(如果存在):

mysql 复制代码
drop database if exists itcast;

额外说明

在SQL中,DATABASESCHEMA这两个词经常可以互换使用,特别是在MySQL中。因此,CREATE DATABASECREATE SCHEMASHOW DATABASESSHOW SCHEMAS等命令在MySQL中是等价的。但在其他数据库管理系统中,这种等价性可能不成立,因此在使用时需要注意。

DDL语句是数据库管理和维护的重要工具,掌握它们对于进行高效的数据库设计和管理至关重要。

2 有关表的DDL语句表的DDL语句详解

在数据库管理中,表是存储数据的基本结构。通过DDL(Data Definition Language,数据定义语言)语句,我们可以对表结构进行创建、查询、修改和删除等操作。下面,我们将详细探讨这些操作,特别是关于创建表的语法和注意事项。

创建表

语法

创建表的基本语法如下:

mysql 复制代码
create table 表名(  
    字段1 字段1类型 [约束] [comment 字段1注释],  
    字段2 字段2类型 [约束] [comment 字段2注释],  
    ......  
    字段n 字段n类型 [约束] [comment 字段n注释]  
) [comment 表注释];
  • [ ] 中的内容为可选参数。
  • 最后一个字段后面没有逗号。

示例

假设我们要创建一个用户表tb_user,包含ID、用户名、姓名、年龄和性别等字段,其建表语句如下:

mysql 复制代码
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

示例(包含约束)

mysql 复制代码
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.

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

  • 年龄字段(age

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

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

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

  • 用户名(username

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

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

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

  • 生日(birthday

    • 生日只需要存储年月日信息,因此使用DATE类型是最合适的。
    sql 复制代码
    birthday DATE
  • 创建时间(createtime

    • 创建时间需要精确到时分秒,因此使用DATETIME类型是最合适的。它可以存储日期和时间信息,满足大多数应用场景的需求。
    sql 复制代码
    createtime DATETIME

数据库表结构的查询 修改 删除

在数据库管理中,对表结构的查询、修改、删除等操作是日常工作中不可或缺的一部分。尽管现代数据库管理工具提供了图形化界面来简化这些操作,但了解背后的SQL命令仍然非常重要。以下将详细介绍如何在MySQL数据库中查询、修改和删除表结构。

查询

查询当前数据库所有表

要查看当前数据库中所有的表,可以使用SHOW TABLES;命令。这个命令会列出当前数据库中的所有表名。

mysql 复制代码
SHOW TABLES;

查看指定表结构

要查看某个表的具体结构,包括字段名、字段类型、是否允许为空、默认值等信息,可以使用DESC命令或DESCRIBE命令(两者是等价的)。

mysql 复制代码
DESC 表名;  
-- 或者  
DESCRIBE 表名;

查询指定表的建表语句

如果你需要查看某个表的完整建表语句,包括所有的字段定义、索引、约束等,可以使用SHOW CREATE TABLE命令。

mysql 复制代码
SHOW CREATE TABLE 表名;

修改

添加字段

向表中添加新字段,可以使用ALTER TABLE命令配合ADD子句。

sql 复制代码
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT '注释'] [约束];

案例 :为tb_emp表添加名为qq的字段,字段类型为VARCHAR(11),并添加注释"QQ号码"。

sql 复制代码
ALTER TABLE tb_emp ADD qq VARCHAR(11) COMMENT 'QQ号码';

修改数据类型

修改表中字段的数据类型,可以使用MODIFY子句或CHANGE子句。MODIFY用于修改字段的数据类型和长度,而CHANGE还可以修改字段名。

修改数据类型

mysql 复制代码
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

案例 :将tb_emp表中的qq字段长度由11修改为13。

sql 复制代码
ALTER TABLE tb_emp MODIFY qq VARCHAR(13) COMMENT 'QQ号码';

修改字段名和数据类型

sql 复制代码
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT '注释'] [约束];

案例 :将tb_emp表中的qq字段名改为qq_num,字段类型保持为VARCHAR(13)

sql 复制代码
ALTER TABLE tb_emp CHANGE qq qq_num VARCHAR(13) COMMENT 'QQ号码';

删除字段

从表中删除字段,可以使用DROP子句。

sql 复制代码
ALTER TABLE 表名 DROP 字段名;

案例 :删除tb_emp表中的qq_num字段。

sql 复制代码
ALTER TABLE tb_emp DROP qq_num;

修改表名

修改表名,可以使用RENAME TABLE命令。

sql 复制代码
RENAME TABLE 表名 TO 新表名;

案例 :将tb_emp表名修改为emp

mysql 复制代码
RENAME TABLE tb_emp TO emp;

删除

删除表

删除表及其所有数据,可以使用DROP TABLE命令。为了避免在表不存在时执行删除操作导致错误,可以添加IF EXISTS子句。

sql 复制代码
DROP TABLE [IF EXISTS] 表名;

案例 :如果tb_emp表存在,则删除它。

mysql 复制代码
DROP TABLE IF EXISTS tb_emp; -- 在删除表时,表中的全部数据也会被删除。

尽管图形化界面提供了便捷的操作方式,但掌握SQL命令对于深入理解数据库结构和进行复杂操作至关重要。希望以上内容能帮助你更好地管理数据库表结构。

相关推荐
爱吃南瓜的北瓜1 分钟前
Redis的Key的过期策略是怎样实现的?
数据库·redis·bootstrap
一心只为学15 分钟前
Oracle密码过期问题,设置永不过期
数据库·oracle
小光学长24 分钟前
基于vue框架的宠物销售管理系统3m9h3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
数据库
wn53131 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
bjzhang7541 分钟前
SpringBoot开发——集成Tess4j实现OCR图像文字识别
spring boot·ocr·tess4j
flying jiang1 小时前
Spring Boot 入门面试五道题
spring boot
小菜yh1 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存
希冀1231 小时前
【操作系统】1.2操作系统的发展与分类
后端
Microsoft Word1 小时前
数据库系统原理(第一章 数据库概述)
数据库·oracle
华为云开源1 小时前
openGemini 社区人才培养计划:助力成长,培养新一代云原生数据库人才
数据库·云原生·开源