MySql数据库基本命令大全
创建数据库test1
create database test1;
- 1
数据库查询
show databases;
- 1
选择要操作的数据库
use test1
- 1
查看 test1 数据库中创建的所有数据表
show tables;
- 1
创建表
# CREATE TABLE tablename (column_name_1 column_type_1 constraints,column_name_2 column_type_2 constraints , ……column_name_n column_type_n constraints)
create table emp(ename varchar(10),hiredate date,sal decimal(10,2),deptno int(2));
- 1
- 2
int(2)
表示当数值宽度小于2位时,在数字前用0填满宽度,如果只用int,不指定宽度则默认为int(11)
。 decimal(10,2)
中decimal
表示十进制,(10,2)
表示该值一共显示10位数字,其中有2位在小数点后面,10和2又称为精度和标度。decimal
在不指定精度时,默认的整数位为 10,默认的小数位为 0
查看表
desc emp;
- 1
删除表
drop table emp;
- 1
修改表类型
# ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
alter table emp modify ename varchar(20);
- 1
- 2
增加表字段
# ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]
alter table emp add column age int(3);
- 1
- 2
删除表字段
# ALTER TABLE tablename DROP [COLUMN] col_name
alter table emp drop column age;
- 1
- 2
字段改名
# ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]
alter table emp change age agel int(4);
- 1
- 2
注意:change
和 modify
都可以修改表的定义,不同的是 change
后面需要写两次列名,不方便。但是 change
的优点是可以修改列名称,modify
则不能。
修改字段排列顺序
alter table emp add birth date after ename;
alter table emp modify age int(3) first;
- 1
- 2
表改名
# ALTER TABLE tablename RENAME [TO] new_tablename
alter table emp rename emp1;
- 1
- 2
插入记录
# INSERT INTO tablename (field1,field2,……fieldn) VALUES(value1,value2,……valuesn);
insert into emp(ename,hiredate,sal,deptno) values('zzx1','2000-01-01','2000',1);
- 1
- 2
也可以不用指定字段名称,但是 values 后面的顺序应该和字段的排列顺序一致,如:
insert into emp values('lisa','2003-02-01','3000',2);
- 1
对某些属性未插入时,自动显示为NULL,如:
insert into emp (ename,sal) values('dony',1000);
- 1
修改字段排列顺序
alter table emp add birth date after ename;
alter table emp modify age int(3) first;
- 1
- 2
一次性插入多条记录
INSERT INTO tablename (field1, field2,……fieldn)
VALUES(record1_value1, record1_value2,……record1_valuesn),
(record2_value1, record2_value2,……record2_valuesn),
……(recordn_value1, recordn_value2,……recordn_valuesn);
# 一次插入两条记录
insert into dept values(5,'dept5'),(6,'dept6');
select * from dept;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
更新记录
#UPDATE tablename SET field1=value1,field2.=value2,……fieldn=valuen [WHERE CONDITION]
update emp set sal=4000 where ename='lisa';
##同时更新多个表中数据
#UPDATE t1,t2…tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]
update emp1 a,dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;
- 1
- 2
- 3
- 4
- 5
- 6
注意:多表更新的语法更多地用在了根据一个表的字段,来动态的更新另外一个表的字段
删除记录
# DELETE FROM tablename [WHERE CONDITION]
delete from emp where ename='dony';
##一次删除多个表的数据
#DELETE t1,t2…tn FROM t1,t2…tn [WHERE CONDITION]
delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3; # ????
- 1
- 2
- 3
- 4
- 5
- 6
注意: 不管是单表还是多表, 不加 where 条件将会把表的所有记录删除, 所以操作时一定要小心。
查询记录
# SELECT * FROM tablename [WHERE CONDITION]
select * from emp;
- 1
- 2
其中“*”表示要将所有的记录都选出来,也可以用逗号分割的所有字段来代替,例如
select ename,hiredate,sal,deptno from emp;
- 1
查询不重复的记录
# 查询emp表中deptno的非重复属性
select distinct deptno from emp;
- 1
- 2
条件查询
# 查询emp表中deptno=1时对应的项
select * from emp where deptno=1;
# 多字段条件查询
select * from emp where deptno=1 and sal<3000;
- 1
- 2
- 3
- 4
排序和限制
# SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2 [DESC|ASC],……fieldn [DESC|ASC]]
#把 emp 表中的记录按照sal高低排序
select * from emp order by sal;
# 对deptno 相同的前两条记录,按照sal由高到低排序
select * from emp order by deptno,sal desc;
- 1
- 2
- 3
- 4
- 5
聚合
#SELECT [field1,field2,……fieldn] fun_name FROM tablename [WHERE where_contition] [GROUP BY field1,field2,……fieldn [WITH ROLLUP]] [HAVING where_contition]
'''
fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum (求和)、 count(*) (记录数)、max(最大值)、min(最小值)。
GROUP BY 关键字表示要进行分类聚合的字段, 比如要按照部门分类统计员工数量, 部门就应该写在 group by 后面。
WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总。
HAVING 关键字表示对分类后的结果再进行条件的过滤
'''
#要 emp 表中统计公司的总人数
select count(1) from emp;
#在此基础上,要统计各个部门的人数
select deptno,count(1) from emp group by deptno;
#既要统计各部门人数,又要统计总人数
select deptno,count(1) from emp group by deptno with rollup;
#统计人数大于 1 人的部门
select deptno,count(1) from emp group by deptno having count(1)>1;
#统计公司所有员工的薪水总额、最高和最低薪水
select sum(sal),max(sal),min(sal) from emp;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
表连接
select ename,deptname from emp,dept where emp.deptno=dept.deptno;
# 可以列出另一列中不存在的name
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
- 1
- 2
- 3
子查询
select * from emp where deptno in(select deptno from dept);
#如果子查询记录数唯一,还可以用=代替 in
select * from emp where deptno = (select deptno from dept limit 1);
- 1
- 2
- 3
记录联合
mysql> select deptno from emp
-> union all
-> select deptno from dept;
# 将结果去掉重复记录后显示
mysql> select deptno from emp
-> union
-> select deptno from dept;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
按照层次查看帮助
#用 “?contents” 命令来显示所有可供查询的的分类
? contents
#用“? 类别名称”的方式做进一步查看
? data types
#快速查询某项语法
? show
#看 CREATE TABLE 的语法
? create table