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;
mysql otter 三台数据库
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章