在数据库中,数据表是最重要、最基本的操作对象,是数据存储的基本单位。

数据表被定义为列的集合,数据在表中按照行和列的形式来组织和存储。每一行代表一条唯一的记录。

创建数据表

创建数据表的过程,是定义数据表结构的过程。包括数据表名、字段名、字段数据类型、字段约束条件、默认值、存储引擎、字符集等。

创建数据表的语法如下:

CREATE TABLE 表名
(
    字段名1 字段1数据类型 [字段1约束条件1] [字段1约束条件2] ...,
    字段名2 字段2数据类型 [字段2约束条件1] [字段2约束条件2] ...,
    字段名3 字段3数据类型 [字段3约束条件1] [字段3约束条件2] ...,
    ...
    [表约束条件]
)[存储引擎] [字符集] [表注释];

表名:数据表的名称。一般使用英文字母、数字、下划线命名。不区分大小写。最好不要使用SQL语言中的关键字,如果必须使用,需要在表名前后添加反引号`。

字段名:数据表中的列名称。一般使用英文字母、数字、下划线命名。不区分大小写。最好不要使用SQL语言中的关键字,如果必须使用,需要在字段名前后添加反引号`。

字段数据类型:数据表中的列存储的数据类型。常用的数值类型(int、double、decimal等)、字符类型(char、varchar、text等)、日期与时间类型(date、time、datetime等)三大类。

字段约束条件:对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。常见的约束条件有非空约束、默认值约束、主键约束、外键约束、唯一性约束、自增长约束、零填充约束等。同一个字段,可以设置多个约束条件。同一个字段,可以有多个字段约束条件。

表约束条件:对表中的数据作出限制,来确保表的数据的完整性、唯一性。常见的表约束条件有主键约束。同一张表,可以有多个表约束条件。

存储引擎:为表设置数据处理器。不同的数据处理器,提供了不同的特性及功能。常见的存储引擎有MyISAM、InnoDB、MEMORY等。

字符集:字符在数据库中的存储格式,比如占多少空间,支持哪些字符等等。常见的字符集有GBK、UTF-8等。

创建数据表示例:

CREATE TABLE `student` (
        `student_id` varchar(50) NOT NULL COMMENT '学生编号',
        `student_name` varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
        `gender` varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
        `birth_day` date NOT NULL COMMENT '生日',
        `age` int NOT NULL DEFAULT 0 COMMENT '年龄',
        `class_id` varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
        `score` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '数学成绩',
        `teacher_id` varchar(20) COMMENT '老师编号',
        PRIMARY KEY (`student_id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='学生';

表名

表名使用规范:

  • 不区分大小写;
  • 以字母开头,由字母、数字、下划线(_)组成;
  • 长度一般不超过64位(MySQL8.0);(不同数据库类型、同一类型数据库不同版本有不同的要求)
  • 表名尽量不要使用数据库的关键字;(如果要使用,需要在表名两边添加`)
  • 表名尽量不要使用中文;
  • 表名一般支持修改,但也建议在创建前要慎重,不到万不得已尽量不修改;
  • 同一数据库下不可重复,不同数据库之间可以重复(使用数据库作为前缀区分);
  • 例如:teacher、teacher1、school_teacher1、teacher_2022;

字段名

字段名使用规范:

  • 不区分大小写;
  • 以字母开头,由字母、数字、下划线(_)组成;
  • 长度一般不超过64位(MySQL8.0);(不同数据库类型、同一类型数据库不同版本有不同的要求)
  • 字段名尽量不要使用数据库的关键字;(如果有使用,需要在字段名两边添加`)
  • 字段名尽量不要使用中文;
  • 字段名一般支持修改,但也建议在创建前要慎重,不到万不得已尽量不修改;
  • 同一张表内不可重复,不同表之间可以重复;
  • 例如:teacherid、teacher_id、TeacherId2022;

复制表

方法一:完整复制表结构,不包括数据。

create table school.student_bak like school.student;

方法二:复制表结构(不包括主外键、索引)及数据。

create table school.student_bak as select * from school.student;

方法三:复制表结构(不包括主外键、索引)。

create table school.student_bak as select * from school.student where 1=2;
picture loss