第十章:创建和管理表

news2024/11/25 1:17:34

第十章:创建和管理表

10.1:基础知识

  1. 一条数据存储的过程

    存储数据是处理数据的第一步。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只能是一团乱麻,无从下手。

    ​ 在MySQL中,一个完成的数据存储过程总共有4步,分别是创建数据库、确认字段、创建数据表、插入数据。
    在这里插入图片描述

    ​ 因为从系统架构的层次上看,MySQL数据库系统从大到小依次是数据库服务器数据库数据表、数据表的行与列

  2. 标识符命名规则

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

10.2:创建和管理数据库

  1. 创建数据库

    • 方式1:创建数据库

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

      CREATE DATABASE mytest2 CHARACTER SET 'gbk';
      
    • 方式3:判断数据库是否已经存在,不存在则创建数据库(推荐)

      CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET 'utf8';
      

    注意:DATABASE不能改名。一些可视化工具可以改名,它是新建库,把所有表复制到新库,再删除旧库完成的。

  2. 使用数据库

    • 查看当前所有的数据库

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

      SELECT DATABASE()
      from DUAL;
      
    • 查看当前数据中保存的数据表

      SHOW TABLES;
      
    • 查看指定数据库下所有的表

      SHOW TABLES FROM mysql;
      
    • 查看数据库的创建信息

      SHOW CREATE DATABASE mytest1;
      
    • 使用/切换数据库

      USE atguigudb;
      

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

  3. 修改数据库

    • 更改数据库字符集

      ALTER DATABASE mytest2 CHARACTER SET 'utf8';
      
  4. 删除数据库

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

      DROP DATABASE mytest1;
      
    • 方式2:删除指定的数据库(推荐)

      DROP DATABASE IF EXISTS mytest2;
      

10.3:创建表

  1. 创建方式1

    • 必须具备

      1. CREATE TABLE权限
      2. 存储空间
    • 语法格式

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

      说明:IF NOT EXISTS关键字,则表示:如果当前数据库中不存在要创建的数据表,则创建数据表,如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。

    • 举例

      CREATE TABLE IF NOT EXISTS myemp1 ( 
          id INT, 
          emp_name VARCHAR(15), #使用VARCHAR来定义字符串,必须在使用VARCHAR时指明其长度。
          hire_date DATE
      );
      
  2. 创建方式2

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

    • 指定的列和子查询中的列要一一对应。

    • 通过列名和默认值定义列。

    • 举例

      # 创建一个表emp1,实现对employees表的复制,包括表数据
      CREATE TABLE emp1 AS SELECT * FROM employees;
      # 创建一个表emp2,实现对employees表的复制,不包括表数据
      CREATE TABLE emp2 AS SELECT * FROM employees WHERE 1=2; 
      

10.4:修改表

  1. 追加一个列

    • 语法格式

      ALTER TABLE 表名 ADD [COLLUMN] 字段名 字段类型 [FIRST | AFTER 字段名];
      
    • 举例

      ALTER TABLE myemp1
      ADD salary DOUBLE(10, 2); #默认添加到表中的最后一个字段的位置
      
      ALTER TABLE myemp1
      ADD phont_number VARCHAR(20) FIRST;
      
      ALTER TABLE myemp1
      ADD email VARCHAR(45) AFTER emp_name;
      
  2. 修改一个列

    • 可以修改列的数据类型,长度,默认值和位置。

    • 语法格式

      ALTER TABLE 表名 MODIFY [COLUMN] 字段名1 字段类型 [DEFAULT 默认值] [FIRST | AFTER 字段名2];
      
    • 举例

      ALTER TABLE myemp1
      MODIFY emp_name VARCHAR(25);
      
      ALTER TABLE myemp1
      MODIFY emp_name VARCHAR(35) DEFAULT 'aaa';
      

      说明:对默认值的修改只影响今后对表的修改。

  3. 重命名一个列

    • 语法格式

      ALTER TABLE 表名 CHANGE [column] 列名 新列名 新数据类型;
      
    • 举例

      ALTER TABLE myemp1
      CHANGE salary monthly_salary DOUBLE(10, 2);
      
      ALTER TABLE myemp1
      CHANGE email my_email VARCHAR(50);
      
  4. 删除一个列

    • 语法格式

      ALTER TABLE 表名 DROP [COLUMN] 字段名;
      
    • 举例

      ALTER TABLE myemp1
      DROP COLUMN my_email;
      
  5. 重命名表

    • 方式1:使用RENAME

      RENAME TABLE myemp1
      TO myemp11;
      
    • 方式2

      ALTER TABLE myemp2
      RENAME TO myemp12;
      
  6. 删除表

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

    • 语法格式

      DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, ..., 数据表n];
      
    • 举例

      DROP TABLE IF EXISTS myemp12;
      

      说明:

      1. IF EXISTS的含义为:如果当前数据库中存在相应的数据表,则删除数据表,如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。
      2. DROP TABLE语句不能回滚。
  7. 清空表

    • TRUNCATE TABLE语句

      1. 删除表中所有的数据
      2. 释放表的存储空间
    • 举例

      TRUNCATE TABLE employees_copy;
      

      说明:TRUNCATE语句不能回滚,而使用DELETE语句删除数据,可以回滚。

