SqlServer 数据库
一.数据库的创建在开发中的步骤
 
   1.1收集信息
   1.2概念设计(E-R图)
   1.3详细设计(数据库模型图)
   1.4审核数据库(三大范式)
   2.1 E-R  
    矩形:实体
    椭圆:属性
    菱形:关系
   3.1 映射关系
      一对一,一对多,多对一,多对多
   4.1 三大范式
      第一范式:每一列都要保证原子性,分的不能再分了
      第二范式:在满足1NF基础上,每一张表只能表述一件事(有主键)
      第三范式:在满足2NF基础上 ,确保除主键之外的列都必须和主键有直接的关系,而不是间接地关系
 二.建库建表建约束
 2.1 建库
    建库:create database myschool;
    三种文件格式:主文件.mdf,次要文件 .ndf,日志文件.ldf
    create database myschool
   --主文件
    on [primary]
   (
     name='', --逻辑名称
    filename=‘。mdf’,-- 文件路径
    size=10,--初始大小
    maxsize=100 ,--最大大小
    filegrowth=10 增长率 不能加百分号
    ),
    --次要文件
    (
     name='', --逻辑名称
     filename=‘.ndf’,-- 文件路径
    size=10,--初始大小
    maxsize=100 ,--最大大小
    filegrowth=10 增长率 不能加百分号
    )
    on log
   (
     name='', --逻辑名称
     filename=‘.ldf’,-- 文件路径
    size=10,--初始大小
    maxsize=100 ,--最大大小
    filegrowth=10 增长率 不能加百分号
  )
 给数据库添加文件
  alter database myschool
  add file
   --次要文件
    (
     name='', --逻辑名称
     filename=‘.ndf’,-- 文件路径
    size=10,--初始大小
    maxsize=100 ,--最大大小
    filegrowth=10 增长率 不能加百分号
    )
 
2.2 建表
 Create table 表名
(
  列 数据类型 数据特性(null or not null)
)
自动增长列 identity(1,1)
比如
Create table student
( id int identity(1,1)  not null
)
删除表 drop table 表名
删除数据 delete 表名,truncate 表名
 
2.3 键约束
2.3.1 主键约束
Alter table 表名
Add constraint  pk_约束名  primary key  (列名)
2.3.2 唯一约束
Alter table 表名
 Add constraint  uq_约束名 unique (列名)
2,3.3 检查约束
Alter table 表名
Add constraint ck_约束名 check (列名<=100)
2.3.4 默认约束
Alter table 表名
Add constraint df_约束名 default(‘默认值’) for 列名
2.3.5 外键约束
Alter table 外键表
Add constraint fk_约束名 foreign key  列名 references 主键表(列名)
 
2.3.6 删除约束
Alter table 表名
Drop constraint 约束名
 
三.sql编程
3.1 定义变量
局部变量Declare @变量名 数据类型=值
全部变量 @@error 错误号,@@identity 获取最近一次的值 @@version版本号
3.2 赋值
3.2.1 set
 set @变量名=值 or(set @变量名=(子查询)) ,一次只能给一个变量赋值
3,2,2 select
Select @变量名 =值  ,select @变量名=字段,@变量名=字段  from 表,可以给多个变量赋值;当返回多个数据的时候取最后一个
3.3 转换数据类型
3.3.1 convert
Convert (数据类型,变量)
特殊的可以对datetime 类型的字段转换 比如convert(字段,102)
3.3.2 Cast
Cast(变量名 as 数据类型)
3.4 if else
If (条件)
Begin
---sql
End
Else
Begin
--sql
end
3.5 while
While(条件)
Begin
End
3.6Case
Case  when 条件 then 结果
      When 条件 then 结果
      Else
 End
 
   
 
3.7 GO
批处理,把多条sql打个包一起发送服务器执行,执行速度加快
 
四:子查询
select * from ( 子查询 )别名
 
4.1 in
Select * from 表名 where 列名 in(子查询)
Select * from 表名 where 列名 in(‘’,’’,’’)
 
4,2 not in
 
Select * from 表名 where 列名 not in(子查询)
Select * from 表名 where 列名 not in(‘’,’’,’’)
 
4.3 exists and not exists
If exists(sql查询) 判断是否能查出数据
可以改写in 和not in
执行的效率比in和not 快
Select * from student wehre exists (select * from grade where grade.gradeid=student.gradeid)
 
五.存储过程
5.1 创建一个无参的存储过程
Create  proc 存储过程名称
As
 Sql 语句
Go
5.2 创建一个有输入参数的存储过程
 
