数据库:
什么是数据库?
数据库提供一个存储空间用于存放各种数据(其中包括整型、文本、小数、日期等),我们可以将数据库看作是一个存储数据的容器。
数据管理管理系统:
专门用于创建和管理数据库的一套软件。介于操作系统和编程应用程序项目之间。数据库管理系统
- Access 微软出品, 按键精灵、易语言
- Sqlite 嵌入式数据 Android 51仿真、 C++(QT)
- MsSql SqlServer 微软出品 Asp、Asp.net(C#)
- MySQL 最早是一个大学生组织开发。 而后被德国的AB公司收购! 目前被Oracle收购!
- 免费开源
- 6.x之后进行商业收费!
MySQL5.0 是myisam引擎
MySQL5.5.5.65.7 是Innodb引擎
- informax IBM 银行
- Oracle 甲骨文 大型数据库:
- 地位:
- 全球第一大数据库厂商
- 第二大软件供应商
- Db2
RDBMS:
关系型数据库
Mysql
Oracle
SQlserver
非关系型数据库
nosql: not only sql 应用于云计算/大数据方面
关系型数据库和非关系型数据库的区别?
1 看 是否 是 二维表!
- 有无元组
- 行和列
下载数据库
安装数据库
1命令:
- 查询所有数据库
show databases;
- 选择数据库
use 0315;
- 查询该数据库内 所有的表
show tables
Sql语言划分:
DDL 数据定义语言 Data Definition Language
关键字 | 描述 |
create | 创建 |
alter | 修改 |
drop | 删除 |
DCL 数据控制语言 Data Control Language
关键字 | 描述 |
grant | 赋予权限 |
revoke | 撤销权限 |
DML 数据操纵语言 Data Manipulation Language
关键字 | 描述 |
insert | 插入表数据 |
update | 更新表数据 |
delete[荐 ]/ truncate | 删除表数据 |
DQL 数据查询语言 Data Query Language
关键字 | 描述 |
select | 查询 |
TCL 事务控制语言 Transaction Control Language
关键字 | 描述 |
begin transaction/savePoint | 开启事务/保存点 |
rollback | 回滚 |
commit | 提交 |
数据库 、 表、 数据 有什么区别?
现有数据库、其次有表、再其次有数据记录
传统类型项目大致有:
缩写 | 中文描述 |
ERP | 企业资源计划 |
CRM | 客户关系管理 |
OA | 办公自动化系统 |
邮箱系统 | |
BOS | 商务操作系统 |
EHR | 人力资源管理 |
权限管理系统最少要有五张表:
表一 | 表二 | 表三 | 表四 | 表五 |
用户 | 权限 | 角色 | 用户_角色 | 权限_角色 |
约束信息:
约束名称 | 中文名称 | 描述 |
主键 | primary key | 表里的唯一标识、自动递增 auto_increment |
外键 | foreign key | 表与表之间关联关系 |
非空 | not null | 不许为空 |
唯一 | unique | 数据唯一性 |
检查 | check | |
默认/缺省 | defaulte | 默认值 |
1.DDL 数据定义语言。
-- 删除数据库 如果存在则删除 否则跳过!
drop database if EXISTS `crm01`;
create database crm01;
use crm01;
-- 删除用户表 如果存在则删除 否则跳过!
drop table if EXISTS user;
CREATE TABLE user(
id int primary key auto_increment,
name VARCHAR(60) not null unique,
pwd VARCHAR(60) not null,
sex char(6),
birthday date,
type varchar(50) default '普通用户'
);
需求: 需要在刚才的user表再加入一列 如: address
ALTER table user add `address` VARCHAR(255);
需求: 需要在user表基础上更改表名称位users{ 很少用!}
RENAME table user [to] users;
需求: 需要在刚才的user表的一列 addess 更改为 address
alter TABLE users CHANGE addess address varchar(50);
需求: 需要在刚才的user表的一列 address 长度更改为200
alter TABLE users MODIFY address VARCHAR(200);
需求: 创建用户 用户名称叫 旺财! wangcai
create user wangcai;
需求: 更改用户名称 原用户名称叫 旺财! wangcai 新为小强 xiaoqiang
rename user wangcai to xiaoqiang ;
需求: 赋予小强权限 查询权限
-- *.* 是一个对象
-- 第一个* 表示任意数据库
-- 第二个* 表示任意表
GRANT SELECT ON *.* to xiaoqiang;
需求: 赋予小强权限
REVOKE SELECT ON *.* from xiaoqiang;
需求: 删除users表
drop table user;
需求:查询表中的所有数据
-- 固定格式: select * from 表的名称
-- `*` 代表的是表中的所有行和所有列
select * from users;
需求: 查询user表的表结构
-- 第一种方式
desc user
-- 第二种方式
show columns from users;
MySQL 注释:
- 减号 减号 空格
--
- 多行注释 以
/*
开头、*/
结尾 示例代码:/**/
- 注释代码:
#
DML 数据操纵语言。
插入语句:
格式:
insert into 表名(字段1,字段2...) values ('字段1的值','字段2的值'...)
|–- 全部插入语句: 顾名思义 全部的字段
eg
insert [into] users values ('1','jack','123','男','1999-09-09','管理员');
|–- 部分插入语句: 顾名思义 部分的字段
eg: 注意:[] 不可以运用在语句中!
insert into users(name,pwd) values ('rose','1456');
insert into users(name,pwd) values ('王轩','1456');
insert into users(name,pwd) values ('李旺','1456');
insert into users(name,pwd) values ('孙王娃','1456');
insert into users(name,pwd) values ('赵钱孙','1456');
insert into users(name,pwd) values ('冯陈褚','1456');
更新语句
格式:
update 表名 set 字段1 = 字段1新的值 ,字段2 = 字段2新的值 where id = 被修改数据的id
update users set birthday = '2000-02-02' , sex = '女' where id = 2;
删除语句
delete from users where id = 3 ;
DQL 数据查询语言。
单表查询:
查询语句:
select * from users ;
SQL优化:
在查询中尽量避免使用 `*` 符号
条件查询语句
需求: 查询id为2号的用户信息
select * from users where id = 2 ;
需求:查询用户成绩在60~80区间
select * from users where grade BETWEEN 60 and 80;
空值查询语句
需求: 查询出生日期为空的用户的信息
select * from users where birthday is null ;
去重查询语句 – > 多表查询 根据 用户性别查询各自信息
需求: 查询不重复显示用户性别的信息
select * from users ;
排序查询语句
需求: 在用户表进行安装id倒序排序查询
select * from users order by id desc ;
需求: 在用户表进行安装id升序排序查询
select * from users order by id asc ;
模糊查询语句
``_叫做占位符。 代表任意一位数据
%` 叫做通配符。代表任意长度、任意数据
需求: 在用户表进行查询姓王的用户信息
select * from users where name like '王%' ;
需求: 在用户表进行查询姓名是五位长度的用户信息
select * from users where name like '_____' ;
需求: 在用户表进行查询姓j,名称最后为y的用户信息
select * from users where name like 'j%y' ;
多条件查询 | And | Or
需求: 在用户表进行查询性别为男且类型是管理员的用户信息
select * from users where sex ='男' and type = '管理员';
需求: 在用户表进行查询性别为女或类型是管理员的用户信息
select * from users where sex ='女' or type = '管理员';
需求: 在用户表进行查询性别为女或类型是管理员 并且出生日期为空 的用户信息(性别为女且出生日期为空 | 类型是管理员且出生日期为空)
select * from users where (sex ='女' or type = '管理员') and birthday is null;
And 和Or 同用。MySQL中,AND的执行优先级高于OR 可以使用括号进行修整优先级顺序
函数
单行函数
连接符函数
-- 创建用户个人信息表
CREATE TABLE users(
id INT ,
NAME VARCHAR(20),
phone VARCHAR(20),
PRIMARY KEY(id)
);
-- 插入用户
INSERT users VALUES('1001','张三','13497854715'),('1002','张三','18505545515');
SELECT * FROM users;
-- 需求: 将个人信息进行"加密"显示
SELECT NAME,phone,CONCAT(LEFT(phone,3),'****',RIGHT(phone,4)) AS newPhone FROM users;
显示结果:
左填充[ lpad ] | 右填充 [ rpad ]
截取字符串函数 [ substring ]
替换函数 [ replace ]
聚合函数/组函数
关键字 | 中文描述 |
Max | 最大值函数 |
Min | 最小值函数 |
Sum | 求和函数 |
Avg | 平均值函数 |
Count | 统计函数 |
☆ 数据库集群!!!
负载均衡
扩展:Oracle 数据类型:
- 数值型
1. 整数和浮点 1. number(5) 表示一共有五位数、 其区间是 -99999~99999 2. number(5,2) 表示一共有五位数、小数部分占据两位数 其区间是 -999.99~999.99
- 字符串类型
1. char 固定长度 2. varchar2 可变长度
- 日期
1. date 2. 时间戳
- lob(大对象数据类型)
blob 存储二进制类型的Lob ;适用于 存放图片、音频、视频等资源 最大可存放的空间是4G
clob