ubuntu16.04上mysql--02使用

重点内容


01 mysql简介

字段类型

  • 在mysql中包含的数据类型很多,这里主要列出来常用的几种
    • 数字:int,decimal
    • 字符串:varchar,text
    • 日期:datetime
    • 布尔:bit

约束

  • 主键primary key
  • 非空not null
  • 惟一unique
  • 默认default
  • 外键foreign key

逻辑删除

对于重要数据,不能进行物理删除,会设置一个isDelete的列,类型为bit,表示逻辑删除;对于大量增长的非重要数据,可以进行物理删除

02 数据库操作

001 数据库操作

'数据库操作'
# 创建数据库
create database 数据库名 charset=utf8;
# 删除数据库
drop database 数据库名;
# 切换数据库
use 数据库名;
# 查看当前选择的数据库
select database();

'表操作'
# 查看当前数据库中所有表
show tables;

# 创建表
# auto_increment表示自动增长
create table 表名(列及类型);
# eg:
create table students(
id int auto_increment primary key,
sname varchar(10) not null
);

# 修改表
alter table 表名 add|change|drop 列名 类型;
# eg:
alter table students add birthday datetime;
# 删除表
drop table 表名;
# 查看表结构
desc 表名;
# 更改表名称
rename table 原表名 to 新表名;
# 查看表的创建语句
show create table '表名';

002 数据操作

'查询'
select * from 表名
# 增加
# 全列插入:insert into 表名 values(...)
# 缺省插入:insert into 表名(列1,...) values(值1,...)
# 同时插入多条数据:insert into 表名 values(...),(...)...;
# 或insert into 表名(列1,...) values(值1,...),(值1,...)...;
# 主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功后以实际数据为准

'修改'
update 表名 set1=值1,... where 条件
'删除'
delete from 表名 where 条件
# 逻辑删除,本质就是修改操作update
alter table students add isdelete bit default 0;
# 如果需要删除则
update students isdelete=1 where ...;

003 备份与恢复

'数据备份'
# 进入超级管理员
sudo -s
# 进入mysql库目录
cd /var/lib/mysql
# 运行mysqldump命令
mysqldump –uroot –p 数据库名 > ~/Desktop/备份文件.sql;
# 按提示输入mysql的密码

'数据恢复'
# 连接mysqk,创建数据库
# 退出连接,执行如下命令
mysql -uroot –p 数据库名 < ~/Desktop/备份文件.sql
# 根据提示输入mysql密码

004 数据查询

条件查询

'比较运算符'
# 查询编号不大于4的科目
select * from subjects where id<=4;
# 查询姓名不是“黄蓉”的学生
select * from students where sname!='黄蓉';
# 查询没被删除的学生
select * from students where isdelete=0;

'逻辑运算'
# 查询编号大于3的女同学
select * from students where id>3 and gender=0;
# 查询编号小于4或没被删除的学生
select * from students where id<4 or isdelete=0;

'模糊查询'
# like
# %表示任意多个任意字符
# _表示一个任意字符
# 查询姓黄或叫靖的学生
select * from students where sname like '黄%' or sname like '%靖%';

'范围查询'
# in表示在一个非连续的范围内
# 查询编号是1或3或8的学生
select * from students where id in(1,3,8);
# between ... and ...表示在一个连续的范围内
# 查询学生是3至8的男生
select * from students where id between 3 and 8 and gender=1;

'空判断'
# 注意:null与''是不同的
# 判空is null
# 判非空is not null
# 查询填写了地址的女生
select * from students where hometown is not null and gender=0;

'优先级'
# 小括号,not,比较运算符,逻辑运算符
# and比or先运算,如果同时出现并希望先算or,需要结合()使用

聚合运算

'count(*)表示计算总行数,括号中写星与列名,结果是相同的'
# 查询学生总数
select count(*) from students;

'max(列)表示求此列的最大值'
# 查询女生的编号最大值
select max(id) from students where gender=0;

'min(列)表示求此列的最小值'
# 查询未删除的学生最小编号
select min(id) from students where isdelete=0;

'sum(列)表示求此列的和'
# 查询男生的编号之后
select sum(id) from students where gender=1;

'avg(列)表示求此列的平均值'
# 查询未删除女生的编号平均值
select avg(id) from students where isdelete=0 and gender=0;

分组

# 查询各城市人数
select hometown as 家乡,count(*)
from students
group by hometown;
# 分组后的数据筛选

查询男生总人数
方案一
select count(*)
from students
where gender=1;


方案二:
select gender as 性别,count(*)
from students
group by gender
having gender=1;

对比where与having

where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
having是对group by的结果进行筛选

排序

# 查询未删除男生学生信息,按学号降序
select * from students
where gender=1 and isdelete=0
order by id desc;
# 查询未删除科目信息,按名称升序,默认是升序
select * from subject
where isdelete=0
order by stitle;

分页

获取部分行
当数据量过大时,在一页中查看数据是一件非常麻烦的事情

# 语法
select * from 表名
limit start,countstart开始,获取count条数据
start索引从0开始
# 示例:分页
# 已知:每页显示m条数据,当前显示第n页,求总页数:
# 查询总条数p1,使用p1除以m得到p2,如果整除则p2为总数页,如果不整除则p2+1为总页数
# 求第n页的数据
select * from students
where isdelete=0
limit (n-1)*m,m
阅读更多
文章标签: mysql
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