三种数据库总结

Posted wlzhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种数据库总结相关的知识,希望对你有一定的参考价值。

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/[email protected] file=D:\app\User\admin\orcl\dpdump\jhpt23.dmp  log=d:\jhpt20150424.log

也可以加owner=jhpt

5.4远程还原

imp jhpt/[email protected] file=D:\app\User\admin\orcl\dpdump\jhpt23.dmp FULL=Y

 

5.5还原表

imp jhpt/[email protected] file=d:\base_purchaseinfo.bak tables=base_purchaseinfo

 

5.6备份还原 说明

本机备份和还原效率最高,但是只限于本机器

 远程备份是本地安装Oracle数据库,备份远程数据库的数据到本地

 远程还原是,把本地备份的数据还原到远程数据库

还原之前,把用户,表空间,数据文件全部删除,然后重新创建,还原的数据有几个数据文件,需要创建几个数据文件不然还原到一半抛出文件不够错误

/*--删除表空间已经表空间下的文件

drop tablespace jhpt including contents and datafiles;

--删除用户

drop user jhpt cascade;

 

     

 

以上是关于三种数据库总结的主要内容,如果未能解决你的问题,请参考以下文章

sqlserverMysqlOracle三种数据库的优缺点总结

SQL Server调优系列基础篇(常用运算符总结——三种物理连接方式剖析)

20191310《信息安全专业导论》第四周学习总结

Atitit 数据存储的数据表连接attilax总结

常用的三种socket总结

Git的使用总结