【数据库】SQL--DDL(初阶)

文章目录

  • DDL
    • 1. 数据库操作
      • 1.1. 表操作
        • 1.1.1 创建
        • 1.1.2. 查询
    • 2. 数据类型及案例
      • 2.1 数值类型
      • 2.2 字符串类型
      • 2.3 日期时间类型
      • 2.4 案例练习
    • 3. 表操作--修改
      • 3.1 添加字段
      • 3.2 修改字段
      • 3.3 修改表名
    • 4. 表操作-删除
      • 4.1 删除字段
      • 4.2 删除表
    • 5. DDL小结


更多数据库MySQL系统内容就在以下专栏:
专栏链接:数据库MySQL


DDL

在这里插入图片描述

1. 数据库操作

查询:

  1. 查询所有数据库:
SHOW DATABASES;

示例代码:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

当我们输入show databases;指令时,就会显示出我们电脑中此时所有存在的数据库。

  1. 查询当前数据库:
SELECT DATABASE();

示例代码:
在这里插入图片描述

mysql> select database();
+------------+
| database() |
+------------+
| sys        |
+------------+
1 row in set (0.00 sec)

如果我们已经忘记此时处在哪个数据库下,我们就可以使用这条语句来进行查询。在输入select database() ;指令时,会显示出电脑此时处在的数据库。

创建:

CREATE DATABASE [IF NOT EXISTS] 数据库名[DEFAULT CHARSET 字符集] [COLLATE 排序规则];

示例代码:

mysql> create database itcast;
Query OK, 1 row affected (0.01 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

在这个代码中,我们创建了一个数据库itcast.

此时,我们已经创建了itcast这个数据库,如果我们再输入创建一个itcast数据库的语句,程序将会报错。

示例代码:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.01 sec)mysql>
mysql>
mysql> create database itcast;
ERROR 1007 (HY000): Can't create database 'itcast'; database exists
mysql>
  • 从上面的代码中可以看出,如果创建已经存在的数据库,程序将会报错。
    在这里插入图片描述

为了避免这样的情况发生,我们可以使用if not exists。

示例代码:

mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)mysql>
mysql>
mysql> create database if not exists itcast;
Query OK, 1 row affected, 1 warning (0.01 sec)mysql>
  • 加上 if not exists 这个语句,就代表如果存在itcast 这个数据库,就不创建;如果不存在itcast 这个数据库,就创建一个新的itcast 数据库。

我们在创建数据的时候,还可以指定其字符集。

示例代码:

mysql>
mysql> create database itxiaobu default charset utf8mb4;
Query OK, 1 row affected (0.01 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| itxiaobu           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
8 rows in set (0.00 sec)mysql>

在这个代码中,创建了itxiaobu 这个数据库,并指定其字符集为utf8mb4,我们通常不使用utf8这个字符集,因为utf8是3个字节,但是我们其中是有占4个字节的,所以我们使用utf8mb4。

删除:

DROP DATABASE[IF EXISTS]数据库名;

示例代码:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| itxiaobu           |
| mysql              |
| performance_schema |
| sys                |
| text               |
+--------------------+
9 rows in set (0.00 sec)

此时,我们电脑中存在text 这样一个数据库,如何删除这个数据库?
在这里插入图片描述

mysql> drop database text;
Query OK, 0 rows affected (0.02 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| itxiaobu           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
8 rows in set (0.01 sec)

使用drop database 数据库名;这个语句就可以达到删除指定数据库的目的。


如果我们想要删除一个数据库,但是并不知道它存不存在,也不想程序报错,就可以加上if exists

示例代码:

mysql>
mysql> drop database if exists text;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql>

使用:

USE 数据库名;

示例代码:

mysql>
mysql> select database();
+------------+
| database() |
+------------+
| itxiaobu   |
+------------+
1 row in set (0.00 sec)

可以看出我们一开始 处在itxiaobu 这个数据下,
在这里插入图片描述

现在我们要切换到itcast 这个数据库下:

mysql> use itcast;
Database changed
mysql>
mysql>
mysql> select database();
+------------+
| database() |
+------------+
| itcast     |
+------------+
1 row in set (0.00 sec)mysql>

使用use 数据库名这个语句,就可以切换到指定的数据库下。

1.1. 表操作

1.1.1 创建
CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1注释],
字段2 字段2类型[COMMENT 字段2注释],
字段3 字段3类型[COMMENT 字段3注释],
.....
字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 表注释];

