MySQL基础篇(四)-- 数据表的基本操作

        数据表是数据库的重要组成部分,每一个数据库都是由若干个数据表组成的。换句话说,没有数据表就无法在数据库中存放数据。

1 创建数据表

1.1 表创建基础

        熟悉Excel的小伙伴肯定都知道,需要先新建工作簿,然后在该工作簿里新建表格,相似的过程,创建数据库后,并在该数据库中创建数据表。

        可使用SQL的CREATE TABLE语句创建表,必须给出以下信息:

  • 新表的名字,在关键字CREATE TABLE之后给出;
  • 表列的名字和定义,用逗号分隔。

        语法格式如下:

create table 表名(
字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
)[表的一些设置];

        CREATE TABLE 语句的主要语法及使用说明如下:

  • CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限。
  • <表名>:指定要创建表的名称,在 CREATE TABLE 之后给出,必须符合标识符命名规则。表名称被指定为 db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。在当前数据库中创建表时,可以省略 db-name。如果使用加引号的识别名,则应对数据库和表名称分别加引号。例如,‘mydb’.‘mytbl’ 是合法的,但 ‘mydb.mytbl’ 不合法。
  • <表定义选项>:表创建定义,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。
  • 默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。

温馨提示:

  • 要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。宽度和约束条件为可选参数,字段名和类型是必须的。每列的定义以列名(字段名,它在表中必须是唯一的)开始,后跟列的数据类型。各列之间用逗号分隔。
  • 在创建新表时,指定的表名必须不存在,否则将出错。如果要防止意外覆盖已有的表,SQL要求首先手工删除该表(请参阅后面的小节),然后再重建它,而不是简单地用创建表语句覆盖它。如果你仅想在一个表不存在时创建它,应该在表名后给出IF NOT EXISTS。这样做不检查已有表的模式是否与你打算创建的表模式相匹配。它只是查看表名是否存在,并且仅在表名不存在时创建它。

1.2 使用NULL值

        允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行,换句话说,在插入或更新行时,该列必须有值。

        每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的定义规定。请看下面的例子:

MySQL基础篇(四)-- 数据表的基本操作_第1张图片

        温馨提示: 不要把NULL值与空串相混淆。NULL值是没有值,它不是空串。如果指定’'(两个单引号,其间没有字符),这在NOT NULL列中是允许的。空串是一个有效的值,它不是无值。NULL值用关键字NULL而不是空串指定。

