暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库基础之SQL查看和修改表结构

数据仓库 2020-06-05
711

点击蓝字关注我吧


【本文详细介绍了数据库的基础知识之SQL查看和修改表结构,欢迎读者朋友们阅读、转发和收藏!】

1 查看表结构

查看表结构是指查看数据库中已存在的表的定义。查看表结构的语句包括 DESCRIBE 语句和 SHOW CREATE TABLE 语句。通过这两个语句,可以查看表的字段名、字段的数据类型、完整性约束条件等。

1.1 查看表基本结构语句 DESCRIBE

MySQL 中, DESCRIBE 语句可以查看表的基本定义。其中包括、字段名、字段数据类型、是否为主键和默认值等。

    DESCRIBE 表名 ;
    DESC 或 DESCRIBE student7;
    复制

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

    MySQL 中, SHOW CREATE TABLE 语句可以查看表的详细定义。该语句可以查看表的字段名、字段的数据类型、完整性约束条件等信息。除此之外,还可以查看表默认的存储引擎和字符编码。SHOW CREATE TABLE 语句的语法形式如下:

      SHOW CREATE TABLE 表名 ;
      SHOW CREATE TABLE student7;
      复制

      2 修改表的方法

      修改表是指修改数据库中已存在的表。修改表比重新定义表简单,不需要重新加载数据,也不会影响正在进行的服务。MySQL 中能过 ALTER TABLE [alter: 改变,更改 ] 语句来修改表。修改表包括修改表名、修改字段数据类型、修改字段名、增加字段、删除字段、修改字段的排列位置、更改表的存储引擎和删除表的外键约束等。

      2.1 修改表名

      表名可以在一个数据库中唯一的确定一张表。数据库系统通过表名来区分不同的表。例如,数据库 school 中有 student 表。那么 student 表就是唯一的。在数据库 school 中不可能存在另一个名为 "student" 的表。MySQL 中,修改表名是通过 SQL 语句 ALTER TABLE 实现的。其语法形式如下:

      ALTER TABLE 旧表名 RENAME [TO] 新表名 ;

      实例一 :

        CREATE TABLE student8 (
        stu_id INT PRIMARY KEY,
        stu_name VARCHAR(20) NOT NULL,
        stu_gender BOOLEAN
        ) Engine = InnoDB;
        SHOW TABLES;
        DESCRIBE student8;
        ALTER TABLE student8 RENAME TO student8_changed;
        复制

        2.2 修改字段的数据类型

        字段的数据类型包括整型、浮点数型、字符串型、二进制类型、日期和时间类型等。数据类型决定了数据的存储格式、约束条件和有效范围。表中每个字段都有数据类型。ALTER TABLE 语句也可以修改字段的数据类型。其基本语法如下:ALTER TABLE 表名 MODIFY 属性名 数据类型 ;

        实例一 :

          CREATE TABLE student9 (
          stu_id INT PRIMARY KEY,
          stu_name VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
          content VARCHAR(20) NOT NULL,
          stu_gender BOOLEAN
          ) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
          ALTER TABLE student9 MODIFY stu_name char(20);
          复制

          2.3 修改字段名 [ 字段的数据类型 , 完整性约束条件 ]

          字段名可以在一张表中唯一确定一个字段。数据库系统通过字段名来区分表中的不同字段。例如, student 表中包含 id 字段。那么, id 字段在 student 表中是唯一的。student 表中不可能存在另一个名为 "id" 的字段。MySQL 中 ALTER TABLE 语句也可以修改表的字段名。其基本语法如下:

            ALTER TABLE 表名 CHNAGE 旧字段名 新字段名 新数据类型 [ 新完整性约束条件 ];
            复制

            其中, " 旧字段名 " 参数指修改前的字段名;" 新字段名 " 参数指修改后的字段名;" 新数据类型 " 参数修改后的数据类型,如不需要修改,则将新类型设置成与原来一样。

            1. 只修改字段名

            2. 修改字段名和字段数据类型

            3. 修改完整性约束条件

            实例一:

              CREATE TABLE student10 (
              stu_id INT PRIMARY KEY,
              stu_name VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
              content VARCHAR(20) NOT NULL,
              stu_gender BOOLEAN
              ) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
              ALTER TABLE student10 CHANGE stu_name stu_name_changed VARCHAR(20);
              ALTER TABLE student10 CHANGE content content_changed VARCHAR(50) NOT NULL DEFAULT 'XXXX';
              复制

              2.4 增加字段

              在创建表时,表中的字段就已经定义完成。如果要增加新的字段,可以通过 ALTER TABLE 语句进行增加。MySQL 中, ALTER TABLE 语句增加字段的基本语法如下:

              ALTER TABLE 表名 ADD 新字段名 数据类型 [ 完整性约束条件 ] [FIRST | AFTER 已有字段名 ];

              1. 增加无完整性约束条件的字段

              2. 增加有完整性约束条件的字段

              3. 表的第一个位置增加字段

              4. 表的指定位置之后增加字段

              实例一:

                CREATE TABLE student11 (
                stu_id INT PRIMARY KEY,
                stu_name VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
                content VARCHAR(20) NOT NULL,
                stu_gender BOOLEAN
                ) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
                ALTER TABLE student11 ADD phone VARCHAR(20);
                ALTER TABLE student11 ADD birthday TIMESTAMP NOT NULL;
                ALTER TABLE student11 ADD num INT(11) NOT NULL FIRST ;
                ALTER TABLE student11 ADD address VARCHAR(30) NOT NULL AFTER phone;
                复制

                2.5 删除字段

                删除字段是指删除已经定义好的表中的某个字段。在表创建好之后,如果发现某个字段需要删除。可以采用将整个表都删除,如果发现某个字段需要删除。可以采用将整个表都删除,然后重新创建一张表的做法。这样做是可以达到目的,但必须会影响到表中的数据。而且,操作比较麻烦。MySQL 中, ALTER TABLE 语句也可以删除表中的字段。其基本语法如下:

                ALTER TABLE 表名 DROP 字段名 ;

                实例一:

                  CREATE TABLE student12 (
                  stu_id INT PRIMARY KEY,
                  stu_name VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
                  content VARCHAR(20) NOT NULL,
                  stu_gender BOOLEAN
                  ) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
                  ALTER TABLE student12 DROP `content`;
                  复制

                  2.6 修改字段的排列位置

                  创建表的时候,字段在表中的排列位置就已经确定了。如果要改变字段在表中的排列位置,则需要 ALTER TABLE 语句来处理。MySQL 中,修改字段排列位置的 ALTER TABLE 语句的基本语法如下:ALTER TABLE 表名 MODIFY 字段名 数据类型 FIRST | AFTER 字段名 2;

                  1. 字段修改到第一个位置

                  2. 字段修改到指定位置

                  实例一:

                    CREATE TABLE student13 (
                    stu_id INT PRIMARY KEY,
                    stu_name VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
                    content VARCHAR(20) NOT NULL,
                    stu_gender BOOLEAN
                    ) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
                    ALTER TABLE student13 MODIFY content VARCHAR(20) FIRST;
                    ALTER TABLE STUDENT13 MODIFY stu_id INT AFTER stu_name;
                    复制

                    2.7 更改表的存储引擎

                    MySQL 存储引擎是指 MySQL 数据库中表的存储类型。MySQL 存储引擎包括 InnoDB 、 MyISAM 、 MEMORY 等。不同的表类型有着不同的优缺点。在创建表的时候,存储引擎就已经设定好了。如果要改变,可以通过重新创建一张表来实现。这样做是可以达到目的,但必然会影响到表中的数据。而且,操作比较麻烦。

                    ALTER TABLE 表名 ENGINE= 存储引擎名 ;

                    实例一:

                      CREATE TABLE student14 (
                      stu_id INT PRIMARY KEY,
                      stu_name VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
                      content VARCHAR(20) NOT NULL,
                      stu_gender BOOLEAN
                      ) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
                      ALTER TABLE student14 ENGINE= MyISAM;
                      复制

                      2.8 删除表的外键约束

                      外键是一个特殊字段,其将某一个表与其父表建立关系关系。在创建表的时候,外键约束就已经设定好了。由于特殊需要,与父表之间的关系关系需要去除,要求删除外键约束。MySQL 中, ALTER TABLEy 语句也可以删除表的外键约束。

                      ALTER TABLE 表名 DROP FOREIGN KEY 外键别名 ;

                      实例一:

                        CREATE TABLE `student15` (
                        `id` INT NOT NULL PRIMARY KEY,
                        `name` VARCHAR(20) NOT NULL,
                        `stu_id` INT,
                        CONSTRAINT st_fk FOREIGN KEY(stu_id) REFERENCES student7(stu_id)
                        ) Engine = InnoDB ;
                        ALTER TABLE `test`.`student15` DROP FOREIGN KEY st_fk;
                        复制

                        3 删除表的方法

                        删除表是指删除数据库已经存在的表。删除表时,会删除表中的所有数据。因此,在删除表时特别注意。MySQL 中通过 DROP TABLE 语句来删除表。由创建表时可能存在外键约束,一些表成为了与之关联的表的父表。要删除这些父表,情况比较复杂。

                        3.1 删除没有关系的普通表和被其他关联的父表的方法。

                          CREATE TABLE student16 (
                          stu_id INT PRIMARY KEY,
                          stu_name VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
                          content VARCHAR(20) NOT NULL COMMENT ' 内容 ',
                          stu_gender BOOLEAN
                          ) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
                          DROP TABLE [IF EXISTS] student16;
                          复制

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

                          数据库中某些表之间建立了关联关系。一些表成为了父表,这些表被其子表关联着。要删除这些父表,情况不像上一节那么简单。

                            CREATE TABLE `test`.`student17_parent` (
                            `id` INT NOT NULL PRIMARY KEY,
                            `stu_id` INT,
                            `name` VARCHAR(20) NOT NULL
                            ) Engine = InnoDB ;


                            CREATE TABLE `student17_child` (
                            `id` INT NOT NULL PRIMARY KEY,
                            `stu_id` INT UNIQUE,
                            `name` VARCHAR(20) NOT NULL,
                            CONSTRAINT parent_fk FOREIGN KEY(stu_id) REFERENCES student17_parent(id) -- id 必须是带有索引
                            ) Engine = InnoDB;
                            复制
                              DROP TABLE `student17_parent`; -- 不能删除,因为与这关联的表有外键
                              # 先删除外键,然后就可以删除表 student17_parent
                              ALTER TABLE `student17_child` DROP FOREIGN KEY parent_fk;
                              DROP TABLE `student17_parent`;
                              复制

                              我知道你在看

                              文章转载自数据仓库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论