数据表是数据库的重要组成部分,每一个数据库都是由若干个数据表组成的。换句话说,没有数据表就无法在数据库中存放数据。
熟悉Excel的小伙伴肯定都知道,需要先新建工作簿,然后在该工作簿里新建表格,相似的过程,创建数据库后,并在该数据库中创建数据表。
可使用SQL的CREATE TABLE
语句创建表,必须给出以下信息:
语法格式如下:
create table 表名(
字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
)[表的一些设置];
CREATE TABLE 语句的主要语法及使用说明如下:
温馨提示:
IF NOT EXISTS
。这样做不检查已有表的模式是否与你打算创建的表模式相匹配。它只是查看表名是否存在,并且仅在表名不存在时创建它。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行,换句话说,在插入或更新行时,该列必须有值。
每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的定义规定。请看下面的例子:
温馨提示: 不要把NULL值与空串相混淆。NULL值是没有值,它不是空串。如果指定’'(两个单引号,其间没有字符),这在NOT NULL列中是允许的。空串是一个有效的值,它不是无值。NULL值用关键字NULL而不是空串指定。
主键值必须唯一。即,表中的每个行必须具有唯一的主键值。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。
primary key:标识该字段为该表的主键,可以唯一的标识记录,插入重复的会报错。
注意一下几点:
**温馨提示:**主键为其值唯一标识表中每个行的列。主键中只能使用不允许NULL值的列。允许NULL值的列不能作为唯一标识。每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使它成为主键)。
unique key(uq):标识该字段的值是唯一的。支持一个到多个字段,插入重复的值会报违反唯一约束,会插入失败。
AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。每次执行一个INSERT操作时,MySQL自动对该列增量(从而才有这个关键字AUTO_INCREMENT),给该列赋予下一个可用的值。
温馨提示: 关于自动增长字段的初始值、步长可以在mysql中进行设置,比如设置初始值为1万,每次增长10。自增长列当前值存储在内存中,数据库每次重启之后,会查询当前表中自增列的最大值作为当前值,如果表数据被清空之后,数据库重启了,自增列的值将从初始值开始。
如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。
温馨提示: 与大多数DBMS不一样,MySQL不允许使用函数作为默认值,它只支持常量。
在创建表格时,常用的就是ENGINE=InnoDB
;与其他DBMS一样,MySQL有一个具体管理和处理数据的内部引擎。在你使用CREATE TABLE语句时,该引擎具体创建表,而在你使用SELECT语句或进行其他数据库处理时,该引擎在内部处理你的请求。多数时候,此引擎都隐藏在DBMS内,不需要过多关注它。
如果省略ENGINE=语句,则使用默认引擎(很可能是MyISAM),多数SQL语句都会默认使用它。但并不是所有语句都默认使用它,这就是为什么ENGINE=语句很重要的原因。
常用的引擎:
温馨提示: 混用引擎类型有一个大缺陷。外键(用于强制实施引用完整性)不能跨引擎,即使用一个引擎的表不能引用具有使用不同引擎的表的外键。
修改数据表的前提是数据库中已经存在该表。修改表指的是修改数据库中已经存在的数据表的结构。
MySQL 通过 ALTER TABLE 语句来实现表名的修改,语法规则如下:
ALTER TABLE <旧表名> RENAME [TO] <新表名>;
其中,TO 为可选参数,使用与否均不影响结果。
温馨提示: 使用ALTER TABLE
要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的列,可能不能删除它们。类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。
MySQL 通过 ALTER TABLE 语句来实现表字符集的修改,语法规则如下:
ALTER TABLE 表名 [DEFAULT] CHARACTER SET <字符集名> [DEFAULT] COLLATE <校对规则名>;
其中,DEFAULT 为可选参数,使用与否均不影响结果。
MySQL 中修改表字段名的语法规则如下:
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
说明:
温馨提示: 由于不同类型的数据在机器中的存储方式及长度并不相同,修改数据类型可能会影响数据表中已有的数据记录,因此,当数据表中已经有数据时,不要轻易修改数据类型。
修改字段的数据类型就是把字段的数据类型转换成另一种数据类型。在 MySQL 中修改字段数据类型的语法规则如下:
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
说明:
删除字段是将数据表中的某个字段从表中移除,语法格式如下:
ALTER TABLE <表名> DROP <字段名>;
其中,“字段名”指需要从表中删除的字段的名称。
在删除表的同时,表的结构和表中所有的数据都会被删除,因此在删除数据表之前最好先备份,以免造成无法挽回的损失。删除表(删除整个表而不是其内容)非常简单,使用DROP TABLE语句即可:
drop table tb_test;
温馨提示: 用户必须拥有执行DROP TABLE
命令的权限,否则数据表不会被删除。表被删除时,用户在该表上的权限不会自动删除。
数据表之间经常存在外键关联的情况,这时如果直接删除父表,会破坏数据表的完整性,也会删除失败。
删除父表有以下两种方法:
DESCRIBE/DESC 语句会以表格的形式来展示表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等,语法格式如下:
describe\desc <表名>;
SHOW CREATE TABLE 命令会以 SQL 语句的形式来展示表信息。和 DESCRIBE 相比,SHOW CREATE TABLE 展示的内容更加丰富,它可以查看表的存储引擎和字符编码;另外,你还可以通过\g或者\G参数来控制展示格式。
SHOW CREATE TABLE
的语法格式如下:
SHOW CREATE TABLE <表名>;
在 SHOW CREATE TABLE 语句的结尾处(分号前面)添加\g或者\G参数可以改变展示形式。
MySQL 数据表是由行和列构成的,通常把表的“列”称为字段(Field),把表的“行”称为记录(Record)。随着业务的变化,可能需要在已有的表中添加新的字段。MySQL 允许在开头、中间和结尾处添加字段。
一个完整的字段包括字段名、数据类型和约束条件。MySQL 添加字段的语法格式如下:
ALTER TABLE <表名> ADD <新字段名><数据类型>[约束条件];
这种语法格式默认在表的最后位置(最后一列的后面)添加新字段。
MySQL 默认在表的最后位置添加新字段,如果希望在开头位置(第一列的前面)添加新字段,那么可以使用 FIRST 关键字,语法格式如下:
ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] FIRST;
MySQL 除了允许在表的开头位置和末尾位置添加字段外,还允许在中间位置(指定的字段之后)添加字段,此时需要使用 AFTER 关键字,语法格式如下:
ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] AFTER <已经存在的字段名>;
**温馨提示:**AFTER 的作用是将新字段添加到某个已有字段后面。只能在某个已有字段的后面添加新字段,不能在它的前面添加新字段。
语法格式如下:
create table 表名 like 被复制的表名;
create table 表名 [as] select 字段,... from 被复制的表 [where 条件];