1.3 主键和外键

        主键值必须唯一。即,表中的每个行必须具有唯一的主键值。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。

        primary key:标识该字段为该表的主键,可以唯一的标识记录,插入重复的会报错。

  • 方式1:跟在列后,如下:
    MySQL基础篇(四)-- 数据表的基本操作_第2张图片

  • 方式2:在所有列定义之后定义,如下:
    MySQL基础篇(四)-- 数据表的基本操作_第3张图片

  • 方式3:支持多字段作为主键,多个之间用逗号隔开,语法:`primary key(字段1, 字段2, 字段n),示例:
    MySQL基础篇(四)-- 数据表的基本操作_第4张图片

  • 方式4:为表中的字段设置外键
    语法:foreign key(当前表的列名) references 引用的外键表(外键表中字段名称)
    MySQL基础篇(四)-- 数据表的基本操作_第5张图片

        注意一下几点:

  • 两张表中需要建立外键关系的字段类型需要一致
  • 要设置外键的字段不能为主键
  • 被引用的字段需要为主键
  • 被插入的值在外键表必须存在,如上面向test10中插入ts9_a为2的时候报错了,原因:2的值在test9表中不存在

        **温馨提示:**主键为其值唯一标识表中每个行的列。主键中只能使用不允许NULL值的列。允许NULL值的列不能作为唯一标识。每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使它成为主键)。

        unique key(uq):标识该字段的值是唯一的。支持一个到多个字段,插入重复的值会报违反唯一约束,会插入失败。

  • 方式1:跟在字段后,如下所示:
    MySQL基础篇(四)-- 数据表的基本操作_第6张图片

  • 方式2:所有列定义之后定义,如下:
    MySQL基础篇(四)-- 数据表的基本操作_第7张图片

  • 方式3:支持多字段,多个之间用逗号隔开,语法:unique key(字段1,字段2,字段n),示例:
    MySQL基础篇(四)-- 数据表的基本操作_第8张图片

1.4 使用AUTO_INCREMENT

        AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。每次执行一个INSERT操作时,MySQL自动对该列增量(从而才有这个关键字AUTO_INCREMENT),给该列赋予下一个可用的值。

MySQL基础篇(四)-- 数据表的基本操作_第9张图片

        温馨提示: 关于自动增长字段的初始值、步长可以在mysql中进行设置,比如设置初始值为1万,每次增长10。自增长列当前值存储在内存中,数据库每次重启之后,会查询当前表中自增列的最大值作为当前值,如果表数据被清空之后,数据库重启了,自增列的值将从初始值开始。

1.5 指定默认值

        如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。
MySQL基础篇(四)-- 数据表的基本操作_第10张图片

        温馨提示: 与大多数DBMS不一样,MySQL不允许使用函数作为默认值,它只支持常量。

1.6 引擎类型

        在创建表格时,常用的就是ENGINE=InnoDB;与其他DBMS一样,MySQL有一个具体管理和处理数据的内部引擎。在你使用CREATE TABLE语句时,该引擎具体创建表,而在你使用SELECT语句或进行其他数据库处理时,该引擎在内部处理你的请求。多数时候,此引擎都隐藏在DBMS内,不需要过多关注它。

        如果省略ENGINE=语句,则使用默认引擎(很可能是MyISAM),多数SQL语句都会默认使用它。但并不是所有语句都默认使用它,这就是为什么ENGINE=语句很重要的原因。

        常用的引擎:

  • InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索;
  • MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)
    中,速度很快(特别适合于临时表);
  • MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。

        温馨提示: 混用引擎类型有一个大缺陷。外键(用于强制实施引用完整性)不能跨引擎,即使用一个引擎的表不能引用具有使用不同引擎的表的外键。

2 修改数据表

        修改数据表的前提是数据库中已经存在该表。修改表指的是修改数据库中已经存在的数据表的结构。

2.1 修改表名

        MySQL 通过 ALTER TABLE 语句来实现表名的修改,语法规则如下:

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

        其中,TO 为可选参数,使用与否均不影响结果。

        温馨提示: 使用ALTER TABLE要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的列,可能不能删除它们。类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。

2.2 修改表字符集

        MySQL 通过 ALTER TABLE 语句来实现表字符集的修改,语法规则如下:

ALTER TABLE 表名 [DEFAULT] CHARACTER SET <字符集名> [DEFAULT] COLLATE <校对规则名>;

        其中,DEFAULT 为可选参数,使用与否均不影响结果。

3 修改字段

3.1 修改字段名称

        MySQL 中修改表字段名的语法规则如下:

ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>

说明:

  • 旧字段名:指修改前的字段名;
  • 新字段名:指修改后的字段名;
  • 新数据类型:指修改后的数据类型,如果不需要修改字段的数据类型,- 可以将新数据类型设置成与原来一样,但数据类型不能为空。

        温馨提示: 由于不同类型的数据在机器中的存储方式及长度并不相同,修改数据类型可能会影响数据表中已有的数据记录,因此,当数据表中已经有数据时,不要轻易修改数据类型。

3.2 修改字段数据类型

        修改字段的数据类型就是把字段的数据类型转换成另一种数据类型。在 MySQL 中修改字段数据类型的语法规则如下:

ALTER TABLE <表名> MODIFY <字段名> <数据类型>

说明:

  • 表名:指要修改数据类型的字段所在表的名称;
  • 字段名:指需要修改的字段;
  • 数据类型:指修改后字段的新数据类型。

3.3 删除字段

        删除字段是将数据表中的某个字段从表中移除,语法格式如下:

ALTER TABLE <表名> DROP <字段名>

        其中,“字段名”指需要从表中删除的字段的名称。

4 删除数据表

        在删除表的同时,表的结构和表中所有的数据都会被删除,因此在删除数据表之前最好先备份,以免造成无法挽回的损失。删除表(删除整个表而不是其内容)非常简单,使用DROP TABLE语句即可:

drop table tb_test;

        温馨提示: 用户必须拥有执行DROP TABLE命令的权限,否则数据表不会被删除。表被删除时,用户在该表上的权限不会自动删除。

5 删除被其他表关联的主表

        数据表之间经常存在外键关联的情况,这时如果直接删除父表,会破坏数据表的完整性,也会删除失败。

        删除父表有以下两种方法:

  • 先删除与它关联的子表,再删除父表;但是这样会同时删除两个表中的数据。
  • 将关联表的外键约束取消,再删除父表;适用于需要保留子表的数据,只删除父表的情况。
MySQL基础篇(四)-- 数据表的基本操作_第11张图片

6 查看表结构命令

6.1 以表格的形式展示表结构

        DESCRIBE/DESC 语句会以表格的形式来展示表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等,语法格式如下:

describe\desc <表名>; 

6.2 以SQL语句的形式展示表结构

        SHOW CREATE TABLE 命令会以 SQL 语句的形式来展示表信息。和 DESCRIBE 相比,SHOW CREATE TABLE 展示的内容更加丰富,它可以查看表的存储引擎和字符编码;另外,你还可以通过\g或者\G参数来控制展示格式。

        SHOW CREATE TABLE的语法格式如下:

SHOW CREATE TABLE <表名>;

        在 SHOW CREATE TABLE 语句的结尾处(分号前面)添加\g或者\G参数可以改变展示形式。

7 数据表添加字段

        MySQL 数据表是由行和列构成的,通常把表的“列”称为字段(Field),把表的“行”称为记录(Record)。随着业务的变化,可能需要在已有的表中添加新的字段。MySQL 允许在开头、中间和结尾处添加字段。

        一个完整的字段包括字段名、数据类型和约束条件。MySQL 添加字段的语法格式如下:

ALTER TABLE <表名> ADD <新字段名><数据类型>[约束条件];

        这种语法格式默认在表的最后位置(最后一列的后面)添加新字段。

7.1 在开头添加字段

        MySQL 默认在表的最后位置添加新字段,如果希望在开头位置(第一列的前面)添加新字段,那么可以使用 FIRST 关键字,语法格式如下:

ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] FIRST;

7.2 在中间位置添加字段

        MySQL 除了允许在表的开头位置和末尾位置添加字段外,还允许在中间位置(指定的字段之后)添加字段,此时需要使用 AFTER 关键字,语法格式如下:

ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] AFTER <已经存在的字段名>;

        **温馨提示:**AFTER 的作用是将新字段添加到某个已有字段后面。只能在某个已有字段的后面添加新字段,不能在它的前面添加新字段。

8 复制表

8.1 只复制表结构

        语法格式如下:

create table 表名 like 被复制的表名;
MySQL基础篇(四)-- 数据表的基本操作_第12张图片

8.2 复制表结构+数据

create table 表名 [as] select 字段,... from 被复制的表 [where 条件];
MySQL基础篇(四)-- 数据表的基本操作_第13张图片

你可能感兴趣的:(mysql,数据库,sql,创建表格,修改字段)