10.5:内容扩展

  1. DCLCOMMITROLLBACK

    • COMMIT:提交数据。一旦执行COMMIT,则数据就被永久的保存在了数据库中,意味着数据不可以回滚。
    • ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后。
  2. 对比TRUNCATE TABLEDELETE FROM

    • 相同点:都可以实现对表中所有数据的删除,同时保留表结构。
    • 不同点:
      1. TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
      2. DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚的。
  3. DDLDML的说明

    • DDL的操作一旦执行,就不可回滚。指令SET autocommit = FALSEDDL操作失效。(因为在执行完DDL操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE影响的。)
    • DML的操作默认情况,一旦执行,也是不可回滚的。但是,如果在执行DML之前,执行了SET autocommit = FALSE,则执行的DML操作就可以实现回滚。
  4. 演示

    # 演示:DELETE FROM 
    #1)
    COMMIT;
    #2)
    SELECT * 
    FROM myemp3;
    #3)
    SET autocommit = FALSE;
    #4)
    DELETE FROM myemp3;
    #5)
    SELECT *
    FROM myemp3;
    #6)
    ROLLBACK;
    #7)
    SELECT *
    FROM myemp3;
    
    # 演示:TRUNCATE TABLE
    #1)
    COMMIT;
    #2)
    SELECT * 
    FROM myemp3;
    #3)
    SET autocommit = FALSE;
    #4)
    TRUNCATE TABLE myemp3;
    #5)
    SELECT *
    FROM myemp3;
    #6)
    ROLLBACK;
    #7)
    SELECT * 
    FROM myemp3;
    

    说明:TRUNCATE TABLEDELETE速度快,且使用的系统和事物日志资源少,但TRUNCATE无事物且不触发TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。

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

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

相关文章

使用模板方法模式封装协议消息

目录 整体框架 模板方法介绍 关于本案例设计 c impl惯用法 cimpl惯用法好处 此案例impl惯用法的设计 关于序列化和反序列化 序列化和反序列化 本项目使用介绍 谷歌测试 谷歌测试环境 谷歌测试用例 完整源码地址 概述 本文介绍了从 设计模式之模板方法模式协议消…

面对CPU狂飙时的5步解决方案

现在企业对后端开发的要求越来越高,不仅要求我们会写代码,还要我们能够进行部署和运维! 项目上线并运行一段时间后,可能会发现部署所在的Linux服务器CPU占用过高,该如何排查解决? 本文用5步带你搞定线上CPU…

操作系统-进程和线程-同步、互斥、死锁

目录 一、同步互斥 二、互斥的实现方法 2.1软件实现 2.1.1单标志法 2.1.2双标志先检查 2.1.3双标志后检查 2.1.4Petersons算法 2.2硬件实现 2.2.1 TestAndSet指令 2.2.2 Swap指令 三、信号量机制 3.1整形变量 3.2 记录型变量 3.3用信号量实现进程互斥、同步、前驱关系…

Sui与F1甲骨文红牛车队达成合作

在近期达成的一项为期多年的合作协议中,甲骨文红牛车队将利用Sui网络开发,为粉丝带来全新的数字化体验。 甲骨文红牛车队的粉丝将很快在Sui网络上体验到他们最爱的一级方程式车队带来的激情。最近几个赛季一直统治着F1赛场的甲骨文红牛车队,与…

代码随想录算法训练营第五十三天 | 力扣 1143.最长公共子序列, 1035.不相交的线, 53. 最大子序和

1143.最长公共子序列 题目 1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符…

2022年值得关注的7个主要SD-WAN趋势

随着SD-WAN技术在2022年继续发展成熟,该技术在集成远程访问、自动化和多云连接方面的支持有望得到更多的改进。 软件定义WAN仍然是增强用户体验(UX),提高安全性,以及提供与基于云计算的应用程序的连接的一项关键技术。 随着SD-WAN的成熟&…

java设计模式之:原型模式

