MySQL数据库精研之旅第四期:解锁库操作高阶技能

专栏:MySQL数据库成长记

个人主页:手握风云

目录

一、查看所有表

[1.1. 语法](#1.1. 语法)

二、创建表

[2.1. 语法](#2.1. 语法)

[2.2. 示例](#2.2. 示例)

[2.3. 表在磁盘上对应的⽂件](#2.3. 表在磁盘上对应的⽂件)

三、查看表结构

[3.1. 语法](#3.1. 语法)

[3.2. 示例](#3.2. 示例)

四、修改表

[4.1. 语法](#4.1. 语法)

[4.2. 示例](#4.2. 示例)

五、删除表

[5.1. 语法](#5.1. 语法)

[5.2. 示例](#5.2. 示例)


一、查看所有表

1.1. 语法

前面我们讲到过,MySQL软件里面管理着很多数据库,数据库里面又管理着很多表,表里面又管理着很多数据行。我们是要针对数据行进行操作,增删改查等。我们要想建立表,就得先选中一个数据库。

sql 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| test3_26_1         |
| world              |
+--------------------+
7 rows in set (0.00 sec)

mysql> use test3_26_1;
Database changed

当我们执行了以上命令之后,我们所有的操作都是在数据库test3_26_1里面进行的。如果说我们在写了很多行SQL语句,不知道在哪个数据库里面,我们可以用下面的语句进行查看。

sql 复制代码
mysql> select database();
+------------+
| database() |
+------------+
| test3_26_1 |
+------------+
1 row in set (0.00 sec)

查看数据库中的所有表:

sql 复制代码
mysql> show tables;
Empty set (0.06 sec)

二、创建表

2.1. 语法

sql 复制代码
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 数据表名称
 field datatype [约束] [comment '注解内容']
 [, field datatype [约束] [comment '注解内容']] ...
) [engine 存储引擎] [character set 字符集] [collate 排序规则];

TEMPORARY表示创建的是⼀个临时表;field表示列名;datatype表示数据类型;存储引擎和字符集不指定都是用默认的。

2.2. 示例

sql 复制代码
-- 创建一个user用户表
# 包含用户编号、用户名、密码、生日
/*
指定字符集为utf8mb4
排序规则为utf8mb4_0090_ai_ci
*/

create table if not exists users(
  id bigint comment '用户编号',
  username varchar(32) comment '用户名',
  `password` varchar(32) comment '密码',
  birthday date comment '生日'
);

-- 创建一个表并指定存储引擎为MyISAM
create table t_myism(
  id bigint,
  `name` varchar(32)
)engine = MyISAM;

注意:mysql中的字符串是用单引号引起的;每个列都以逗号结尾,最后一列没有逗号,最后以分号结尾;我们选中一部分,点击上面的"运行"或者快捷键"ctrl+R"就可以已选用的部分。当右下角出现"OK"时,代表执行成功了;如果库或者表的名字是一个关键字,可以使用反引号··括起来。

同时,我们也可以在终端里面查看:

sql 复制代码
mysql> show tables;
+----------------------+
| Tables_in_test3_26_1 |
+----------------------+
| t_myism              |
| users                |
+----------------------+
2 rows in set (0.00 sec)

2.3. 表在磁盘上对应的⽂件

创建的表在磁盘上也有与之对应的文件。我们在"C:\ProgramData\MySQL\MySQL Server 8.0\Data"路径下,找到我们创建的库"test3_26_1",里面就可以找到创建表时所生成的文件。

三、查看表结构

3.1. 语法

sql 复制代码
desc 表名

3.2. 示例

我们在终端上查看users的列表:

sql 复制代码
mysql> desc users;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | bigint      | YES  |     | NULL    |       |
| username | varchar(32) | YES  |     | NULL    |       |
| password | varchar(32) | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

"Field"是列名,"Type"是数据类型,"NULL"表示当前列是否可以为空,"Key"表示是否创建了索引,"Default"是当前列的默认值,"Extra"表示扩展信息。

如果我们在可视化工具上查看,右键想要查看的表,点击"设计图",表里面的数据行一目了然,尤其是在数据行比较多的情况下。

四、修改表

4.1. 语法

sql 复制代码
ALTER TABLE 表名称 [alter_option [, alter_option] ...];

alter_option: {
     table_options
 | ADD [COLUMN] 列名 数据类型 [FIRST | AFTER col_name]
 | MODIFY [COLUMN] 列名 数据类型 [FIRST | AFTER col_name]
 | DROP [COLUMN] 列名
 | RENAME COLUMN 旧列名 TO 新列名
 | RENAME [TO | AS] 新表名

修改表的操作至少有一个类型,多种类型用逗号隔开。"ADD"表示添加,"FIRST"表示加到表的第一列,"AFTER"表示加到某一列的后面;MODIFY表示修改;"DROP"表示删除;"RENAME"表示重命名。

4.2. 示例

  • 添加一列
sql 复制代码
-- 添加一列到表中
alter table users add asserts varchar(30) comment '头像地址' after password;
sql 复制代码
mysql> desc users;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | bigint      | YES  |     | NULL    |       |
| username | varchar(32) | YES  |     | NULL    |       |
| password | varchar(32) | YES  |     | NULL    |       |
| asserts  | varchar(30) | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)
  • 修改
sql 复制代码
-- 调整asserts的位置
alter table users modify asserts varchar(30) comment '头像地址' after birthday;
sql 复制代码
mysql> desc users;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | bigint      | YES  |     | NULL    |       |
| username | varchar(32) | YES  |     | NULL    |       |
| password | varchar(32) | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
| asserts  | varchar(30) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
  • 重命名系列
sql 复制代码
-- 重命名asserts
alter table users rename COLUMN asserts TO avatar;
sql 复制代码
mysql> desc users;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | bigint      | YES  |     | NULL    |       |
| username | varchar(32) | YES  |     | NULL    |       |
| password | varchar(32) | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
| avatar   | varchar(30) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

五、删除表

5.1. 语法

sql 复制代码
DROP [TEMPORARY] TABLE [IF EXISTS] 表名 [, 表名] ...

注意:删除表是⼀个危险操作,执行删除语句时⼀定要谨慎;⼀次可以删除多个表,表与表之间用逗号隔开。

5.2. 示例

sql 复制代码
mysql> drop table if exists users;
Query OK, 0 rows affected (0.02 sec)

删除表成功后,磁盘上对应的数据文件也会被删除:

相关推荐
0xDevNull2 小时前
MySQL数据冷热分离详解
后端·mysql
科技小花2 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸3 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain3 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希3 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神3 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员3 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java4 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿4 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴4 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存