欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《MySQL入门很简单》学习笔记(6)之第6章创建、修改和删除表(关键词:数据库/MySQL/创建表/修改表/删除表)

程序员文章站 2022-04-04 08:33:28
...

第6章 创建、修改和删除表

    表是数据库存储数据的基本单位。
    一个表包含若干字段或记录。
    表的操作包括创建新表、修改表和删除表。
    本章将讲解如何在数据库中操作表,包括:
        创建表的方法;
        表的完整性约束条件;
        查看表结构的方法;
        修改表的方法;
        删除表的方法。

6.1 创建表

    MySQL中,创建表是通过SQL语句CREATE TABLE实现的。
    语法:
        CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件],
                          属性名 数据类型 [完整性约束条件],
                          ...
                          属性名 数据类型
                          );
    说明:
    “表名”参数表示所要创建的表的名称;
    “属性名”参数表示表中字段的名称;
    “数据类型”参数指定字段的数据类型;
    “完整性约束条件”参数指定字段的某些特殊约束条件。

    注意:
    使用CREATE TABLE语句创建表时,首先要使用USE语句选择数据库。
    定义时,字母大小写均可,各属性之间用逗号隔开,最后一个属性后不需要加逗号。
    例如:
    CREATE TABLE example0(id INT,
                          name VARCHAR(20),
                          sex BOOLEAN
                          );

    完整性约束条件是对字段进行限制。要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库将不执行用户的操作。目的是为了保证数据库中数据的完整性。

《MySQL入门很简单》学习笔记(6)之第6章创建、修改和删除表(关键词:数据库/MySQL/创建表/修改表/删除表)

6.1.2 设置表的主键

主键能唯一地标识该表中的每条信息。
主键用来标志每个记录,每个记录的主键值都不同。
设置表的主键指在创建表时,设置表的某个字段为该表的主键。
主键的主要目的是帮助MySQL以最快的速度查找到表中的某一条信息。
主键必须满足的条件必须是唯一的,表中任意两条记录的主键字段的值不能相同;主键的值是非空值。
主键可以是单一的字段,也可以是多个字段的组合。
1.单字段主键
    语法规则:
    属性名 数据类型 PRIMARY KEY
    例子见书上。
2.多字段主键
    主键是由多个属性组合而成时,在属性定义完之后统一设置主键。
    语法:
        CREATE TABLE example2(stu_id INT,
                              course_id INT,
                              grade FLOAT,
                              PRIMARY KEY(stu_id, course_id)
                              );

6.1.3 设置表的外键

    如果字段sno是一个表A的属性,且依赖于表B的主键,那么,称表B为父表,表A为子表,sno为表A的外键。
    通过字段sno将父表B和子表A建立关联关系。
    设置表的外键指在创建表设置某个字段为外键。
    设置外键的原则是,必须依赖于数据库中已存在的父表的主键;外键可以为空值。
    外键的作用:
    建立该表与其父表的关联关系。父表中删除某条信息时,子表中对应的信息也必须有相应的改变。     
    语法规则:
        CONSTRAINT 外键别名 FOREIGN KEY(属性1.1, 属性1.2, ..., 属性1.n)
                   REFERENCES 表名(属性 2.1, 属性2.2, ..., 属性2.n)
    具体例子见书上。
    说明:
    “外键别名”参数是为外键的代号;
    “属性1”参数列表是子表中设置的外键;
    “表名”参数是指父表的名称;
    “属性2”参数列表是父表的主键。
    注意:
    子表的外键关联的必须是父表的主键,而且,数据类型必须一致。

6.1.4 设置表的非空约束

    非空性是指字段的值不能为空值(NULL)。非空约束将保证所有记录中该字段都有值。如果新插入的记录中,该字段为空值,则数据库系统会报错。
    设置表的非空约束是指在创建表时为表的某些特殊字段加上NOT NULL约束条件。
    语法:
    属性名 数据类型 NOT NULL
    具体例子见书上。

6.1.5 设置表的唯一性约束

    唯一性是指所有记录中该字段的值不能重复出现。
    设置表的唯一性约束是指在创建表时,为表的某些特殊字段加上UNIQUE约束条件。
    唯一性约束将保证所有记录中该字段的值不能重复出现。
    语法:
        属性名 数据类型 UNIQUE

6.1.6 设置表的属性值字典增加

    AUTO_INCREMENT是MySQL数据库中一个特殊的约束条件。
    主要用于为表中插入的新纪录自动生成唯一的ID。
    一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。
    语法:
    属性名 数据类型 AUTO_INCREMENT
    技巧:
    通常情况下,AUTO_INCREMENT都是作为ID字段的约束条件,而且将ID字段作为表的主键。

6.1.7 设置表的属性的默认值

    创建表时,可以指定表中字段的默认值。
    如果插入一条新的记录时,没有为这个字段赋值,那么,数据库系统会自动为这个字段插入默认值。
    语法规则:
        属性名 数据类型 DEFAULT 默认值
    具体例子见书上。
    如果没有使用DEFAULT关键字指定字段的默认值,也没有指定字段为非空,那么字段的默认值为空(NULL)。

6.2 查看表结构

    查看表结构是指查看数据库中已存在的表的定义。
    包括:
        DESCRIBE语句;
        SHOW CREATE TABLE语句。
    说明:
    可以查看表的字段名、字段的数据类型、完整性约束条件等。     

6.2.1 查看表基本结构语句DESCRIBE

    语法形式:
        DESCRIBE(或DESC) 表名;
    例如:
        DESC example1;

