【MySQL】——数据定义

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【MySQL】——数据定义

🎯模式的定义与删除

🥽定义模式

  • 定义模式实际上定义了一个命名空间。
  • 在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
  • 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]


🥽删除模式

  • DROP SCHEMA <模式名>
  • CASCADE(级联)
  • 删除模式的同时把该模式中所有的数据库对象全部删除
  • RESTRICT(限制)
  • 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
  • 仅当该模式中没有任何下属的对象时才能执行。

🎯基本表的定义、删除与修改

🥽定义基本表

CREATE TABLE <表名>


     (<列名> <数据类型>[ <列级完整性约束条件> ]


     [,<列名> <数据类型>[ <列级完整性约束条件>] ]


  …


     [,<表级完整性约束条件> ] );


  • <表名>:所要定义的基本表的名字
  • <列名>:组成该表的各个属性(列)
  • <列级完整性约束条件>:涉及相应属性列的完整性约束条件
  • <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
  • 如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

🥽数据类型

  • SQL中域的概念用数据类型来实现
  • 定义表的属性时需要指明其数据类型及长度
  • 选用哪种数据类型
  • 取值范围
  • 要做哪些运算

c9595c9971097d4947fb8984daf7cb6c_63757a874d654b37b5532bd8fc52840f.png


🥽模式与表

  • 每一个基本表都属于某一个模式
  • 一个模式包含多个基本表
  • 定义基本表所属模式
  • 方法一:在表名中明显地给出模式名

       Create table"S-T".Student(......);     /*模式名为 S-T*/


       Create table "S-T".Cource(......);


       Create table "S-T".SC(......);


  • 方法二:在创建模式语句中同时创建表
  • 方法三:设置所属的模式
  • 创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式
  • 关系数据库管理系统会使用模式列表中第一个存在的模式作为数据库对象的模式名
  • 若搜索路径中的模式名都不存在,系统将给出错误
  • 显示当前的搜索路径: SHOW search_path;
  • 搜索路径的当前默认值是:$user, PUBLIC
  • 数据库管理员用户可以设置搜索路径,然后定义基本表

SET search_path TO "S-T",PUBLIC;


Create table Student(......);  


结果建立了S-T.Student基本表。


关系数据库管理系统发现搜索路径中第一个模式名S-T, 就把该模式作为基本表Student所属的模式。


🥽修改基本表

ALTER TABLE <表名>


[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]


[ ADD <表级完整性约束>]


[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]


[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]


[ALTER COLUMN <列名><数据类型> ] ;


  • <表名>是要修改的基本表
  • ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
  • DROP COLUMN子句用于删除表中的列
  • 如果指定了CASCADE短语,则自动删除引用了该列的其他对象
  • 如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列
  • DROP CONSTRAINT子句用于删除指定的完整性约束条件
  • ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型

🥽删除基本表

DROP TABLE <表名>[RESTRICT| CASCADE];


  • RESTRICT:删除表是有限制的。
  • 欲删除的基本表不能被其他表的约束所引用
  • 如果存在依赖该表的对象,则此表不能被删除
  • CASCADE:删除该表没有限制。
  • 在删除基本表的同时,相关的依赖对象一起删除


6ab93e5be9b0e526286b689ff2acf94f_9d9688464790490da44074c62c465043.png

🎯索引的建立与删除

  • 建立索引的目的:加快查询速度
  • 关系数据库管理系统中常见索引
  • 顺序文件上的索引
  • B+树索引(动画《B+树的增删改》)
  • 散列(hash)索引
  • 位图索引
  • 特点:
  • B+树索引具有动态平衡的优点
  • HASH索引具有查找速度快的特点

🥽建立索引

语句格式


CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);


<表名>:要建索引的基本表的名字 索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔


<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC


UNIQUE:此索引的每一个索引值只对应唯一的数据记录


CLUSTER:表示要建立的索引是聚簇索引

🥽修改索引

ALTER INDEX <旧索引名> RENAME TO <新索引名>

🥽删除索引

DROP INDEX <索引名>; 删除索引时,系统会从数据字典中删去有关该索引的描述。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
26天前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
146 0
|
1月前
|
SQL 前端开发 关系型数据库
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
47 0
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
|
1月前
|
关系型数据库 MySQL 数据库
mysql 里创建表并插入数据
【10月更文挑战第5天】
118 1
|
8天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
113 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
8天前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
在项目中,为了解决Redis与Mysql的数据一致性问题,我们采用了多种策略:对于低一致性要求的数据,不做特别处理;时效性数据通过设置缓存过期时间来减少不一致风险;高一致性但时效性要求不高的数据,利用MQ异步同步确保最终一致性;而对一致性和时效性都有高要求的数据,则采用分布式事务(如Seata TCC模式)来保障。
41 14
|
11天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
42 9
|
22天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
19天前
|
SQL 关系型数据库 MySQL
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
38 1
|
20天前
|
SQL 关系型数据库 MySQL
mysql数据误删后的数据回滚
【11月更文挑战第1天】本文介绍了四种恢复误删数据的方法:1. 使用事务回滚,通过 `pymysql` 库在 Python 中实现;2. 使用备份恢复,通过 `mysqldump` 命令备份和恢复数据;3. 使用二进制日志恢复,通过 `mysqlbinlog` 工具恢复特定位置的事件;4. 使用延迟复制从副本恢复,通过停止和重启从库复制来恢复数据。每种方法都有详细的步骤和示例代码。
|
1月前
|
存储 关系型数据库 MySQL
面试官:MySQL一次到底插入多少条数据合适啊?
本文探讨了数据库插入操作的基础知识、批量插入的优势与挑战,以及如何确定合适的插入数据量。通过面试对话的形式,详细解析了单条插入与批量插入的区别,磁盘I/O、内存使用、事务大小和锁策略等关键因素。最后,结合MyBatis框架,提供了实际应用中的批量插入策略和优化建议。希望读者不仅能掌握技术细节,还能理解背后的原理,从而更好地优化数据库性能。