数据库基本

数据库复习(以MySQL为准):
      a.了解常用的数据库
      b.掌握数据库的安装与卸载
      c.掌握数据库的管理
      d.掌握数据操作
      e.掌握数据查询

 

 

常用的数据库:
1.Oracle 甲骨文,产品免费,服务收费
2.MySQL ——》被sun收购——》被甲骨文收购,产品免费,开源
3.SQL Server 微软,产品收费
4.DB2 IBM
5.NoSQL(Not Only SQL)
    a.键值(Key-Value)存储数据库(Redis)
    b.列存储数据库(HBase)
    c.文档型数据库(MongoDb)
    d.图形(Graph)数据库

面试题:
常用的数据库有哪些?及之间的区别?和应用场景。

Java开发工程师技术网站:
a.工具类
    jdk:http://www.oracle.com
    eclipse:http://www.eclipse.org
    oracle:http://www.oracle.com
    mysql:http://www.oracle.com
    tomcat:http://www.apache.org
      .. 

b.技术类
    web:http://www.w3schools.com
    http://www.w3school.com.cn
    spring:http://spring.io
    hibernate:http://www.hibernate.org
    struts:http://www.apache.org
    mybatis:http://www.mybatis.org
    CSDN:http://www.csdn.net
    ITeye:http://www.iteye.com
    stackoverflow:https://stackoverflow.com/
    ....
c.技术企业网站
    微软:
    IBM:
    甲骨文:
    ...

 

 

数据库的安装与卸载:必须知道的?
a.平台(Windows、Linux)
b.根据平台下载相应数据库软件
c.在平台下安装数据库软件
d.卸载:注意1.卸载软件 2.清理软件垃圾

数据库管理:
a.创建数据库
b.删除数据库
c.创建数据库用户、给用户授权
d.备份数据库、还原数据库

什么是SQL?
SQL(Structured Query Language)结构化查询语言。

SQL的分类:
a.DDL(Data Definition Language)数据定义语言
CREATE
ALTER
DROP
b.DML(Data Manipulation Language)数据操纵语言
INSERT
UPDATE
DELETE
c.DQL(Data Query Language)数据查询语言
SELECT
d.DCL(Data Control Language)数据控制语言
GRANT
REVOKE
COMMIT
ROLLBACK

 

项目的开发流程:
a.需求分析
b.系统设计
c.系统开发
d.系统测试
e.部署
f.维护

 

程序员必备技能:
1.数据库设计
设计数据库的步骤:
a.收集信息
b.标识实体
c.标识实体的属性
d.标识实体与实体之间的关系
什么是E-R图?E-R图组成?
E-R图(Entity-Relationship)实体关系图
E-R图组成:
a.矩形 --》实体
b.菱形 --》关系
c.椭圆 --》属性
d.直线 --》连接线
映射基数:
a.一对一
b.一对多
c.多对一
d.多对多
绘制E-R图工具:
a.PowerDesigner ***
b.Office Visio

将E-R图转换为数据模型的步骤:
a.一对一关系
将一方的主关键字纳入到另一方做为外键,如果关系中有属性的也一并纳入。
丈夫(身份证号[主],姓名,身高,体重,电话)
妻子(身份证号[主],姓名,身高,体重,电话,丈夫身份证号[外],婚龄,子女数)

b.一对多关系
将一方的主关键字纳入到多方做为外键,如果关系中有属性的也一并纳入。
仓库(编号[主],名称,面积,地址)
商品(编号[主],名称,价格,生产日期,供货商,仓库号[外],数量)

c.多对多关系
将双方的主关键字纳入到一个新表中做为外键,如果关系中有属性的也一并纳入。
学生(学号[主],姓名,出生日期,身高)
课程(课程号[主],名称,学分)
成绩表(学号[外],课程号[外],成绩)---》新表

应用范式将数据模型规范化:
第一范式:数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
第二范式:一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
第三范式:确保数据表中的每一列数据都和主键直接相关,而不能间接相关


2.创建与删除数据库
创建数据库:
CREATE DATABASE [IF NOT EXISTS] 数据库名;

删除数据库:
DROP DATABASE [IF EXISTS] 数据库名;

修改数据库字符集:
ALTER DATABASE 数据库名 SET charset=UTF8;

 

 

 

3.创建数据库用户并授权
创建用户:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'new_password';
CREATE USER '用户名'@'IP地址' IDENTIFIED BY '密码';

给数据库用户授权:
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';

