【数据库】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)轴坐标(范围…

【网络安全】【深度学习】【入侵检测】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机器 帮助…

电感十大供应商

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

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

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

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

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

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

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

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就是包,无__init__.py就是文件夹。于Ja…

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

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

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

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

Python 很好用的爬虫框架:Scrapy:

了解Scrapy 爬虫框架的工作流程&#xff1a; 在scrapy中&#xff0c; 具体工作流程是这样的&#xff1a; 首先第一步 当爬虫引擎<engine>启动后&#xff0c; 引擎会到 spider 中获取 start_url<起始url> 然后将其封装为一个request对象&#xff0c; 交给调度器<…

Elastic Search 8.14:更快且更具成本效益的向量搜索,使用 retrievers 和重新排序提升相关性,RAG 和开发工具

作者&#xff1a;来自 Elastic Yaru Lin, Ranjana Devaji 我们致力于突破搜索开发的界限&#xff0c;并专注于为搜索构建者提供强大的工具。通过我们的最新更新&#xff0c;Elastic 对于处理以向量表示的大量数据的客户来说变得更加强大。这些增强功能保证了更快的速度、降低的…

Activity->Activity中动态添加Fragment->add和replace方式添加的区别

XML文件 Activity布局文件R.layout.activity_main <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/root_ll"android:orientation"v…

Linux本地搭建DataEase并发布公网远程访问进行数据分析

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务…

【RAG入门教程01】Langchian框架 v0.2介绍

LangChain 是一个开源框架&#xff0c;旨在简化使用大型语言模型 (LLM) 创建应用程序的过程。可以将其想象成一套使用高级语言工具进行搭建的乐高积木。 它对于想要构建复杂的基于语言的应用程序而又不必管理直接与语言模型交互的复杂性的开发人员特别有用。它简化了将这些模型…

数据库之PostgreSQL详解

一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议&#xff0c;这个协议基本和MIT开源协议一样&#xff0c;说人话&#xff0c;就是你可以对PostgreSQL进行一些封装&a…

如何在本地和远程删除 Git 分支

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;目前是武汉城市开发者社区主理人 擅长.net、C、python开发&#xff0c; 如果遇…

SpringBoot之Mybatis-plus实战

文章目录 MybatisPlus 介绍一、MyBatisPlus 集成步骤第一步、引入依赖第二步、定义mapper 二、注解TableNameTableldTableField 加解密实现步骤 在SpringBoot项目中使用Mybatis-plus&#xff0c;记录下来&#xff0c;方便备查。 MybatisPlus 介绍 为简化开发而生&#xff0c;官…

CSAPP Lab01——Data Lab完成思路

陪你把想念的酸拥抱成温暖 陪你把彷徨写出情节来 未来多漫长再漫长还有期待 陪伴你 一直到 故事给说完 ——陪你度过漫长岁月 完整代码见&#xff1a;CSAPP/datalab-handout at main SnowLegend-star/CSAPP (github.com) 01 bitXor 这道题是用~和&计算x^y。 异或是两个…

红黑树的介绍与实现

前言 前面我们介绍了AVL树&#xff0c;AVL树是一棵非常自律的树&#xff0c;有着严格的高度可控制&#xff01;但是正它的自律给他带来了另一个问题&#xff0c;即虽然他的查找效率很高&#xff0c;但是插入和删除由于旋转而导致效率没有那么高。我们上一期的结尾说过经常修改…