在我们的生活中,有很多例子,都是用到了原型模式,例如:我们去配钥匙的时候,肯定先要有一个原配钥匙才可以去配钥匙;《西游记》中孙悟空可以用猴毛根据自己的形象,复制(又称“克隆”或…

时间序列预测 | Matlab基于北方苍鹰算法优化随机森林(NGO-RF)与随机森林(RF)的时间序列预测对比

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基于北方苍鹰算法优化随机森林(NGO-RF)与随机森林(RF)的时间序列预测对比 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %-----------…

【Apache-Flink零基础入门】「入门到精通系列」手把手+零基础带你玩转大数据流式处理引擎Flink(基础概念解析)

手把手零基础带你玩转大数据流式处理引擎Flink 前言介绍Apache Flink 的定义、架构及原理Flink应用服务Streams有限数据流和无限数据流的区别 StateTimeAPI Flink架构体系 Flink操作处理Flink 的应用场景Flink 的应用场景:Data Pipeline实时数仓搜索引擎推荐 Flink …

华为诺亚 VanillaNet

文章标题:《VanillaNet: the Power of Minimalism in Deep Learning》 文章地址:https://arxiv.org/abs/2305.12972 github地址:https://github.com/huawei-noah/VanillaNet 华为诺亚方舟实验室和悉尼大学,2023年5月代码刚开源的…

基于HAL库的STM32的单定时器的多路输入捕获测量脉冲频率(外部时钟实现)

目录 写在前面 一般的做法(定时器单通道输入捕获) 以外部时钟的方式(高低频都适用) 测试效果 写在前面 STM32的定时器本身有输入捕获的功能。可选择双端捕获,上升沿捕获或者是下降沿捕获。对应捕获频率来说,连续捕获上升沿或下降沿的时间间隔就是其脉…

手把手教你F103工程文件的创建并且通过protesu仿真验证创建工程文件的正确性(低成本)

目录 一、新建工程文件夹 二、新建一个工程框架 三、添加文件 四、仿真验证 五、仿真调试中遇到的问题并解决 一、新建工程文件夹 新建工程文件夹分为 2 个步骤:1,新建工程文件夹;2,拷贝工程相关文件。 1.新建工程文件 首先…

【04】STM32·HAL库开发-MDK5使用技巧 |文本美化 | 代码编辑技巧 | 查找与替换技巧 | 编译问题定位 | 窗口视图初始化

目录 1.文本美化(熟悉)1.1编辑器设置1.2字体和颜色设置1.3用户关键字设置1.4代码提示&语法检测1.5global.prop文件妙用 2.代码编辑技巧(熟悉)2.1Tab键的妙用2.2快速定位函数或变量被定义的地方2.3快速注释&快速取消注释 3…

python面向对象操作2(速通版)

目录 一、私有和公有属性的定义和使用 1.公有属性定义和使用 2.私有属性 二、继承 1.应用 2.子类不能用父类的私有方法 3.子类初始化父类 4.子类重写和调用父类方法 5.多层继承 6.多层继承-初始化过程 7.多继承基本格式 8.多层多继承时的初始化问题 9.多继承初始化…

云原生Docker Cgroups资源控制操作

资源控制 Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 ControlGroups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如…

Node服务器-express框架

1 Express认识初体验 2 Express中间件使用 3 Express请求和响应 4 Express路由的使用 5 Express的错误处理 6 Express的源码解析 一、手动创建express的过程: 1、在项目文件的根目录创建package.json文件 npm init 2、下载express npm install express 3、基本…

kafka3

分区副本机制 kafka 从 0.8.0 版本开始引入了分区副本;引入了数据冗余 用CAP理论来说,就是通过副本及副本leader动态选举机制提高了kafka的 分区容错性和可用性 但从而也带来了数据一致性的巨大困难! 6.6.2分区副本的数据一致性困难 kaf…

多模态学习

什么是多模态学习? 模态 模态是指一些表达或感知事物的方式,每一种信息的来源或者形式,都可以称为一种模态 视频图像文本音频 多模态 多模态即是从多个模态表达或感知事物 多模态学习 从多种模态的数据中学习并且提升自身的算法 多…

【k8s 系列】k8s 学习三,docker回顾,k8s 起航

k8s 逐渐已经作为一个程序员不得不学的技术,尤其是做云原生的兄弟们,若你会,那么还是挺难的 学习 k8s ,实践尤为重要,如果身边有自己公司就是做云的,那么云服务器倒是不用担心,若不是&#xff…

IMX6ULL PHY 芯片驱动

前言 之前使用 IMX6ULL 开发板时遇到过 nfs 挂载不上的问题,当时是通过更换官方新版 kernel 解决的,参考《挂载 nfs 文件系统》。 今天,使用自己编译的 kernel 又遇到了该问题,第二次遇到了,该正面解决了。 NFS 挂载…