4.根据数据库设计说明书创建数据库表及约束
创建表:
CREATE TABLE [IF NOT EXISTS] 表名 (
字段1 数据类型 [字段属性|约束][索引][注释],
……
字段n 数据类型 [字段属性|约束][索引][注释]
)[表类型][表字符集][注释];

MySQL的数据类型:
a.字符串
b.数值
c.日期和时间

如:
创建年级表:在建表的同时添加约束
create table grades
(
id int(4) not null comment '年级编号,主键',
name varchar(20) not null comment '年级名称',
constraint PK_grades primary key(id)
)comment='年级表';

创建学员表:先创建,再添加约束
create table students
(
id int(4) not null comment '学员编号',
name varchar(20) not null comment '学员姓名',
birth datetime not null comment '出生日期',
phone varchar(20) not null comment '电话',
address varchar(200) null comment '地址',
grade_id int(4) not null comment '年级编号,外键'
)comment='学员信息表';

添加约束的方式:
a.建表的同时给列添加约束
b.先创建表,再添加约束
给表添加主键约束:
alter table students
add constraint pk_students primary key(id);
给表添加外键约束:
alter table students
add constraint FK_students_grades foreign key(grade_id) references grades(id);
给表添加唯一约束:
alter table students
add constraint UQ_students_name UNIQUE KEY(name);

 


5.掌握数据的操作与查询
a.插入数据
1.插入单行
INSERT INTO 表名(列名,...)VALUES(列值,...);
2.插入多行
a.向其它表中插入多行
INSERT INTO 表名1(列名,...) SELECT 列名,... FROM 表名2;
b.向新表中插入多行
CREATE TABLE 表名(SELECT 列名,... FROM 表名2);
c.向原表中插入多行
INSERT INTO 表名(列名,...)VALUES(列值,...),(列值,...),(列值,...);
b.修改数据
UPDATE 表名 SET 列名=新值,列名=新值,... WHERE 条件;
c.删除数据
DELETE FROM 表名 WHERE 条件;
or
TRUNCATE TABLE 表名; //删除的数据不可恢复
d.查询数据*****
单表:
SELECT 列名,...
FROM 表名
WHERE 条件
GROUP BY 分组列
HAVING 筛选条件
ORDER BY 排序列
LIMIT 偏移量,条数
子查询:
a.使用关系运算符联接的子查询
SELECT * FROM 表名
WHERE 列名 关系运算符(SELECT 列名 FROM 表名 WHERE 条件);
注:子查询的结果必须为单行单列或无数据。

b.IN子查询
SELECT * FROM 表名
WHERE 列名 IN(SELECT 列名 FROM 表名 WHERE 条件);
注:子查询的结果必须为单列多行或单列单行或无数据。

c.EXISTS子查询
SELECT * FROM 表名
WHERE 列名 EXISTS(SELECT 列名 FROM 表名 WHERE 条件);
注:子查询的结果可以为多列多行。

多表查询:
a.内联接
SELECT 列名,...
FROM 表名1
INNER JOIN 表名2 ON 表名1.列名 = 表名2.列名
b.外联接
SELECT 列名,...
FROM 表名1
LEFT JOIN 表名2 ON 表名1.列名 = 表名2.列名
注:显示公共的内容和表名1中的其他记录
OR
SELECT 列名,...
FROM 表名1
RIGHT JOIN 表名2 ON 表名1.列名 = 表名2.列名
注:显示公共的内容和表名2中的其他记录

c.完整外联接(笛卡儿积)
SELECT 列名,...
FROM 表名1
FULL JOIN 表名2;
==>
SELECT 列名,...
FROM 表名1,表名2;

 

 

6.数据库其它对象
a.视图
视图是通过查询产生,是一个虚拟的表;视图中的数据来源于原表中。
语法:
CREATE [OR REPLACE] VIEW 视图名
AS
SELECT语句;
使用视图:
SELECT * FROM 视图名 WHERE 条件;
b.事务
事务是一个完整操作过程,要么全部执行成功,要么全部失败。
事务特性(ACID):
a.Atomicity 原子性
一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做
b.Consistency 一致性
事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的
c.Isolation 隔离性
一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
d.Durability 永久性
持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响

MySQL中使用事务:
a.启动事务
BEGIN TRANSACTION
b.结束事务
1,成功提交
COMMIT
2,失败回滚
ROLLBACK
c.存储过程
类似java中的方法,是一个完成特定功能的语句块。
语法:
CREATE PROCEDURE 过程名称 ([参数名 类型,...])
BEGIN
SQL语句;
END
执行存储过程:
CALL 过程名(参数值,...);



posted on 2017-09-05 18:30  ChangeLifeo  阅读(220)  评论(0编辑  收藏  举报