创建表
创建一个全新的表
语法格式:
create [temporary] table [if not exists] 表名
[([列定义],...|[索引定义])]
[表选项][select 语句];
select 语句:采用select语句描述一个已有表创建表。
列定义:包括表名、数据类型和宽度等,还可以包含是否允许空值和完整性约束。
temporary:该关键字表示用create命令新建的表为临时表。
if not exists:用此选项可避免出现表已经存在无法再新建的错误。
注意事项:
- 关于‘列定义’的格式:
列名 类型 [not null | null] [default 默认值]
[auto_increment] [unique [key] | [primary] key]
[comment '列注释'] [参照定义]
列名:在表中要唯一。
auto_increment:设置自增属性,只有整型列才能设置此属性。
类型:有的数据类型需要指明长度n,用括号括起。如:char(8) not null |
null:指定该列是否允许为空。如果不指定,则默认为null。
default 默认值:为列指定默认值,必须是一个常数。其中,blob和text列不能被赋予默认值。
unique key | primary key:都表示字段中的值是唯一的。后者表示设置为主键,主键一定要为not null。
参照定义:指定参照的表和列。
- 关于‘类型’:
MySQL支持两种数据类型选项:character set 和 collate。如果要区分字符的大小写情况,可以在字符类型后面加上bingary.
- 关于‘表选项’:
{engine | type} = engine_name 储存引擎
auto_increment = 值 初始值
comment = ‘注释’
data directory = ‘路径’ 数据文件的路径
index directory = ‘路径’ 索引的路径
实战演练
我们来建一个这样子的表(假装不是小新建的):
这个表的基本结构:
下面我们开始喽!
我们要把表格的框架先写出来:
我们用“describe(desc) 表名;”这个命令查看我们刚才建立的表的框架:
成功了!!!
复制现成的表
语法格式
create [temporary] table [if not exists] 表名
[like 源表名[ ]]
| [as (select 语句)];
用like关键字创建一个与“源表名”相同结构的新表,列名,数据类型,空指针和索引也将复制,但是表的内容不会复制,也就是说复制的是这个表的框架(结构),而新建的该表是一个空表。
用as关键字可以复制表的select语句,但索引和完整性约束不会复制。
实战演练
我们要复制表temp_2的结构:
当我们使用了like关键字复制时,表temp_2里的内容并不能被复制过去。
使用as关键词复制表时,里面的内容会一起被复制过来。
但两者复制过来的表结构都是相同的。
修改表
修改表结构
语法格式
alter [ignore] table 表名
修改项 [,修改项]...
注意事项
关于修改项:
add [column] 列定义 [first | after 列名] -------------添加列
change [column] 旧列名 列定义 [first | after 列名]------------------对列重命名
drop [column] 列名---------------------------------------------删除列
order by 列名-----------------------------------------------------排序
- ignore: MySQL相对于标准SQL的扩展。若修改后的新表中存在重复关键字,如果没有指定ignore,当重复关键字错误时操作失败;如果指定了ignore,则对于有关键字的行只使用一行,其他有冲突的行被删除。(其实我听不懂,书上的哈哈哈)
- add [column] 子句:向表中增加新列
像temp_2表中添加年龄一项:
可以看到命令中加上了
after 姓名
这个命令(first | alter
列定义),“年龄”一列则出现在“姓名”之后。若不指定则添加在最后。
- change [column] 子句:修改列的名称。
- modify [column] 子句:修改指定列的类型。
若表中该列所存数据的数据类型与将要修改的列的类型冲突,则发生错误。如列值中有字母,但我们像修改列的类型为int,这种骚操作无法实现。
- order by 子句:用于在创建新表时,让各行按一定的顺序排列。在执行插入和删除操作后,表不会仍保持此顺序。
- rename 子句:修改表名。
另一种修改表名的命令
rename table 原表名 to 新表名
[, 原表名 to 新表名]...
- drop 子句:从表中删除列或约束。
删除表
语法格式
drop [temporary] table [if exists] 表名 [, 表名]...
现在只要剩下“小新的超级名单”这个表,让我们把其他两个表山删掉吧。
搞定啦
那么下次见,拜拜!