PDF To Markdown Converter
数据库简介
1.1 简介
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。
用户通过数据库管理系统访问数据库中的数据。
数据库软件应该为 数据库管理系统 ,数据库是通过数据库管理系统创建和操作的。
数据库:存储、维护和管理数据的集合。
1.2 常见数据库管理系统
- Oracle:Oracle数据库被认为是业界目前比较成功的关系型数据库管理系统。Oracle数据库可以运行在UNIX、Windows等主流操作系统平台,完全支持所有的工业标准,并获得最高级别的ISO标准安全性认证。
- MySQL:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件。
DB2:DB2是IBM公司的产品,DB2数据库系统采用多进程多线索体系结构,其功能足以满足大中公司的需要,并可灵活地服务于中小型电子商务解决方案。
- Microsoft SQL Server:SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便、可伸缩性好与相关软件集成程度高等优点。
1.3 三大范式(规范)
第一范式: 无重复的列。 当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。(我的理解就是一张表没有重复的列,比如名字年龄等所有属性只会出现一次,不会有 : 张三 18岁 张三 家住北京 张三 就职鹅厂 这种元组(一行),正确的是:张三 18岁 家住北京 就职鹅厂(减少数据冗余),且列不可再分(有特殊需求除外),就比如:要用到一张表中的精确地址,如省、市等精确信息就不能只有一个地址列,要将地址列再细分为省市等列(字段)。看需求,如果没有这个需求,只一个地址列也行,这里只是拿这个举例)
第二范式: 属性完全依赖于主键 [ 消除部分子函数依赖 ]。 如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。 第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分 。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主键或主关键字、主码。(我的理解就是假设一瓶某某品牌的矿泉水是2元,其品牌名称决定其是2元,而不能在甲店3元,乙店4元,这种即和品牌名称有关又和销售地点有关,就不符合第二范式,也就是说只有当属性(2元)依赖于主键(品牌名称)且和其他因素无关时才能说是属性完全依赖于主键,满足第二范式.)
第三范式: 属性不依赖于其它非主属性 [ 消除传递依赖 ]。 设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF。满足第三范式(3NF)必须先满足第二范式(2NF)。 第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。(在多表中表的主键可以以外键(其他表的主键)形式存储到一张表中(中间表),这是为了建立多表关系,即可以通过中间表把有关系的表都串起来)(我的理解就是这些有关系的表中不能出现相同的属性,字段或非主关键字信息(我觉得这几个逼是同一个人的马甲),即一张表中有name属性和其有关系的表就不能有这个属性(或者说是一个属性只能依赖一个主键,要专一),非关键字是除主键外的其他属性,属性包括主键)
注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性(在jdbc中,表名与类名相同,列名和属性相同,一行即一个对象,大意是一张表可以当成是一个类,表名就是类名,列名就是属性名,每一行都是一个新new的对象,对表的操作当成对类的操作,对列的操作就是对属性的set与get,对每一行的操作就是对一个对象的操作,具体就是建立一个类按上面叙述建立好类再调用数据库实现对表的增删改.)
第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。个人拙见:即除主键外的属性只能和主键有关系,举个例子:洒水壶(主键),花甲(非主键列或除主键外的属性,一个意思吧),花乙(同理),花甲和花乙只能依赖洒水壶而不允许花甲花乙有依赖关系,他们是平等或平行的关系(函数依赖简单点说就是:某个属性集决定另一个属性集时,称另一属性集依赖于该属性集。)就是洒水壶能决定花甲(乙),而不能由花甲(乙)决定花乙(甲);就像学 能确定一个学生(学 唯一,就像身份证 ),而名字不能决定一个学生,满大街的张三。
SQL语言
1 概述
SQL:Structure Query Language(结构化查询语言),SQL被美国国家标准局(ANSI)确定为关
系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。
各数据库厂商都支持ISO的SQL标准, 普通话
各数据库厂商在标准的基础上做了自己的扩展, 方言
SQL 是一种标准化的语言,它允许你在数据库上执行操作,如创建项目,查询内容,更新内容,
并删除条目等操作。
Create, Read, Update, and Delete 通常称为CRUD操作。
2 SQL语句分类
-
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。创建(create)、删除(drop)、修改表(alter)和列,查询(show、select、desc)表
-
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。增加(插入insert)、删除数据(delete(表还在,数据可找回)/truncate(drop表创新表,比delete快))、修改(update)数据
-
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。创建(create)授权(grant)查询(show)撤销(revoke)删除(drop)
-
DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。(查询(select))
注意:sql语句以;(英文分 )结尾,mysql中的关键字不区分大小写
3 DDL操作数据库
3.1 创建
CREATE DATABASE语句用于创建新的数据库:
编码方式:gb2312,utf-8,gbk,iso-8859-1
3.2 查看数据库
查看当前数据库服务器中的所有数据库
查看前面创建的mydb2数据库的定义信息
3.3 修改数据库
查看服务器中的数据库,并把mydb2的字符集修改为utf8;
3.4 删除数据库
drop database 数据库名
3.5 其他语句
查看当前使用的数据库
切换数据库: use 数据库名
4 DDL操作表(和上面的都是DDL操作语言)
CREATE TABLE语句用于创建新表。
语法:
说明:表名,列名是自定义,多列之间使用逗 间隔,最后一列不需要逗 (不用与后面列隔开,你看我这句话的最后也没标点了)
[约束] 表示可有可无
示例:
常用数据类型:
int:整型
double:浮点型,例如double(5,2)表示最多 5 位,其中必须有 2 位小数,即最大值为
999.99;默认支持四舍五入
char:固定长度字符串类型; char(10) ‘aaa ’ 占 10 位(10个字符或10汉字,亲测)
varchar:可变长度字符串类型; varchar(10) ‘aaa’ 占 3 位
text:字符串类型,比如小说信息;
blob:字节类型,保存文件信息(视频,音频,图片);
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
4.1 其他表操作
drop table 表名;
当前数据库中的所有表
查看表的字段信息
desc 表名;
增加列:在上面员工表的基本上增加一个image列。
修改job列,使其长度为 60 。
列名name修改为username 类型为varchar(100)
删除image列,一次只能删一列。
alter table 表名 drop 列名
修改表名,表名改为user。
alter table 旧表名 rename 新表名;
查看表格的创建细节
show create table 表名;
修改表的字符集为gbk
5 DML操作
DML是对表中的数据进行增、删、改的操作。不要与DDL混淆了。
主要包括:INSERT 、UPDATE、 DELETE
小知识:
在mysql中,字符串类型和日期类型都要用单引 括起来。
空值:null
( 1 )插入操作:INSERT:
insert into 表名(列名) values(数据值);
注意:1多列和多个列值之间使用逗 隔开 2.列名要和列值一一对应
非数值的列值两侧需要加单引
常见错误: Data too long for column ‘xxx’ at row 1 //“xxx”列数据过长,设计表时确定好其长度
添加数据的时候可以将表名后面的列名省略,当且仅当给所有列添加数据的时候,此时输入数据的顺序按照表中列的顺序执行(所以顺序不能乱!!!) insert into student values(‘李四’,12,‘1111’,189.98,‘2000-1-1’,‘男’,‘2007-1-1’);
同时添加多行
insert into 表名(列名) values(第一行数据),(第二行数据),(),();
注意:列名与列值的类型、个数、顺序要一一对应。
练习准备 :
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!