【数据库】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: 0

mysql>
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: 0

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    |       |
| 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小结

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL经典面试题:谈一谈对于数据库索引的理解~~

文章目录 什么是索引?为什么要引入索引?引入索引的代价操作索引的SQL语句索引背后的数据结构B树B 树 回顾思考☁️结语 什么是索引? 数据库中的索引,就相当于一本书的目录。 什么是书的目录?相信大家都并不陌生&#…

【三】Linux网络配置详解

在RHEL 7系统中配置网络的方法有好几种,咱们这边先讲一下使用图形化工具和修改配置文件这两种方法来配置,其他方法大家可以下去自己研究研究。 一、使用图形化方式配置: 在电脑左上角开始一次点击Applications、System Tools、Settings&…

【Flask-项目运行】解决用本机IP访问不到flask项目而用localhost可以访问到的问题

文章目录 一、问题描述二、解决办法 一、问题描述 使用 localhost 或 127.0.0.1 能访问到项目: 但是使用局域网 IP 访问不到: 二、解决办法 只需要在 app.py 中修改一行代码: run方法添加 host 参数指明全部 ip 可访问。

B端数据看板,其实数据可以更美的。

B端数据看板可以通过设计来提升其美观度。 色彩和配色方案: 选择适合品牌和数据类型的色彩搭配方案。使用渐变色、明亮的色调和对比度来突出重要的数据指标。 数据可视化: 使用图表、图形和数据图像来呈现数据,使其更易于理解和解读。选择…

2024会声会影全新旗舰版,下载体验!

在当今数字时代,视频内容已成为最受欢迎的媒介之一。无论是个人娱乐、教育还是商业推广,优秀的视频制作都是吸引观众的关键。为了满足广大用户对高质量视频制作软件的需求,我们隆重推出了会声会影2024最新旗舰版。这款软件不仅集成了最先进的…

手撸 串口交互命令行 及 AT应用层协议解析框架

在嵌入式系统开发中,命令行接口(CLI)和AT命令解析是常见的需求。CLI提供了方便的调试接口,而AT命令则常用于模块间的通信控制。本文将介绍如何手动实现一个串口交互的命令行及AT应用层协议解析框架,适用于FreeRTOS系统…

【数据结构】顺序表专题(学习记录)

正文开始 课前预备 1. 课程目标 C语言语法基础到数据结构与算法,前⾯已经掌握并具备了扎实的C语言基础,为什么要学习数据结构课程?⸺通讯录项目 2. 需要的储备知识 简单了解,通讯录具备增加、删除、修改、查找联系⼈等操作。要想…

Linux进程无法被kill

说明:记录一次应用进程无法被kill的错误; 场景 在一次导出MySQL数据时,使用下面的命令,将数据库数据导出为.sql文件,数据量大,导出时间长,于是我就将服务器重启了。 mysqldump -u username -…

队列及其应用

实验内容 请设计一个简单的模拟银行排队系统,要求程序具有以下4项菜单: 1.取号。选择该菜单后,为客户产生一个排队号。 2.叫号。选择该菜单后,显示可服务的客户排队号。 3.查看队伍。从队首到队尾列出所有排队客户的排队号。 4.退…

Vue 学习笔记 总结

Vue.js 教程 | 菜鸟教程 (runoob.com) 放一下课上的内容 Vue练习 1、练习要求和实验2的用户注册一样,当用户输入后,能在下方显示用户输入的各项内容(不需要实现【重置】按钮) 2、实验报告中的实验小结部分来谈谈用JS、jQuery和…

流量分析——一、蚁剑流量特征

君衍. 一、Webshell特征流量分析二、环境介绍三、使用Wireshark进行流量分析1、环境说明2、HTTP追踪流分析3、蚁剑请求体中代码块解读 四、使用BurpSurite进行流量分析1、环境配置2、抓包分析 六、总结 一、Webshell特征流量分析 对于重保、护网等攻防演练的防守方来说&#x…

AIGC专栏11——EasyAnimateV2结构详解与Lora训练 最大支持768x768 144帧视频生成

AIGC专栏11——EasyAnimateV2结构详解与Lora训练 最大支持768x768 144帧视频生成 学习前言源码下载地址EasyAnimate V2简介技术储备Diffusion Transformer (DiT)Motion ModuleU-VITLora 算法细节算法组成视频VAE视频DIT 数据处理视频分割视频筛选视频描述 模型训练视频VAE视频D…

【数智化CIO展】吉家宠物CIO张志伟:深度挖掘数据价值是数字化发展趋势,才能实现企业精细化运营...

张志伟 本文由吉家宠物CIO张志伟投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级优秀CIO》榜单/奖项评选。丨推荐企业:观远数据 大数据产业创新服务媒体 ——聚焦数据 改变商业 中国“宠物经济”热潮不断攀升,国内宠物市场的竞…

InnoDB存储引擎非常重要的一个机制--MVCC(多版本并发控制)

Mysql是如何实现隔离性的?(锁MVCC) 隔离性是指一个事务内部的操作以及操作的数据对正在进行的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。隔离性可以防止多个事务并发执行时,可能存在交叉执行导致数据的不…

Android 如何保证开启debug模式之后再启动

很多时候会需要debug看Android启动时候的一些数据,但很多时候会存在自己开启debug后app已经过了自己要debug的那段代码的时机了。 那么怎么样可以保证一定能让启动后不会错过自己要debug的那段代码执行的时机呢? 可以用下面这行命令,其中co…

记忆化搜索汇总

记忆化搜索简介 记忆化搜索(Memoization Search):是一种通过存储已经遍历过的状态信息,从而避免对同一状态重复遍历的搜索算法。 记忆化搜索是动态规划的一种实现方式。在记忆化搜索中,当算法需要计算某个子问题的结果…

Nginx+Tomcat负载均衡、动静分离集群

目录 1.Nginx负载均衡 1.1 负载均衡概念 1.2 负载均衡原理 1.3 Nginx配置反向代理 1.3.1 反向代理概念 1.3.2 反向代理主要参数 2.Nginx动静分离 2.1 动静分离的概念 2.2 Nginx 静态处理优势 2.3 动静分离原理 3. NginxTomcat动静分离的实验设计 3.1 准备三台虚拟机…

Java速成要多久?这篇文章告诉你答案!

Java速成要多久?这篇文章告诉你答案! Java作为一门用途广泛且经久不衰的编程语言,吸引了无数学习者的目光。许多人希望能够快速掌握Java,以便进入软件开发行业或者提升自身的竞争力。那么,Java速成究竟要多久呢&#x…

【遗传算法】【机器学习】【Python】常见交叉方法(二)、多点交叉和均匀交叉

一、遗传算法流程图 交叉过程即存在于上图的”交叉“(crossover)步骤中。 二、多点交叉 多点交叉的原理就是,随机地从父代两个基因型中,选择n个位点进行交换,其中n小于等于父代基因型长度(假设双亲基因长…

基于小波变换和峰值搜索的光谱检测matlab仿真,带GUI界面

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于小波变换和峰值搜索的光谱检测matlab仿真,带GUI界面.对光谱数据的成分进行提取,分析CO2,SO2,CO以及CH4四种成分比例。 2.…