数据库简介
基本概念
数据库 : 按照数据结构来组织,存储和管理数据的仓库.这三个部分就对应了数据库发展所经理的几个阶段:
存储:
- 使用打孔卡片,以二进制的形式存储数据
- 1951雷明顿兰德 公司.推出磁带驱动器
- 1956IBM推出磁盘驱动器和随机存储技术.
组织:
- 文件系统
- 网状模型
- 层次模型
- 关系模型(目前的主流)
- 面向对象
管理:
IBM于1974年推出结构化查询语句(Structured Query Language)SQL,这个语句包含了对数据生命周期的所有操作.在不久后被ANSI(-American National Standards Institute )美国国家标准协会录入数据库语言标准.并不断完成SQL92标准版.
一、数据库分类
- 小型数据库:access、foxbase
- 中型数据库:informix、sql server、mysql
- 大型数据库:sybase、db2、oracle
二、项目中如何合理地使用数据库,可以依据如下三个方面入手
- 项目的规模
- 负载量有多大,即用户数有多大
- 成本
- 安全性
三、大、中、小型数据库比较
小型数据库
- 负载量小,用户大概100人之内
- 比如:留言板、信息管理系统
- 成本在千元之内
- 对安全性要求不高
中型数据库
- 比如负载量 日访问量5000~10000
- 成本在万元内
- 比如商务网站
大型数据库
- 海量负载,可以处理海量数据(sybase
四、SQL可以分为以下几种类型
1.DML
Data Manipulation Language 是数据操纵语言:它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。
特点:需要提交commit才能生效,quit退出数据库时可以自动提交
2.DDL
Data Definition Language 是数据定义语言:DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。DDL跟多是针对数据库对象本身做操作.数据对象有(表,视图,序列,索引,存储过程和函数,触发器)
3.DCL
DataControlLanguage 是数据库控制语言:是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。
4.TCL - Transaction Control Language
事务控制语句.专指做事务处理的代码.
5.还有一种说法是把查询语句从DML中分离,独立称为一种语句.就是查询.
五、目前主流的数据库
1.Oracle
2.MySQL (MySQL有很多分支,语法都查不多)
2.1 MariaDB (使用挺高)
2.2 阿里的MySQL(阿里系专用的)
3.DB2 : 大数据(海量数据) 不等同于 大数据 :(IBM)
4.Sybase
5.SQL Server (微软)
安装oracle数据库
安装版本:oracle11g简化版,Oracle Database 11g Express Edition
百度网盘地址:https://pan.baidu.com/s/1nwsI4aP
oracle是多用户式的
客户端:
sqlplus–自带的,
sql developer
developer官方下载地址http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
安装注意事项:
- 禁止使用中文路径,空格
- 腾讯管家等关掉
- 安装时需要设定管理员口令,是管理员口令(密码),尽量简单
数据库安装–解压–纯英文路径不能有空格
1.在D盘根目录下创建一个Oracle文件夹(当然也可以在其他地方创建)方便自己找到
2.解压下载好的安装包(随便解压到哪里),运行setup.exe
3.确认安装目录(选择刚才在D盘创建的Oracle文件夹)
4.输入数据库管理员口令,密码千万不要忘记
5.监听端口1521,http端口8080,安装完成点击完成
6.能看到下面两个服务说明安装成功
7.运行开始菜单的’运行SQL命令’或者直接在cmd命令行中输入sqlplus—system—口令(sqlplus / as sysdba)连接数据库
$sqlplus---system---口令(安装时第4步设置的口令)
安装后自带的有sqlplus客户端,命令行方式
若输入sqlplus提示不是内部或外部命令,则设置系统环境变量
D:\oraclexe\app\oracle\product\11.2.0\server\bin
将bin文件夹路径添加到path环境变量中
sqlplus基本操作使用
oracle数据库有sys,system:两个管理员,sys:超级管理员 system:普通管理员
普通用户或syatem管理员连接:
入口1:打开dos,输入
$sqlplus
用户名
密码
入口2:运行sql命令
conn 用户名/密码
sys超级管理员连接(权限超大,不要轻易使用):在dos命令行下
如果和数据库在同电脑同用户下:免密码连接
$sqlplus / as sysdba
Oracle常用命令
-切换到其他用户:
conn 用户名;
-退出:
exit;
或者
quit;
-清空屏幕
clear screen;
-创建用户,需要管理员权限
create user 用户名 indentified by 密码;
-注意:
- 语句以分号结束
- 命令后面不需要分号,加了也不报错
- 创建后没有任何权限
-授权:需要管理员权限
grant connect,resouce to 用户名;
-显示当前用户名
show user:
-查看当前用户下的所有表
SELECT TABLE_NAME FROM USER_TABLES;
-查询系统时间
SELECT SYSDATE FROM DUAL;
SELECT SYSTIMESTAMP FORM DUAL;
SELECT 5*4 FROM DUAL;
-查看指定时间
SELECT TO_CHAR (sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;
-临时更改会话为英文
alter session set nls_date_language=english;
-删除用户drop(只有系统管理员才能删除)
drop user oaec;
-修改密码:当前用户或者管理员
alter user 用户名 cascade
-查询当前用户已创建的表
select table_name from user_tables;
-查询系统数据库中所有已创建的表
select table_name from all_tables;
-查询系统数据库中所有已创建的用户
select username from all_users;
-描述一个表结构
DESC 表明;
涉及到的服务:
- OracleServiceXE:数据库服务
- OracleXETNSListener:数据库监听服务
- 默认都是自动启动,在开机时启动,很有可能开机启动失败
- 卸载Oracle,可以先把服务关掉,再卸载
oracle中的常用数据类型
-例如:男
CHAR(10) --定长
VARCHAR(10) --所有SQL的通用类型(定长)
VARCHAR2(10) --oracle专用(变长:最大值不变,实际长度随内容决定)
-oracle创表语句(create)
CREATE TABLE 表名{
列名1 类型()【默认值】 约束条件,
列名2 类型()【默认值】 约束条件,
列名3 类型()【默认值】 约束条件,
列名4 类型()【默认值】 约束条件
}
-创建学生表(id,name,sex,birthday)
CREATE TABLE student(
id NUMBER(6), --学号
name VARCHAR(30), --性别
sex CHAR(3), --性别
birthday DATE --生日
);
-错误分析:ORA-00907;缺失右括号(检查语法是否正确:英文符号,关键字)
-错误分析:ORA-00955:名称已由现有对象使用(对象已经被创建了)
-查看表结构
DESC student;
-删除表drop
DROP TABLE student;
-向学生表中插入数据insert into 表(列1,列2…) values(值1,值2)
INSERT INTO student(id,name,,sex,birthday) VALUES(1,'张良','男','1-2月-18');
-插入当前时间
INSERT INTO student(id,name,sex,birthday) VALUES(1,'张良','男',sysdate);
-查询表中的记录select
col id format 9999;
col name format a15; --调整列的宽度(字符用a,数字类型用999)
SELECT id,name,sex,birthday FROM student;
-数据库字段的约束
- 非空约束 NOT NULL(nn)
- 唯一约束 UNIQUE(uk)
- 主键约束 PRIMARY(pk)
- 外键约束 FOREIGN KEY(fk)
- 检查约束 CHECK(列名,约束条件)
-练习:创建员工表emp(id,name,sex,age),为每列添加约束条件
CREATE TABLE emp(
id NUMBER(6) PRIMARY KEY, --主键(非空且唯一)
name VARCHAR2(30) UNIQUE NOT NULL, --唯一,非空
sex CHAR(3) CHECK(sex in ('男','女')), --check(列名 in(中任意一个))
age NUMBER(3) CHECK (age>0 AND age<120) --取1-120的数
);
在emp表中插入一条数据
INSERT INTO emp(id,name,sex,age) VALUES(1,'张飞','男',190);
–ORA-02290:违反检查约束条件(OAEC.SYS_C006998)
-创建表的时候就指定约束名(constraints)
-练习2:创建员工边emp(id,name,sex,age),为每列添加约束名及约束条件
create table emp2(
id number(6)
constraint emp2_id_pk primary key,
name varchar2(30)
constraint emp2_name_uk unique
constraint emp2_name_nn not null,
sex char(3)
constraint emp2_sex_ck check(sex in('男','女')),
age number(3)
constraint emp2_age_ck check(age between 0 and 120)
);
-查看当前用户下的所有表的约束条件
col constraint_name format a15;
col table_name format a10;
select constraint_name, table_name from user_constraints;
-表级别约束
create table emp3(
id number(6), --逗号代表是一列
name varchar(30),
constraint emp3_id_pk primary key(id), --表级别约束需要关联列约束(列名)
constraint emp3_name_uk unique(name)
);
-思考一:为什么需要约束列?
-目的:保证数据存储的正确性
-思考2:为什么需要给约束条件取名?
-目的:违反约束条件时方便程序员查错