DDL 的基础语法,如何定义数据库和数据表

本文详细介绍了数据库设计的基本概念,包括DDL语句用于创建和修改数据库及表结构,如主键、外键、唯一性约束等。此外,还讨论了数据表设计的原则和SQL查询的执行顺序,强调了数据表的简洁性和复用性在数据库设计中的重要性。

DDL:定义了数据库的结构和数据表的结构。

对数据库进行定义:
creat database lol;
drop database lol;

对数据表进行定义:
CREATE TABLE [table_name](字段名 数据类型,......)

eg:

DROP TABLE IF EXISTS `player`;
CREATE TABLE `player`  (
  `player_id` int(11) NOT NULL AUTO_INCREMENT,
  `team_id` int(11) NOT NULL,
  `player_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

//CHARACTER SET utf8 :设置数据库的默认编码为utf8,utf8中间不要"-";

//COLLATE utf8_general_ci:数据库校对规则。ci是case insensitive的缩写,意思是大小写不敏感;相对的是cs,即case sensitive,大小写敏感;还有一种是utf8_bin,是将字符串中的每一个字符用二进制数据存储,区分大小写。
  `height` float(3, 2) NULL DEFAULT 0.00,
  PRIMARY KEY (`player_id`) USING BTREE,
  UNIQUE INDEX `player_name`(`player_name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

里面的数据表和字段都使用了反引号,这是为了避免它们的名称与 MySQL 保留字段相同,对数据表和字段名称都加上了反引号。
其中 player_name 字段的字符编码是 utf8,排序规则是utf8_general_ci,代表对大小写不敏感,如果设置为utf8_bin,代表对大小写敏感,还有许多其他排序规则这里不进行介绍。
因为 player_id 设置为了主键,因此在 DDL 中使用PRIMARY KEY进行规定,同时索引方法采用 BTREE。
在设置字段索引时,我们可以设置为UNIQUE INDEX(唯一索引),也可以设置为其他索引方式,比如NORMAL INDEX(普通索引),这里我们采用UNIQUE INDEX。唯一索引和普通索引的区别在于它对字段进行了唯一性的约束。
在索引方式上,你可以选择BTREE或者HASH,这里采用了BTREE方法进行索引。


修改表结构

1. 添加字段,比如我在数据表中添加一个 age 字段,类型为int(11)
alter table player add (age int(11));
2. 修改字段名,将 age 字段改成player_age
ALTER TABLE player RENAME COLUMN age to player_age
3. 修改字段的数据类型,将player_age的数据类型设置为float(3,1)
ALTER TABLE player MODIFY (player_age float(3,1));
4. 删除字段, 删除刚才添加的player_age字段
ALTER TABLE player DROP COLUMN player_age;


数据表的常见约束

1. 主键约束:

主键起的作用是唯一标识一条记录,不能重复,不能为空,即 UNIQUE+NOT NULL。
一个数据表的主键只能有一个。主键可以是一个字段,也可以由多个字段复合组成(多个字段一起组合实现唯一性)。

2. 外键约束:

外键确保了表与表之间引用的完整性。一个表中的外键对应另一张表的主键或是唯一性约束的字段。外键可以是重复的,也可以为空。(主表外键被参考时,主表记录不允许被删除)。

 

3. 字段约束:

(1)唯一性约束:数值唯一
唯一性约束表明了字段在表中的数值是唯一的,即使我们已经有了主键,还可以对其他字段进行唯一性约束。
唯一性约束和普通索引之间是有区别的。唯一性约束相当于创建了一个约束和普通索引,目的是保证字段的正确性,而普通索引只是提升数据检索的速度,并不对字段的唯一性进行约束。
(2)NOT NULL 约束:不为空
对字段定义了 NOT NULL,即表明该字段不应为空,必须有取值。
(3)DEFAULT 约束:默认值
DEFAULT,表明了字段的默认值。如果在插入数据的时候,这个字段没有取值,就设置为默认值。
比如将身高 height 字段的取值默认设置为 0.00,即DEFAULT 0.00。
(4)CHECK 约束:限定数据范围
用来检查特定字段取值范围的有效性,CHECK 约束的结果不能为 FALSE。
比如我们可以对身高 height 的数值进行 CHECK 约束,必须≥0,且<3,即CHECK(height>=0 AND height<3)。


设计数据表的原则:“三少一多”

1. 数据表的个数越少越好
RDBMS 的核心在于对实体和联系的定义,也就是 E-R 图,数据表越少,证明实体和联系设计得越简洁,既方便理解又方便操作。
2. 数据表中的字段个数越少越好
字段个数越多,数据冗余的可能性越大。设置字段个数少的前提是各个字段相互独立,而不是某个字段的取值可以由其他字段计算出来。
当然字段个数少是相对的,我们通常会在数据冗余和检索效率中进行平衡。
3. 数据表中联合主键的字段个数越少越好
设置主键是为了确定唯一性,当一个字段无法确定唯一性的时候,就需要采用联合主键的方式(也就是用多个字段来定义一个主键)。
联合主键中的字段越多,占用的索引空间越大,不仅会加大理解难度,还会增加运行时间和索引空间,因此联合主键的字段个数越少越好。
4. 使用主键和外键越多越好
数据库的设计实际上就是定义各种表,以及各种字段之间的关系。这些关系越多,证明这些实体之间的冗余度越低,利用度越高。
这样做的好处在于不仅保证了数据表之间的独立性,还能提升相互之间的关联使用率。
“三少一多”原则的核心就是简单可复用。简单指的是用更少的表、更少的字段、更少的联合主键字段来完成数据表的设计。
可复用则是通过主键、外键的使用来增强数据表之间的复用率。因为一个主键可以理解是一张表的代表。键设计得越多,证明它们之间的利用率越高。

SELECT 的执行顺序:

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...

SELECT 语句的执行顺序(在 MySQL 和 Oracle 中,SELECT 执行顺序基本相同)::
FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT

在 SELECT 语句执行这些步骤的时候,每个步骤都会产生一个虚拟表,然后将这个虚拟表传入下一个步骤中作为输入。
需要注意的是,这些步骤隐含在 SQL 的执行过程中,对于我们来说是不可见的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值