数据库的定义
是指长期存储在计算机内、有组织的数据集合。简而言之,数据库就是一个存储数据的地方
数据库的分类
- 常用的关系型数据库
1、oracle:在大型项目中使用
2、MySQL:web项目中使用最广泛的关系型数据库
3、Microsoft SQL Server:在微软的项目中使用
4、SQLite:轻量型数据库,主要应用在移动平台中
- 非关系型数据库
1、Redis
2、mongpdb
3、HBASE
SQL语言分类
- DQL:数据查询语言,用于对数据进行查询,eg:select(重点内容)
- DML:数据操作语言,对数据进行增加、修改和删除。eg:insert、update、delete(重点内容)
- TPL:事务处理语言,对事务进行处理。eg:begin transaction、commit、rollback
- DCL:数据控制语言,进行授权与权限回收。eg:grant、revoke
- DDL:数据定义语言,进行数据库、表的管理登录。eg:create、drop
- CCL:指针控制语言,通过控制指针完成表的操作。eg:declare cursor
MySQL特点
- 可移植性好
- 支持多操作系统
- 支持多种编程语言
- 开源、社区版免费
- 支持多线程
- 优化SQL查询算法
- 多种数据库连接方式
- 支持多语言编码格式
连接数据库
- 在终端输入命令连接数据库
mysql -h数据库ip地址 -P端口号 -u数据库登录用户名 -p数据库登录密码
注意:若是在本机登录,无需输入ip地址和端口号,不知道ip地址 ,可以通过 “netstat -anptu | grep 端口号
” 来查询,或者ifconfig来查询ip地址
- navicat 工具连接数据库
操作MySQL数据库
- Navicat操作MySQL
数据备份操作:选中备份的数据库或表,右键选择 “ 转储SQL文件——结构和数据 ” 进行备份
数据还原操作:选中还原的数据库,右键选择 ” 运行SQL文件 “ 进行还原
- SQL语句操作MySQL
数据约束
- 主键(primary key):物理上存储的顺序
1、当把某个字段设定为主键后,该字段的值必须唯一,不能为空 2、针对主键的字段,可以设定为自动自增,自动在原来最大的ID值加1
- 外键(foreign key):维护两个表之间的关联关系
- 非空(not null):此字段不能为空值
- 空(null)和 “ “ 空字符不一样
- 唯一(unique):此字段的值不允许重复
- 默认值(default):当不填写此值时会使用默认值,如果填写则以填写为准
基础操作命令
操作数据库
- 查看所有数据库:
show databases;
- 使用数据库:
use 数据库名;
- 查看当前使用的数据库:
select database();
- 创建数据库:
create database 数据库名 charset=utf8;
- 删除数据库:
drop database 数据库名;
操作数据表
- 查看当前数据库所有的表:
show tables;
- 查看表结构:
desc 表名;
- 查看表的创建语句:
show create table 表名;
- 删除数据表:
drop table 数据表名;
增删改查
插入数据
1、插入完整的每个字段的数据:insert into 表名 values(...........);
2、插入对应某个字段的数据:insert into 表名 (字段1,字段2,字段3......) values(字段1的值,字段2的值,字段3的值......);
3、插入多条数据:insert into 表名 values(.........),(...........),(.................);
主键自增长(auto_increment)的,可以用0或者null代替
查询语句
格式:select * from 表名;
查询分段数据
格式:select 字段1,字段2,...... from 表名;
eg:select name,sex,age from students;
数据表或字段起别名
格式:
1、select 别名.字段1,别名.字段2,......from 表名 as 别名;
2、select 字段1 as 别名1,字段2 as 别名2,......from 表名;
eg :
1、select s.name,s.sex,s.age from students as ;
2、select name as 姓名,sex as 性别,age as 年龄 from students;
去重查询
格式:select distinct 字段1,字段1,......from 表名;
eg :select distinct sex,sname from students;
关键字查询
like
: 关键字
%
:匹配任意多个字符
_
: 匹配一个任意字符
eg: 1、查询姓余的学生:select * from students where sname like ‘余%’;
2、查询姓余且名字是一个字的学生:select * from students where sname like ‘余_’;
3、查询姓名中包括“白”的学生:select * from students where sname like ‘%白%’;
条件查询
in
:表示在一个非连续的范围内
between......and......
:表示在一个连续的范围内
eg:
1、查询家庭住址在北京或上海或广东的学生:select * from students where hometown in(‘北京’,‘上海’,‘广东’)
2、查询年龄在18到20的学生:select * from students where age between 18 and 20;
排序查询
格式:select * from 表名 order by 字段名1 asc|desc,字段名2 asc|desc,......;
注:
1、将行数据按照字段1排序,如果某些字段1的值相同是,则按照字段2排序,以此类推。
2、默认按照列值从小到大排列
3、asc从小到大排序,即升序 4、desc从大到小排序,即降序
聚合函数
max
:最大
min
:最小
avg
:平均值
sum
:值的总和数
count
:数据条的总和数
分组查询
格式:select 字段1,字段2,聚合函数......from 表名 group by 字段1,字段2,......;
eg:查询各种性别的人数:select sex,count(*) from students group by sex
分组后的数据筛选
格式:select 字段1,字段2,聚合函数......from 表名 group by 字段1,字段2,......having条件;
eg:
查询男生总人数:
方法一:select count() from students where sex=‘男’
方法二:select sex,count() from students group by sex having sex=‘男’
1、where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
2、having是对group by的结果进行筛选
3、having后面的条件中可以用聚合函数,where后面不可用聚合函数
分页查询
1、格式:select * from 表名 limit start,count;
当前格式是用来获取一部分的数据或者用来分页
注:从start开始,获取count条数据,start索引从0开始
eg:
查询前3行学生信息:select * from students limit 0,3;
查询第3行到第8行学生信息:select * from students limit 3,5
2、格式:select * from 表名 limit (n-1)*m,m;
注:
n表示的是页数,即显示第几页的数据,n=1,2,3,4,5
m表示的是每页显示的记录数,即显示多少条数据,m = 3
(n-1)*m , m是公式,不是语法格式,不能直接写在SQL语句中
内连接
格式:
方法一:select * from 表1 inner join 表2 on 表1.列 = 表2 . 列;
方法二:select * from 表1,表2 where 表1.列 = 表2.列;
左连接
格式:select * from 表1 left join 表2 on 表1.列 = 表2.列;
右连接
格式:select * from 表1 right join 表2 on 表.列 = 表2.列;
自关联
当前自关联的表当中一定存在两个相关联的字段关联
注:自关联要用别名
格式:select * from 表1 as A1 inner join 表1 as A2 on A1.列1 = A2.列2;
子查询(充当结果)
1、标量子查询:表示子查询的结果只有一个值
格式:select 字段1 from 表名1 where 字段2 = (select 字段2 from 表2 where 条件);
注:用等于 “=” 号连接
2、列子查询 :表示子查询的结果为一个列的值
格式:select 字段1 from 表名1 where 字段2 in (select 字段2 from 表2 where 条件);
注:用 “in” 连接
3、行子查询 :表示子查询的结果为一行的值
格式:select 字段1 from 表名1 where 字段2 on (select 字段2 from 表2 where 条件);
注:用 “on” 连接
1、in 和 =any等价
2、not in 和 !=all 等价
子查询(充当数据源)
查询数据库和系统测试的课程成绩
select a.cname b.score from scores as b inner join (select * from courses where cname in ('数据库','系统测试'))as a on a.cno = b.cno;
注:select * from courses where cname in(‘数据库’,‘系统测试’:重新定义一个数据库。别名为 “a”。再通过内连接的方式 与scores表进行连接
修改数据
格式:update 表名 set 字段名1 = 值1,字段名2 = 值2...... where 条件;
eg: update students set sname = ‘小雨’ , age = 25 where sno = 25;
删除数据
1、delete
格式:delete from 表名 where 条件 (物理删除对应的数据)
eg:delete from students where sno = 24:
2、drop 删除表,删除表的数据和表结构
格式:drop table 数据表名;
eg : drop table students;
3、truncate 删除数据,只删除数据,不删除表结构
格式:truncate table 表名;