注意:[…]为可选参数,最后一个字段后面没有逗号。

  • 我们实现一下下面的一个表
    在这里插入图片描述
    示例代码:
mysql>
mysql> create table tb_user(-> id int comment'编号',-> name varchar(50) comment '姓名',-> age int comment'年龄',-> gender varchar(1) comment'性别'-> ) comment '用户表';
Query OK, 0 rows affected (0.04 sec)

注意:

  • 代码中,除了注释中的汉字,其余全部都是英文。
  • 我们在这个代码中创建一个用户表tb_user,这里仅仅是实现了这样的一个表结构。
1.1.2. 查询
  1. 查询当前数据库所有表:
SHOW TABLES;

示例代码:

mysql>
mysql>
mysql> select database();
+------------+
| database() |
+------------+
| itcast     |
+------------+
1 row in set (0.00 sec)

可以看到我们当前处在itcast 这个数据下。

mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| tb_user          |
+------------------+
1 row in set (0.00 sec)mysql>

使用show tables;这个语句就可以查询该数据库下的所有表。
在这里插入图片描述


  1. 查询表结构:
DESC 表名;

仅仅使用show tables;语句是仅仅只能查看所处数据下的所有表名称,不能查看其具体的表结构。

mysql>
mysql> desc tb_user;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int         | YES  |     | NULL    |       |
| name   | varchar(50) | YES  |     | NULL    |       |
| age    | int         | YES  |     | NULL    |       |
| gender | varchar(1)  | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

使用desc tb_user;语句就可以查看tb_user这个表的表结构。


  1. 查询指定表的建表语言:
SHOW CREATE TABLE 表名;

在创建tb_user表时,是有注释的,使用desc tb_user;语句只能查看其表结构,,并不能看到注释。

mysql> show create table tb_user;
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table|
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb_user | CREATE TABLE `tb_user` (`id` int DEFAULT NULL COMMENT '编号',`name` varchar(50) DEFAULT NULL COMMENT '姓名',`age` int DEFAULT NULL COMMENT '年龄',`gender` varchar(1) DEFAULT NULL COMMENT '性别'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表' |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql>

使用show create table tb_user;语句 就可以查看tb_user表的建表语言。

2. 数据类型及案例

2.1 数值类型

在这里插入图片描述

M(精度)和D(标度):

  • 精度:小数点前后 共有几位数字。
  • 标度:小数点后共有几位数字。
  • 例如:double(4,1)
    定义了一个double 类型的数据,表示其总位数为4位,即小数点前后有四位数字,其小数点之后有一位数字。

如果定义年龄的数值类型的话,我们使用 age tinyint unsigned .如果定义为int类型,int占4个字节的内存空间,太浪费内存空间了;再加上年龄不可能是负数,所以我们使用unsigned 来进行修饰。

2.2 字符串类型

在这里插入图片描述

char和varchar

  • 区别:char 性能高; varchar 性能低。
  • char(10)和 varchar(10):
  1. 10都代表所能存储的最大字符串长度,一旦超出10个字符将会报错。
  2. 在char中 即便只是一个字符,也会占用10个字符的空间,未未占用的空间会使用空格进行补位。
  3. varchar 中如果是一个字符,就只占用一个字符的空间,两个字符就占用两个字符的空间。varchar 会根据输入的内容计算当前所占用的空间,这也是varchar 性能差的原因。

2.3 日期时间类型

在这里插入图片描述

date类型只表示日期;
time类型只表示时间。
year类型只表示年;
datetime类型表示日期和时间;
timestamp类型表示时间戳。

2.4 案例练习

在这里插入图片描述

mysql>
mysql> create table emp(-> id int comment '编号',-> workno varchar(10) comment'工号',-> name varchar(10) comment '姓名',-> gender char(1) comment '性别',-> age tinyint unsigned comment '年龄',-> idcard char(18) comment '身份证号',-> entrydate date comment '入职时间'-> ) comment '员工表';
Query OK, 0 rows affected (0.03 sec)mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)mysql>

3. 表操作–修改

3.1 添加字段

基本语法:

ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

案例:

为emp表添加一个新的字段“昵称” 为nickname,类型为varchar(20)

示例代码:

mysql> alter table emp add nickname varchar(20) comment '昵称';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql>
mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
| nickname  | varchar(20)      | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
8 rows in set (0.00 sec)mysql>

3.2 修改字段

  1. 修改数据类型:
ALTER TABLE 表名MODIFY 字段名 新数据类型(长度);
  1. 修改字段名和字段类型:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]; 
  • 案例:

将emp表的nickname 字段修改为username,类型为varchar(30)

示例代码:

mysql> alter table emp change nickname username varchar(30) comment
'昵称';
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
| username  | varchar(30)      | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
8 rows in set (0.00 sec)mysql>

3.3 修改表名

基本语法:

ALTER TABLE 表名 RENAME TO 新表名;

案例:

将emp表的表名修改为employee

示例代码:

mysql>
mysql> alter table emp rename to emloyee;
Query OK, 0 rows affected (0.02 sec)mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emloyee          |
| tb_user          |
+------------------+
2 rows in set (0.00 sec)mysql>

4. 表操作-删除

4.1 删除字段

基本语法:

ALTER TABLE 表名 DROP 字段名;

案例:

将employee表的字段username删除

示例代码:

mysql> alter table emloyee drop username;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc emloyee;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

4.2 删除表

  1. 删除表
DROP TABLE [IF EXISTS] 表名;
mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emloyee          |
| tb_user          |
+------------------+
2 rows in set (0.00 sec)mysql>
mysql>
mysql> drop table tb_user;
Query OK, 0 rows affected (0.02 sec)mysql>
mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emloyee          |
+------------------+
1 row in set (0.00 sec)
  1. 删除指定表,并重新创建该表
TRUNCATE TABLE 表名;

案例:

删除emloyee表

mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emloyee          |
+------------------+
1 row in set (0.00 sec)mysql>
mysql>
mysql> truncate table emloyee;
Query OK, 0 rows affected (0.03 sec)mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emloyee          |
+------------------+
1 row in set (0.00 sec)
mysql>

这条删除语句,会删除掉指定的表。但是还会再创建一个同样名字的表,只不过这个表的内容是空的,只是一个空的表结构而已。

5. DDL小结

在这里插入图片描述

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

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

相关文章

Pytorch 实现目标检测二(Pytorch 24)