Creta proc 存储过程名称
@变量名 数据类型
As
Sql 语句
Go
5.3 创建一个有默认值的存储过程
Creta proc 存储过程名称
@变量名 数据类型=’默认值’
As
Sql 语句
Go
 
5.4 创建一个有输入有输出的存储过程
Create proc 存储过程名
@输入变量 数据类型,
@输出变量 数据类型 output
As
Sql语句
Go
5.5 调用存储过程
Exec 存储过程名称
Execute 存储过程名称
经验:当遇到go的时候 exec 可以省略
 
 
5.6 事务
开启事务 begin transaction
提交事务 commit transaction
事务回滚 rollback transaction
 
六.索引
 唯一索引:当给一个列建唯一约束的时候,系统自动创建一个唯一索引(不能出现同一列重复的两行)
主键索引:特殊的唯一索引,当给列添加一个主键的时候,系统自动创建一个聚集的索引
聚集索引:一张表只能有一个聚集索引(类似与字典的拼音查找)
非聚集索引:一张表可以有多个非聚集索引(类似与自动偏旁部首)
 
语法
  Create [unique|nonclustered|clustered]
  Index  ix_索引名 on tbale(列,列) with
  Fillfactor=80 (没有百分号)
删除索引
 Drop index table.索引名
Mysql 数据库
一.MySQL的优势
运行速度快
使用成本低
可移植性强
适用用户广
社区版 免费,开源。适合普通用户
  企业版 收费,不可自由下载 功能和服务更完善 适合对功能和安全要求高的企业用户
二.Mysql相关信息
2.1 相关配置
  端口号:3306
  默认字符集:utf8
  utf8:一种Unicode编码,解决国际上字符不统一的多字节编码,通用性强
  将bin目录写入环境变量
  root密码设置
2.2主要文件
  Bin ,include,lib,share
  my.ini:记录MySQL配置信息,可修改配置内容,如端口号,字符集
2.3系统数据库
  Information_schema
  Performance_schema
  Mysql
  Test
  Myschool
  Bank
  Hospitaldb
三.建库建表键约束
3.1创建数据库
  create database myschool;
3.2切换当前数据库下
  use 数据库名称
3.3删除数据库
  drop database 数据库名称
3.4创建表
  CREATE TABLE [IF NOT EXISTS]  表名(字段 数据类型 特征)   
3.5字段的约束及属性
  非空约束 NOT NULL 字段不允许为空
  默认约束 DEFAULT  赋予某字段默认值
  唯一约束 UNIQUE KEY(UK)  设置字段的值是唯一的允许为空,但只能有一个空值
  主键约束 PRIMARY KEY(PK) 设置该字段为表的主键可唯一标识该表记录
  外键约束 FOREIGN KEY(FK)  用于在两表之间建立关系,需要指定引用主表的哪一字段
  自动增长 AUTO_INCREMENT  设置该列为自增字段 默认每条自增1通常用于设置主键
  主键 PRIMARY KEY
  注释 COMMENT ‘编号’ COMMENT='测试表’
  设置字符集编码 CHARSET = 字符集名
3.6查看表
  查看表是否存在 USE myschool;SHOW  tables;
  查看表定义 DESCRIBE 表名;或DESC 表名;
  删除表 DROP TABLE [IF  EXISTS] 表名;
 
四.数据库操作指令
 
DML(数据操作语言)
  用来操作数据库中所包含的数据(update,delete,insert )
    DDL(数据定义语言)
  用于创建和删除数据库对象等操作(drop ,alter,create)
    DQL(数据查询语言)
  用来对数据库中的数据进行查询(select)
DCL(数据控制语言)
  用来控制数据库组件的存取许可、存取权限等(grant)
五.数据类型
5.1数字型
  TINYINT非常小的数据 有符值: -27 ~ 27-1  无符号值:0 ~ 28-1  1字节
  SMALLINT 较小的数据 有符值:  -215 ~ 215-1 无符号值:  0 ~ 216-1 2字节
  MEDIUMINT 中等大小的数据 有符值:  -223 ~ 223-1  无符号值:  0 ~ 224-1 3字节
  INT 标准整数 有符值: -231 ~ 231-1 无符号值:0 ~ 232-1 4字节
  BIGINT 较大的整数 有符值: -263 ~263-1  无符号值:0 ~264-1 8字节
  FLOAT          单精度浮点数 ±1.1754351e -38 4字节
  DOUBLE 双精度浮点数 ±2.2250738585072014e -308 8字节
  DECIMAL 字符串形式的浮点数 Decimal(M,D) M+2个字节
  UNSIGNED属性 标识为无符号数
  ZEROFILL属性 宽度(位数)不足以0填充
5.2字符串
  CHAR[(M)] 定长字符串 M字节
  VARCHAR[(M)] 可变字符串 可变长度
  TINYTEXT 微型文本串 0~28–1字节
  TEXT 文本串 0~216–1字节
  DATE YYYY-MM-DD,日期格式 1000-01-01~ 9999-12-31
  DATETIME  YY-MM-DD  hh:mm:ss: 1000-01-01 00:00:00 ~9999-12-31 23:59:59
  TIME hh:mm:ss:  -835:59:59 ~ 838:59:59
  TIMESTAMP YYYYMMDDHHMMSS   1970年某时刻~2038年某时刻,精度为1秒
  YEAR YYYY格式的年份 1901~2155
六.存储引擎的类型
  MyISAM、InnoDB 、Memory、CSV等9种
  使用MyISAM:   不需事务,空间小,以查询访问为主
  使用InnoDB:     多删除、更新操作,安全性高,事务处理及并发控制
  修改存储引擎 InnoDB
  位置
  MyISAM类型表文件:*.frm:表结构定义文件 *.MYD:数据文件 *.MYI:索引文件
  InnoDB类型表文件:*.frm:表结构定义文件 ibdata1文件!!!
七.高级查询
 
71修改表
    修改表名:ALTER TABLE 旧表名 RENAME [TO]  新表名;
    添加字段:ALTER TABLE 表名 ADD 字段名  数据类型  [属性];
    修改字段:ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];
    删除字段:ALTER TABLE 表名 DROP 字段名;
7.2添加主键
    ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY 表名(主键字段);
7.3添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段)REFERENCES 关联表名(关联字段);
 
7.4数据插入
插入单条数据记录
INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
插入多条数据记录
INSERT INTO 新表(字段名列表) VALUES(值列表1),(值列表2),……,(值列表n);
将查询结果插入新表
INSERT INTO 新表(字段1,字段2……) SELECT字段1,字段2……FROM 原表;
SELECT字段1,字段2…… INTO 新表 FROM 原表;
更新数据记录
UPDATE表名 SET字段1=值1,字段2=值2,...,字段n=值n[WHERE条件];
删除数据记录
DELETE FROM 表名 [WHERE条件]; TRUNCATE TABLE 表名;
TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快
7.5DQL语句
 SELECT  <字段名列表>
[WHERE  <查询条件>]
[GROUP BY <分组的字段名>]
[HAVING <条件>]
[ORDER BY <排序的字段名> [ASC 或 DESC]]
LIMIT子句
[LIMIT [位置偏移量, ]行数];
7.6常用函数——聚合函数
AVG():返回某字段的平均值
COUNT():返回某字段的行数
MAX():返回某字段的最大值
MIN():返回某字段的最小值
SUM():返回某字段的和
7.7常用函数——字符串函数
CONCAT(str1,str1...strn) 字符串连接 SELECT  CONCAT('My','S','QL');返回:MySQL
INSERT(str,pos,len,newstr) 字符串替换SELECT INSERT('这是SQL Server数据库', 3,10,'MySQL');返回:这是MySQL数据库
LOWER(str)将字符串转为小写SELECT LOWER('MySQL');返回:mysql
UPPER(str)将字符串转为大写SELECT UPPER('MySQL');返回:MYSQL
SUBSTRING(str,num,len)字符串截取SELECT SUBSTRING( 'JavaMySQLOracle',5,5);MySQL
7.8常用函数——时间日期函数
CURDATE() 获取当前日期 SELECT CURDATE();返回:2016-08-08
CURTIME() 获取当前时间 SELECT CURTIME();返回:19:19:26
NOW() 获取当前日期和时间 SELECT NOW();返回:2016-08-08 19:19:26
WEEK(date) 返回日期date为一年中的第几周 SELECT WEEK(NOW());返回:26
YEAR(date)  返回日期date的年份 SELECT YEAR(NOW());返回:2016
HOUR(time) 返回时间time的小时值 SELECT HOUR(NOW());返回:9
MINUTE(time) 返回时间time的分钟值 SELECT MINUTE(NOW());返回:43
DATEDIFF(date1,date2) 返回日期参数date1和date2之间相隔的天数 
ADDDATE(date,n) 计算日期参数date加上n天后的日期 SELECT ADDDATE(NOW(),5);
返回:2016-09-02  09:37:07 
7.9数学函数
CEIL(x) 返回大于或等于数值x的最小整数 SELECT CEIL(2.3)返回:3
FLOOR(x) 返回小于或等于数值x的最大整数 SELECT FLOOR(2.3)返回:2
RAND() 返回0~1间的随机数 SELECT RAND()返回:0.5525468583708134
7.10查询
SELECT … FROM 表1 WHERE 字段1  比较运算符(子查询)
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询
子查询在WHERE语句中的一般用法
八.数据库还原和备份
8.1. 备份
使用mysqldump 命令
 
