一、数据库的操作
- 连接数据库
mysql -uroot -p ;
- 退出数据库
quit/exit/ctrl+d
- 查看所有数据库
show databases;
- 查看数据时间
select now()
- 查看数据库版本
select version
- 创建数据库
create database <数据库名> charset=utf8;
- 查看创建数据库的语句
show create database <数据库名>;# 默认的是拉定文
show create database <数据库名> charset=utf8;# 指定编码格式为utf8 - 删除数据库
drop database <数据库名>
- 使用数据库
use <数据库名>
- 查看当前使用数据库
select database();
二、 数据表操作
-
查看数据库中所有表
show tables;
-
查看表结构
desc <表名>
-
创建表结构语法
create table <table_name>( # 字段名称 数据类型 可选的约束条件 column1 datatype(int,char) contrai(primary key), column1 datatype, );
例:创建一个班级表
create table classes( id int unsigned auto_increment primary key not null, name varchar(10) );
-
修改表-添加字段
alter table <表名> add <列名> 类型;
例:
alter table staudents add birthday datetime; -
修改表-修改字段=重命名
alter table <表名> change <原名> <新名> <类型及约束>;
例:
alter table students change birthday birth datetime not null; -
修改表-修改字段不重命名
alter table <表名> modify <列名> <类型及约束>;
例:
alter table students modify birth date not null; -
修改表-删除字段
alter table <表名> drop <列名>;
例:
alter table students drop birthday; -
删除表
drop table <表名>;
例:
drop table students; -
查看表的创建语句-详细过程
show create table <表名>
例:
show create table classes
三、增删改查
查询基本使用
-
查询所有列
select * from <表名>;
列:
select * from classes; -
查询指定列
select <列1>,<列2>,… from <表名>;
例:
select id, name, age from classes; -
使用as 给字段起别名
select id as <序号>, name as <名字>, gender as <性>别 from students;
-
消除重复行
select distinct <列名> from 表名;
例:查询班级中学生的性别
select gender from students;
条件查询:
- where条件查询中的比较运算符查询
select * from <表名> where <条件>;
- 逻辑运算符
例:查询编号大于3的女同学
select * from student where id > 3 and gender=0; - 模糊查询 like %(表示多个任意字符) _(表示一个任意字符)
select * from students where name like ‘黄%’;
- 范围查询(in,between…and…)
例:查询编号是1或3或8的学生(in表示不连续查询)
select * from students where id in(1,2,3)
例: 查询编号为3至8的学生(between…and…表示连续查询)
select * from students where id between 3 and 8;
例: 查询编号为3至8的学生的男学生
select * from students where (id between 3 and 8) and gender=1;
分页查询语法
select * from 表名 limit start=0, count
例:查询前3行男生信息
select * from students where gender=1 limit 0,3;
1. 从start开始,获取count条数据
2. start默认值为0
3. 也就是当用户需要获取数据的前n条的时候可以直接写上 xxx limit n;
增加
- 全列插入: 值的顺序与表结构字段的顺序完全一一对应
insert into <表名> values(…);
例:
insert into students values(0,‘小明’,1,‘山西’); - 部分插入:值的顺序与根除的顺序对应
insert into 表名 (列1,…) values(值1,…)
例:
insert into students(name,hometown,birthday) values(‘小明’,‘日本’,‘2016-3-2’); - 部分插入多行
insert into 表名(列1,…) values(值1,…),(值1,…)…;
例:
insert into students(name) values(‘杨康’),(‘杨过’),(‘小龙女’);
修改
update <表名> set 列1=值1,列2=值2… where 条件
例:
update students set gender=0,hometown=‘北京’ where id=5;
删除
delete from 表名 where 条件
例:
delete from students where id=5;
排序
- 排序语法(order by)
select * from <表名> order by <列1> asc|desc
例:查询未删除学生信息,按名称升序
select * from students where is_delete=0 order by name;
例:显示所有的学生信息,先按照年龄从大–>小排序,当年龄相同时 按照身高从高–>矮排序
select * from students order by age desc,height desc;
空判断(is null,is not null)
- 判断为空
例:查询没有填写身高的学生
select * from students where height is null; - 判断非空
例:查询填写了身高的学生
select * from students where height is not null;
聚合函数
-
查询总数
例:查询学生总数
select count(*) from students; -
最大值
例:查询女生的编号最大值
select max(id) from students where gender=2; -
最小值
例:查询未删除的学生最小编号
select min(id) from students where is_delete=0; -
求和sum(列) 表示求此列的和
例:查询男生的总年龄
select sum(age) from students where gender=1;
平均年龄
select sum(age)/count(*) from students where gender=1; -
平均值avg(列) 表示求此列的平均值
例:查询未删除女生的编号平均值
select avg(id) from students where is_delete=0 and gender=2;
group by分组
-
group by的使用
select gender from students group by gender;
-
group_concat(字段名)根据分组结果,使用group_concat()来放置每一个分组中某字段的集合
select gender,group_concat(name) from students group by gender;
连接查询语法
- 连接查询的格式:(对于外连接 outer关键字可以省略)
select * from <表1> <inner或left或right join> <表2> on <表1.列> <运算符> <表2.列
- 使用内连接查询班级表与学生表
select * from students inner join classes on students.cls_id = classes.id;
- 使用左连接查询班级表与学生表
select * from students as s left join classes as c on s.cls_id = c.id;
- 使用右连接查询班级表与学生表
select * from students as s right join classes as c on s.cls_id = c.id;
数据库的备份与恢复
mysql dump -uroot -p <数据库名> > python.sql
mysql -uroot -p <新数据库名> < python.sql