写点什么

【黄啊码】MySQL 入门—2、使用数据定义语言(DDL)操作数据库

作者:黄啊码
  • 2022 年 8 月 04 日
  • 本文字数:2694 字

    阅读完需:约 9 分钟

【黄啊码】MySQL入门—2、使用数据定义语言(DDL)操作数据库

大家好!我是黄啊码,上一节的知识点你了解多少了,掌握了多少了,别偷懒哦,今天我们来将就爱你改数据定义语言,说得高级点就是 Data Definition Language,简称 DDL。

很多同学对 DDL 的了解都是在于数据库的增、删、改、查,那下边我们就具体来讲讲。

1、创建删除数据库

CREATE DATABASE user; // 创建一个名为 user 的数据库

DROP DATABASE user; // 删除一个名为 user 的数据库

2.对数据表进行定义

创建表结构的语法是这样的:

CREATE TABLE table_name

比如我们在用户数据库中创建 user_info 这个表

CREATE TABLE user_info (

user_id int(11) NOT NULL AUTO_INCREMENT,

user_name varchar(255) NOT NULL

);

如上,我们创建了一个叫做 user_info 的表, 里面有两个字段,一个是 user_id ,它是 int 类型,另一个 user_name 字段是 varchar(255)类型。这两个字段都不为空,且 user_id 是递增的,而其中的 not null 表示非空,切记语句最后要加;【千万要记住】AUTO_INCREMENT 代表主键自动增长。有刚入门的同学说什么是主键?>>文章后边我会单纯讲述,别着急。

然而在实际工作中,我们肯定很少写过 DDL,这里啊码用 Navicat 代替,它是一个数据库管理和设计工具,跨平台,支持很多种数据库管理软件,比如 MySQL、Oracle、MariaDB 等,当然你有更好、更符合自己编码的工具也是可以的,不做强制。

我们还可对 user_name 字段进行索引,索引类型为 Unique。使用 Navicat 设置如下:

相信这时候很多同学又会问我,什么是索引,额,这个如果展开出来会比较长,我们放在后边单独一节课讲就行,啊码只告诉你,索引是把双刃剑,用得好,查得爽,用不好,鱿鱼炒。


3、操作表结构

在创建表结构之后,我们还可以对表结构进行修改,虽然直接使用 Navicat 进行操作,但对于刚入门的你,有必要了解如何使用 DDL 命令来完成表结构的修改。

1、添加字段,比如我在数据表中添加一个 age 字段,类型为 int(11)

ALTER TABLE user_info ADD (age int(11));

2、修改字段名,将 age 字段改成 user_age

ALTER TABLE user_info RENAME COLUMN age to user_age

3、修改字段的数据类型,将 user_age 的数据类型设置为 float(3,1)

ALTER TABLE user_age MODIFY user_age float(3,1);

我看到不少教程写成这样

ALTER TABLE user_age MODIFY user_age (float(3,1));

然后执行起来就芭比 Q 了

4、 删除字段, 删除刚才添加的 user_age 字段

ALTER TABLE user_info DROP COLUMN user_age;

好了,到这里,我们就开始讲讲上边所说的数据库的常见约束:

主键约束

表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

作用:

1)保证实体的完整性;

2)加快数据库的操作速度

3)在表中添加新记录时,DBMS 会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。

4)DBMS 自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。

外键约束

确保了表与表之间引用的完整性。一个表中的外键对应另一张表的主键。外键可以是重复的,也可以为空。比如 user_id 在 user_info 表中是主键,如果你想设置一个成绩表即 user_score,就可以在 user_score 中设置 user_id 为外键,关联到 user_info 表中。

唯一性约束

唯一性约束表明了字段在表中的数值是唯一的,即使我们已经有了主键,还可以对其他字段进行唯一性约束。需要注意的是,唯一性约束和普通索引(NORMAL INDEX)之间是有区别的。唯一性约束相当于创建了一个约束和普通索引,目的是保证字段的正确性,而普通索引只是提升数据检索的速度,并不对字段的唯一性进行约束。

NOT NULL 约束。对字段定义了 NOT NULL,即表明该字段不应为空,必须有取值。

DEFAULT,表明了字段的默认值。如果在插入数据的时候,这个字段没有取值,就设置为默认值。比如我们将 user 中的身高 height 字段的取值默认设置为 0.00,即 DEFAULT 0.00。

CHECK 约束,用来检查特定字段取值范围的有效性,CHECK 约束的结果不能为 FALSE,比如我们可以对身高 height 的数值进行 CHECK 约束,必须≥0,且<300,但在常见的数据库操作中,我们很多时候都会把这类约束放在前后端一起结合验证

数据表设计原则及三范式

第一范式(1NF)

每一列属性都是不可再分的属性值,确保每一列的原子性

合理的根据实际业务数据需求来决定属性,合并相似或相同的列,避免冗余

比如你弄了一个用户表,但有个列叫做身体部位,可身体部位还能继续分,比如五官之类的。

第二范式(2NF)

需要确保数据库表中的每一列都和主键相关,如果是联合主键,则需要和所有主键均相关而不能只与主键和某一部分相关

在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中

这个就好理解了,在我们生活中,我们喜欢分类收纳,就跟垃圾分类一样,你总不能湿垃圾和干垃圾丢在一起吧【我们只说常规操作,不要杠哈】

第三范式(3NF)

确保数据表一个记录中的数据都和主键直接相关,而不是间接相关,不能存在传递关系

属性不依赖于其他非主属性

假设有个表叫做班级表,学号为主键,它存在 学号 --> 班级编号 --> 班级信息 这么一个主键学号与班级信息的传递关系,不符合第三范式

【解决办法】(1)提取学生表;(2)提取班级表;

  学生肯定在某一个班级中,所以班级编号可以作为学号(主键)的一个直接关联属性,但班级的其他信息应该放在以班级编号为主键的表中,即可符合第三范式。

遵循范式的优缺点

通过以上的了解,可以发现,范式规则有如下特点

结构合理,表含义容易理解及区分

冗余较小

但性能有所降低,多表查询比单表效率低下

总结:数据库表的设计,可以借鉴三大范式的指导办法,同时也需要依赖于实际业务需求,良好的数据库结构不仅可以提高开发人员的开发效率,降低开发难度,还可以提高数据库查询效率,给程序增加可变弹性,当冗余的代价小于查询性能降低的代价时,就应该考虑冗余实现。

对于职场老鸟,三大范式我们早就滚瓜烂熟了吧,那啊码在这里整理了一套常见使用优化方法:

数据表应尽量简单可复用。怎么说呢:简单指的是用更少的表、更少的字段、更少的联合主键字段来完成数据表的设计。可复用则是通过主键、外键的使用来增强数据表之间的复用率。因为一个主键可以理解是一张表的代表。键设计得越多,证明它们之间的利用率越高。

好了,今天的课程稍微有一丢丢多,大家要好好消化一下,多举一反三,有问题的留个言,别忘了一键三连,下次我们还会再见!

我是黄啊码,码字的码,退。。。退。。。退。。。朝!

发布于: 刚刚阅读数: 4
用户头像

黄啊码

关注

还未添加个人签名 2022.01.17 加入

要给工作加点瓦,编程电脑找啊码。开发工程师兼产品狗一枚,不定时分享技术知识,让小白也学懂得代码。 技术风格:喜欢以幽默风趣的形式讲解技术知识

评论

发布
暂无评论
【黄啊码】MySQL入门—2、使用数据定义语言(DDL)操作数据库_MySQL_黄啊码_InfoQ写作社区