title: 数据库的整理
date: 2018-02-15 22:02:34
categories: Database
tags: [数据库]
SQL语句(sql server)
关于数据库的操作
建立数据库
简单建立:create database 名字
高级方法:
create database <myDB> -- 数据库的名称
on -- 指定用于存储数据库(数据文件) 数据的部分的磁盘文件
primary -- 指定在主要文件组中定义文件的关联的 filegroup 列表
(
name='myDB',-- 指定文件的逻辑文件
filename='D:\myDB_MDF.mdf' , -- 指定文件的操作系统文件名
size=5mb,-- 指定 在 filespec 列表 中定义的文件的初始大小
maxsize=50mb,-- 指定 在 filespec 列表 中定义的文件可以增加到最大大小
filegrowth=10% -- filegrowth=growth_increment 指定 在 filespec 列表 中定义的文件的增量
-- 备注:filegrowth设置不能超过maxsize设置
),
filegroup myDB_FG1 -- 指定文件组的逻辑名称,在数据库中
(
name='myDB_FG1',-- 此名称是唯一的,不可以有重复值
filename='D:\myDB_NDF1.ndf' ,
size=4mb,
maxsize=50mb,
filegrowth=10%
),
filegroup myDB_FG2
(
name='myDB_FG2',
filename='D:\myDB_NDF2.ndf' ,
size=4mb,
maxsize=50mb,
filegrowth=10%
)
log on -- 指定用于存储日志文件的磁盘文件
(
name='myDB_LOG',
filename='D:\myDB_LOG.ndf' ,
size=4mb,
maxsize=50mb,
filegrowth=10%
)
使用数据库: use <database name>
删除数据库: drop database <name>
filegroup //次数据库 主数据库过于庞大时创建次数据库
//修改数据库 默认的次数据库
alter database myDB modify filegroup myDB_FG1 default
filestream 为储存非结构化数据而产生
创建过程
create database yourDB
on primary (
name='yourDB',
filename='D:\yourDB.mdf'
),
filegroup filestreamgroup -- 在D盘生成文件夹filestreamgroup
contains filestream -- 指定文件在文件系统中存储 filestream 数据
(
name='yourDB Data',
filename='D:\yourDB_Data' -- FILESTREAM功能允许我们讲BLOB文件直接存储在Windows文件系统中
)
log on(
name='yourDB_Log',
filename='D:\yourDB.log'
)
重命名数据库:sp_renamedb 现名 ,新名
关于表的操作
创建表:
create table <table name>(
//数据名 数据类型 约束
ID int primary key identity(1,1),
name varchar(20) not null,
birthday Date,
sex varchar(10),
age int
)
约束:
primary key 在插入数据的时候 主键唯一
identity(起始,步长) 自动增长列 此列在插入值时必须忽略
not null 不为空
unique 唯一
default <value> 默认
向表中加数据:
//这里可以提前指定列名顺序 可以省略 按默认顺序插入
insert into Teachers(生日,姓名,性别,年龄,工资,工作年限)
values ('1990-09-09','xxx','F',19,4000.78,1)
//插入多个数据要以逗号隔开 日期类型要用‘单引号’隔开
向表中删数据:
delete <表名> where 条件(例:ID=1……)
向表中改数据:
update <表名> set 列名=<修改后的值> where 条件(例:id=2)
修改表:
alter table <表名> alter column 列名 修改后的数据类型
alter table <表名> add 列名 数据类型
删除表:drop table <表名>
架构: xxxxxx.xxxxxx
创建架构:create schema 架构名
创建表时在名字前加架构名再加.即可
create table 架构名.表名(
id int primary key identity(1,1) not null,--主键约束 自动编号
pro_name varchar(100) unique ,-- 唯一约束
pro_ID int check (pro_ID between 1001 and 2001),-- 检查约束
pro_date date default getDate() -- 默认约束
)
增删改查
查询数据:(未完)
select * from 表名 // * 代表所有列
select 列名 from 表名 //不查询所有列
where 子句:
select *from 表名 where 条件(例:EmployeeID =1)//按条件查询
//条件支持的比较运算符 >,<,=,>=,<=,!=,!>,!<(不小于)
//多条件链接 or至少一个满足即可,and所有条件都满足,not不满足条件的
//between 下限and 上限 在下限和上限之间的,not between 下限and 上限 相反
//in (‘值表’)在值表中的值 not in (‘值表’)不在的
//通配符 %任何字符串 _表示单个字符 []指定范围内的字符 [^]指定范围外的字符
//与通配符连用的like关键字 like后内容不分大小写
//例:like '%ion'以ion结尾的任何值 like ‘%rt%’ 包含rt的任何值
//like ‘_rt’以rt结尾的,三个字的值 like ‘[dk]%’以d,k开头的
//like ‘[a-d]ear’ 以ear结尾并开头第一个字母在a-d之间,四个字母
//like ‘d[^c]%’ 以d开头 第二字母不是c的任意值
//is null 查找为空的 is not null 相反
别名:
select ‘学校’=school,‘地址’=address from 表名 //给列起别名 也可以用 (列名 as 别名)
select e.address,e.age,e.sex from 表名 as e //给表起别名 便于输入列名
select name+‘的工资是’+money as 工资情况 from 表名 //并置文字,提高列的可读性,用加号链接,文字要用‘双引号’隔开,类似语言的printf格式化输出
select money/8 as rate from 表名 //对列进行运算后输出 支持+-*/%
coalesce(列名,列名……) 找出列名中第一个不为空的
isnull(列名,替换值) 可以吧null换为替换值 作为列输出
order by 子句(排序):
select *from 表名 order by name asc/desc 升序/降序 不加就是升序
top关键字:
select top 10 *from 表名 //前10行
select top 10 percent *from 表名 //前10%行
select top 3 with ties 列名 from 表名 order by 排序条件
//加with ties意思是在列出top指示的行数后再显示排名最靠后的数据 用with ties时必须用order by子句排序
select top 10 *from 表名 where 条件 order by 条件 //top可以和where子句连用
offset&fetch: (必与order by子句连用)
order by 列名 offset X rows fetch next Y rows only //从第x行开始以后y行数据
select EmployeeID, Title, BirthDate
from [HumanResources].[Employee]
order by EmployeeID
offset 5 rows //除去从第5行前的所有
检索不重复的数据(distinct):
select distinct EmployeeID , Title
from [HumanResources].[Employee]
这些是我自己整理的,常用的。
查询部分有好多东西,整理不完了
范式
挺重要的~
可以参考这里的高赞回答。
这里是维基百科的解释,我下载为了pdf打包在这:下载
下面是我的理解
首先明确为什么要规范化,何谓规范化?
放下标准定义,简言之就是要简化表结构,使增删改查的效率提高,减少冗余,减少出错率,
其实就是把大表拆成小表。
各种范式:
第一范式:属性不可再分。不解释了~ 保证表里的数据都是”单一的“就行了。
第二范式:在第一范式的前提下,所有非键属性都完全依赖于全部键。若是键只由一个属性构成,那这个表就必定是符合第二范式的,找找有没有不符合的,将其单独拿出,组成新表,转化就完成了。
第三范式:在第二范式的基础上,非键属性与键(主、候选)之间无传递依赖。反过来说就是非键属性之间都互相无关。只和键有关
BC范式:在第三范式的基础上,无主属性与键之间的部分、传递依赖。
名词解释:
1.非键属性:不是主键、候选键的属性。
2.键,可唯一确定一个元组的属性,可由多个属性构成,也分为主键与候选键。
3.属性:就是列。
4.元组:行。