目录
创建表
查看表结构
修改表
新增列
修改列类型
修改列名
修改表名:
删除列
删除表
创建表
语法:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
说明:
- field 表示列名
- datatype 表示列的类型
- character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
- collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准
- 最后一个属性不用加 ,
- 如果使用数据库默认的,最后一行括号后面的可以省略。
- ENGINE用于指定表所采用的存储引擎。
- COMMENT用于对指定列添加注释信息。
举例:
创建表user1
create table user1 (
id int,
name varchar(20) comment '用户名',
password char(32) comment '密码是32位的md5值',
birthday date comment '生日'
) character set utf8 engine MyISAM;
创建表user2
create table user2 (
id int,
name varchar(20) comment '用户名',
password char(32) comment '密码是32位的md5值',
birthday date comment '生日'
) character set utf8 engine innodb;
这是我们可以到目录:/var/lib/mysql/user1查看数据库内容
这里我们发现对于表users,users2它们的文件与后缀名是不一样的。
说明一下:
- 采用不同的存储引擎,创建表时所产生的文件不一样。
- 采用InnoDB存储引擎建表,会产生对应的xxx.frm(表结构)和xxx.ibd(表数据+表索引)文件。
- 采用MyISAM存储引擎建表,会产生对应的xxx.frm(表结构)、xxx.MYD(表数据)和xxx.MYI(表索引)文件。
查看表结构
desc 表明;
这里我们查看users的表结构:
desc user1;
- Filed:字段名字。
- Type:字段类型。
- Null:是否允许为空。
- Key:索引类型。
- Default:默认值。
- Extra:扩充。
修改表
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
ALTER TABLE table_name ADD 新增列名 新增列的属性;
ALTER TABLE table_name MODIFY 列名 修改后的列属性;
ALTER TABLE table_name DROP 列名;
ALTER TABLE table_name RENAME [TO] 新表名;
ALTER TABLE table_name CHANGE 列名 新列名 新列属性;
这里为了较好的演示先在修改表中插入两条数据:
新增列
alter table 表名 add 列名 列属性 [after 列名/ not null first];
在user表中新增一列照片路径:
注意:
after password表示该列新增到password属性后面,如果想要将新增的列放到第一列,可以将after及其以后的换成not null first,如果没有after password这部分默认是将新增的列放到最后面。
如:新增grade列放到第一列,新增hobby列放到最后面:
修改列类型
alter table 表名 modify 列名 修改后的列属性;
这里我们将user表中的password列的类型由char(20)修改成char(50),如下:
注意:
如果需要修改类型后仍然保留comment字段,需要在修改时重新指定comment字段。
修改列名
alter table 表名 change 修改前的列名 修改后的列名 修改后的属性;
将user表中password列的列名改成passwd。如下:
修改表名:
alter table 修改前的表名 rename 修改后的表名;
将user表修改成employee。
删除列
alter table 表名 drop 删除列;
将employee表中的path列删除
删除表
DROP [TEMPORARY] TABLE [IF EXISTS] table_name;
- 在创建表时加上TEMPORARY关键字,那么服务器将创建出一个临时表,该表会在你的服务器会话终止时自动消失。
- TEMPORARY表的名字可以与某个已有的永久表相同,当有TEMPORARY表存在时,对应的永久表会隐藏起来(即无法访问)。
- 为了避免重新连接后(TEMPORARY已经不存在),在未做检测的情况下调用DROP误删了对应的永久表,因此在使用DROP删除表时需要带上TEMPORARY关键字。
将employee表删除: