数据库学习文档格式.docx
《数据库学习文档格式.docx》由会员分享,可在线阅读,更多相关《数据库学习文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
用于从数据库中删除数据
DDL:
createtable//创建表
alter//修改表
droptable//删除表
createindex//创建索引
dropindex//删除索引
createview//创建视图
dropview//删除视图
grant//授权
revoke//撤销授权
set//设置
2、不同数据库的独特管理方式
.DBA(DatabaseAdministrator)
3、数据库的调优
4、精通数据库的备份、回复机制
-----------------------------
MYSQL的安装与配置
----------------------------
安装:
选择普通安装类型
.配置
1、选择配置类型:
DetailedConfiguration
2、选择服务器类型:
DeveloperMachine
3、选择数据库的是使用情况:
--多功能数据库(MultifunctionalDatabase)
--只是事务处理数据库(TransactionalDatabaseOnly)
--只是非事务处理数据库(Non-TransactionalDatabaseOnly)
4、InnoDB表空间文件存储的盘符,默认在c:
\
5、数据库并发连接数配置:
Decisionsupport
6、MYSQL服务器端口:
默认:
3306
7、EnableStrictMode:
是否允许严格样式检查:
取消
8、选择字符编码:
手工选择:
gb2312,windows下中文支持
9、服务器默认安装到windows系统服务中,默认服务自启动,选择自动配置环境变量
10、填写数据库管理系统的管理员密码
--在mySQL中数据库管理员的用户名为:
root
11、是否允许使用root用户远程登录数据库
12、测试配置是否正确c:
\>
c:
\mysql\bin\mysqlshow
------------------------
MYSQL的登录
.开始--运行--cmd
.输入:
mysql-uroot-p,然后输入密码
.或者:
mysql-uroot-p密码
.退出quit或者\q
--不必全在一个行内给出一个命令,较长命令可以输入到多个行中。
mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束
->
等待多行命令的下一行
'
>
等待下一行,等待以单引号开始的字符串结束
如果你决定不想执行正在输入过程中的一个命令,输入\c取消它
能够以大小写输入关键词,结果是等价的
--------------------
基本的SQL语句
创建数据库---createdatabaseschool;
查看有哪些数据库--showdatabases;
删除数据库---dropdatabaseschool;
--------------------------
向数据库中存储数据
1、首先进入数据库usedbname;
use类似quit,不需要一个分号,写也无碍
use必须在一个单行上给出
2、查看数据库中的表showtables;
3、在数据库中创建表createtablestudent
(namevarchar(20),ageint,sexchar
(2));
4、向表中插入数据---insertintodbnamevalues(‘张三’,18,‘男’);
5、查看表中所有的数据--select*fromstudent;
只查看姓名和年龄---selectname,agefromstudent;
常用的数据类型
char(M)固定长度字符
用来表示固定长度字符串,字符串的长度是1-255
VARCHAR(M)可变长度字符
具有灵活性的字符数据类型,范围:
1-255
处理char类型的数据比varchar类型的数据要快,有时会快50%(char类型存储的数据的长度是声明变量时的固定长度,而不管数据的实际长度,varchar存储的是按数据的实际长度,从而减小了数据文件的大小)
int整数有符合的范围:
-2147483648到2147483647,无符号范围:
0到4294967295
其他常用的数据类型
DATE---日期类型,显示‘YYYY-MM-DD’
DATETIME--日期和时间的组合,显示‘YYYY-MM-DDHH:
MM:
SS'
TEXT/BLOB文本和大对象
TEXT可以保存字符串的长度在255-65535字节内。
BLOB是一个能保存二进制数据的大对象,区别是TEXT不区分大小写,而BLOB区分大小写。
SQL语句的导入
1、编写SQL脚本(.sql)
2、导入mysql-uusername-p<
***.sql
&
练习:
老师表:
teacher
姓名,性别,年龄,课程
导出sql脚本---mysqldumpstu-uroot-p>
abc.sql
查看表的结构------desctablename
修改表中的数据---updatetablenamesetcolname=valuewhere条件
删除数据-----deletefromteacherwhereage=?
删除表中所有数据---deletefromteacher;
删除表---droptabletablename
根据条件进行过滤查找---select*fromtablenamewhere条件
查找出版社为“清华出版社”的所有书籍---select*frombookswherepub=‘清华出版社’;
查找出库存大于50的所有书籍---select*frombookswherestore>
50;
查找出“西游记”的库存量---selecttitle,storefrombookswheretitle=‘西游记’;
SQL运算符
>
大于<
小于>
=大于等于<
=小于等于!
=,<
不等于
查看数据库的信息----\s
mysql常用函数
1、查看数据库版本---selectversin();
计算机的时间是存在BIOS()
2、查看当前数据库的日期----selectcurrent_date();
3、查看当前数据库时间----selectnow();
4、查看当前连接数据库的用户---selectuser();
localhost:
代表是本机
createtableuser(idint,namevarchar(20),birdate,deadatetime);
insertintouservalues(1,'
zhangsan'
now(),now());
or和and查询
or(满足一个条件)
and(都需要满足)
查找学生EQ为80分或90分的学生
select*fromstuwhereEQ=80orEQ=90;
查找学生EQ为90分并且性别为女的学生
select*fromstuwhereEQ=90andsex='
女'
;
in(x,x)返回条件中的记录与or作用相似
select*fromtablenamewhere条件in(,);
between‘’and‘’返回两者之间的记录
查询年龄在20-30之间的所有学生
select*fromstuwhereagebetween20and30;
like与通配符(%)一起使用,模糊查询
查找出姓张的学生
select*fromstuwherenamelike‘张%’;
查询出使用163邮箱的所有学生
select*fromstuwhereemaillike‘’;
查询出邮箱里面含有a的所有学生
select*fromstuwhereemaillike‘%a%’;
orderby实现排序(从小到大)--asc
将学生的年龄从高到低排列
select*fromstuorderbyagedesc;
(降序)
将学生的年龄从低到高排列
select*fromstuorderbyageasc;
(升序)
数据默认为升序(从低到高)
select*fromstuorderbyage;
as为查询的列起别名
1、查询所有学生只列出姓名,年龄,性别
selectnameas'
姓名'
ageas'
年龄'
sexas'
性别'
fromstu;
groupby对于查询出的数据结果进行分类(分组)
2、将学生按性别进行分类
select*fromstugroupbysex;
将学生按年龄进行分类
select*fromstugroupbyage;
3、having子查询:
对于where查询出的结果再次进行查询
查找出年龄大于20岁学生,并且在其中找出姓名等于xxx的学生
select*fromstuwhereage>
20havingname='
xxx'
或
select*fromstuwhereage>
20andname='
4、distinct过滤查询的重复型记录,只显示唯一的记录
将学生性别过滤
selectdistinct(sex)fromstu;
count查看表中有几条数据
selectcount(*)fromstu;
selectcount(distinct(sex))fromstu;
limit限制查询结果的输出数量同时也可以实现数据的分页
查询EQ前三名的学生
select*fromstuorderbyEQdesclimit3;
实现查询记录的分页
select*fromstulimit0,3;
select*fromstulimit3,3;
约束----定义了表级的强制规则、数据的完整性
非空约束(notnull)createtabletest(idintnotnull);
insertintotestvalues();
innodb会报错,myISAM会整形默认以0填充
唯一约束(UNIQUE)不允许列中的数据重复
createtabletest(idint,unique(id));
insertintotestvalues
(1);
默认约束(default)createtabletest(idintnotnulldefault'
111111'
);
主键约束(primarykey)是一个字段或一组字段(组合键),用于唯一标识表中的记录,它可以确保每个记录是唯一的。
createtabletest(idint,primarykey(id));
insertintotestvaluse
(1);
id主键自增,减
createtabletest(idint,namevarchar(20),primarykey(id));
insertintotestvalues(1,'
张安'
);
auto_increment的特点-------自增值当删除某一值时,他不会自动填充,而是继续自增1
createtabletest(idintnotnullauto_increment,namevarchar(20),primarykey(id));
insertintotest(name)values('
创建一个有合理约束的表
createtablepeople(idintnotnullauto_increment,namevarchar(20)notnull,ageintnotnull,sexchar
(2)notnull,pcodevarchar(50),telvarchar(50),emailvarchar(50),primarykey(id));
insertintopeople(name,age,sex,email)values('
张三'
,‘28’,‘男’,'
abc@'
查询出所有学生的档案信息
select*fromstudent,schoolwherestudent.daih=school.id;
select*fromstudentasa,schoolasbwherea.daih=b.id;
查询所有学生档案信息只需显示:
学生姓名,年龄。
毕业学校,学校地址
selectstudent.name,student.age,school.name,school.addressfromstudent,schoolwherestudent.daih=school.id;
selecta.name,a.age,b.name,b.addressfromstudentasa,schoolasbwherea.daih=b.id;
外键约束(foreignkey)
如何创建外键
foreignkey:
定义子中的列为外键
references:
标记外键所要参考的父表和列
ondeletecascade:
允许在删除父表的列的同时,删除子表的列//在InnoDB中支持
createdatebasefordb;
usefordb;
创建父表
createtableschool(idintnotnullauto_increment,namevarchar(20),primarykey(id))engine=innodb;
insertintoschool(name)values('
紫琅学院'
创建子表
createtablestudent(idintnotnullauto_increment,namevarchar(20),schoolidint,primarykey(id),foreignkey(schoolid)referencesschool(id)ondeletecascade);
insertintostudent(name,schoolid)values('
1);
E-R模型
概述:
设计数据库时,通常采用"
实体关系模型“--E-R模型
软件开发流程:
需求调研(设计功能,收集数据)
与最终用户进行确定
数据库的设计
控制多余数据
那么在最后,数据库设计者确定表、不同表之间的关系以及每个表之间的关系,通常使用”E-R模型“,它将整个系统看作彼此相关的实体组成
实体:
通常用于表示能够被清晰识别的人、地点、事物、对象、事件
实体关系图:
如果需要基于‘E-R’模型建立数据库模型,需要标识实体,实体的属性、以及实体之间的关系。
那么通常用‘E-R’图来表示
实体之间的三种类型:
1:
11:
N或N:
1M:
N
数据库设计员确定的实体被转换为表,而其属性则成为相应表中的字段(列)
如何控制冗余数据:
一般来说通过数据库的范式理论
设计数据库的范式来控制冗余
共有五个范式,一般达到第三范式即可
第一范式:
对于表中的每一行,必须且仅仅有唯一的行值,在一行中的每一列仅有唯一的值并且具有原子性
第二范式:
要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键。
主键必须有唯一性的元素,一个主键可以由一个或更多的组成唯一值的列组成。
一旦创建,主键无法改变,外键关联一个表的主键。
主外键关联意味着一对多的关系。
第三范式:
要求非主键列互不依赖
第四范式:
禁止主键列和非主键列一对多关系不受约束
第五范式:
将表分割成尽可能小的块,为了排除在表中所有的冗余
MYSQL的聚合函数
1、最大值
找出EQ最高的学生
selectname,eqfromstudentwhereeq=(selectmax(EQ)fromstudent);
SELECTMAX(article)ASarticleFROMshop;
2、最小值
找出EQ最低的学生
selectname,min(EQ)fromstudent;
count()//统计查询出的记录总数
3、查询出学生的总条数
selectcount(name)fromstudent;
avg()//求平均值
4、查询学生EQ的平均值
selectavg(EQ)fromstudent;
sum()//求和
5、查询学生EQ的总和
selectsum(EQ)fromstu;
修改字段类型
altertablestudentmodifysexchar(5);
增加列
altertablestudentaddaddressvarchar(50);
删除列
altertablestudentdropaddress;
修改列的名称
altertablestudentchangenamenamesvarchar(20);
修改表的名字
renametablestudenttostu;
MYSQL之表连接
内链接(innerjoin):
又为等值连接,因为他将两个表中的公共字段有相等的值(记录)连接起来,这是最常用的连接。
一个表引用还被称为
查询显示:
订单编号,顾客姓名,物品名称
selectcases.id,user.name,goods.namefromcases,user,goodswherecases.user_id=user.idandcases.goods_id=goods.id;
selectcases.id,user.name,goods.namefromcasesinnerjoin(user,goods)on(user.id=cases.user_idandgoods.id=cases.goods_id);
selectcases.id,user.name,goods.namefrom(casesinnerjoinuseroncases.user_id=user.id)innerjoingoodsoncases.goods_id=goods.id;
selectcases.id,user.name,goods.namefromuserinnerjoin(casesinnerjoingoodsoncases.goods_id=goods.id)onuser.id=cases.user_id);
左连接:
显示sql语句中leftjoin左边表中的所有记录,即使在leftjoin右边的表中没有满足连接条件的数据也被显示。
当满足连接条件时,leftjoin右边的表中的相应的记录与leftjoin左边表中的相应记录结合显示。
查询出:
学生的编号,学生姓名,学生学校
selectstudent.name,student.id,school.namefromstudentleftjoinschoolonstudent.school_id=s