前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【黄啊码】MySQL入门—2、使用数据定义语言(DDL)操作数据库

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

原创
作者头像
黄啊码
修改2022-07-13 14:53:40
5170
修改2022-07-13 14:53:40
举报

大家好!我是黄啊码,上一节的知识点你了解多少了,掌握了多少了,别偷懒哦,今天我们来将就爱你改数据定义语言,说得高级点就是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)提取班级表;

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

遵循范式的优缺点

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

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

冗余较小

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

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

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

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档