-
一、简介
-
数据库:数据库(Database)是按照数据结构来组织、存储和管理数据的仓库 db:数据库 dbms 数据库管理系统
- 在当今的互联网中,最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库。mysql就是典型的关系型数据库。
-
关系型数据库:将数据保存在不同的表中,再将这些表放入数据库中,而不是将所有数据统一放在数据库里,这样的设计增加了MySQL的读取速度,
- 灵活性和可管理型也得到了很大提高,访问以及管理MySQL数据库的最常用标准化语言为SQL结构化查询语句。数据持久化存储在硬盘当中;
- 非关系型数据库:
-
二、关系型数据库的设计模式 ER模型和三范式
- E entity 代表实体的意思 对应到数据库中的一张表
- R relationship 代表关系的意思
- 三范式 1,字段不能拆分 2.唯一标识 3.关系引用主键
-
三、数据库的字段和约束
-
1.字段类型
- 数字:int,decimal(小数的); 例如decimal(5,2)的意思是,最大5位数,其中小数2位,1.2和2.33都行,但10000.21就不行,超出位数了
-
字符串:char varchar test ,
- text存储比较多的字符串,比如商品的描述信息
- char存储的是固定的字符串数据 char(8) 最多8位 不满8个字符会在右侧自动补上空格字符
- varchar存储的是可变的数据 varchar(30) 最多30位
- 日期:datetime,date,time 格式 "1989-12-18"
- bit:两个状态存储的时候建议使用存储0和1方式,比如性别,逻辑删除is_delete
-
2.约束
- 主键(primary key) 不能重复,唯一标识
- 非空(not null) 比如要姓名不能为空,当保存为null的时候就会报错。
- 唯一(unique) 这个值是唯一的。有重复的了会报错(比如身份证)
- 默认default;如果不写就会有个默认值,比如 default 18
- 外键foreign key:
-
四、mysql 安装
- 1.sudo apt-get install mysql-server
- 2.设置密码
-
3.Ps -ajx|grep mysql 查看进程方式检查mysql 安装成功没有
- Mysql -uroot -p你的密码 进入mysql代表安装成功
-
4.sudo service mysql start 开启mysql服务
- sudo service mysql stop 停止mysql服务
- sudo service mysql restart 重启mysql服务
-
5.外部链接数据库
- 1、进入数据库 mysql –uroot –p你的密码
- 2、show databases 查看所有的数据库
- 3、use mysql 使用mysql数据库
- 4、show tables 查看mysql库中所有的表
- 5、select user,host from user; 在user 这个表里面查看用户和用户权限字段
- 6、grant all privileges on *.* to root@"%" identified by "123456" with grant option; 创建用户并且赋予权限
- 7、delete from user where user=’root’ and host = ‘localhost’; 删除原来初始创建的root用户
- 8、flush privileges; 刷新数据库特权
-
9、sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
- 打开配置文件,将bind_address修改为0.0.0.0
- 10、重启mysql服务,使用windows下客户端进行连接
-
五、数据库操作
-
1.数据库的操作
- show databases; 查看所有库
- create database 数据库名 charset=utf8; 创建数据库
- drop database 数据库名 删除数据库名
- use 数据库 切换数据库
- select database(); 查看当前所用数据库
-
2.表操作
- show tables; 查看所有表
- create table 表名 (字段1 约束1 约束2,字段2 约束1 约束2) 创建表
- drop table 表名 删除表
- rename 旧表名 to 新表名 重命名表
-
3.字段操作
- desc 表名 查询字段(表结构)
- 增加字段 alter table 表名 add 字段 约束1 约束2
- 删除字段 alter table 表名 drop 字段
- 修改字段 alter table 表名 change 原字段 新字段名 约束
-
删除主键:需要先把主键的改为普通的id 不能是自动增长,然后再删除主键
- ① 、alter table students change id id int;
- ②、alter table students drop primary key;
- ③、alter table students change id id int auto_increment primary key not null;
-
4.数据操作
- insert into 表名 values(值,值),(值,值),(值,值) 添加三条数据 ()中字段值缺一不可,全字段插入数据
- insert into 表名(字段1,字段2) valuse(值,值) 部分字段添加数据 有默认值和not null 可以不添加数据、
- delete from 表名 where id=1 删除数据 按照查询语句查找到的数据
- update 表名 set 字段=值 where id=2 修改查询语句查找到的数据
- select * from 表名 查看表所有数据
-
六、数据库备份与恢复
- sudo mysqldump –u用户 –p密码 数据库名 > ~/Desktop/test1back.sql (> 后为备份地址 文件后缀为.sql) 备份
- sudo mysql –u用户 –p密码 数据库名 < ~/Desktop/test1back.sql 恢复
-
七、数据查询
- 1.select 列名 from 表名 查询单列数据
- 2.select distinct 列名 from 表名 去重查询单列数据
-
3.条件查询 where
-
1.比较运算符 > < = >= <= !=
- select * from 表名 where id>3;
-
2.逻辑运算符 and not or
- select * from 表名 where id>3 and id<5;
-
3.模糊查询 like _ 占一个字符位 % 占0或多个字符位
- select name from 表名 where name like "赵%" 查询姓赵的姓名
-
4.范围内查找 between .. and .. 连续 in 不连续
- select * from 表名 where id between 8 and 11 查询id是8到11的数据 包括8和11
- select * from 表名 where id in(8,11) 查询id是8和11的数据
-
5.空判断查询 is null , is not null
- select * from 表名 where birthday is null 查询 生日为空的数据
-
6.优先级
- 小括号,not,比较运算符,逻辑运算符
- and比or先运算,如果同时出现并希望先算or,需要结合()使用
-
4.聚合查询 对某一列数据进行统计
- count(列名) 统计数据总数 count(*)
- sum(数字列名) 求某一列的和
- avg(数字列名) 求某一列的平均数
- max(列名) 求某一列的最大值
- min(列名) 求某一列的最小值
- select max(name),sum(num) * from 表名
-
5.分组 group by
- 把列相同的值归为一组方便统计
- 根据一个字段进行分组后,无法看到别的字段信息但可以使用聚合其他字段
- 根据id进行分组,可以看到别的字段信息
- select count(*) from 表名 group by gender 根据性别字段gender分组,然后统计总数
- 分组后的数据筛选要用having而不用where,having后面的条件运算符与where一样
- where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
- having是对group by的结果进行筛选
- select count(*) from 表名 group by gender having id>3 根据性别字段gender分组,筛选出id>3 的,然后统计总数
-
6.排序 order by
- order by [列1],[列2]
- 先按照列1去排序,默认是按照asc排序(正序),如果要倒序,在列后面加desc。
- 按照列1排序完成后,如果有顺序相同的,再按照列2进行排序。
- select * from 表名 列1 asc,列2 desc; 按照列1正序排序完成后,如果有顺序相同的,再按照列2倒序。
-
7.限制集(分页)
- limit [start],[count]
- start 为开始的id,count 每页数据数
- 求第n页的数据
- select * from 表名 where is_delete=0 limit (n-1)*m,m 每页m条数据
-
8.完整的sql语句
- select distinct * from 表名 where ... group by having order by limit start count
- 执行顺序 from 表名 where .... group by ... having ... select distinct * order by ... limit star,count