一 实例操作目标检测 下面通过一个具体的例子来说明锚框标签。我们已经为加载图像中的狗和猫定义了真实边界框,其中第一个 元素是类别(0代表狗,1代表猫),其余四个元素是左上角和右下角的(x, y)轴坐标(范围…

Java数据结构与算法(盛水的容器)

前言 针对此类算法题,最基本是暴力算法求解,暴力算法基本是固定的套路。在暴力算法基础上寻求优化思路,是否可以单词遍历能否得到所要的结果。此时需要观察数据的特征,推演数据变化对结果的影响,从而找到合理的解题思…

Web前端Text:深入解析与实践应用

Web前端Text:深入解析与实践应用 在Web前端开发中,Text作为页面内容的重要组成部分,其处理和展示方式直接关系到用户体验和页面效果。本文将围绕Web前端Text的四个方面、五个方面、六个方面和七个方面进行详细解析,带您领略其奥秘…

【网络安全】【深度学习】【入侵检测】SDN模拟网络入侵攻击并检测,实时检测,深度学习

文章目录 1. 前言2. Mininet 和 Ryu 的区别2.1 Mininet2.2 Ryu2.3 总结 3. 模拟攻击3.1 环境准备3.2 创建 Mininet 网络拓扑3.2 启动 Ryu 控制器3.3 模拟网络攻击3.4 捕获流量 4. 实时异常检测4.1 在 Ryu 控制器中4.2 在 h2 机器上的实验结果4.3 深度学习模型部署上h2机器 帮助…

leetcode 数组排序

leetcode: 排序数组 排序算法包括基础的选择排序、插入排序、交换排序;也包括快速排序,堆排序,归并排序等。其中快速排序是交换排序的升级版;堆排序是选择排序的升级版。那插入排序有没有升级版呢,也是有的&#xff0…

修改菜品——后端Java

s1.交互逻辑: 页面发送ajax请求,请求服务端获取分类数据,用于菜品分类下拉框中数据显示,由于修改也在add.html和服务端进行交互,之前添加菜品的时候该请求已经得到处理; 页面发送ajax请求,请求服…

电感十大供应商

电感品牌-电感器品牌排行榜-电感十大品牌-Maigoo品牌榜

Fences 5 激活码 - 电脑桌面整理软件

提起桌面整理,经典老牌工具 Fences 必有一席之地,Stardock 发布了最新的 Fences 5 版本。 可以将文件和图标归类放入各个栅栏分区,并支持文件夹展开至桌面、分区置顶、淡化隐藏图标等功能,能让你的桌面焕然一新,不再混…

自建 Docker 镜像

本文地址:blog.lucien.ink/archives/547 本文主要参考自:自建Docker 镜像/源加速的方法 1. 简介 最近 Docker Hub 被禁一事引起了不小的波动,在这里简单讲下在这之后应该如何访问公开的 Docker Hub。 2. Cloudflare 2.1 搭建 搭建的前提是…

(2024,扩散,DMP,提示混合,动态门控,阶段特异性,微调)通过混合提示进行扩散模型修补

Diffusion Model Patching via Mixture-of-Prompts 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0 摘要 1 简介 2 相关工作 3 扩散模型修补(DMP) 3.1 架构…

【运维】如何在Ubuntu 22上使用Python 3.8的虚拟环境

在Ubuntu 22上使用Python 3.8的虚拟环境安装Ryu是相对简单的。以下是一步一步的指南: https://qq742971636.blog.csdn.net/article/details/139566151 安装Python 3.8: 在Ubuntu 22上,Python 3.8可能不是默认安装的版本。你可以使用以下命令…

Java核心知识概述

Java的核心知识涉及多个方面,以下是针对Java核心知识点的分点表示和归纳: 这些集合类提供了丰富的方法和算法,可以方便地对数据进行增删改查等操作。同时,Java还提供了迭代器和各种算法,如排序、搜索、过滤等&#xff…

自动化专业之半导体行业入门指南

收到一枚自动化的毕业生,还是985的。暂定为eap 方向; 先熟悉 secs/gem的通讯协议,后续跟着供应商做eap实施,慢慢接触,能够做eap的开发与copy 工作;今年是一个毕业困难季节,大环境下半导体行业还有一些用人要求,如果大家有希望去这个行业发展的话,可以参考。个人判断半…

作业40 自定义函数

求一个三位数 题目描述 求这样一个三位数&#xff0c;该三位数等于其每位数字的阶乘之和。即abc a! b! c! (n!表示n的阶乘&#xff09; 输入 无 输出 输出这个数 #include<iostream> #include<iomanip> #include<string.h> using namespace std; bool func…

用大模型理解爆火的KAN网络

上个月五一假期的时候&#xff0c;KAN突然成为了热门话题。虽然最初我并没有计划弄懂它&#xff0c;但在老板的要求下&#xff0c;我还是探索了一下。 一、KAN是什么&#xff1f; Kolmogorov-Arnold 定理是数学领域的一个里程碑&#xff0c;它揭示了多元函数能够通过一组更简…

Golang 指针使用教程

文章目录 Go语言特性Go语言指针Go指针示例Go应用场景 Go语言特性 Go函数只有 值传递Go指针 不能运算指针类型的定义与基础数据类型有关&#xff0c;即指针类型是与其指向的变量的类型相关联的。 Go语言指针 使用new函数&#xff1a; new函数用于分配内存&#xff0c;并返回一…

SpringBoot 参数验证的几种方式

文章目录 SpringBoot 参数验证1、为什么要进行参数验证2、验证方式2.1 if 语句判断2.2 Assert2.3 Validator2.3.1 引入依赖2.3.2 定义参数实体类2.3.4 定义特定异常全局拦截方法2.3.5 定义校验类进行测试2.3.6 测试 2.4 自定义验证注解2.4.1 定义自定义注解2.4.2 定义自定义验证…

Python第二语言(八、Python包)

目录 1. 什么是Python包 2. 创包步骤 2.1 new包 2.2 查看创建的包 2.3 拖动文件到包下 3. 导入包 4. 安装第三方包 4.1 什么是第三方包 4.2 安装第三方包-pip 4.3 pip网络优化 1. 什么是Python包 包下有__init__.py就是包&#xff0c;无__init__.py就是文件夹。于Ja…

嵌入式学习——Linux高级编程复习(进程)——day39

1. 进程 进程是计算机科学中的一个核心概念&#xff0c;它是操作系统进行资源分配和调度的基本单位&#xff0c;代表了一个正在执行中的程序实例。当一个程序被加载到内存并开始执行时&#xff0c;它就变成了一个进程。 1. 程序&#xff1a;存放在外存中的一段代码的集合 2. 进…

牛客 NC129 阶乘末尾0的数量【简单 基础数学 Java/Go/PHP/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/aa03dff18376454c9d2e359163bf44b8 https://www.lintcode.com/problem/2 思路 Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff…