show databases; #列出所有数据库 show tables; #列出当前数据库的所有表 desc [tablename]; #查询表的结构信息
修改
1 2 3 4 5
alter table [name] rename to [newname]; #修改表名 alter table [name] add [列名] [数据类型]; #添加一列 alter table [name] modify [列名] [新数据类型]; #修改数据类型 alter table [name] change [列名] [新列名] [新数据类型]; #修改列名和数据类型 alter table [name] drop [列名]; #删除列
删除
1 2 3
drop database kob; #删除数据库 drop table [name]; #删除表 drop table if exists [name] #如果存在就删除表
DML
添加
1 2 3 4 5 6 7 8
insert into [表名](列名1,列名2,...) value (val1, val2,...); #给制定列添加数据 insert into [表名] value (val1, val2,...); #给全部列添加数据
#批量添加数据 insert into [表名](列名1,列名2,...) value (val1, val2,...),(val1, val2,...); insert into [表名] value (val1, val2,...),(val1, val2,...);
修改
1 2
update [表名] set [列名1]=[value1], [列名2]=[value2]... [where 条件]; #修改表数据
-- where 和 having 区别 # 执行时机不一样,where是分组之前限定,不满足where 条件,则不参与分组,而having是分组之后堆结果进行过滤。 # 可判断的条件不一样: where不能对聚合函数进行判断,having可以。 # 执行顺序: where >聚合函数> having
select 字段列表 from 表名 [where 分组前条件列表] group by 分组字段名 [having 分组后条件过滤];
# 查询男同学和女同学各自的数学成绩,以及各自的人数, 要求:分数低于70分的不参与分组,分组之后人数大于2 select sex, avg(math), count(*) from stu where math > 70 group by sex having count(*) > 2;
分页查询
1 2
#起始索引 = (当前页码-1)*每页显示的条数 select 字段列表 from 表名 limit 起始索引, 查询条目数
数据库提高
约束
约束名称
描述
关键字
非空约束
保证列中所有数据不能有null值
NOT NULL
唯一约束
保证列中所有数据各不相同
UNIQUE
主键约束
主键是一行数据的唯一标识,要求非空且唯一
PRIMARY KEY
检查约束
保证列中的值满足某—条件
CHECK
默认约束
保存数据时,未指定值则采用默认值
DEFAULT
外键约束
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
OREIGN KEY
外键约束
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 添加外键 create table emp( id int primary key auto_increment, name varchar(100), age int, dep_id int, -- 部门,外键 -- 添加外键dep_id , 关联dept表的主键 constraint fk_emp_dept foreign key(dep_id) references dept(id) )
# 删除外键 alter table emp drop foreign key fk_emp_dept; # 建完表后添加外键 alter table emp add constraint fk_emp_dept foreign key(dep_id) references dept(id);
-- 连接查询 # 内连接A交B(交集) select * from emp, dept where emp.dep_id = dept.did; #隐式内连接 select * from emp inner join dept on emp.dep_id = dept.did; #显示内连接 # 外连接 # 左外连接查询A集合所有部分和AB交集 select * from emp left join dept on emp.dep_id = dept.did; # 右外连接查询B集合所有部分和AB交集 select * from emp right join dept on emp.dep_id = dept.did;
-- 子查询()内是子查询 # 单行单列 select * from emp where salary > (select salary from emp where name = 'xxx') # 多行单列(查市场部和财务部员工信息) select * from emp where dep_id in (select did from dept where dname = '财务部' or dname = '市场部'); # 多行多列(查询入职是2011-11-11之后的员工信息) select * from (select * from emp where join_data > '2011-11-11') t1, dept where t1.dep_id = dept.did;