mysql表操作至少有以下俩种:
DDL【data definition language】 数据定义语言,用来维护存储数据的结构 代表指令: create, drop, alter
DML【data manipulation language】 数据操纵语言,用来对数据进行操作代表指令: insert,delete,update
而下面主要介绍的是对表本身结构进行操作即DDL; DDL和DML的关系就好像我们只有将水杯做好了,才能装水喝-- 可能不太形象
语法:
CREATE TABLE table_name (
field1 datatype, [comment '注释']
field2 datatype, [comment '注释']
field3 datatype [comment '注释']
) [character set 字符集] [collate 校验规则] [engine 存储引擎];
说明:
[] 代表可选项
fifield 表示列名
datatype 表示列的类型
character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准、
collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准
engine 存储引擎
show engine ; #可查看当前数据库支持的存储引擎
注: 如果创建数据库时也没有指定对应的校验规则和字符集,那么创建表结构时,字符集是utf8 , 教验规则是 utf8_general_ci ,默认的存储引擎是InnoDB
sql语句 :
create table users (
id int,
name varchar(20) comment '用户名',
password char(32) comment '密码是32位的md5值',
birthday date comment '生日'
) character set utf8 engine MyISAM; # 注:当前搜索引擎使用的是MyISAM
运行结果如下:
而我们曾经说过在数据中创建表实际上就是在该数据库目录下创建文件 ;所以我们可以切换到我们数据库test2目录下查看一下
说明:
不同的存储引擎,创建表的文件不一样。
users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:
而当我们表存储引擎使用的是InnoDB时,在数据库中会有俩个不同文件,分别是:
desc 表名;
例子:
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
sql语句:
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 列名 新列名 新列属性;
注:sql语句一般不区分大小写
为了演示方便:我们先向users表中插入俩条数据
insert into users values(1,'张三','bbbb','1982-01-04'),(2,'李四','c','1984-01-04');
使用select * from 表名,可以查看表数据
- 添加列
比如我们现在要在表中添加一个新的字段 ,保存对应的家庭地址在哪
alter table users add address varchar(100) comment '地址' ;
我们可以发现:新建立的列属性默认是空的,而且我们发现新建立的列是默认添加到表的最后一列的;
实际上,我们可以添加上 after 某个列名 ,就可以将新创建的列添加到某个列名后;而如果想将新增列设置到第一列 ,可以在sql语句添加 not null first;
结果如下:
注:从中我们也可以看出mysql中;NULL 实际上和“’空字符串并不等价;mysql中的NULL,代表什么都没有;所以mysql中,NULL 和 0 和”‘ 是不等价的,但是后俩者是等价的;
- 修改列字段
例如:我们现在要将name字段长度改为66;
alter table users modify name varchar(66);
如下:
我们可以发现,修改列字段并没有改变数据
- 删除列字段
我们在前面添加了test字段,现在我们将其删除掉
alter table users drop test;
如下:
我们发现,删除列是直接将整个列都删除了,如果列中有对应的数据的话;所以我们对于删除列操作应该慎重选择
- 修改表名
例:我们现在要将users表的名字改成workers;
alter table users rename to workers;
如下:
- 重新设置某个列字段
例如我们要将地址栏改为电话号码;
alter table employee change address phonenum varchar(60);
注: 该修改和前面的修改某个列字段是不一样的,当前sql语句是直接将某个列字段替换成其他列字段,而前面是在原来字段上修改;
举个例子:
前面的修改列字段就好像同一个人换了不一样的衣服,而当前sql语句是直接将人换掉了
drop table 表名;
演示:
删除掉上面演示的表
举个例子:
前面的修改列字段就好像同一个人换了不一样的衣服,而当前sql语句是直接将人换掉了
[外链图片转存中…(img-oWjiHwSS-1684858276438)]
drop table 表名;
演示:
删除掉上面演示的表
[外链图片转存中…(img-xVkoRVzB-1684858276439)]
注: mysql中的删除操作都需要慎重选择