数据库学习之MySQL (二十三)—— DDL(一) 概述

前言 ´・ᴗ・`

  • 本节主要讲了库 表等的创建 修改 以及删除
  • 本篇内容将会帮助你学习…
    • 0 了解DDL概念 为啥叫做数据定义语言
    • 1 创建 修改 删除 库
    • 2 创建 修改 删除 表
    • 3
      CREATE 创建
      ALTER 修改
      DROP 删除
    • 4 如何利用DQL语句 复制表

DDL

DDL data definition language
这个名字起的很有道理 事实上一个表代表着我们现实生活的一个关系(relation),比如女神的男朋友是谁,比如员工的入职时间与他的奖金率关系是什么。。。这些现实 具体的关系转成抽象的表 就需要定义 definition

言归正传 核心内容就是创建 修改 删除 表 以及表的集合——库

库的操作

我们打一下代码就知道了 依次执行每一行:

CREATE DATABASE IF NOT EXISTS db1;

RENAME DATABASE db1 TO db2;

DROP DATABASE db2;
DROP DATABASE IF EXISTS [旧表名];
CREATE DATABASE [新表名];

这句IF NOT EXISTS 很好 (还记得在21节 我们提到过EXISTS )
就是指 如果没有db1 我们就创建一个
有的话我们还得考虑一下(别把数据弄没了)

第二行就是改个名字

第三句就是删除
对数据库的更改没啥好讲的其实
一般 我们想创立一个新的数据库 而且不像发生重名错误 也不在乎过去的数据 我们就这么写:

DROP DATABASE IF EXISTS [库名];
CREATE DATABASE [库名];
# 安全创造新的库

USE [库名]; # 库内再操作表的问题
DROP TABLE IF EXISTS [表名];
CREATE TABLE [表名];

值得注意的是 创建 修改 删除表 用的关键字完全一样

表的创建

当然 别忘了表是拥有栏位(列)属性的 你就这么Create 一个表不加参数 真的很尴尬
我们来看看一个表创建是咋样的:

CREATE TABLE `departments` (
  `department_id`   INT(4)     NOT NULL AUTO_INCREMENT,
  `department_name` VARCHAR(3) DEFAULT NULL,
  `manager_id`      INT(6)     DEFAULT NULL,
  `location_id`     INT(4)     DEFAULT NULL,
)
  • 第一列 栏位 属性名称
  • 第二列 指示数据类型 后面会有专题讲数据类型
  • 第三列 指示约束 同样后面会有专题讲
    约束(constrain)很好理解 客观世界的数据不是乱来的 比如性别属性 只有“男”“女”,
    这里添加约束就是为了防止不靠谱的事情发生
    严重来说 XSS 攻击 也就是sql注入攻击

XSS攻击:把js代码通过POST传到服务器数据库 然后数据库再返还给用户客户端的时候 js代码可以在浏览器运行 由于是服务器返回的数据 一般安全审查不严格 这样js代码可能拥有高权限 对你的电脑动手动脚:)

所以网络安全 要从数据库抓起(滑稽)

这里我们讲几个常见的数据类型 给你一个感性认识:

代码 解释
int 整形
double float 浮点型
char 固定长度的字符串
varchar 可变长度的字符串
text 较长的字符串
date 日期
time 时间
timestamp 时间戳

其中 double(5,2) 意思 5位数字 2位小数 比如999.99
然后其他很类似常见的编程语言比如C js等 不细讲了
varchar char text各有各的适用场合 都比较常见

然后约束大致有这些:

代码 解释 英文 中文
DEFAULT NULL 默认值为空 default 默认值
NOT not 否定
UNIQUE 值唯一 unique 独一无二的
AUTO_INCREMENT 自增 默认步长为1 auto increase 自动 增长
PRIMARY KEY 主键 primary key 主要的键位
FOREIGN KEY 外键 foreign key 外部键位

注意

  • 这些修饰符是可以叠加的 比如默认值为非空:
    NOT NULL (省略了DEFAULT关键字 一个效果)
  • auto increment的步长是可以更改的
    SET auto_increment_increment=3#步长为3
    不过更改了这个“环境变量”所有表的步长都相同了 有点坑 不建议
  • auto increment工作方式:我想实现id从10开始 一直11 12 13 …
    可以先插入INSERT一个id=10的数据 (上节教过了
    然后后面insert其他数据的时候 id那边填写NULL 不用写11 12 13 … 表自动帮你生成

表的结构

所谓结构 就是我们之前指定的 属性名称 数据类型加上约束
在这里插入图片描述
所以有些人说 修改“表” 其实修改的是表的结构
那么如何检查 我们create的表 它的结构是否称心如意呢?
常规方法:

DESC [表名]

这个除了外键约束 还有我们自定义的键 都能查出来

问题来了 键 key 是什么?
本质是列 只不过 我们选定一列 或者多个列 然后赋予一些属性
比如 主键PRIMARY KEY 就是值唯一 非空
还有外键 当然也是值唯一的 而且与别的表有联系
还有UNIQUE键 就是值唯一的

将约束那一节 我们会深入介绍 如何定义键, 数据定义语言 干的就是定义的活!

键 也称为索引(index) 其实是一个东西 只不过找数据的时候说 通过索引 放东西的时候说是键
那么还有一句命令可以看所有的索引(键 包含主键 外键 还有我们自己定义的键)

SHOW INDEX FROM [表名]

在这里插入图片描述
上面这两个命令可以结合起来看结果 综合判断

表的修改

修改(ALTER) 的是结构 就涉及到列属性:

  • 添加列属性
    给stu表添加classname列:
    ALTER TABLE stu ADD (classname varchar(100));
  • 修改列属性名称
    修改stu表的gender列 把名称改为sex:
    ALTER TABLE stu change gender sex CHAR(2);
  • 修改数据类型或者约束 (数据类型 约束 都是用来修饰列属性的 所以修改方式相同)
    修改stu表的gender列 列类型为CHAR(2):
    ALTER TABLE stu MODIFY gender CHAR(2);
  • 删除列属性
    删除stu表的classname列:
    ALTER TABLE stu DROP classname;

总之就是
alter table [表名] add|drop|modify|change column [列名] [列类型] [约束]
这么写准没错

表的复制

  • 复制表的结构
    说白了就是列属性+数据类型+约束
CREATE TABLE [复制出来的表] LIKE [被复制的表]
  • 复制所有(结构+数据)
CREATE TABLE [复制出来的表] SELECT * FROM [被复制的表];
  • 复制部分数据 结合DQL 你将无所不能
    我们查询出来的就是个表+数据 如果create一个副本存储它 也就是加一个CREATE TABLE 【复制出来的表】那样的话我们可以这么写:
CREATE TABLE [复制出来的表] 
SELECT [column]
FROM [table1] AS [table1_name]
[join type] JOIN [table2] AS [table2_name]
ON [join condition]
WHERE [condition]
GROUP BY [grouping fields]
HAVING [grouping condition]
ORDER BY [order fields]
LIMIT [offset] [size]

牛掰吧?:)
DQL为啥重要 因为DQL出来的结果放到哪里都可以用!

总结 ´◡`

这一节我们感性的认识了一下DDL语言 下一节我们专门看看 数据类型的具体内容:
下一站:数据库学习之MySQL (二十四)—— DDL(二)数据类型

另外,

  • 想学习数据库嘛? 不妨从MySQL入手
    MySQL专栏

  • python这么火 想要深入学习python 玩一下简单的应用嘛?可以看我专栏 还在持续更新中哦:
    python应用

  • 小孩子才做选择 大人全都要!对后端感兴趣吗?收下它吧:)
    手把手带你学后端(服务端)

  • 谢谢大佬支持! 萌新有礼了:)
    在这里插入图片描述

发布了39 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43178828/article/details/104253228
今日推荐