前言
最后九天,继续加油。
我们昨天学习了对数据的基本操作,比如插入数据的INSERT语句,删除数据的DELETE语句已经更新数据的UPDATE语句。
今天我们将继续学习对表格的基本操作。比如表的创建、更改和删除。
创建表
MySQL不仅用于表数据操纵,而且还可以用来执行数据库和表的所有操作,包括表本身的创建和处理。
一般有两种创建表的方法:
使用具有交互式创建和管理表的工具(如第2章讨论的工具);
表也可以直接用MySQL语句操纵。
第一种方法是我们在之间的建表时经常用到的,第二种方法我们之前也提到过,就是create table语句。
为了用程序创建表,可使用SQL的CREATE TABLE语句。值得注意的是,**在使用交互式工具时,实际上使用的是MySQL语句。**但是,这些语句不是用户编写的,界面工具会自动生成并执行相应的MySQL语句(更改现有表时也是这样)。
表创建基础
我们将介绍create table语句的基本用法。
为利用CREATE TABLE创建表,必须给出下列信息:
新表的名字,在关键字CREATE TABLE之后给出;
表列的名字和定义,用逗号分隔
CREATE TABLE语句也可能会包括其他关键字或选项,但至少要包括的名字和列的细节。
我们看下面最简单的例子
注意:括号里面给出的是列的信息,要指定列的数据类型,之间用空格分开,列与列之间用逗号分开。
表名紧跟在CREATE TABLE关键字后面。实际的表定义(所有列)括在圆括号之中。各列之间用逗号分隔。
表的主键可以在创建表时用PRIMARY KEY关键字指定。
看下面的例子:
**要注意的是,我们在创建表时,要确保你的表名之前没有用过,**不然会报错,就像上面一样。所以对表名要注意一下,这一点我们之后会继续讨论。
使用NULL值
NULL值就是没有值或缺值。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行,换句话说,在插入或更新行时,该列必须有值。
每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的定义规定。
NULL为默认设置,如果不指定NOT NULL,则认为指定的是NULL。
我们看下面的例子
我们创建的一个表,有两列,列名为ename的列允许NULL值(因为没有指定,默认为NULL),列名为age的列不允许NULL值,因为我们在创建表的时候指定了NOT NULL。
主键再介绍
我们在之前学习的时候提到了主键,今天再复习一下。
主键值必须唯一。我们可以使用单列作为主键,也可以使用多列作为主键。但是要保证多列的组合是唯一的。比如看下面的例子
主键可以在创建表时定义(如这里所示), 或者在创建表之后定义
使用AUTO_INCREMENT(自增)
AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。每次执行一个INSERT操作时, MySQL自动对该列增量(从而才有这个关键字AUTO_INCREMENT),给该列赋予下一个可用的值。
每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使它成为主键。
指定默认值
如果在插入行时没有给出值, MySQL允许指定此时使用的默认值。默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。
上面的例子,我们对class列指定了默认值1.
引擎类型
我们看下面的一个例子。
最后用一个ENGINE语句,它是用来指定引擎类型的。关于引擎我们了解一下即可。
更新表
为更新表定义,可使用ALTER TABLE语句
为了使用ALTER TABLE更改表结构,必须给出下面的信息:
在ALTER TABLE之后给出要更改的表名(该表必须存在,否则将出错);
所做更改的列表
上面的例子就是对表tab10增加了一列grade.
上面的例子是从表tab10中删除了列grade.
要注意增加列是用关键字ADD加列(包含列名,列的数据类型等,用空格分开),用DROP COLUMN删除列,只需要跟列名即可。
删除表
删除表(删除整个表而不是其内容)非常简单,使用DROP TABLE语句即可:
删除表没有确认,也不能撤销,执行这条语句将永久删除该表。
我们同样可以一次性删除多个表。
重命名表
使用RENAME TABLE语句可以重命名一个表:
rename table 后面紧跟要修改的表的表名,to后面跟修改后的表名。
同样可以一次更改多个表的表名。