1. 创建表
语法:
CREATE TABLE [IF NOT EXISTS] table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
说明:
field
表示列名datatype
表示列的类型character set
字符集,如果没有指定字符集,则以所在数据库的字符集为准collate
校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准
一个建表的栗子
create table if not exists users1(
id int,
name varchar(32) comment '用户名',
password char(32) comment '用户密码',
birthday date comment '用户的生日'
)character set utf8 collate utf8_general_ci engine MyISAM;
#或 charset=utf8 collate utf8_general_ci engine=MyISAM;
create table if not exists users2(
id int,
name varchar(32) comment '用户名',
password char(32) comment '用户密码',
birthday date comment '用户的生日'
)character set utf8 collate utf8_general_ci engine InnoDB;
#或 charset=utf8 collate=utf8_general_ci engine=InnoDB;
如果不设置字符集和校验规则,默认会继承这个表所在的数据库的字符集和校验规则。
可以看到选择不同的存储引擎,所生成的表的文件个数不同
说明:
不同的存储引擎,创建表的文件不一样。
users1 表存储引擎是
MyISAM
,在数据目中有三个不同的文件,分别是:
users1.frm
:表结构users1.MYD
:表数据users1.MYI
:表索引users2 表存储引擎是
InnoDB
,在数据目中有两个不同的文件,分别是:
users2.frm
:表结构users2.ibd
:表数据和索引
MyISAM
是将数据和索引分开的,而InnoDB
是将数据和索引合并到一起存储的。
2. 查看表
首先使用命令select database();
确认自己在哪个数据库里。
再使用命令show tables
,它会显示你所在的数据库里有几张表。
查看表内的详细信息:
desc 表名字;
(desc就是describe的前四个字母,表示描述的意思)
例如:
desc users1;
desc users2;
查看创建表时的详细信息:
show create table 表名;
但是这样看起来很不爽,所以我们可以在表名后加入\G
,它可以格式化显示把我们那些不需要的符号去掉
show create table 表名 \G;
(;
也可以省略)
可以发现这里输出的语句和我们当时写的并不完全一致,这是因为我们当时写的语法并不是完全规范,MySQL内部为我们进行了优化,把它变成了一种完全标准规范的写法。
3. 修改表
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
语法:
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,columndatatype]...);
ALTER TABLE tablename MODIfY(column datatype [DEFAULT expr][,columndatatype]...);
ALTER TABLE tablename DROP (column);
- 修改表名:
alter table 旧名字 rename to 新名字;
(其中这个to是可以省略的)
- 向表内插入数据。(这里只操作,不做赘述,等学到后面再详细讲解QAQ)
insert into user values (1, '王一', '123456', '2001-01-01');
insert into user values (2, '李二', '456789', '2001-01-02');
此时,我们就可以看到表内有对应的数据了。
- 新增一列,在user表添加一个字段,用于保存图片路径
alter table user add image_path varchar(128) comment '用户的头像路径' after birthday;
表示增加在birthday那一列后面。
- 对指定的某一列的属性做修改
alter table 表名 modify 列名 需要修改的属性;
如:
alter table user modify name varchar(60);
name字段的大小变为60了。在修改时,如果将字段改长的话,默认不是影响当前表中的数据的。
可以看到,我们的描述字段也消失了,说modify修改不是以指定的方式修改,而按照覆盖的方式修改。
- 删除某一列
alter table 表名 drop 列名;
例如:
alter table user drop password;
password那一列被成功删除!
注意:删除字段一定要小心,删除字段及其对应的列数据都没了>
- 修改列名称
alter table 表名 change 旧列名 新列名 原有属性;
注:新字段需要完整定义
先记录好原有的属性然后修改
alter table user change name xingming varchar(60);
如果不带属性的话就会发生错误
4. 删除表
语法格式:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
例如:
drop table users2;
最后再强调一下,对于表的结构,尽量不要轻易修改,也不要轻易删除表,因为数据库是比较接近底层的,一旦修改或删除很容易导致上层的某些东西紊乱。