MySQL 8 DBA基础教程
上QQ阅读APP看书,第一时间看更新

4.8 经典习题与面试题

1.经典习题

在shop数据库中创建一个购物车表cart,内容如表4-3所示。

表4-3 cart表结构

按照下列要求进行表操作:

(1)将name字段的数据改为VARCHAR(30),且保留非空约束。

(2)将sum_money字段的位置改到count字段的前面。

(3)将sum_money字段改名为total_money。

(4)在表中增加expiredays字段,数据类型为VARCHAR(4),表示是否已过期。

(5)删除count字段。

(6)将cart表的存储引擎更改为MyISAM类型。

(7)将cart表名更改为shoppingCart。

2.面试题及解答

(1)修改数据表的字段名称之后,会有部分约束条件丢失,原因何在?

在修改数据表的字段名称时,如果想保持原来的约束条件,一定要把原来的约束条件带上,否则就会丢失。

(2)为什么自增字段不能设置默认值?

一个表只能有一个自增字段,可以是任何整数类型,自增字段没有默认值。在没有设置初值的情况下,自增字段从1开始增加,插入记录时,不设置自增字段的值。自增字段处插入的值为NULL或者为0时,该字段的值在上一条记录的基础上加1。如果插入的记录中该字段的值为8,且下一条记录没有指定值,该字段的值就在此基础上加1。

(3)如何设置外键?

子表的外键必须依赖父表的某个字段,因此父表必须先于子表建立,而且父表中的被依赖字段必须是主键或者组合主键中的一个。如果不满足这些条件,就不能成功创建子表。

(4)如何删除父表?

删除父表是很麻烦的过程,因为子表的外键约束限制着父表的删除。有两种方法可以解决这个问题。第一种方法,先删除子表,再删除父表。这样做完全可以达到删除父表的目的,但是必须牺牲子表。第二种方法,先删除子表的外键约束,再删除父表。