计算机=硬件(cpu,内存,硬盘...)+软件(软件系统-操作系统+系统软件-应用软件)
数据库:数据的仓库,RDBMS - relationship database management system
关系型 数据库 管理 系统(软件)
张三 李四
日常数据存储: 文件的形式存储数据--弊端 19岁
1.格式问题 :查找数据时不便
2.大小问题 :查找数据时不便
3.效率问题 :查找数据时不便
1EB=1024PB 1PB=1024TB 1TB=1024GB
数据库软件分类:
i.按数据存储的大小划分
大型数据库 :支持存储PB级的数据 oracle(神谕-甲骨文),db2(IBM)
中型数据库 :支持存储TB级的数据 mysql,sqlserver(微软)
小型数据库 :支持存储GB级的数据 sqlite,access(微软)
ii.按数据存储的位置划分
硬盘存储 :sql数据库-关系型数据库
内存存储 :no(not only)-sql数据库 -非关系型数据库,redis,mongodb
mysql : 一款服务型关系型数据库管理系统(软件)
服务型:软件由客户端和服务端两部分组成, 客户端发送正确的指令(sql)
控制服务端工作的
sql :structured query language
结构化 查询 语言
结构化: 数据存储的结构方式 - table
table :由行和列组成的一个二维的矩阵
行: 必须存储一条完整的数据记录
列: 必须存储相同类型的数据值
我 饭店
客户 服务
我 说红烧肉 饭店 --> 正常提供服务
我 说洗桑拿 饭店 --> 不搭理我
关系型:
表内关系(默认):表内的数据与数据之间存在关联关系
表间关系(重点):数据表与数据表之间存在的关联关系,一对一,一对多,多对多
计划生育: 父亲表 子女表
一对一 1 : 1
放开二胎: 父亲表 子女表
一对多 1 : n
认干爹: 爹表 子女表
多对多 n : n
E-R模型:
E :entry 实体,数据表中的每一条记录都是现实中真实存在的,设计数据
表格是参照实体的重要属性进行设计
R :relationship 关系,实体类和实体类之间存在的关联关系,设计多表关联
时参照实体的共有属性
数据库设计的三范(规范)式:
1.列不可再拆分: 为了减少数据的冗余 -- 单列
2.唯一标识 : 为了保证行数据的完整有效性 -- 多列
3.引用唯一标识: 为了保证关联表的数据完整有效性 --多行多列
mysql 层级架构: database
DBMS层:数据库管理软件层,负责管理多个数据仓库:安装,卸载
安装的方式: 1.图形安装 2.免安装版安装
c:\soft\工具\mysql\mysql5.6.17.zip
bin --> cmd
mysql.exe-客户端 mysqld.exe-服务端
安装:
mysqld.exe -install :-指定 安装 mysql服务端程序
net start mysql :启动mysql软件服务
登录:
mysql.exe -u root -p :u-username p-password root-默认账户名
-- 客户端指定账号和密码登录
exit :退出登录
卸载:
net stop mysql :关闭mysql软件服务
mysqld.exe -remove :指定移除mysql服务端程序
查询数据库版本:mysql -version 进入mysql查询
DB层:数据仓库层,负责管理多个数据表格 : 增,删,改,查
-- I.查询数据库的语法:
show databases; 显示软件中所有的数据仓库
show create database 库名; 显示指定数据库的创建语句
-- show create database test;
-- II.增加数据库的语法: 中括号表示里面的内容是可选择添加
create database 库名 [库选项];
-- create database taobao;
-- create database jingdong character set gbk;
-- III.修改数据库的语法: mysql5.1版本(之后不让改库名)--分界版
alter database 库名 character set 新编码;
-- alter database taobao character set gbk;
-- alter database jingdong character set utf8;
-- IV.删除数据库的语法: 了解
drop database 库名; drop-废弃,遗弃
-- drop database taobao;
-- drop database jingdong;
总结: show ,create ,alter ,drop
语法: 倒装句
CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */
创建 数据库 库名 代号 默认 字符集 设置
符号:
`` :反单引号,着重号,强调引号里面的内容是用户自定义的内容
自定义: 字母,数字,下划线,且数字不开头
该符号是服务器自动添加的,用于区分系统和用户
/*注释的内容*/:注释,解释说明
! :声明,说明
字符集:一套编码规则,ASCII码,GBK码,UTF8码(万国码格式转换码),LATIN1(拉丁文)
information_schema :信息(结果数据存放的库)库
mysql :核心功能库
performance_schema :附加功能库
test :测试库
-- 注: 先选择操作的数据仓库 --> use 库名;
TABLE层:数据表格层,负责管理多个字段信息(列名) :增,删,改,查
-- I.查询数据表格的语法:
show tables;
show create table 表名;
-- show create table dept;
-- II.增加数据表格的语法:
create table 表名(表的结构)[表选项];
-- III.修改数据表格的语法:表名,表结构,表选项
i.修改表名的语法: alter table 表名 rename to 新表名;
-- alter table t1 rename to t2;
ii.修改表选项的语法: alter table 表名 engine=新引擎 charset=新编码;
--alter table t2 engine=myisam charset=gbk;
iii.修改表结构的语法: 增,删,改,查
1.查询列结构: desc 表名; describe -描述
2.增加列结构: alter table 表名 add 列名 数据类型 [约束] [位置];
#t2表新增整数列a alter table t2 add a int;
#t2表第一列新增整数列b alter table t2 add b int first;
#t2表第三列新增整数列c alter table t2 add c int after bh;
3.删除列结构: alter table 表名 drop 列名;
-- alter table t2 drop a;
-- alter table t2 drop b;
-- alter table t2 drop c;
4.修改列结构: modify,change
alter table 表名 modify 列名 [新]类型 [新约束] [新位置];
alter table 表名 change 列名 [新]列名 [新]类型 [新约束] [新位置];
# 修改t2表sr列类型为datetime
alter table t2 modify sr datetime;
# 修改t2表sr列类型为date
alter table t2 change sr sr date;
# 修改t2表sr为birth,类型为datetime,位置到最后一列
alter table t2 change sr birth datetime after gz;
-- IV.删除数据表格的语法:
drop table 表名;
-- drop table t2;
create database db1 character set utf8; -- 创建数据库db1
use db1; -- 选择数据库db1
create table t1(
bh int,
mz varchar(20),
xb bit,
sr date,
gz decimal(7,2)
)engine=innodb charset=utf8;
表的结构: 列名 数据类型 [约束] [注释]
数据类型:
1.数字类型
int :整数类型
float:单精度浮点小数
double:双精度浮点小数
decimal(总位数,小数位数):定点小数 sal decimal(7,2) -- 55555.55 -- 00555.00
2.日期类型
datetime : 日期时间 年 月 日 hh:mm:ss
date : 日期
time : 时间
timestamp: 时间戳,1970年1月1日整点到此刻经历的秒数
3.字符串类型 ,引号引起来的各个国家的各种文字符号
char(长度值):固长字符串,char(5) --"a" -- 消耗5个字符的内存
varchar(长度值):变长字符串,varchar(5)--'a' -- 只消耗1个字符的内存
4.布尔类型
bit :二进制位,值只有两个 0,1 -->通常是用来表示两种状态
-- 男女,胖瘦,对错,高低,是否...
表选项:ENGINE=InnoDB DEFAULT CHARSET=utf8; charset=character set 字符设置
engine : 引擎,发动机,产生动力和加速的
默认的引擎:innodb-在不,大B? ,myisam-我的阿萨姆
CREATE TABLE `dept` (
`deptno` int(4) NOT NULL COMMENT '部门编号',
`dname` varchar(14) NOT NULL COMMENT '部门名称',
`loc` varchar(13) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`deptno`),
UNIQUE KEY `dname` (`dname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
FIELD层:字段信息层,负责描述该列具体存放的数据(DATA)-增,删,改,查(重点)
I.查询数据的基本的语法:
select 列名 from 表名 [where 条件];
select 列名 3.选择列上存放的数据值 找什么
from 表名 1.定位数据源 从哪找
where 条件; 2.筛选数据,提升查询的效率 怎么找
* :通配符,匹配所有的列
select * from 表名;
II.增加数据的语法:
insert into 表名(列1,列2,...) values(值1,值2,...);
# 全列插入: 每列都插入了数据值,全列插入实际可以省略字段信息的
insert into t1(bh,mz,xb,sr,gz)
values(1,"tom",1,'1990-1-1',12345.67);
#省略了字段信息必须按照建表顺序给值
insert into t1
values(2,'lucy',0,'1997-1-1',23456.78);
# 缺省插入: 只给部分列插入数据值,没给值的列会用null值填充
insert into t1(bh,mz,xb)
values(3,'jack',1);
# 同时插入多条数据记录
insert into t1(bh,mz) values(4,'lili'),(5,'tom1'),(6,'tom2');
III.修改数据的语法:
update 表名 set 列1=值1,列2=值2,... [where 条件];
-- 修改t1表中tom2的工资为8888,性别为1
update t1 set gz=8888,xb=1 where mz='tom2';
-- 修改t1表所有人的生日为 1999-9-9
update t1 set sr='1999-9-9';
IV.删除数据的语法:
delete from 表名 [where 条件];
-- 删除t1表中tom2的数据
delete from t1 where mz='tom2';
删除lucy的工资 :update t1 set gz=null where mz='lucy';
###练习:
1. 创建数据库newdb并使用, 里面创建员工表t_emp只有name字段 引擎为myisam 字符集 为gbk
2. 修改表名为emp
3. 修改引擎为innodb 字符集为utf8
4. 添加部门编号字段deptno 在最后面
5. 添加员工编号 empno在最前面
6. 添加salary字段在name的后面
7. 修改salary字段名字为sal,把sal放在empno的后面
8. 删除sal字段
9. 删除表
10.删除数据库
###练习:
1.创建hero表如果存在则先删除再创建, id 姓名name 类型type 金币money
2.插入以下数据 1 诸葛亮 法师 18888 , 2 孙悟空 打野 18888 ,3 小乔 法师 6888 ,4 黄忠 射手 8888, 5 刘备 战士 6888
3.修改所有18888的为28888
4.修改所有打野为刺客
5.删除价格为6888的英雄
6.修改孙悟空为猪八戒
7.删除id为1,2,3的英雄
8.修改所有英雄类型的为已阵亡
9.删除所有数据
10.删除表
数据库备份
mysqldump -uroot -p test>d:\\test2.sql
drop database test; #删除测试库
create database test character set utf8; #创建数据库并设置字符集
use test;
source d:\test.sql #恢复数据库
show create table emp;
desc emp;
select * from emp; #查看是否有乱码 (字符集问题)