数据库基础mysql-爱代码爱编程
数据库概述
数据库(DataBase)为了方便数据的存储和管理,它将数据按照特定的 规则存储在磁盘上,就是一个存储数据的仓库。
● 数据库的相关概念 DB:数据库(DataBase) 存储数据的容器,它保存了一系列有组织的数据。
DBMS:数据库管理系统(DataBase Management System) 又称为数据库软件或数据库产品,用于创建或管理DB。
● 常见的数据库产品:
国外
MySQL 快捷、可靠 开源、免费 Oracle:功能强大,收费.
SQL Server(微软): 只能安装在Windows操作系统 DB2 (IBM):适合处理海量数据,收费.
国内
南大通用GBASE: 天津南大通用数据技术股份有限公司
达梦:武汉达梦数据库股份有限公司
人大金仓:北京人大金仓信息技术股份有限公司 神通:神舟通用公司
Mysql数据库
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目 前属于 Oracle旗下产品。MySQL 流行的关系型数据库管理系统。
● MySql是一种关系数据库管理系统。
● MySql软件是一种开放源码软件,你可以修改源码来开发自己的 Mysql 系统。
● MySql数据库服务器具有快速、可靠和易于使用的特点。
● MySql使用标准的sql语言,并且支持多种操作系统,支持多种语言.
● mysql商业版与社区版
● MySQL商业版是由MySQL AB公司负责开发与维护,需要付费才能使用
● MySQL社区版是由分散在世界各地的MySQL开发者、爱好者一起开发与维 护,可以免费使用
●命令行方式连接mysql 登录:mysql [-hlocalhost -P3306](本机可省略) -uroot -p(可以直 接写密码,不能有空格)-h:主机名-P:端口号-u:用户名-p:密码 退出:exit
• MySQL的常用命令 查看当前所有的数据库:show databases; 选择指定的库:use 库名 查看当前的所有表:show tables; 查看其他库的所有表:show tables from 库名; 查看mysql版本 select version();
• 安装可视化客户端工具 SQLyog / Navicat
sql
● 结构化查询语言(Structured Query Language)简称SQL,是一种特殊 目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以 及查询、更新和管理关系数据库系统. SQL优点: 不是某个特定数据库供应商专有的语是言,几乎所有DBMS都支持SQL 简单易学,灵活使用可以进行非常复杂和高级的数据库操作
DDL数据(结构)定义语言(Data Definition Language)
●数据(结构)定义语言DDL(Data Definition Language),是用于创 建和修改数据库表结构的语言。 ●常用的语句:create ,alter,drop,rename
数据库
创建数据库
CREATE DATEBASE [if not exists] 数据库名[CHARSET utf8]
删除数据库
DROP DATEBASE 数据库名[IF EXISTS 数据库名]
修改字符集
ALTER DATABASE 数据库名 CHARSET gbk
设计表
对于具体的某一个表,在创建之前,需要确定特征:
1.表名(表信息) ---学生信息表
2.表中的字段(列)---姓名 学号 性别
3.字段的数据类型和长度
4.约束
数据类型:
char(n) 长度为n的定长字符串,最大长度255个字符,固定存储为n个字符,长度如果不够n,默认补空格。
varchar(n) 最大长度为n的可变长字符串 ,n是最大长度,如果存储不够n,则存多少字符占有多少空间位置。
date 日期, 包含年月日
datetime 年月日 时分秒
浮点
decimal 数据类型(M,D)
M:精度,数据的总长度;
D:标度,小数点后的长度
删除表
DROP TABLE [if exists] 表名
修改表名
RENAME TABLE 旧表名 TO 新表名
复制表结构
CREATE TABLE 新报名 LIKE 被复制表名
约束
PRIMARY KEY 设置主键约束 添加主键约束后,值不能重复,一个表中只能有一个列是主键 。主键列可以唯一的表示某一行数据,mysql中主键可以设置为自动增长 AUTO_INCREMENT,只能为整数类型。
NOT NULL 不能为空约束
UNIQUE 唯一性约束 表示不能重复
检查约束 设置条件 CHECK(条件)
注释
COMMENT ‘注释内容'
数据操纵语言DML(Data Manipulation Language)
插入数据
方式1: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);
方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;
方式3: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);
方式4:INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)
修改数据
UPDATE 表名 SET 列名 = ‘新值’WHERE 条件
修改表 alter table 表名 add 列名 数据类型
删除数据
DELETE FROM 表名 WHERE 条件
TRUNCATE TABLE 表名;清空整张表
DQL(Data Query Language)数据查询语言查询是使用频率最高的一个操作, 可以从一个表中查询数据,也可以从多个表中查询数据
查询数据
select 查询列表 from 表名
查询列表可以是:表中的字段、常量、表达式、函数
查询的结果是一个虚拟的表格
特定列查询:select column1,column2 from table
全部列查询: select * from table
算数运算符:+ - * /
排除重复行: select distinct column1,column2 from table
查询函数:select 函数; / 例如version()
逻辑处理
case when 条件 then 结果1 else 结果2 end; 可以有多个when
ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回 原本的值
if函数:if else的 效果 if(条件,结果1,结果2)
数学函数
round(数值):四舍五入
ceil(数值):向上取整,返回>=该参数的最小整数
floor(数值):向下取整,返回<=该参数的最大整数
truncate(数值,保留小数的位数):截断,小数点后截断到几位
mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
rand():获取随机数,返回0-1之间的小数
日期函数
now():返回当前系统日期+时间 年月日时分秒
curdate():返回当前系统日期,不包含时间 年月日
curtime():返回当前时间,不包含日期 时分秒
可以获取指定的部分,年、月、日、小时、分钟、秒
YEAR(日期列), year(日期) 将日期格式化为年
MONTH(日期列),
DAY(日期列) ,
HOUR(日期列) ,
MINUTE(日期列)
SECOND(日期列)
str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期
date_format(日期列,格式):将日期转换成字符串
datediff(big,small):返回两个日期相差的天数 big-small
日期格式
分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计数 (非空)
1.sum,avg一般用于处理数值型max,min,count可以处理任何类型 2.以上分组函数都忽略null值
3.count函数的一般使用count(*)用作统计行数
4.和分组函数一同查询的字段要求是group by后的字段
## 条件查询
使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。
语法:
select <结果> from <表名> where <条件>
比较
=, != 或<>, >, <, >=, <=
逻辑运算
and 与
or 或
not 非
模糊查询
LIKE :是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值 或数值型.
通配符: % 任意多个字符
between and 两者之间,包含临界值;
in 判断某字段的值是否属于in列表中的某一项 not in()不满足其中的
IS NULL(为空的)或 IS NOT NULL(不为空的) 查询身高为null的值或不为null的值
1.UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]
合并时列数必须相等 会自动过滤重复的数据
2.UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all , mysql 会把所有的记录返回,且效率高于union 。
排序
查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC
asc代表的是升序,desc代表的是降序,如果不写,默认是升序
order by子句中可以支持单个字段、多个字段
数量限制
limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)
SELECT * FROM table LIMIT offset rows;
SELECT * from table LIMIT 0,5
limit 开始查询的位置,每次查询的个数
从第零个数据开始查询 查询五个数据
分组查询 语法:
select 分组函数,列(要求出现在group by的后面) from 表 [where 筛选条件] group by 分组的列表 [having 分组后的筛选] [order by 子句]
注意:查询列表比较特殊,要求是分组函数和group by后出现的字段 分组查询中的筛选条件分为两类:
数据库设计范式(数据库设计规则)
如何将多个信息合理的进行组织
设计三范式
1.第一范式(确保每列保持原子性)
第一范式就是最基本的范式。数据库表中的所有字段值都是不可分解的原子值。
2.第二范式(要有主键,要求其他字段都依赖于主键,能唯一的表示某条记录的列,有些表中可以没有主键)
3.第三范式:确保每列都和主键列直接相关,而不是间接相关,要求一个数据库表中不包含已在其他表中包含的非主关键字信息(一张表中存储一类信息,在一张表中关联其他表中的数据时,只需要关联主键列即可。)
外键
外键:与另一个表的主键关联
外键约束
1.不加外键约束
可以任意的对表数据进行操作,即使两个表中的数据对应不上也没有问题
2.添加外键约束
alter table 表名1 add constraint fk_表名1_表名2 foreign key(表名1的相关列名) references 表名2(相关列名)
添加外键约束后,两张表操作时,不能导致外键和主键对应关系不成立
删除外键
alter table 表名 drop foreign key 约束名
关联查询
多表关联在一起查询
关联时没有任何的限制,会产生笛卡尔乘积现象
内关联
左外关联
右外关联
group_concat() 在多对多的情况下,可以将同一组中的多个名字连接起来
子查询
出现在其他语句中的select语句,称为子查询或内查询;外部的查询语句,称为主查询或外查询
分类:
按子查询出现的位置:
from后面:支持表子查询 把子查询的结果当做另一个表的数据来源
where:支持标量子查询,列子查询
按功能、结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
表子查询(结果集一般为多行多列)