1.修改
MODIFY
改字段的数据类型
alter table 表名 modify 字段名 数据类型;
例:
alter table 员工信息表 modify 员工姓名 varchar(8);
改已有字段所在的列
alter table 表名 modify 字段名1 数据类型 first|after 字段名2;
例:
##将 员工姓名 改到列首
alter table 员工信息表 modify 员工姓名 varchar(8) first;
##将 员工姓名 的位置改到 员工编号 后
alter table 员工信息表 modify 员工姓名 varchar(8) after 员工编号;
CHANGE 和 AS
改字段名
alter table 表名 change 原字段名 新字段名 新数据类型;
例:
##将 入职时间 改为 入职日期
alter table 员工信息表 change 入职时间 入职日期 date;
##只在查看的时候改一次,不在原表上改
select 列名 [as] 别名;
ADD
添加字段
alter table 表名 add 新字段名 数据类型 [first|after 表中某一字段];
例:
##将 身份证号 插入到 员工性别 后
alter table 员工信息表 add 身份证号 char(18) after 员工性别;
##将 工号 插入到首列
alter table 员工信息表 add 工号 char(3) not null first;
RENAME
改表名
alter table 原表名 rename [to] 新表名;
2.复制
create table [if not exists] 新表名 [like 旧表名] | [as (select_statement)];
例:
##新建一个 employees 空数据表并将 员工信息表 复制到 employees 这个表中
LIKE
create table employees like 员工信息表;
AS
create table employees as(select *from 员工信息表);
[if not exists]:防止重复创建
3.删除
DROP
删除表
drop table [if exists] 表名;
例:
drop table 员工信息表;
##删除 员工信息表 (如果没有这个表也不报错)
drop table if exists 员工信息表;
DELETE
删除记录
delete from 表名 [where 条件语句];
例:
##删除 员工姓名 是 李四 的行
delete from 员工信息表 where 员工姓名='李四';
TRUNCATE
删除记录(不可恢复)
truncate from 表名;
4.插入数据
实例:
创建表
mysql> create table kcb(
->课程号 char(6) not null primary key,
->课程名char(20)not null,
->学分 tinyint(2) not null,
->学时 tinyint (2) not null,
->学期 tinyint not null,
->前置课 char(6)not null
->);
显示表结构
mysql> desc kcb;
+--------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+-------+
| 课程号 | char(5) | NO | | | |
| 课程名 | char(14) | NO | | | |
| 学分 | int(2) | YES | | NULL | |
| 学时 | int(2) | NO | | | |
| 学期 | tinyint(4) | NO | | | |
| 前置课 | char(5) | NO | | | |
+--------+------------+------+-----+---------+-------+
6 rows in set
插入数据
mysql> insert into kcb values
->('21006','操作系统',4,64,1,'21001'),
->('31001','管理信息系统',3,48,4,'21004'),
->('31002','软件工程',2,32,5,'31001'),
->('31003','云计算',6,64,'321004');
查看表内数据
mysql> select *from kcb;
+--------+--------------+------+------+------+--------+
| 课程号 | 课程名 | 学分 | 学时 | 学期 | 前置课 |
+--------+--------------+------+------+------+--------+
| 21005 | 数据库 | 4 | 64 | 2 | 21004 |
| 21006 | 操作系统 | 4 | 64 | 1 | 21001 |
| 31001 | 管理信息系统 | 3 | 48 | 4 | 21004 |
| 31002 | 软件工程 | 2 | 32 | 5 | 31001 |
| 31005 | 云计算 | 6 | 64 | 3 | 21004 |
+--------+--------------+------+------+------+--------+
5 rows in set
5.更新
##满足where后面条件的行,把set后提到的东西都改掉
update 表名
set 要改的东西1,要改的东西2,...
where 条件
例:
##将 员工编号 为 00001 的行中 员工姓名 改为 张婷,工资+500
update 员工信息表
set 员工姓名='张婷',工资=工资+500
where 员工编号='00001';
6.查询
select [distinct] <字段列表>
from 表名
[where 查询条件]
[group by 字段列表]
[having 条件表达式]
[order by 字段列表]
[limit [offset,] 限制行数];
(1) [DISTINCT]:可选项,去除查询结果中重复的数据记录
(2)<字段列表>:表示需要查询的字段,其中至少包含一个字段名称,如果需要查询多个字段,需要用逗号将每个字段隔开。
(3)表名 :可以是单表或者多表。
(4)[WHERE<查询条件>]:可选项,限定本查询须满足查询条件。
(5)[GROUP BY<字段列表>]:可选项,该子句将查询结果按照指定的字段进行分组。
(6) [HAVING<条件表达式>]:可选项,与GROUP BY一起使用,该子句将分组结果按条件表达式进行过滤。
(7) [ORDER BY<字段列表>]:可选项,该子句将查询结果按指定字段列表的值进行排序。
(8)[LIMITI<OFFSET,>1限制行数>]:可选项,指定查询结果显示的数据行数,OFFSET表示偏移量。
例:
##查看 员工姓名 和 工资 这两列的记录
select 员工姓名,工资 from 员工信息表;
##查看 员工姓名 列,以 name 这个名字显示,as可以省略
select 员工姓名 as name;
select 员工姓名 name;
##替换查询结果的数据
##显示4列内容,员工姓名 入职日期 工资 工资等级
select 员工姓名,入职日期,工资,
case
when 工资<=4000 then '较低工资'
when 工资>4000 and 工资<4500 then'中等工资'
else '较高工资'
end as '工资等级'
from 员工信息表;
##查询去重后结果
select distinct 工资 from 员工信息表;
函数查询
COUNT
##计数,(*)包括空值,(字段名)不包括空值
select count(*) as 总人数 from 员工信息表;
select count(奖金收入) as 有奖金人数 from 员工信息表;
MIN|MAX
select max(工资) as 最高工资,min(工资) 最低工资 from 员工信息表;
SUM|AVG
select sum(工资) as 总工资,avg(工资) 平均工资 from 员工信息表;