DDL(数据操作语言)

78 阅读4分钟

数据库的存储引擎

数据库的核心组件,对数据库的事务处理,运算,起到核心作用

innodb: 现有的版本默认是这个存储引擎,支持数据库的高级操作,外键,事务等

myisam:早期版本默认的是存储引擎 只支持数据库的CRUD操作

字符集:

mysql、数据库、表、字段都可以指定字符集

早期的时候,经常会出现乱码,现在概率较低,默认安装的数据库基本都支持中文

-- 查看mysql的存储引擎
show variables like '%storage_engine%';
-- 查看mysql所有字符集的编码
show variables like 'character_set_%';

character_set_client 客户端向服务器发送数据使用的字符集编码

character_set_connection 连接层的字符集编码

character_set_results 服务器将结果返回给客户端的字符集编码

注意以上编码保持统一utf8mb4即可,

如果要设置:set character_set_client = utf8mb4

-- 查看下表结构
desc student;
-- 修改表名 rename table 原表名 to 新表名
rename table student to stu_info;
desc stu_info;
-- 添加字段 alter table 表名 add 字段名 数据类型
alter table stu_info add score int;
-- 在最前面加入字段  alter table 表名 add 字段名 数据类型 first;
alter table stu_info add id int comment '学号' first;
-- 在xxx字段后面加一个字段 alter table 表名 add 字段名 数据类型 after xxx字段
alter table stu_info add sex char(10) comment '性别' after name;
-- 删除字段 alter table 表名 drop 字段名
alter table stu_info drop hobby;
-- 修改字段的名字  alter table 表名 change 原字段名 新字段名 新数据类型
alter table stu_info change sex gender char(5);
-- 修改字段的位置  alter table 表名 modify 字段名 数据类型 after 字段名
alter table stu_info modify age int after name;

DML(数据操作语言)(重要)

包含DQL 用来操作数据库中所包含的数据

作用:对数据库表中的数据进行CRUD的操作

关键字:INSERT DELETE UPDATE SELECT

-- 建一个emp表  包含id name age sal
drop table if exists emp;
create table emp(
  id int comment '序号',
  name char(50) comment '姓名',
  age int comment '年龄',
  sal decimal(8,2) comment '薪水'   -- decimal(5,2)  5总长度 2小数点后面的长度
) comment '员工表';
-- 查看表结构
desc emp;

插入数据

insert into 表名(字段名,字段名...) values(值1,值2,...)

注意:表名后面()和values()的字段数量,顺序,数据类型必须保持一致

所有数据类型的默认值是null

-- 全表插入:表里面有几个字段就插入几个
insert into emp(id,name,age,sal) values(1001,'Andy',23,3000.00);  
-- 简写
insert into emp values(1002,'Andy',23,3000.00);  
-- 指定字段插入 
insert into emp(id,name) values(1003,'Andy'); 
-- 批量插入
insert into emp values
(1,'刘备',23,5000.00),
(2,'关羽',22,4000.00),
(3,'张飞',21,3000.00);
-- 插入查询其他表的数据
insert into emp(id,name) select 4,'张三' from dual;
-- dual 伪表 用于测试  oracle必须加伪表做测试,mysql可以省略
insert into emp(id,name) select 5,'张三';
select 1 from dual;
select 1+2;

修改表中数据

update 表名 set 字段名 = 字段值 where 字段名 = 字段值;

注意:修改一般要加where条件,如果不加,就全量更新,条件一般是唯一条件或者区间条件

-- 修改Andy的薪水为5000  
update emp set sal = 5000 where id = 1001;
-- 把年纪小于23的 薪水修改成4000
update emp set sal = 4000 where age<23;
-- 修改id为1003的员工名字为吕布  年龄24  薪水8000
update emp set sal = 8000, name='吕布', age=24 where id = 1003;

删除表数据

delete from 表名 where 字段名 = 字段值

注意:

清空表数据有两种方式:

delete from 表名

truncate 表名(慎用,最好别用)

区别:

delete

一定条件下删除是可以回滚的,数据可以找回来,因为mysql是基于biglog日志存储

自增序列不会被删除

truncate底层是DDL的组合,先drop表,再create表,速度比delete快,但是不可以回滚

自增序列会被删除

提醒:

需要修改表结构,或者删除大量的数据的时候,最好手动备份一下这个表

-- 删除 id为4的员工
delete from emp where id = 4;  
-- 清空表数据
delete from emp; 
-- 清空表数据2:truncate 表名 
truncate emp;