数据库:按一定的格式存储和管理的数据的仓库。
数据库的分类:
1、关系型数据库 :一张张二维表 表与表之间存在一定的关系
代表:MySQL、 SQL server、Oracle
2、非关系型数据库:数据采用键值对的方式存储
代表:mangoDB Redis
特点:永久存储、读写速度高、保证数据有效性。
数据库和数据库管理系统的关系:数据库管理系统是管理数据库的的软件(应用软件)。
服务端软件:管理数据库。()
客服端软件:主要负责和服务端进行通信,向服务端传输数据和向服务端获得数据。
实现服务端与客户端通信的桥梁是SQL语言。
SQL语言主要分为:
1、DQL: data query language eg:select
2、DML:data manage language
3、DDL:data define language
4、DCL:data control language
5、TPl:事务处理语言
MySQL:数据类型和约束
1、数据类型:int bit decimal varchar char data time datatime enum
图片、音频、视频可以存在数据库中,但是我们不这么做,而是上传到某个服务器中,在数据库表中存储该文件路径。
当字符串大于4000(大文本)时推荐使用text表示。
2、约束类型:
(1)primary key mysq建议所有表主键字段都叫id,类型为int unsigned
(2)not null
(3)unique
(4)default
(5)foregin key
sudo apt-get install mysql-server
2、查看MySQL安装情况
apt-cacche show mysql-server
3、查看MySQL的状态
service mysql status
4、启动
service mysql start
5、停止
service mysql stop
6、重启
service mysql restart
7、查看配置文件的介绍
cd /etc/mysql/mysql.conf.dvim mysqld.cnf
port:默认端口号
datadir:数据库的保存路径
bind-address:表示服务器绑定的ip
6、登录MySQL
mysql -uroot -p (回车后输入mysql密码)
7、退出数据库
exit、quit、ctrl+d
以下是SQL语言,每句以;(分号)结尾。
1、创建数据库
create database databaseName charset=utf8;
note:若不指定charset(编码格式)只能是英文。
2、查看数据库
show databases;
3、使用数据库
use databaseName;
4、查看当前所在数据库
select datadse();
5、删除数据库
drop database databaseName; (这块我drop这个单词老是打错)
1、创建表
create table 表名(属性1 类型 约束,属性2 类型 [约束],...);(不同字段间无空格)
2、删除整张表
drop tablename;
3、查看创表语句
show create table 表名;
查看表结构:
desc 表名;
4、修改表(alter)-添加字段
alter table tableName add 字段名 类型 约束;
5、alter - 修改字段属性或约束
alter table tableName modify 属性名 新类型 新约束;
7、alter-修改字段
alter table tableName change old属性名 new属性名 类型 约束;
8、alter-删除字段
alter table tableName drop 字段;
1、向表中插入数据(insert into)
insert into 表名 valus(按字段一一添加);
insert into 表名(字段列表)values(按字段列表一一添加);
inser into 表名 values (第一行),(第二行)...;
inser into 表名(指定字段名) values(按字段第一行),(按字段第二行)...;
2、更新数据(update set)(note :update是e 结尾 不是a结尾!!!)
update 表名 set 属性=xx...[where 条件];
3、删除(delete from 物理删除)
delete form 表名 where 条件;
物理删除,一旦删除就不容易恢复,使用逻辑删除的方式可以解决这个问题。
添加删除表示字段,0表示未删除 1表示删除
alter table tableName add isdelete bit default 0;
逻辑删除数据
update tableName set isdelete = 1 where id = n;
note:对于自增列 给 0、default、null 都可以。
4、as关键字—取别名
select name as 姓名, gender as 性别, height as 身高 from students;
5、distinct关键字—去重复
select distinct 字段一, 字段二 from tablename;
下面的命令以
表名为table
字段名:id name gender age height isdelete
的表为例。
1、比较运算符
<
>
=
<=
>=
!= <>
查询年龄小于18的学生
select * from students where age < 18;
查询年龄不小于16的学生
select * from student where age >= 16;
查询年龄不在16到18的学生
select * from student age>18 and age <16;
查询id不等于3的学生
select * from student where id !=3;
2、逻辑运算符
and
or
not
查询年龄大于16的男生
select * form student where gender='男' and age > 18;
查询年龄不再10到18之阿金的学生
select * from student where not(age >= 10 and age <=18);
3、范围查询
between and
in 元祖
查询年龄在10到18之间的学生
select * form student where age between 10 and 18;
查询年龄不在10到18之间的男生
select * from student where (not id between 10 and 18)and gender='男';
4、模糊查询:like
通配符:-(单个字符)、%(任意多个字符)
查询姓牛的女学生
select * from student where like name='牛%' and gender='女';
5、空判断
is null
is not null
c查询没有性别的学生
select * from student where gender is null;
升序:asc
降序:desc
mysql 默认是升序
select * form 表名 order by 字段1 asc|desc,字段2asc|des,...asc|desc
语法说明:order by 对select的结果进行升序或者降序排序。
先按照列1排序,列1相同时再按列2排序。
查询学号前二十的女同学按升高降序排序
select * from student where id<20 and gender='女' order by height desc;
查询所有学生 按年龄从小到大排序,年龄相同按身高从大到小排序
select * from student order by age, height desc
select * from 表名 limit start,count;
limit 关键字用于限制数据显示数量,start:开始索引 ,默认0 count: 查询条数
查询学生表获取第n 页数据
select * from student limit (n-1)m,m;
种类:
1、count(字段)
2、max(字段)
3、min(字段)
4、sum(字段)
5、avg(字段)
聚合函数默认自动忽略字段为 null的记录 可用ifnull(字段,values)对null做替换。
聚合函数一般结合分组来使用
分组查询在不使用聚合函数以及group_concat()的情况下,只显示分组字段。对一个字段进行分组的时候可用distinct实现。
语法:
group by 列名 [having 条件][with rollup]
根据性别分组
select gender from student group by gender;
根据性别和年龄进行分组——姓名和年龄都相同的才会分为一组。
select gender,name from student group by gender, name
group by + group_concat
按年龄分组 ,并显示每个分组姓名字段信息集合
select age, group_concat(name) from student group by age;
group by + 聚合函数
统计不同性别人数
select gender, count(*) from students group by gender;
group by + having——having 过滤分组数据专用
根据性别进行分组 统计年龄大于20的人数
select gender, count(*) from students group by gender having age>18;
group by + with rollup
在记录最后新增一行,显示查询时聚合函数统计和计算结果
select gender,count(*) from students group by gender with rollup;