解释mysql中DDL_详解MySQL第一篇—MySQL简要介绍及DDL语句

2023-11-05

背景:近几年,开源数据库逐渐流行起来。由于具有免费使用、配置简单、稳定性好、性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表。MySQL 数据库目前分为社区版(Community Server)和企业版(Enterprise),它们最重要的区别在于:社区版是自由下载而且完全免费的,但是官方不提供任何技术支持,适用于大多数普通用户;而企业版则是收费的,不能在线下载,相应地,它提供了更多的功能和更完备的技术支持,更适合于对数据库的功能和可靠性要求较高的企业客户。本篇博客将通过丰富的实例对 SQL 语言的基础进行详细介绍,MySQL,使得读者不但能够学习到标准 SQL【Structure Query Language(结构化查询语言)】 的使用,又能够学习到 MySQL 中一些扩展 SQL 的使用方法。

PS:本片博客的内容都是借鉴了深入浅出MySQL这本书,真是一本SQL入门好书,推荐。

SQL 分类:

SQL 语句主要可以划分为以下 3 个类别。

DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。

DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和select 等。(增添改查)

DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。

DDL 语句:

DDL 是数据定义语言的缩写,简单来说,就是对数据库内部的对象进行创建、删除、修改的操作语言。它和 DML 语言的最大区别是 DML 只是对表内部数据的操作,而不涉及到表的定义、结构的修改,更不会涉及到其他对象。DDL 语句更多的被数据库管理员(DBA)所使用,一般的开发人员很少使用。

下面通过一些例子来介绍 MySQL 中常用 DDL 语句的使用方法。

1.创建数据库

启动 MySQL 服务之后,输入以下命令连接到 MySQL 服务器:

[mysql@db3 ~]$mysql -uroot -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 7344941 to server version: 5.1.9-beta-log

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql>

在以上命令行中,mysql 代表客户端命令,-u 后面跟连接的数据库用户,-p 表示需要输入密码。如果数据库设置正常,并输入正确的密码,将看到上面一段欢迎界面和一个 mysql>提示符。在欢迎界面中介绍了以下几部分内容。

命令的结束符:用;或者\g 结束。

客户端的连接 ID:这个数字记录了 MySQL 服务到目前为止的连接次数,每个新连接都会自动加 1,本例中是 7344941。

MySQL 服务器的版本:本例中是“5.1.9-beta-log”,说明是 5.1.9 的测试版,如果是标准版,则会用 Standard 代替 Beta。

通过“help;”或者“\h”命令来显示帮助内容:通过“\c”命令来清除命令行 buffer。

在 mysql>提示符后面输入所要执行的的 SQL 语句,每个 SQL 语句以分号或者\g 结束,按回车键执行。

因为所有的数据都存储在数据库中,因此需要学习的第一个命令是创建数据库,语法如下所示:

CREATE DATABASE dbname

例如,创建数据库 test1,命令执行如下:

mysql> create database test1;

Query OK, 1 row affected (0.00 sec)

可以发现,执行完创建命令后,下面有一行提示“Query OK, 1 row affected (0.00 sec)”,这段提示可以分为 3 部分,“Query OK”表示上面的命令执行成功,读者可能奇怪,又不是执行查询操作,为什么显示查询成功?其实这是 MySQL 的一个特点,所有的 DDL 和 DML(不包括 SELECT)操作执行成功后都显示“Query OK”,这里理解为执行成功就可以了;“1 row

affected”表示操作只影响了数据库中一行的记录,“0.00 sec”则记录了操作执行的时间。这个时候,如果需要知道系统中都存在哪些数据库,可以用以下命令来查看:

1

2

3

4

5

6

7

8

9

10

11

mysql>showdatabases;

+--------------------+

|Database|

+--------------------+

|information_schema|

|cluster|

|mysql|

|test|

|test1|

+--------------------+

5rowsinset(0.00sec)

可以发现,在上面的列表中除了刚刚创建的 test1 外,还有另外 4 个数据库,它们都是安装MySQL 时系统自动创建的,其各自功能如下。

information_schema:主要存储了系统中的一些数据库对象信息。比如用户表信息、列信息、权限信息、字符集信息、分区信息等。

cluster:存储了系统的集群信息。

mysql:存储了系统的用户权限信息。

test:系统自动创建的测试数据库,任何用户都可以使用。

在查看了系统中已有的数据库后,可以用如下命令选择要操作的数据库:USE dbname

然后再用以下命令来查看 test1 数据库中创建的所有数据表:mysql> show tables;

2.删除数据库

删除数据库的语法很简单,如下所示:drop database dbname;

例如,要删除 test1 数据库可以使用以下语句:mysql> drop database test1;

注意:数据库删除后,下面的所有表数据都会全部删除,所以删除前一定要仔细检查并做好相应备份。

3.创建表

在数据库中创建一张表的基本语法如下:

1

2

3

4

5

CREATETABLEtablename(

column_name_1column_type_1constraints,

column_name_2column_type_2constraints,

……

column_name_ncolumn_type_nconstraints)

因为 MySQL 的表名是以目录的形式存在于磁盘上,所以表名的字符可以用任何目录名允许的字符。column_name 是列的名字,column_type 是列的数据类型,contraints 是这个列的约束条件。

例如,创建一个名称为 emp 的表。表中包括 3 个字段,ename(姓名),hiredate(雇用日期)、sal(薪水),字段类型分别为 varchar(10)、date、int(2):

1

2

3

4

5

mysql>create table emp(

ename varchar(10),

hiredate date,

sal decimal(10,2),deptno int(2));

Query OK,0rows affected(0.02sec)

表创建完毕后,如果需要查看一下表的定义,可以使用如下命令:DESC tablename

虽然 desc 命令可以查看表定义,但是其输出的信息还是不够全面,为了查看更全面的表定义信息,有时就需要通过查看创建表的 SQL 语句来得到,可以使用如下命令实现:mysql> show create table emp \G;

1

2

3

4

5

6

7

8

9

10

11

12

13

***************************1.row***************************

Table:emp

CreateTable:CREATETABLE'emp'(

'ename'varchar(20)DEFAULTNULL,

'hiredate'dateDEFAULTNULL,

'sal'decimal(10,2)DEFAULTNULL,

'deptno'int(2)DEFAULTNULL,

KEYidx_emp_ename' ('ename')

)ENGINE=InnoDBDEFAULTCHARSET=gbk

1rowinset(0.02sec)

ERROR:

Noqueryspecified

mysql>

从上面表的创建 SQL 语句中,除了可以看到表定义以外,还可以看到表的 engine(存储引擎)和 charset(字符集)等信息。“\G”选项的含义是使得记录能够按照字段竖着排列,对于内容比较长的记录更易于显示。

4.删除表

表的删除命令如下:DROP TABLE tablename

例如,要删除数据库 emp 可以使用以下命令:mysql> drop table emp;

5.修改表(重要)

对于已经创建好的表,尤其是已经有大量数据的表,如果需要对表做一些结构上的改变,我们可以先将表删除(drop),然后再按照新的表定义重建表。这样做没有问题,但是必然要做一些额外的工作,比如数据的重新加载。而且,如果有服务在访问表,也会对服务产生影响。因此,在大多数情况下,表结构的更改一般都使用alter table 语句,以下是一些常用的命令。

(1) 修改表类型,语法如下:

ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]

例如,修改表 emp 的 ename 字段定义,将 varchar(10)改为 varchar(20):mysql> alter table emp modify ename varchar(20);

(2) 增加表字段,语法如下:

ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]

例如,表 emp 上新增加字段 age,类型为 int(3):mysql> alter table emp add column age int(3);

(3)删除表字段,语法如下:

ALTER TABLE tablename DROP [COLUMN] col_name

例如,将字段 age 删除掉:mysql> alter table emp drop column age;

(4)字段改名,语法如下:

ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]

例如,将 age 改名为 age1,同时修改字段类型为 int(4):mysql> alter table emp change age age1 int(4) ;

注意:change 和 modify 都可以修改表的定义,不同的是 change 后面需要写两次列名,不方便。但是 change 的优点是可以修改列名称,modify 则不能。

(5)修改字段排列顺序。

前面介绍的的字段增加和修改语法(ADD/CNAHGE/MODIFY)中,都有一个可选项 first|after column_name,这个选项可以用来修改字段在表中的位置,默认 ADD 增加的新字段是加在表的最后位置,而 CHANGE/MODIFY 默认都不会改变字段的位置。