6.2.2 查看表详细结构语句SHOW CREATE TABLE

    可以查看:
    表的字段名;
    字段的数据类型;
    完整性约束条件;
    表默认的存储引擎;
    字符编码。
    语法形式:
        SHOW CREATE TABLE 表名;
    详细例子见书上。

6.3 修改表

    修改表是指修改数据库中已存在的表的定义。
    MySQL中通过ALTER TABLE来修改表。
    修改表包括:
    修改表名;
    修改字段数据类型;
    修改字段名;
    增加字段;
    删除字段;
    修改字段的排列位置;
    更改默认的存储引擎;
    删除表的外键约束等。

6.3.1 修改表名

    语法形式:
    ALTER TABLE 旧表名 RENAME [TO] 新表名;
    说明:
    TO参数是可选参数,是否在语句中出现不会影响语句的执行。

6.3.2 修改字段的数据类型

    语法:
        ALTER TABLE 表名 MODIFY 属性名 数据类型;
        说明:
        “表名”指所要修改的表的名称;
        “属性名”指需要修改的字段的名称;
        “数据类型”指修改后的新数据类型。

6.3.3 修改字段名

    语法:
        ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型;
    1.只修改字段名
    2.修改字段名和字段数据类型
        说明:MODIFY与CHANGE的区别详细见书上。

6.3.4 增加字段

    语法:
        ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束条件] [FIRST| AFTER 属性名2];
    说明:
        “属性名1”参数指需要增加的字段的名称;
        “数据类型”参数指新增加字段的数据类型;
        “完整性约束条件”是可选参数,用来设置新增字段的完整性约束条件;
        “FIRST”参数也是可选参数,作用是将新增字段设置为表的第一个字段;
        “AFTER 属性名2”参数也是可选参数,作用是将新增字段添加到“属性名2”所指的字段后。
        如果执行的SQL语句中没有“FIRST”“AFTER 属性名”参数指定新增字段的位置,新增的字段默认为表的最后一个字段。
    1.增加无完整性约束条件的字段
    一个完整的字段包括字段名、数据类型、完整性约束条件。
    增加字段一般包括上述内容。
    根据实际情况,一些字段可以不用完整性约束条件进行约束。
    例如:
        ALTER TABLE user ADD phone VARCHAR(20);
    2.增加有完整性约束条件的字段
    增加字段时,可以设置该字段的完整性约束条件,如设置字段是否为空(NULL)、是否为主外键(Key)、默认值(Default)、是否为自增类型等约束条件。
    例如:
        ALTER TABLE user ADD age INT(4) NOT NULL;
    注意:
    增加字段时,如果能够加上完整性约束条件,一定要加上。这样可以保证字段的安全性,提高整个表的数据的安全性。
    3.表的第一个位置增加字段
    默认情况下,新增字段为表的最后一个字段。如果加上FIRST参数,则可以将新增字段设置为表的第一个字段。
    例如:
        ALTER TABLE user ADD num INT(8) PRIMARY KEY FIRST;      
    4.表的指定位置之后增加字段
    在新增字段时,由于特殊原因需要在表的指定位置增加字段。如果加上“AFTER 属性名2”参数,那么新增的字段插入在“属性名2”后面。
    例如:
    ALTER TABLE user ADD address VARCHAR(30) NOT NULL AFTER phone;

6.3.5 删除字段

    删除字段是指删除已经定义好的表中的某个字段。在表创建完之后,如果发现某个字段需要删除,可以采用将整个表都删除,然后重新创建一张表的做法。
    语法:
    ALTER TABLE 表名 DROP 属性名;
    说明:
    “属性名”参数指需要从表中删除的字段的名称。
    例如:
    ALTER TABLE user DROP id;

6.3.6 修改字段的排列位置

    语法:
        ALTER TABLE 表名 MODIFY 属性名1 数据类型 FIRST | AFTER 属性名2;
    说明:
    “属性名1”参数指需要修改位置的字段的名称;
    “数据类型”参数指“属性名1”的数据类型;
    “FIRST”参数指定位置为表的第一个位置;
    “AFTER 属性名2”参数指定“属性名1”插入在“属性名2”之后。
    1.字段修改到第一个位置
    FIRST参数可以指定字段为表的第一个字段。
    2.字段修改到指定位置
    ALTER可以将字段排在表中指定的字段之后。
    例如:
        ALTER TABLE user MODIFY sex TINYINT(1) AFTER age;

6.3.7 更改表的存储引擎

    MySQL存储引擎是指MySQL数据库中表的存储类型。
    MySQL存储引擎包括InnoDB、MyISAM、MEMORY等。
    语法:
    ALTER TABLE 表名 ENGINE=存储引擎名;

6.3.8 删除表的外键约束

    在创建表时,外键约束就已经设定好了。
    由于特殊需要,与父表之间的关联关系需要去除,要求删除外键约束。
    语法:
        ALTER TABLE 表名 DROP FOREIGN KEY 外键别名;

6.4 删除表

    在创建表时可能存在外键约束,一些表成为了与之关联的表的父表。要删除这些父表,情况比较复杂。

6.4.1 删除没有被关联的普通表

    DROP TABLE 表名;

6.4.2 删除被其他表关联的父表

    创建表时,设置表的外键。这样就使数据库中的某些表之间建立了关联关系。一些表成为了父表,这些表被其子表关联着。直接删除会删除失败,原因是有外键依赖于该表。
    先删除子表的外键约束,然后再删除父表。这种办法,不会影响子表的其他数据,可以保证数据库的安全。
    详细操作和例子见书上。

6.7 常见问题及解答

    1.字段改名后,为什么会有部分约束条件丢失?
    2.如何设置外键?
    3.为什么自增字段不能设置默认值?

参考文献:
1.《MySQL入门很简单》