## 数据表操作
### 创建数据表
只要用到数据库,我们就会用到创建数据库表,介绍两种创建表的方法。
#### CREATE 语句
使用 CREATE 语句创建表,语法如下:
CREATE TABLE tbl_name [IF NOT EXISTS] (create_definition,...) [type =table_type]
create_definition:col_name type [not null | null][default default_value] [auto_increment][primary_key]
CREATE 创建数据表示例:
CREATE TABLE IF NOT EXISTS test (
id int(11) unsigned NOT NULL,
username varchar(15) NOT NULL,
password char(32) NOT NULL,
content text NOT NULL,
createtime datetime NOT NULL,
gender tinyint(1) NOT NULL, DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
显示位宽:
对于整数类型,MySQL 支持指定显示宽度,例如 int(5) 表示当数值宽度小于 5 时在数字的前面填满宽度,可以配合 ZEROFILL 使用。
**注意:** 使用一个指定宽度并不会影响字段的大小和它可以存储的值的范围。
UNSIGNED(无符号)
主要用于整型和浮点类型,例如 tinyint 整型的取值区间为 -128 ~ 127,使用无符号后取值区间为 0 - 255。
AUTO_INCREMENT(自动增长)
整数类型特有的属性,用于产生唯一标识符或顺序值。
**注意:** 一个表中只能有一个自动增长列,自动增长列应该定义为 NOT NULL, 并定义为 PRIMARY KEY 或 UNIQUE
ZEROFILL(零填充)
在位数不够的数值前面用字符 “0” 填充剩余宽度。
DEFAULT
DEFAULT 属性确保在没有任何值可用的情况下,赋予某个常量值,这个值必须是常量,因为 MySQL 不允许插入函数或表达式值。此外,此属性无法用于 BLOB 或 TEXT 列。
NOT NULL
如果将一个列定义为 NOT NULL,将不允许向该列插入 NULL 值。建议在重要情况下始终使用 NOT NULL 属性,因为它提供了一个基本验证,确保已经向查询传递了所有必要的值。
NULL
为列指定 NULL 属性时,该列可以保持为空,而不论行中其它列是否已经被填充。NULL 精确的说法是 “无”,而不是空字符串或 0
#### CREATE ... SELECT 语句
使用 CREATE ... SELECT 语句创建表,语法如下:
CREATE TABLE tb_new_name SELECT * FROM tb_old_name;
上述语句表示,从后者的表中复制一份,添加到新的数据表中,前面是新的数据表,之前是不存在的。例如:
CREATE TABLE test001_201712 SELECT * FROM test001;
### 显示数据表信息
有时候我们需要查看某个数据表的相关信息,比如结构,列名等等;那么我们就需要用到 show/describe 语句来查看,看下面语法:
show tables [from db_name] [like wild]
show columns from tbl_name [from db_name] [like wild]
show index from tbl_name [from db_name]
show table status [from db_name] [like wild]
{describe| desc} tbl_name {col_name | wild}
第一种语法表示:查看某个数据库下的所有数据库表,或者根据 like 模糊查看某个数据库表;例如
show tables from test001;
show tables from test001 like "%a%";
第二种语法表示:查看某个数据库表中的列属性, like 后面跟的是列的名称的某个关键字;例如
show columns from test001;
show columns from test001 from test001 like "%n%";
第三种语法表示:查看某个数据库表中的索引;例如
show index from test001 from test001;
第四种语法表示:查看数据库中全部表或者某个表的状态信息,信息提供的更多;例如
show table status from test001;
show table status from test001 like "%t%";
第五种语法表示:查看数据库表的信息,是 show 的另外一种方式;例如
desc test001;
describe test001 "%n%";
### 修改表结构
有时你可能需要改变一下现有表的结构,那么 ALTER TABLE 语句将是你的合适选择。
增加列:
ALTER TABLE test001 ADD weight int;
修改列:
ALTER TABLE test001 MODIFY weight varchar(50);
删除列:
ALTER TABLE test001 DROP weight;
另外一种常用方式,例如:
给列更名:
ALTER TABLE test001 CHANGE weight wei int;
给表更名:
ALTER TABLE test001 RENAME test001_01;
### 删除数据表
DROP TABLE 删除一个或多个数据库表。表中的所有数据和表定义均被删除,故小心使用这个命令。语法如下:
DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]
例如删除 test001_01 这个表,要删除多个表,在后面用逗号隔开即可。例如:
DROP TABLE IF EXISTS test001_01;