MySQL_第10章_创建和管理表

news2024/12/23 9:27:21

10_创建和管理表

讲师:尚硅谷 - 宋红康(江湖人称:康师傅)
官网: http://www.atguigu.com

1. 基础知识

1.1 一条数据存储的过程

存储数据是处理数据的第一步 。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只能是一团乱麻,无从下手。
那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢? 在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。

 

我们要先创建一个数据库,而不是直接创建数据表呢?
因为从系统架构的层次上看, MySQL 数据库系统从大到小依次是 数据库服务器 数据库 数据表 、数据表的 行与列
MySQL 数据库服务器之前已经安装。所以,我们就从创建数据库开始。

1.2 标识符命名规则

  • 数据库名、表名不得超过30个字符,变量名限制为29
  • 必须只能包含 A–Z, a–z, 0–9, _63个字符
  • 数据库名、表名、字段名等对象名中间不要包含空格
  • 同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
  • 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使`(着重号)引起来
  • 保持字段名和类型的一致性:在命名字段并为其指定数据类型的时候一定要保证一致性,假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了

1.3 MySQL中的数据类型

类型类型举例
整数类型TINYINTSMALLINTMEDIUMINTINT(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

其中,常用的几类类型介绍如下:
数据类型
描述
INT
-2^31 2^31-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 创建数据库

  • 方式1:创建数据库

CREATE DATABASE 数据库名;

  • 方式2:创建数据库并指定字符集

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

  • 方式3:判断数据库是否已经存在,不存在则创建数据库( 推荐

CREATE DATABASE IF NOT EXISTS 数据库名;

如果 MySQL 中已经存在相关的数据库,则忽略创建语句,不再创建数据库。
注意: DATABASE 不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成的。

2.2 使用数据库

  • 查看当前所有的数据库

SHOW DATABASES; #有一个S,代表多个数据库

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

SELECT DATABASE(); #使用的一个 mysql 中的全局函数

  • 查看指定库下所有的表

SHOW TABLES FROM 数据库名;

  • 查看数据库的创建信息

SHOW CREATE DATABASE 数据库名 ;
或者:
SHOW CREATE DATABASE 数据库名 \G
  • 使用/切换数据库

USE 数据库名;

注意:要操作表格和数据之前必须先说明是对哪个数据库进行操作,否则就要对所有对象加上
据库名 .”

2.3 修改数据库

  • 更改数据库字符集

ALTER DATABASE 数据库名 CHARACTER SET 字符集; #比如:gbkutf8

2.4 删除数据库

  • 方式1:删除指定的数据库

DROP DATABASE 数据库名;

  • 方式2:删除指定的数据库( 推荐

DROP DATABASE IF EXISTS 数据库名;

3. 创建表

3.1 创建方式1

  • 必须具备:
    • CREATE TABLE权限
    • 存储空间
  • 语法格式:

CREATE TABLE [ IF NOT EXISTS ] 表名 (
字段 1, 数据类型 [ 约束条件 ] [ 默认值 ],
字段 2, 数据类型 [ 约束条件 ] [ 默认值 ],
字段 3, 数据类型 [ 约束条件 ] [ 默认值 ],
……
[ 表约束条件 ]
);
加上了 IF NOT EXISTS 关键字,则表示:如果当前数据库中不存在要创建的数据表,则创建数据表; 如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。
  • 必须指定:
    • 表名
    • 列名(或字段名),数据类型,长度
  • 可选指定:
    • 约束条件
    • 默认值
  • 创建表举例1
-- 创建表
CREATE TABLE emp (
-- int 类型
emp_id INT ,
-- 最多保存 20 个中英文字符
emp_name VARCHAR ( 20 ),
-- 总位数不超过 15
salary DOUBLE ,
-- 日期类型
birthday DATE
);
DESC emp;

 

MySQL 在执行建表语句时,将 id 字段的类型设置为 int(11) ,这里的 11 实际上是 int 类型指定的显示宽度,默认的显示宽度为11 。也可以在创建数据表的时候指定数据的显示宽度。
  • 创建表举例2

CREATE TABLE dept(
-- int 类型,自增
deptno INT ( 2 ) AUTO_INCREMENT ,
dname VARCHAR ( 14 ),
loc VARCHAR ( 13 ),
-- 主键
PRIMARY KEY (deptno)
);

DESCRIBE dept;  

 

MySQL 8.x 版本中,不再推荐为 INT 类型指定显示长度,并在未来的版本中可能去掉这样的语法。

 

3.2 创建方式2

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

 

  • 指定的列和子查询中的列要一一对应
  • 通过列名和默认值定义列
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 查看数据表结构

MySQL 中创建好数据表之后,可以查看数据表的结构。 MySQL 支持使用 DESCRIBE/DESC 语句查看数据表结构,也支持使用 SHOW CREATE TABLE 语句查看数据表结构。
语法格式如下:
SHOW CREATE TABLE 表名 \G
使用 SHOW CREATE TABLE 语句不仅可以查看表创建时的详细语句,还可以查看存储引擎和字符编码。

4. 修改表

修改表指的是修改数据库中已经存在的数据表的结构。
使用 ALTER TABLE 语句可以实现:
  • 向已有的表中添加列
  • 修改现有表中的列
  • 删除现有表中的列
  • 重命名现有表中的列

4.1 追加一个列

语法格式如下:
ALTER TABLE 表名 ADD COLUMN 】 字段名 字段类型 【 FIRST| AFTER 字段名】 ;
举例:
ALTER TABLE dept80
ADD job_id varchar ( 15 );

4.2 修改一个列

  • 可以修改列的数据类型,长度、默认值和位置
  • 修改字段数据类型、长度、默认值、位置的语法格式如下:

ALTER TABLE 表名 MODIFY COLUMN 】 字段名 1 字段类型 【 DEFAULT 默认值】【 FIRST| AFTER 字段名
2 ;
举例:
ALTER TABLE dept80
MODIFY last_name VARCHAR ( 30 );
ALTER TABLE dept80
MODIFY salary double ( 9 , 2 ) default 1000 ;  
  • 对默认值的修改只影响今后对表的修改
  • 此外,还可以通过此种方式修改列的约束。这里暂先不讲。

4.3 重命名一个列

使用 CHANGE old_column new_column dataType 子句重命名列。语法格式如下:
ALTER TABLE 表名 CHANGE column 】 列名 新列名 新数据类型 ;
举例:
ALTER TABLE dept80
CHANGE department_name dept_name varchar ( 15 );

4.4 删除一个列

删除表中某个字段的语法格式如下:
ALTER TABLE 表名 DROP COLUMN 】字段名
举例:
ALTER TABLE dept80
DROP COLUMN job_id;

5. 重命名表

  • 方式一:使用RENAME

RENAME TABLE emp
TO myemp;
  • 方式二:

ALTER table dept
RENAME [ TO ] detail_dept; -- [TO] 可以省略
  • 必须是对象的拥有者

6. 删除表

  • MySQL中,当一张数据表 没有与其他任何数据表形成关联关系 时,可以将当前数据表直接删除。
  • 数据和结构都被删除
  • 所有正在运行的相关事务被提交
  • 所有相关索引被删除
  • 语法格式:

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

IF EXISTS 的含义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。
  • 举例:

DROP TABLE dept80;

  • DROP TABLE 语句不能回滚

7. 清空表

  • TRUNCATE TABLE语句:
    • 删除表中所有的数据
    • 释放表的存储空间
  • 举例:

TRUNCATE TABLE detail_dept;

  • TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚
  • 对比:

SET autocommit = FALSE ;
DELETE FROM emp2;
#TRUNCATE TABLE emp2;
SELECT * FROM emp2;
ROLLBACK ;
SELECT * FROM emp2;
阿里开发规范:
【参考】 TRUNCATE TABLE DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE
事务且不触发 TRIGGER ,有可能造成事故,故不建议在开发代码中使用此语句。
说明: TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。

8. 内容拓展

拓展1:阿里巴巴《Java开发手册》之MySQL字段命名

  • 强制 】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
    • 正例:aliyun_adminrdc_configlevel3_name
    • 反例:AliyunAdminrdcConfiglevel_3_name
  • 强制 】禁用保留字,如 descrangematchdelayed 等,请参考 MySQL 官方保留字。
  • 强制 】表必备三字段:id, gmt_create, gmt_modified
    • 说明:其中 id 必为主键,类型为BIGINT UNSIGNED、单表时自增、步长为 1gmt_create, gmt_modified 的类型均为 DATETIME 类型,前者现在时表示主动式创建,后者过去分词表示被动式更新
  • 推荐 】表的命名最好是遵循 业务名称_表的作用
    • 正例:alipay_task force_projecttrade_config
  • 推荐 】库名与应用名称尽量一致。
  • 【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。
    • 正例:无符号值可以避免误存负数,且扩大了表示范围。

拓展2:如何理解清空表、删除表等操作需谨慎?!

表删除 操作将把表的定义和表中的数据一起删除,并且 MySQL 在执行删除操作时,不会有任何的确认信息提示,因此执行删除操时应当慎重。在删除表前,最好对表中的数据进行 备份 ,这样当操作失误时可以对数据进行恢复,以免造成无法挽回的后果。
同样的,在使用 ALTER TABLE 进行表的基本修改操作时,在执行操作过程之前,也应该确保对数据进行完整的 备份 ,因为数据库的改变是 无法撤销 的,如果添加了一个不需要的字段,可以将其删除;相同的,如果删除了一个需要的列,该列下面的所有数据都将会丢失。

拓展3MySQL8新特性—DDL的原子化

MySQL 8.0 版本中, InnoDB 表的 DDL 支持事务完整性,即 DDL 操作要么成功要么回滚 DDL 操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log (该表是隐藏的表,通过 show tables 无法看到)中,用于回滚操作。通过设置参数,可将DDL 操作日志打印输出到 MySQL 错误日志中。
分别在 MySQL 5.7 版本和 MySQL 8.0 版本中创建数据库和数据表,结果如下:
CREATE DATABASE mytest;
USE mytest;
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR ( 255 )
);
SHOW TABLES ;
(1)在 MySQL 5.7 版本中,测试步骤如下: 删除数据表 book1 和数据表 book2 ,结果如下:
mysql> DROP TABLE book1,book2;
ERROR 1051 ( 42 S02): Unknown table 'mytest.book2'
再次查询数据库中的数据表名称,结果如下:
mysql> SHOW TABLES ;
Empty set ( 0.00 sec)
从结果可以看出,虽然删除操作时报错了,但是仍然删除了数据表 book1
(2)在 MySQL 8.0 版本中,测试步骤如下: 删除数据表 book1 和数据表 book2 ,结果如下:
mysql> DROP TABLE book1,book2;
ERROR 1051 ( 42 S02): Unknown table 'mytest.book2'
再次查询数据库中的数据表名称,结果如下:
mysql> show tables ;
+------------------+
| Tables_in_mytest |
+------------------+
| book1 |
+------------------+
1 row in set ( 0.00 sec)
从结果可以看出,数据表 book1 并没有被删除。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++11】智能指针

目录 一、异常层层嵌套执行流乱跳容易导致内存泄漏 二、使用智能指针解决上述问题 1、RAII 2、像指针一样 3、智能指针RAII运算符重载 三、C98的auto_ptr 四、C11的unique_ptr和shared_ptr 1、unique_ptr唯一指针 2、shared_ptr共享指针 2.1shared_ptr是否线程安全 …

MySQL_第09章_子查询

第09章_子查询 讲师&#xff1a;尚硅谷 - 宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a; http://www.atguigu.com 子查询指一个查询语句嵌套在另一个查询语句内部的查询&#xff0c;这个特性从 MySQL 4.1 开始引入。 SQL 中子查询的使用大大…

计算机组成原理 作业5

作业5 题量: 21 满分: 100 作答时间:03-23 09:45至03-29 23:59 91.7分 一. 单选题&#xff08;共11题&#xff0c;35分&#xff09; 1. (单选题, 3分)计算机的存储器采用分级存储体系的主要目的是________。 A. 便于读写数据B. 便于系统…

NetSuite Sublist解释

今朝汇编一下Sublist主题的知识点以备忘。 2个数据源类型 Related Record - 以Saved Search建立的关联记录&#xff1b;Child Record - 父子表&#xff1b; 1. Related Record Saved Search关键点 这种形式的Sublist是利用Saved Search作为Sublist的数据源&#xff0c;将某…

【群智能算法】一种改进的白鲸优化算法IBWO【Matlab代码#17】

文章目录 1. 原始BWO算法1.1 勘探阶段1.2 开发阶段1.3 鲸落阶段 2. 改进白鲸优化算法2.1 Tent映射种群初始化2.2 反向学习策略 3. 部分代码展示4. 仿真结果展示5. 资源获取 1. 原始BWO算法 BWO算法的种群初始化和大多数智能算法相同&#xff0c;即随机产生搜索空间中的若干候选…

python协程实战

协程简介 协程(Coroutine)又称微线程、纤程&#xff0c;协程不是进程或线程&#xff0c;其执行过程类似于 Python 函数调用&#xff0c;Python 的 asyncio 模块实现的异步IO编程框架中&#xff0c;协程是对使用 async 关键字定义的异步函数的调用; 一个进程包含多个线程,类似…

MySQL学习笔记第三天

第04章 运算符 1.算术运算符 算术运算符主要用于数学运算&#xff0c;其可以连接运算符前后的两个数值或表达式&#xff0c;对数值或表达式进行加&#xff08;&#xff09;、减&#xff08;-&#xff09;、乘&#xff08;*&#xff09;、除&#xff08;/&#xff09;和取模&a…

13、go并发编程

目录 一、并发模型二、MPG并发模型三、Goroutine的使用1 - 协程使用2 - panic与defer 四、channel的同步与异步‘’1 - 同步与异步channel2 - 关闭channel 五、并发安全性1 - 资源竞争2 - 原子操作3 - 读写锁4 - 容器的并发安全 六、多路复用1 - 阻塞I/O2 - 非阻塞I/O3 - 多路复…

差分(一维+二维)

类似于数学中的求导和积分&#xff0c;差分可以看成前缀和的逆运算。 前缀和我们是求原数组的前缀和&#xff0c;这里是把原数组当成前缀和&#xff0c;构造一个差分数组来运算 以一维为例&#xff0c;如原数组为a[1],a[2],a[3]...a[n] 前缀和的思想是构造st[1]a[1],st[2]a[…

【C++】vector的使用

文章目录 1. 主要结构2. 构造函数与复制重载3. 迭代器4. 容量相关1.容量读取2.容量修改 5. 数据访问6. 数据修改1. 尾插尾删2.任意位置的插入删除 7.其他接口 在之前我们学习了string的使用与模拟实现&#xff0c;在参考文档中可以发现&#xff0c;vector和string以及其他的容器…

I/O 设备

CPU有两种方法访问IO设备 都是基于PMIO的&#xff0c;Port Mapped I/O 给IO总线上的寄存器编号&#xff0c;CPU向IO总线请求写入或读取数据 &#xff08;x86&#xff09;给特定的内存地址对应上目标IO设备&#xff0c;当CPU读取这段内存的时候&#xff0c;就会把访问转发给IO…

微服务 - Consul服务注册中心

概述 上篇说到构建良好的架构&#xff0c;依托于基础设施建设(自动化测试、自动化部署、服务监控&#xff0c;服务发现、配置中心等等)&#xff0c;决定成败的往往是基础设施建设&#xff0c;所以从搭建一个注册中心和配置中心开始我们新一阶段的启程。 注册中心 注册中心选型…

Cordic算法原理详解

目录 坐标旋转分析 Cordic算法原理 应用举例1&#xff1a;求sin值与cos值 应用举例2&#xff1a;求反正切值 cosθ的还原补偿 坐标旋转数字计算机CORDIC(COordinate Rotation DIgital Computer)算法&#xff0c;通过移位和加减运算&#xff0c;能递归计算常用函数值&#…

《Netty》从零开始学netty源码(四十一)之PoolChunk.runsAvail

runsAvail runsAvail用于记录long型的指针值&#xff0c;是一个LongPriorityQueue数组&#xff0c;LongPriorityQueue的结构如下&#xff1a; array数组用于存储handle的值&#xff0c;其中下标对应SizeClasses中pageIdx&#xff0c;size为array数组的大小&#xff0c;size的大…

1.13|1.14|1.15|1.6、GDB调试

1.13|1.14|1.15|1.6、GDB调试 1.13、GDB调试&#xff08;1&#xff09;&#xff0c;GDB调试&#xff08;2&#xff09;1. 什么是GDB2. 准备工作3. GDB命令—启动、推出、查看代码实际操作①用list查看代码 1.15、GDB调试&#xff08;3&#xff09;1. GDB命令—断点操作实际操作…

Redis 快速上手 Java 增删改查(包含 RedisTemplateConfig 的编写)

一&#xff1a;Redis 数据类型 先了解 redis 的五种基本数据类型。 String 字符串类型&#xff1a;name: "value1"List 列表&#xff1a;names: ["value1", "value2", "value2"]Set 集合&#xff1a;names: ["value1", &qu…

多源迁移学习网络补充知识用于具有不可见故障的机器智能诊断

**摘要&#xff1a;**当前基于深度迁移学习的故障诊断的大多数成功需要两个假设&#xff1a;1&#xff09;源机器的健康状态集合应当与目标机器的健康状态集合重叠;2&#xff09;目标机器样本的数量跨健康状态平衡。然而&#xff0c;这样的假设在工程场景中是不现实的&#xff…

【闲聊杂谈】HTTPS原理详解

HTTPS和HTTP的区别 HTTP虽然使用极为广泛, 但是却存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付, 网络交易等新兴应用中安全方面最需要关注的。 关于 HTTP的明文数据传输, 攻击者最常用的攻击手法就是网络嗅探, 试图从传输过程…

Redis高可用高性能缓存的应用系列06 - 热Key,大Key,并发竞争解决方案

概述 终于迎来了Redis系列的尾声&#xff0c;本文针对Redis常遇到的热Key&#xff0c;大Key&#xff0c;并发竞争解决方案进行介绍。 热Key 什么是热key?当一个key的访问量明显大于其他key的时候&#xff0c;他就可以被称为热key。 热Key带来的问题 热key占用大量的CPU资…

黑马在线教育数仓实战7

1. hive的相关的优化 1.1 hive的相关的函数(补充说明) if函数: 作用: 用于进行逻辑判断操作语法: if(条件, true返回信息,false返回信息) 注意: if函数支持嵌套使用 nvl函数: 作用: null值替换函数格式: nvl(T value, T default_value) COALESCE函数 作用: 非空查找函数:格式…