前言 ´・ᴗ・`
- 本节主要讲了库 表等的创建 修改 以及删除
- 本篇内容将会帮助你学习…
- 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应用 -
小孩子才做选择 大人全都要!对后端感兴趣吗?收下它吧:)
手把手带你学后端(服务端) -
谢谢大佬支持! 萌新有礼了:)