【数据库】SQL--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小结

在这里插入图片描述

相关推荐

  1. 数据库SQL--DML

    2024-06-06 15:16:15       7 阅读
  2. 数据库SQL语句:DML&&DQL

    2024-06-06 15:16:15       27 阅读
  3. MySQL数据库数据库 | DDL语句 | DML语句

    2024-06-06 15:16:15       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 15:16:15       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 15:16:15       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 15:16:15       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 15:16:15       20 阅读

热门阅读

  1. 解决QT QMessageBox 弹出需点击两次才能关闭问题

    2024-06-06 15:16:15       9 阅读
  2. delphi 3层源码

    2024-06-06 15:16:15       9 阅读
  3. react+vite创建

    2024-06-06 15:16:15       10 阅读
  4. 三生随记——理发店诡事

    2024-06-06 15:16:15       12 阅读
  5. 深入探索 Linux 命令:usermod

    2024-06-06 15:16:15       11 阅读
  6. ASP.NET第四章 Response、Request和Server对象

    2024-06-06 15:16:15       8 阅读
  7. linux学习:进程通信 管道

    2024-06-06 15:16:15       10 阅读
  8. LeetCode # 1070. 产品销售分析 III

    2024-06-06 15:16:15       11 阅读
  9. golang结构与接口方法实现与交互使用示例

    2024-06-06 15:16:15       10 阅读
  10. 设计模式之观察者模式

    2024-06-06 15:16:15       8 阅读
  11. Go语言 一些问题了解

    2024-06-06 15:16:15       8 阅读
  12. BMC压力测试脚本

    2024-06-06 15:16:15       9 阅读