数据库备份 mysqldump -uroot -p 数据库名 > ~/bak.sql
恢复 mysql -uroot -p 数据库名 < ~/bak.sql
show databses; 查看所有数据库
select database(); 查看当前使用的数据库
create database test charset = utf8;创建test数据库
use test; 切换test数据库
drop database test;删除test数据库
show tables;查询表
create table student(
id int auto_increment primary key,
sname varchar(9) not null
); 创建一张表, auto_increment自动增长
desc student;查询表结构
alter table 表名 add|change|drop 列名 类型;
如:
alter table student add Delete bit default 0; 添加一列
show create table student; 查看创建表的语句
rename table student to stu;更改表名
drop table student; 删除表
insert into student values();全列插入数据(需要按照结构全部都填写数据)
insert into student() values();缺省插入,只需要插入部分
insert into student values(),(),(); 多行数据插入
update 表名 set 列1=值1,.... where 条件; 修改数据
delete from 表名 where 条件; 删除数据
查询:
select * from student; 查询表
select distinct age,id from student; 消除age列与id列的重复行 id相同并且age相同才算是重复行,这两个为一行看做一个整体
select * from student where name like '王_'; 模糊查询like _表示任意一个字符 %表示任意字符
in用来在非连续的范围查询,between.....and.....用来在连续的范围查询
select * from student where id in (1,3,5);
select * from student where id between 1 and 5;
null 并不等于 '' null是不占用空间。
聚合:
count()统计总行数 max(列)求此列最大值 min(列)求此列最小值 sum(列)求此列的和 avg(列)求此列的平均值
分组:
group by
select 列1,列2,聚合函数 from student group 列1, 列2;按列1,列2分组,就只可以看到列1与列2的值。
having 对分组后的数据条件筛选等价于where。区别是where对原始集筛选。
排序:
order by 列1 asc|desc ; asc为升序,desc为升序
分页:
select * from student limit start,count; start从0开始编号
每条显示m条数据,显示n页 (n-1)*m,m;
select distinct * from student where .... group by .... having ..... order by .... limit start,count; 查询语句的顺序
连接查询:
inner join 内连接
left join左连接
right join右连接
full join全连接
select s.name, m.mark from student s inner join mark m on s.id = m.studentid;
select student.name, sum(scores.score) from student inner join score join student.id = score.id where gender = 1 group by name;
自关联:
create table areas( id int auto_increment primary key, title varchar(20), pid int, foreign key(pid) references areas(id) );
外键pid 引用自身的id 关联起来。
视图:
视图是从数据库中导出的表,应用程序可以直接从视图中取数据,不会改变数据库
create view v__stu as select * from student; 创建一个v__stu视图,根据select语句的结果集产生的表
事务:
四大特性(ACID)
- 原子性:表示组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有的操作执行成功,整个事务才能提交,事务中任何一个数据操作失败,已经执行的任何操作都必须撤销,让数据库返回到初始状态。
- 一致性:事务操作成功后,数据库所处的状态和他的业务规则是一致的,即数据不会被破坏。
- 隔离性:在并发数据操作时,不同的事务拥有各自的数据空间,他们的操作不会对对方产生干扰。
- 持久性:一旦事务提交成功后,事务中所有的数据操作都必须被持久化到数据库中,及时事务提交之后,数据库马上崩溃,在数据库重启之后能够通过某种及时回复数据。
在添加、更改、删除时,使用事务
begin、commit、rollback
begin后的语句执行,会创建一个内存级的临时表,commit会将临时表修改到数据库中
rollback回到begin之前
索引:
提高了查询效率,但是占用物理空间,在更新表时,不仅要更新数据库还需要维护索引文件,开销很大
create index nameIndex on student(name(20));