DDL数据定义语言
DDL是用于定义数据库对象的操作语言。
create创建、alter修改、drop删除、truncate截断
修改表名称
rename table 原始表名称 to 新的表名称;
数据库操作
创建数据库
语法规则:create database 数据库名称 default character set utf8;
默认编码字符集为uft-8。如果数据库已经存在,用上述语句再次创建会报错。
如果要创建的数据库已经存在,用create database if not exists 数据库名称 default character set utf8;
则不会报错。
删除数据库
语法规则:drop database 数据库名称;
如果指定删除的数据库不存在,则用上述语句删除会报错。
用drop database if exists 数据库名称;
则不会报错。
查看所有数据库
show databases;
mysql中允许同时打开多个数据库,不同的数据库管理系统不一样。
切换数据库
use 数据库名称;
如果数据库存在,则切换成功,如果不存在则报错。
查看当前数据库
select database();
查看数据库的创建语句
show create database 数据库名称;
数据表操作
表创建操作(create)
创建数据表基本语法规则:
create table 数据库名称(数据列名称 数据类型 约束规则 ......)engine=innodb 存储引擎名称 default charset utf8;
例如:
create table tb_user(
id bigint primary key auto_increment,
name varchar(20) not null comment '姓名',
sex boolean
)engine=innodb default charset utf8;
数据表创建完成,则会发现在data/test目录下出现一个文件tb_student.ibd。
一般使用的存储引擎engine常见的有innodb和myisam两种,如果使用myisam则会创建两个文件。
- .myd数据信息文件,其中包含表的数据;
- .myi索引信息文件,是用于提高查询效率的索引数据。
查看表中的列定义
desc 表名称;
desc tb_user;
查看具体的列定义
show create table 表名称;
show create table tb_user;
克隆表结构
快速创建一个表和另外一个表的结构相同,只是克隆表结构,不会克隆数据。
create table 新表名称 like 已经存在的旧表名称;
create table tb_newuser like tb_user;
表修改操作(alter)
语法:alter table 表名称 add/drop/modify 列名称 [类型 约束];
新增列:
alter table tb_user add age int;
--在tb_user表中增加age列
删除列:
alter table tb_student drop column age;
--删除指定列
修改列:
alter table tb_student modify sex varchar(10);
--注: 修改列定义时,要求已经存在的数据必须符合规则,否则修改失败。modify一般用于修改列的数据类型和长度,但是如果有数据则必须和目标类型匹配,否则修改失败。
修改列名称
alter table 表名称 change 旧有列名称 新列名称 类型 约束;
alter table tb_user change name uername varchar(20) not null;
表删除操作(drop)
drop table 表名称
drop table tb_student;
--或者下面这个
drop table if exists tb_student;
表截断操作(truncate)
语法:truncate table tb_user;
表的截断操作可以删除表中的所有数据,没有事务,不会记录操作日志,所以大量删除数据时执行效率高。缺点在于没有反悔的机会。底层原理就是创建一个相同的空表。
逻辑删除和物理删除
物理删除就是从表中直接删除数据,逻辑删除类似于回收站,只是给某行数据上添加一个删除标志,表示该行数据已经删除。
逻辑删除的具体实现
- 修改表结构,在tb_user表中新增一个额外列,用于表示该行数据是否已经删除
alter table tb_user add deleted boolean default 0;
-- 0表示没有删除
- 逻辑删除,修额外列的值,并没有真是删除
update tb_user set deleted=1 where id=2;
-- 删除2号用户的信息,
-- 物理删除
delete from tb_user where id=2;
- 查询时为了避免查到已经逻辑删除的数据,需要额外增加查询条件
select * from tb_user where deleted=0;
-- 查询tb_user中deleted列值为0的数据