mysql笔记
修改(alter):
//增加列
alter table 表名 add(
列名 属性
);
//修改列属性
alter table 表名 modify(
列名 属性
);
//删除列
alter table 表名 drop
列名;
//修改表名
alter table old表名
rename to new表名;
权限:
//创建用户
create user 用户名@ip identified by '密码';
create user 用户名@‘%’ identified by '密码';不受ip限制
//登录
root用户:MySQL -u root -p
其它用户:mysql -u用户名 -p密码 -hIP
//给用户授权
grant 权限1,权限2,...,权限n on 数据库.* to 用户名@ip
权限:all create alter drop insert update delete select
//撤销权限:
revoke 权限 on 数据库.* from 用户@ip
//查看权限:
show grant for 用户名@ip
//删除用户:
drop user 用户@ip
查询时取消公共部分:
select distinct * from 表名
列运算:
//在进行加法运算时,null加任何数都为null,这时用到一个函数ifnull(null,0),意思是若值为null变为0
//例如:
select *,sal+ifnull(comm,0) from emp;
字符串类型的连续运算(concat):
select concat(name,job) from emp;
给列起别名(as可以省略):
select concat(name,job)as 别名 from emp;
select concat(name,job) 别名 from emp;
模糊查询:
select * from emp where name like ‘张_’;(一个_代表一个字符)
select * from emp where name like ‘张%’;(一个%代表多个字符)
排序:
//默认asc升序,desc降序
select * from emp order by sal asc;
select * from emp order by sal asc,comm desc;
聚合函数:
//计数(有效行数,不为null):
select count(*) from emp;
//最大值
select max(sal) from emp;
//最小值
select min(sal) from emp;
//和
select sum(sal) from emp;
//平均数
select avg(sal) from emp;
分组查询:
select job,count(*) from emp group by job;
//若分组条件在分组前的
select job,count(*) from emp where sal > 15000 group by job;
//若分组条件在分组之后的
select job,count(*) from emp where sal > 15000 group by job having count(*) >= 2;
分页查询:
//从下标5开始查,查5行
select * from emp limit(5,5);
数据库的备份及恢复:
//数据库的导出(备份):
mysqldump -uroot -p**** 数据库名>路径.sql
//恢复数据库内容(先创建)
mysql -uroot -p**** 数据库<路径.sql
//登录mysql执行:
source 路径.sql
约束关键字及外键约束语法:
约束:
自增长auto_increment
唯一:unique
外键约束:
constraint 约束名 foreign key(本表列名) references 主表名(列名)
合并查询(要求两个表[结果集]的列数和属性相同,去掉all结果相同的合并只显示一条)
select *from ab
union all
select *from cd;
连接查询(内连接 ):
//标准:
select e.ename,e.sal,d.dname
from emp e inner join dept d
on e.deptno=d.deptno;
//方言:
select e.ename,e.sal,d.dname
from emp e , dept d
where e.deptno=d.deptno;
//自然:
select e.ename,e.sal,d.dname
from emp e natural join dept d
外连接:
//外连接有主次,左外即以左表为主,那么查询记录中无论满足不满足条件,都会打印出来。不满足条件时,默认null来表示
//左外查询
select e.ename,e.sal,d.dname
from emp e left outer join dept d
on e.deptno=d.deptno;
//右外查询
select e.ename,e.sal,d.dname
from emp e right outer join dept d
on e.deptno=d.deptno;
//全外查询(mysql不支持)
select e.ename,e.sal,d.dname
from emp e full outer join dept d
on e.deptno=d.deptno;
//变相方法(全外)
select e.ename,e.sal,d.dname
from emp e left outer join dept d
on e.deptno=d.deptno
union
select e.ename,e.sal,d.dname
from emp e right outer join dept d
on e.deptno=d.deptno;