当前位置: 首页 > news >正文

SQL基础⑧ | 表格篇

0 序言

本文围绕MySQL中表的创建与管理展开,涵盖数据存储过程、命名规则、数据类型,以及数据库和表的创建、修改、删除等操作。

通过学习,你将掌握数据库与表的核心操作方法、规范及注意事项,能正确执行各类相关操作。

1 基础知识

1.1 一条数据存储的过程

1.1.1 存储的重要性

存储数据是处理数据的基础,只有正确存储,才能进行有效处理和分析,否则数据会杂乱无章。

1.1.2 数据存储的四步过程

在MySQL中,完整的数据存储过程包括:

  • 创建数据库
  • 确认字段
  • 创建数据表
  • 插入数据

1.1.3 先创建数据库的原因

从系统架构层次看,MySQL数据库系统从大到小依次为数据库服务器数据库数据表数据表的行与列。由于MySQL服务器已安装,故从创建数据库开始。

1.2 标识符命名规则

1.2.1 长度限制

  • 数据库名、表名不超过30个字符
  • 变量名限制为29个字符

1.2.2 字符限制

只能包含A–Za–z0–9_共63个字符

1.2.3 空格限制

数据库名、表名、字段名等对象名中间不包含空格

1.2.4 唯一性限制

  • 同一MySQL软件中,数据库不能同名
  • 同一库中,表不能重名
  • 同一表中,字段不能重名

1.2.5 与保留字冲突处理