在cmd中写命令(如果报错,不支持内部名称-》使用cmd 打开mysqldump.exe的安装目录)
 
备份个别表
mysqldump -u 用户名 -p密码 数据库名称 表1,表2,表3...>文件路径d:\1.sql  (注意:后面不能写“;”号)
 
备份整个数据库中所有的信息
 mysqldump -u 用户名 -p密码 数据库名称>文件路径d:\2.sql
8.2还原
   mysql -u 用户名 -p密码 数据库名称<文件路径
   (注意:后面的“;”号不能写)
8.3.导出txt
    select * from tablename into outfile '文件路径地址';
8.4导入txt
load data infile '文件路径地址' into table 表名称
ORACLE数据库
 
 
一. 创建表空间
create tablespace sa
 datafile 'D:\orcldata\sa.dbf' size 200M
 reuse autoextend on next 1m maxsize unlimited;
--创建用户 此用户的密码是accp 默认表空间是bdqn
create user sa identified by accp  default tablespace sa;  
 
-二.给用户最高使用权限
grant connect,resource,dba to sa;
 
三.-给表空间添加文件
alter tablespace bdqn
add datafile 'D:\orcldata\bdqn2.dbf' size 200M
 reuse autoextend on next 1m maxsize unlimited;
四.排名和分页
create table score(id int,
                  studentname varchar2(50),
                  classname varchar2(50),
                  result number(18));
                 
insert into score values(1,'张三','一班',90);
insert into score values(2,'李四','一班',80);
insert into score values(3,'王五','一班',80);
insert into score values(4,'赵六','一班',60);
insert into score values(5,'小七','二班',90);
insert into score values(6,'李连杰','二班',80);
insert into score values(7,'王菲','二班',70);
insert into score values(8,'欧阳','二班',70);          
 
 
4.1over 函数
 
select * from score;
 
--分页
select id,studentname,classname ,result,rownum from score
--第一种排名
select t.*,rownum mc from (select id,studentname,classname ,result from score
order by result desc)t
--第二种排名
select t.*,rank() over(order by t.result desc ) mc from (select id,studentname,classname
,result from score
order by result desc)t
--第三种
select t.*, DENSE_RANK() over(order by t.result desc ) mc from (select id,
studentname,classname ,result from score
order by result desc)t;
--第四种,根据分组字段排名
select t.*,DENSE_RANK() over(partition by classname order by t.result desc )
mc from (select id,studentname,classname ,result from score
order by result desc)t
--累计
select tt.*,sum(tt.result) over(order by mc) from (select t.*,DENSE_RANK()
over(partition by classname order by t.result desc ) mc from
(select id,studentname,classname ,result from score
order by result desc)t)tt;
--累加
select score.*,sum(result) over(order by id) from score order by id;
 
五.备份和还原
5.1本地备份(cmd执行调用数据棒)
expdp jhpt/1 dumpfile=hbjy20140923.dmp directory=DATA_PUMP_DIR FULL=Y --DATA_PUMP_DIR 在数据库中查路径,把文件导出到这个文件夹(select * from dba_directories  查看DATA_PUMP_DIR 对应的目录)
5.2本机还原
impdp jhpt/1 dumpfile=hbjy20140923.dmp directory=DATA_PUMP_DIR FULL=Y
 
5.3远程备份
exp jhpt/1@orcl155 file=D:\app\User\admin\orcl\dpdump\jhpt23.dmp  log=d:\jhpt20150424.log
也可以加owner=jhpt
5.4远程还原
imp jhpt/1@orcl155 file=D:\app\User\admin\orcl\dpdump\jhpt23.dmp FULL=Y
 
5.5还原表
imp jhpt/qwer1234@orcl155 file=d:\base_purchaseinfo.bak tables=base_purchaseinfo
 
5.6备份还原 说明
本机备份和还原效率最高,但是只限于本机器
 远程备份是本地安装Oracle数据库,备份远程数据库的数据到本地
 远程还原是,把本地备份的数据还原到远程数据库
还原之前,把用户,表空间,数据文件全部删除,然后重新创建,还原的数据有几个数据文件,需要创建几个数据文件不然还原到一半抛出文件不够错误
/*--删除表空间已经表空间下的文件
drop tablespace jhpt including contents and datafiles;
--删除用户
drop user jhpt cascade;