DML:data manipulation language 数据操作语言:增删改查
insert、delete、update、select
DDL:data definition language 数据定义语言:就是我们在创建表的时候用到的一些sql,
create、alter、drop
DCL:data control language 数据控制语言:是用来设置或更改数据库用户或角色权限的语句
grant、revoke
登录mysql:
mysql -uroot -proot
mysql -uroot -p 回车之后再输入密码
mysql -uroot -p -h主机名或ip地址 -P端口
退出连接:
quit/exit
查库:
show databases;
创库:
create database mydb1 charset utf8;
删库:
drop database if exists mydb1;
备库:
-- 在cmd窗口中(未登录的状态下)
mysqldump -uroot -proot mydb1 > d:/mydb1.sql -- 备份单个
mysqldump -uroot -p --databases db30 db40 > d:/db3040.sql -- 备份多个
mysqldump -uroot -p -A > d:/all.sql --备份所有
恢复库:
方式一:
-- 在cmd窗口中(已登录的状态下),先创建库
-- 在cmd窗口中(未登录的状态下) mysql -uroot -p db60 < d:/db40.sql
方式二:
-- 在cmd窗口中(已登录的状态下),先创建库
-- 再通过source执行指定位置下的sql文件:source d:/db40.sql
进入某库:
use mydb1;
查表:
show tables;
创建表:
create table stu(
id int primary key auto_increment, -- 主键自增
name varchar(50) not null, -- 非空约束
birthday date unique, -- 唯一约束
score double
dept_id int;
primary key(stu_id,tea_id), -- 建表时设置联合主键
foreign key(dept_id) references dept(id) -- 外键约束
on update cascade -- 级联更新
on delete cascade -- 级联删除
);
查看建表语句:
show create table stu;
删表:
drop table stu;
查看表结构:
desc stu;
新增/修改/删除表记录
新增表记录:
insert into stu(id,name,gender,birthday,score) values(1,'张飞','男','2000-1-1',89);
insert into stu value(2,'赵云','男','2001-12-11',75);
修改表记录:
update stu set score=score+10;
alter table stu add gender varchar; -- 新增列
alter table stu modify id int primary key auto_increment; --添加主键及主键自增
alter table stu modify double not null; -- 添加非空约束
alter table emp add foreign key(dept_id) references dept(id); --添加外键约束
alter table emp drop foreign key emp_ibfk_1(外键名); -- 删除外键
alter table stu modify id int; -- 这是删除自增
alter table stu drop primary key; -- 这是删除主键约束
alter tavle stu to student; -- 修改表名
删除表记录:
delete from stu; -- 删除stu表中的所有记录
delete from stu where id>3; -- 删除复合条件的记录
alter table stu drop score; --删除列
单表查询:
1.基础查询
select * from emp;
select distinct bonus from emp; -- distinct用于剔除重复记录
2.where子句查询
<>等同于!=
between 10 and 100 某个范围内 等同于10<X<100
in(10,100,1000)符合任意一个 等同于 10 or 100 or 1000
like模糊查询+ %: 可以通配表示0个或多个任意字符
_: 可以通配表示一个任意字符
ifnull(列名,值):如果有null值,用第二个值替换
3.函数查询
count(*|列名) -- 统计多少行记录
max(列) -- 求最大值
min(列) -- 求最小值
sum(列) -- 求和
avg(列) -- 求平均值
curdate() -- 返回一个年月日格式的日期
curtime() -- 返回一个时分秒格式的时间
sysdate()/now() -- 返回一个年月日 时分秒格式的时期加时间
year(),month(),day(),hour(),minute(),second()
-- 上面的函数分别用于获取年月日时分秒中的年份/月份/天数/小时/分钟/秒值
concat(s1,s2,s3...sn)
-- 将传入的多个字符串连接在一起
concat_ws(x,s1,s2,s3...sn)
-- 将传入的多个字符串连接在一起,每两个连接时会通过x作为分隔符进行连接
4.分组查询
group by 列名
5: 排序查询
order by 列名 asc/desc
asc: 默认的, 升序, 从低到高
desc: 降序, 从高到低
6: 分页查询
limit (页码-1)*每页显示的记录数, 每页显示的记录数
多表查询:
1.连接查询:a*b条纪录
select * from a,b;
2.左关联查询:a表独有和ab表共有数据
select * from a left join b on a.id=b.id;
3.右关联查询: b表独有和ab表共有数据
select * from a right join b on a.id=b.id;
4.查询:取a表独有数据 共享部分不要
select a.* from a left join b on a.id=b.id where b.id is null;
5.查询:取b表独有数据 共有数据不要
select b.* from a right join b on a.id=b.id where a.id is null;
6.查询:取a b表共有数据
select * from a join b on a.id=b.id;
7.查询:取a b表全有数据
select * from a left join b on a.id=b.id
UNIon
select * from a right join b on a.id=b.id;
8.查询:取a表和b表独有部分
select a.* from a left join b on a.id=b.id where b.id is null;
UNIon
select * from dept d
select b.* from a right join b on a.id=b.id where a.id is null;
mysql中的事务操作
开启事务: begin; | start transaction;
结束事务: 提交(commit), 回滚(rollback)