创建表的SQL语法如下:
CREATE TABLE [IF NOT EXISTS] table_name(
field1 datatype1 [COMMENT '注释信息'],
field2 datatype2 [COMMENT '注释信息'],
field3 datatype3 [COMMENT '注释信息']
)[CHARSET=charset_name] [COLLATE=collation_name] [ENGINE=engine_name];
说明一下:
使用show engines
SQL可以查看当前MySQL支持的存储引擎。如下:
show engines;
可以看到我这里当前的MySQL默认使用的是InnoDB存储引擎,当我建表时没有指定使用哪种存储引擎,那么就会默认使用InnoDB存储引擎。
在创建表之前我们要先有一个数据库,并且使用这个数据库,这里我们创建一个db1的数据库并使用。
create database db1;
show databases;
use db1;
下面我们就来创建一个表:
create table user(
id int, name varchar(20) comment '用户名',
password char(32) comment '密码',
birthday date comment '生日'
) charset=utf8 engine=MyISAM;
表创建完毕后在数据库的数据存储路径/var/lib/mysql
下的db1目录中,就会对应增加三个文件。如下:
说明一下:
show tables;
desc 表名;
Field
表示该字段的名字。Type
表示该字段的类型。Null
表示该字段是否允许为空。Key
表示索引类型,比如主键索引为PRI。Default
表示该字段的默认值。Extra
表示该字段的额外信息说明。show create table 表名 \G
修改表的SQL语法如下:
ALTER TABLE table_name RENAME [TO] 新表名;
ALTER TABLE table_name ADD 新增列名 新增列的属性;
ALTER TABLE table_name MODIFY 列名 修改后的列属性;
ALTER TABLE table_name DROP 列名;
ALTER TABLE table_name CHANGE 列名 新列名 新列属性;
show tables;
alter table user rename to employee;
show tables;
select * from 表名
显示表里面的内容。如下:desc employee;
insert into employee value ('1', '张三', '12345', '1998-12-1');
insert into employee value ('1', '李四', '12345', '1997-8-3');
select * from employee;
在employee表中新增一列用于保存用户的照片路径。如下:
alter table employee add image_path varchar(128) comment '这是员工的照片' after birthday;
select * from employee;
说明一下:
新增列SQL中的after
表示将该列新增到哪一列之后,如果想要将新增的列放到第一列,可以将after
及其之后的SQL换成not null first
。
可以看到在新增列之前插入表中的两条记录对应的image_path值为NULL,因此新增列后可能还需要对原来插入的记录进行修改。
在修改之前我们可以先看一看表的结构相关信息:
将employee表中name列的类型由varchar(20)改成varchar(60)。如下:
alter table employee modify name varchar(60);
在修改之后我们可以再看一看表的结构相关信息:
可以看出modify
不是简单的修改,而是覆盖式的修改,所以如果我们还要保留注释的话就要再修改时加上comment
。
例如将employee表中的password列删除。如下:
desc employee;
alter table employee drop password;
desc employee;
注意: 删除列后,该列对应的所有数据都没有了。
将employee表中image_path列的列名改成path。如下:
alter table employee change image_path path varchar(128);
注意:
删除表的SQL如下:
DROP [TEMPORARY] TABLE [IF EXISTS] table_name;
说明一下:
将employee表删除。如下:
drop table employee;
show tables;