例如,将新增的字段 birth date 加在 ename 之后:mysql> alter table emp add birth date after ename;

修改字段 age,将它放在最前面:mysql> alter table emp modify age int(3) first;

注意:CHANGE/FIRST|AFTER COLUMN 这些关键字都属于 MySQL 在标准 SQL 上的扩展,在其他数据库上不一定适用。

(6)表改名,语法如下:ALTER TABLE tablename RENAME [TO] new_tablename

例如,将表 emp 改名为 emp1,命令如下:mysql> alter table emp rename emp1;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释mysql中DDL_详解MySQL第一篇—MySQL简要介绍及DDL语句 的相关文章

  • JHipster介绍:一个适用于Java和JavaScript的全栈框架

    JHipster介绍 Java和JavaScript的全栈框架 JHipster是一个用于生成混合Java和JavaScript应用程序的成熟框架 它支持你所喜爱的开发工具 并提供监控和其他开箱即用的管理功能 JHipster是一个历史悠久
  • 数据库中几种易混淆的字符串类型

    目录 1 char 2 nchar 3 varchar 4 nvarchar 总结 在数据库中有char varchar nchar nvarchar等几种类型 其中这四种非常类似 但表示的意义稍有不同 1 char char 是普通字符编
  • 解决cv2没有face模块

    人脸识别报错解决 AttributeError module cv2 cv2 has no attribute face 人脸识别报错如下 AttributeError module cv2 cv2 has no attribute fac
  • Scrapy介绍及入门

    一 Scrapy简介 Scrapy是一个为了爬取网站数据 提取结构性数据而编写的应用框架 可以应用在包括数据挖掘 信息处理或存储历史数据等一系列的程序中 其最初是为了页面抓取 更确切来说 网络抓取 所设计的 也可以应用在获取API所返回的数
  • 面试官:SPA(单页应用)首屏加载速度慢怎么解决?

    一 什么是首屏加载 首屏时间 First Contentful Paint 指的是浏览器从响应用户输入网址地址 到首屏内容渲染完成的时间 此时整个网页不一定要全部渲染完成 但需要展示当前视窗需要的内容 首屏加载可以说是用户体验中最重要的环节
  • wps没有卸载干净怎么解决_WPS云文档链接分享后对方没有访问权限?解决办法在此...

    互联网时代的办公 当然也离不开网络 当下盛行远程办公 大家可以随时随地办公 实时分享工作进度非常的方便 要想远程办公最离不开的应该就是云文档 只要登录同一个账号 大家可以共同编辑同一个文档 也可以分享给其他人来实现实时共享工作进度 以及稳当
  • 自从我这样撸代码以后,公司网页的浏览量提高了107%!

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯IVWEB团队 发表于云 社区专栏 作者 yangchunwen HTTP协议是前端性能乃至安全中一个非常重要的话题 最近在看 web性能权威指南 High Perform
  • Cisco Packet Tracer 实验:生成树配置

    实验目的 1 理解广播风暴的成因 2 掌握STP和RSTP原理及配置方法 实验内容 实验描述 学校为了开展计算机教学和网络办公 建立的一个计算机教室和一个校办公区 这两处的计算机网络通过两台交换机互联组成内部校园网 为了提高网络的可靠性 作
  • Navicat Premium 连接 MySQL 8.0 报错“1251”分析解决

    人闲太久 努力一下就以为是在拼命 一 问题 Navicat Premium 连接 MySQL 8 0 报错 1251 Client does not support authentication protocol requested by
  • 如何自定义sort函数中的比较函数

    在做剑指offer时 有一道题 题目描述 输入一个正整数数组 把数组里所有数字拼接起来排成一个数 打印能拼接出的所有数字中最小的一个 例如输入数组 3 32 321 则打印出这三个数字能排成的最小数字为321323 思路 自定义比较器 若a
  • TensorFlow在MNIST中的应用-无监督学习-自编码器(autoencoder)和encoder

    参考 TensorFlow技术解析与实战 TensorFlow上实现AutoEncoder自编码器 前面讲到的都是有监督学习 他的重要特征是数据都是有标记的 无标记的数据应该用什么样的网络模型来学习呢 这里用一个叫做 自编码网络 的网络模型
  • 同步和异步的区别

    同步 进程之间的关系不是相互排斥临界资源的关系 而是相互依赖的关系 进一步的说明 就是前一个进程的输出作为后一个进程的输入 当第一个进程没有输出时第二个进程必须等待 具有同步关系的一组并发进程相互发送的信息称为消息或事件 其中并发又有伪并发
  • c语言如何判断数据是否符合正态分布_统计学-1:判断数据是否满足正态分布

    1 正态分布的定义 正态分布 The Normal Distribution 假设一随机变量X服从一个期望为 方差为 的正态分布 概率密度函数为 则可记为 import 1 正态分布为什么常见 真正原因是中心极限定理 Central Lim
  • Linux 的性能调优的思路

    Linux操作系统是一个开源产品 也是一个开源软件的实践和应用平台 在这个平台下有无数的开源软件支撑 我们常见的apache tomcat mysql等 开源软件的最大理念是自由 开放 那么Linux作为一个开源平台 最终要实现的是通过这些
  • offset client style 之间的区别

    offset 返回一个指向最近的 closest 指包含层级上的最近 包含该元素的定位元素 如果没有定位的元素 则 offsetParent 为最近的 table元素对象或根元素 标准模式下为 html quirks 模式下为 body 父
  • 【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 文献来源 文献分享阅读 我用夸克网盘分享了
  • mysql alter字段,mysql alter 语句用法,添加、修改、删除字段

    mysql alter 语句用法 添加 修改 删除字段 主键 alter table tabelname add new field id int 5 unsigned default 0 not null auto increment a
  • Spark报错解决:org.apache.spark.SparkException: Task failed while writing rows.at org.apache.spark.sql.ex

    文章目录 报错信息 解决方法 报错信息 报错信息很长 这里截取了最先的一个错误信息 发现是写入文件时出错 Caused by org apache spark SparkException Job aborted due to stage
  • 数仓 面试题(离线)实战解答

    无意间翻到以前的数仓面试题 今天把它整理出来 方便你我他 数仓分层 为什么要对数仓进行分层 1 说说对数据仓库的理解 数据仓库是面向主题进行组织的 数据是集成的 不可更新的 随时间变化的的 数据仓库经历了这样三个阶段 简单报表阶段 数据集市

随机推荐

  • Go语言中如何在range循环中修改数组/切片内容

    在go语言中 我们经常会使用到range来帮助我们遍历一些数据 通常情况下都是查看操作多一些 但是当我们需要对其原地址上的内容进行变更时 通常都是使用 for i 0 i
  • mac下统计代码行数方法

    使用cloc工具统计 1 首先在终端执行命令下载cloc brew install cloc 没有brew的先下载brew 这个后面写一个 这里先占位 2 cloc使用 进入想要查询的项目文件夹 然后执行下面的命令查询 cloc 如下图所示
  • 【深入理解C++】调用父类的拷贝构造函数

    文章目录 1 默认的拷贝操作 2 调用父类的拷贝构造函数 3 用子类对象初始化父类对象 1 默认的拷贝操作 默认情况下 继承体系下类对象的拷贝是每个成员变量逐个拷贝 include
  • 下采样方法

    AntiAliasInterpolation2d代码解读 注记 最近在看一些视频驱动的代码时 常见一种特殊的下采样方法 故在这里记录一下 Class AntiAliasInterpolation2d nn Module 初始化 def in
  • 两个有序序列的中位数 (25 分)

    已知有两个等长的非降序序列S1 S2 设计函数求S1与S2并集的中位数 有序序列A 0 A 1 A N 1 的中位数指A N 1 2 的值 即第 N 1 2 个数 A 0 为第1个数 输入格式 输入分三行 第一行给出序列的公共长度N 0
  • Hive 中常用的查询语句解读及应用(分组、Join、排序语句)

    文章目录 Hive 中常用的查询语句 2 分组 2 1 Group By 语句 2 2 Having 语句 3 Join 语句 3 1 等值 Join 3 2 表的别名 3 3 内连接 3 4 左外连接 3 5 右外连接 3 6 满外连接
  • mysql数据库使用between and 的不包含右边界问题

    最近在公司经常支持业务部门数据提取 遇到了一个提取时间间隔的问题 想到了between and比较方便 之前经常用这个关键字 但是从来没思考过它的边界问题 所以趁这次研究了一下 废话不多说 直接上例子 select from user se
  • 【机器学习】支持向量机SVM及实例应用

    机器学习 支持向量机 1 分类超平面与最大间隔 2 对偶问题与拉格朗日乘子法 3 核函数 4 软间隔与正则化 5 实例应用 python使用支持向量机SVM 准备 数据集 导入SVM模块 步骤 1 读取数据集 2 划分训练样本与测试样本 3
  • cool使用es教程

    cool使用es教程 安装es8 1 0 将elasticsearch head文件运行至浏览器插件可以看到运行情况 安装ik分词器 将目录名称改名放置es安装目录plug目录 版本一定cool5 安装es8 1 0 官网 github下载
  • Flask03_路由传参

    encoding utf 8 1 app route 路由匹配 代表资源在服务器上的位置 1 路由 Flask根据http请求的url在路由表中和定义好的进行匹配 找到对应的函数处理这个请求 此过程保存一个url到函数的映射关系称之为路由r
  • (zxing.net)二维码Aztec的简介、实现与解码

    一 简介 Aztec Code是1995年 由Hand HeldProducts公司的Dr Andrew Longacre设计 它是一种高容量的二维条形码格式 它可以对ASCII和扩展ASCII码进行编码 当使用最高容量和25 的纠错级别的
  • pyqt多窗口设计(2步实现,嘴对嘴教学,源码复制可用)

    本文涉及 PyQt5 Qt Designer PyCharm 目录 先看下完成效果 步骤1 用Qt Designer创建2个窗体 步骤2 将子窗体和主窗体上的按钮控件进行关联 完整代码 先看下完成效果 视频里我只设计了1个主窗口和1个子窗口
  • MyBatis(2):MyBatis标签以及对应的属性用法讲解

    通过上一章的讲解 大家应该对MyByatis的基本用法有了一定的了解 这一章主要是讲一下MyBatis的各种标签以及对应的属性 它们的用法以及用的时候应该注意一些什么 下面的讲解时结合当前主流框架 Spring Spring MVC MyB
  • linux 给文件替换字符串/替换内容/替换某行 (shell,sed)

    本文是要讲linux 不打开文档 文件的情况下 替换文本内容 打开文档 在文档 文件内替换内容的 可以用vim 可参考这篇文章vim 替换文本 话题相关 linux 文件替换字符串 sed 字符串替换 shell 文件替换某行 linux
  • Blender-烘焙动画,解除约束父子级,导入UE4

    问题1 烘焙动画 解除约束父子级 导入UE4 注意 blender 里 走路动画1 32帧 第1和32帧重复姿势 如果播放选择1 32帧 会因为重复播放而卡最后一帧 所以要流畅播放 在blender里应该设置为1 31帧 来查看预览 但是导
  • hadoop无法启动 INFO ipc.Client: Retrying connect to server

    18 01 07 02 05 32 INFO ipc Client Retrying connect to server master 192 168 157 10 9000 Already tried 0 time s retry pol
  • QT入门Containers之QToolBox

    目录 一 QToolBox界面相关 1 布局介绍 2 界面测试 3 添加分组测试 4 添加图标 5 添加展开缩进不同效果图标 二 Demo展示 此文为作者原创 创作不易 转载请标明出处 一 QToolBox界面相关 1 布局介绍 先从界面拖
  • UNITY获取物体速度的方法

    unity中如果用navmesh 里面有内置的方法可以获取速度 其他目前发现好像只能自己算了 float Speed curpos gameObject transform position 当前点 float speed Vector3
  • JoyStick Shield连接Nokia 5110--Arduino

    SpaceTrash游戏是一个简单的射击游戏 您可以在其中控制宇宙飞船 并通过移动或爆破 使用激光 来避免漂浮在周围的小行星的碰撞 该游戏是u8g2图形库附带的示例 该图形库通常用于连接具有SPI或I2C协议的各种单色8位显示器 对于此游戏
  • 解释mysql中DDL_详解MySQL第一篇—MySQL简要介绍及DDL语句

    背景 近几年 开源数据库逐渐流行起来 由于具有免费使用 配置简单 稳定性好 性能优良等优点 开源数据库在中低端应用上占据了很大的市场份额 而 MySQL 正是开源数据库中的杰出代表 MySQL 数据库目前分为社区版 Community Se