字段名不能和保留字、数据库系统或常用方法冲突。若坚持使用,在SQL语句中用`(着重号)引起来

1.2.6 一致性要求

保持字段名和类型的一致性,如一个表中为整数类型,其他表中不应变为字符型

1.3 MySQL中的数据类型

1.3.1 各类数据类型

  • 整数类型:TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
  • 浮点类型:FLOAT、DOUBLE
  • 定点数类型:DECIMAL
  • 位类型:BIT
  • 日期时间类型:YEAR、TIME、DATE、DATETIME、TIMESTAMP
  • 文本字符串类型:CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
  • 枚举类型:ENUM
  • 集合类型:SET
  • 二进制字符串类型:BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
  • JSON类型:JSON对象、JSON数组
  • 空间数据类型:单值(GEOMETRY、POINT、LINESTRING、POLYGON);集合(MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION)

1.3.2 常用数据类型描述

数据类型描述
INT从-231到231-1的整型数据,存储大小为4个字节
CHAR(size)定长字符数据,若未指定,默认为1个字符,最大长度255
VARCHAR(size)可变长字符数据,根据字符串实际长度保存,必须指定长度
FLOAT(M,D)单精度,占用4个字节,M=整数位+小数位,D=小数位。D<=M<=255,0<=D<=30,默认M+D<=6
DOUBLE(M,D)双精度,占用8个字节,D<=M<=255,0<=D<=30,默认M+D<=15
DECIMAL(M,D)高精度小数,占用M+2个字节,D<=M<=65,0<=D<=30,最大取值范围与DOUBLE相同
DATE日期型数据,格式’YYYY-MM-DD’
BLOB二进制形式的长文本数据,最大可达4G
TEXT长文本数据,最大可达4G

2 创建和管理数据库

2.1 创建数据库

2.1.1 创建方式

  • 方式1创建数据库
CREATE DATABASE 数据库名;
  • 方式2创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
  • 方式3判断数据库是否已存在,不存在则创建(推荐)
CREATE DATABASE IF NOT EXISTS 数据库名;

例如说,

-- 创建并使用数据库
CREATE DATABASE IF NOT EXISTS demo_hr;
USE demo_hr;

2.1.2 注意事项

DATABASE不能直接改名,一些可视化工具的改名操作实际是建新库、复制表、删旧库

2.2 使用数据库

2.2.1 查看当前所有数据库

SHOW DATABASES;

在这里插入图片描述

能够直接看到当前的所有数据库。

2.2.2 查看当前正在使用的数据库

SELECT DATABASE();

在这里插入图片描述

2.2.3 查看指定库下所有的表

SHOW TABLES FROM 数据库名;

在这里插入图片描述

2.2.4 查看数据库的创建信息

SHOW CREATE DATABASE 数据库名;

SHOW CREATE DATABASE 数据库名\G

在这里插入图片描述

2.2.5 使用/切换数据库

USE 数据库名;

我们再对数据库进行一系列操作之前,都需要通过这个语句去选择你要的数据库,

然后才能执行相关操作。

2.2.6 注意事项

操作表格和数据前必须说明对哪个数据库操作,否则需对所有对象加数据库名.

2.3 修改数据库

2.3.1 更改数据库字符集

ALTER DATABASE 数据库名 CHARACTER SET 字符集;

(例如:gbk、utf8等)

2.4 删除数据库

2.4.1 删除方式

  • 方式1删除指定的数据库
DROP DATABASE 数据库名;
  • 方式2删除指定的数据库(推荐)
DROP DATABASE IF EXISTS 数据库名;

3 创建表

3.1 创建方式1

3.1.1 必备条件

  • 具有CREATE TABLE权限
  • 存储空间

3.1.2 语法格式

CREATE TABLE [IF NOT EXISTS] 表名(
字段1 数据类型 [约束条件] [默认值],
字段2 数据类型 [约束条件] [默认值],
字段3 数据类型 [约束条件] [默认值],
[表约束条件]
);

例如,

-- 1. 部门表
CREATE TABLE IF NOT EXISTS departments (department_id INT PRIMARY KEY,department_name VARCHAR(50),location_id INT
);

3.1.3 关键字说明

  • IF NOT EXISTS:若数据库中不存在该表则创建,存在则忽略

3.1.4 必须指定内容

  • 表名
  • 列名(或字段名)、数据类型、长度

3.1.5 可选指定内容

  • 约束条件
  • 默认值

3.1.6 创建表举例1

-- 创建表
CREATE TABLE emp (
-- int类型
emp_id INT,
-- 最多保存20个中英文字符
emp_name VARCHAR(20),
-- 总位数不超过15位
salary DOUBLE,
-- 日期类型
birthday DATE
);
DESC emp;

在这里插入图片描述

3.1.7 说明

MySQL中INT类型默认显示宽度为11,也可创建时指定,但MySQL 8.x版本不推荐为INT类型指定显示长度,未来可能会去掉该语法。

3.2 创建方式2

3.2.1 语法

使用AS subquery选项,将创建表和插入数据结合

CREATE TABLE table AS subquery [(column,column...)];

3.2.2 说明

  • 指定的列和子查询中的列要一一对应
  • 可通过列名和默认值定义列

3.2.3 举例

CREATE TABLE emp1 AS SELECT * FROM employees;
CREATE TABLE emp2 AS SELECT * FROM employees WHERE 1=2; -- 创建的emp2是空表
CREATE TABLE dept80
AS 
SELECT employee_id, last_name, salary*12 ANNSAL, hire_date
FROM employees
WHERE department_id = 80;
DESCRIBE dept80;

这个程序什么意思呢?
看下面图片分析。
在这里插入图片描述

3.3 查看数据表结构

3.3.1 查看方式

  • 使用DESCRIBE/DESC语句
  • 使用SHOW CREATE TABLE语句,语法:
SHOW CREATE TABLE 表名\G

3.3.2 说明

SHOW CREATE TABLE语句可查看表创建的详细语句、存储引擎和字符编码

4 修改表

4.1 追加一个列

4.1.1 语法格式

ALTER TABLE 表名 ADDCOLUMN】 字段名 字段类型 【FIRST|AFTER 字段名】;

4.1.2 举例

ALTER TABLE dept80 ADD job_id varchar(15);

在这里插入图片描述

4.2 修改一个列

4.2.1 可修改内容

数据类型、长度、默认值和位置

4.2.2 语法格式

ALTER TABLE 表名 MODIFYCOLUMN】 字段名1 字段类型 【DEFAULT 默认值】【FIRST|AFTER 字段名2;

4.2.3 举例

ALTER TABLE dept80
MODIFY last_name VARCHAR(30);
ALTER TABLE dept80
MODIFY salary double(9,2) default 1000;

注意:

对默认值的修改只影响今后对表的修改,也可通过此方式修改列的约束

4.3 重命名一个列

ALTER TABLE 表名 CHANGE 【column】 列名 新列名 新数据类型;
ALTER TABLE dept80
CHANGE department_name dept_name varchar(15);

运行后把原字段名department_name改成dept_name并重置字段类型,明确指定新类型为 varchar(15)。

4.4 删除一个列

ALTER TABLE 表名 DROPCOLUMN】字段名;

例如,

ALTER TABLE dept80
DROP COLUMN job_id;

这里column就是列的意思。

5 重命名表

5.1 方式一

RENAME TABLE emp TO myemp;

5.2 方式二

ALTER table dept RENAME [TO] detail_dept; -- [TO]可以省略

这里要注意:
必须是对象的拥有者!!!

6 删除表

当表未与其他表形成关联关系时可直接删除,删除后数据和结构都被删除,所有正在运行的相关事务被提交,所有相关索引被删除

DROP TABLE [IF EXISTS] 数据表1 [, 数据表2,, 数据表n];

IF EXISTS:若存在该表则删除,不存在则忽略

DROP TABLE dept80;

7 清空表

7.1 语法

TRUNCATE TABLE 表名;

删除表中所有的数据,释放表的存储空间!!!

7.2 与DELETE对比

  • TRUNCATE语句不能回滚,DELETE语句删除数据可以回滚
  • TRUNCATE TABLE比DELETE速度快,使用的系统和事务日志资源少,但无事务且不触发TRIGGER,可能造成事故,不建议在开发代码中使用
  • TRUNCATE TABLE功能与不带WHERE子句的DELETE语句相同
TRUNCATE TABLE detail_dept;

8 总结

本文详细介绍了MySQL中创建和管理表的相关知识,从基础知识(数据存储过程、命名规则、数据类型)到数据库的创建、管理,再到表的创建、修改、重命名、删除、清空。

通过学习,可以掌握数据库和表的完整操作流程,了解命名和类型选择的规范,以及不同操作的注意事项,能有效进行MySQL中表的管理工作。

http://www.xdnf.cn/news/1172017.html

相关文章:

  • React中的antd的表格使用方法
  • 在 Ubuntu 上将 Docker 降级到版本 25.0.5 (二) 降低版本,涉及兼容性问题
  • 解决 i.MX6ULL 通过 ADB 连接时权限不足问题 not in the plugdev group
  • C++ 扫描局域网某个端口是否开放(如 5555 )(android adb) 线程并发加速
  • 苍穹外卖DAY11
  • 华为云数据库 GaussDB的 nvarchar2隐式类型转换的坑
  • gig-gitignore工具实战开发(一):项目愿景与蓝图规划
  • C#与WPF使用mvvm简单案例点击按钮触发弹窗
  • C Primer Plus 第6版 编程练习——第10章(上)
  • MySQL金融级数据一致性保障:从原理到实战
  • 视频、音频录制
  • Javascript常见的使用场景
  • 基于 XGBoost 与 SHAP 的医疗自动化办公与可视化系统(上)
  • Deep learning--模型压缩的五种方法
  • 什么是5G-A三防平板?有什么特点?哪些领域能用到?
  • Java 抽象类 vs 接口(Abstract Class vs Interface)对比笔记
  • 220V降5V,输出100MA,为家电电器消费类产品提供电源WD5202L
  • 【Dify】-进阶11- 权限与发布配置详解
  • ESP32-CAM实战:DIY基于OpenAI的AI视觉识别相机
  • 显微科研中的关键选择:不同显微镜相机技术特性与应用适配性全面解析
  • k8s pvc是否可绑定在多个pod上
  • 学生信息管理系统 - HTML实现增删改查
  • 硬件基础 -- 信号完整性
  • solidity从入门到精通 第四章:智能合约的生命周期
  • 需要系统的学习下Docker的使用
  • 【图像处理基石】如何对遥感图像进行目标检测?
  • Upload-Labs通关全攻略详细版
  • 二进制安装 Kubernetes 高可用集群
  • 设计模式(单例)
  • 《从C风格到C++风格:内存管理的进化之路》