菜单

自己的ASP.NET学习笔记011SqlServer基础知识

2018年12月19日 - MySQL

mysql数据库基础知识

sqlServer_基本功概念

好家伙是数据库

数据库顾名思义,就是之所以来储存数据的工具,用一个比例形象之例子来比喻,就是Excel,一个Excel文件就能够看成是一个数据库。

SQL server的管理工具

事关项目数据库

就以行与列成的次维数据表的格局,用来囤积数据的,并且将大半张数据表存储于一个单元中的囤积格局,就叫关系项目数据库。

SQL server联机丛书

开首菜单à Microsoft SQL Server 2008 à 文档和科目 à SQL Server联机丛书

SQL Server 配置管理器

用来启动和保管SQL server数据库的服务端,以及另相关效能。

当我们启动SQL Server 配置管理器之后,可以于左边目录中视“SQL Server服务”,在“SQL Server服务”里,大家即使可针对SQL Server的服务端,也即便是基本数据引擎举行管理。

里面“SQL Server (MSSQLSERVER)” 和 “SQL Server (SQLEXPRESS)”就是表示我们所设置的有血有肉的服务端,前者是标准版,后者是体验版。

开辟Server配置管理器的另外一样种办法:

“我的电脑”à右键菜单à管理à”服务及利用”àSQL Server配置管理器

数据表

鉴于履行与列成的亚维结构的囤数据的表。

SQL server profiler

当大家的数据服务端出现问题同故障的上,它可让大家提供实时的跟工具,和性监控的图。

记录

不怕数据表中行,一暴行数据我们便称一久数记录。

司空眼惯而言,每条数记录还暴发一个ID号,我们可拿此id明白成是excel中之行号,用来对每条记下举办区分和标记。

SQL Server Management Studio

她就是SQL server的图形化的军事管制界面,也虽然是客户端。

主键

重重时大家用id称为主键,主键这是看重当时张表的排顺序的基于。

启动Management Studio

以登陆界面输入相关的音:

服务器类型:数据库引擎

服务器名称:咱得以输入IP地址,
总计机名称。假设是造访本机的SQL server服务又没有改默认端口号的话,只待输入一个点
” . ”,它就代表本机的SQL Server正式版的服务端。(体验本是.\SQLEXPRESS)

身份验证:SQL Server身份验证

用户名:sa

密码:sa

字段

数字段,就是多少表中的排列。

各级一个字段都需指定一个号,用来注明该列数据的企图,就为作字段名。

当SQL Server身份验证不可以登陆时

1、 用windows身份验证(也固然是用本机管理员来登陆,不待输入用户名密码的)。

2、 展开左边目录中之 SQL
Server à 安全性 à 登陆名 à 双击sa à 打开sa 用户的特性窗口。

3、 修改密码

4、 裁撤”强制履行密码策略”

5、 在“状态”选项卡中,对“是否同意连接至数码引擎”和“登陆”分别摘“授予”和“启动”。

6、 点击确定关闭sa 用户的性能窗口

7、 右键点击服务器根节点,选取属性打开“服务器性能”弹窗。

8、 拔取“安全性”选项卡,设置“服务器身份验证”为“SQL Server和Windows身份验证”。

9、 确定并关闭“服务器性能”弹窗,然后以SQL server配置管理器中重新开数据服务端,再用sql server 帐户密码来登陆即可。

常用之数据库的种

Mysql 性能大胆,可以免费用。

MSSQL server 微软集团之数据库软件,平日用于搭配微软体系之编程语言。

Access是office的办公室套件之一。

Oracel 性能非强悍,也坏高昂。

SQL Management Studio的界面操作

左目录中,大家得创建数据库数据表。

左上角的新建查询按钮,能够打开一个输入与实施SQL语句之窗口。在这个窗口被我们可以经过按F5键或点击“执行”来运作SQL语句。 在输入多少长度达SQL语句之气象下,可以选中需要实践的代码,然后照F5来只举办为入选的片段。

设置与祭mysql

安装mysql的艺术多,我们下phpstudy那多少个软件来设置php + mysql的运作环境。安装后,我们虽有了mysql的服务。而且还有一定量舒缓mysql客户端。

 

Mysql分为客户端和服务端。服务端仅仅用于对软件程序提供数据通信,普通用户不可以直接观望里边的多寡内容。

 

客户端用来用服务端的数目,以用户可以知道的艺术示在该界面上。

 

sqlcmd命令行管理工具

通过纯指令的法子来治本SQL
server数据库服务端。

起先菜单à 运行à输入cmd打开命令行窗口à输入sqlcmd /? 查看sqlcmd命令的拉讯息。

当该令行下我们好因而sql语句来操作数据库。

比如:

sqlcmd

use test

select * from student

go

最后,必须输入go才会先河履行SQL语句。exit退出sqlcmd命令行状态。

phpMyAdmin

phpMyAdmin是最常用之mysql客户端,它是依照php语言的。

以桌面右下角的phpstudy图标上右击弹出菜单中选择phpMyAdmin就可以启动进入了。启动将来,需要输入用户和密码进行登陆,默认的用户名密码都是root。

 

修改数据表结构

不少时节我们用修改数据表字段结构,比如补充加字段、修改字段类型和许段名,可是SQL
server默认情状下会阻止大家本着数据表结构的改。所以我们得改SQL Server的安参数。

工具菜单à 选项à 打开”选项”弹窗中的”Designers”选项卡à撤废”阻止保存要求再一次创造表的变动”前边的入选状态。

新建数据库

1、 要指定数据库的称谓。

2、 平日采用utf8_unicode_ci字符集,在唯有粤语的状下,可以选gbk_chinese_ic或gb2312_chinese_ci 。

 

T-SQL基本语法

新建数据表

1、 选中数据库后,点击左边的“新建数据表”,填写“数据表名”。

2、 指定数据表的字段,也即便是排。在指定字段的经过遭到我们设本着字段添加字段名、数据类型、数据长度、是否是主键、是否自增。(多数景色下,主键是叫吧id的整数类型,而且是自增的。)

3、 为字段指定这无异排的数据类型。

select语句

语法:

SELECT 字段列表 FROM 表名

自增auto_increment

自从增字段际遇便存放的凡整数类型的数量,用于表示数据库中之笔录之序号。

于添字段的价值未待手动输入,其中的号是自动出的,每当向这表里面上加相同长新记录之时光,自增字段会自动取出上一致履字段值,然后加同,作为新记录的主键值。(主键相对免相会发更,尽管达到同样长长的记下为剔除了)。

where子句

where运算符

=,>,<,>=,<=,<>,!=,!>,!<

<>表示不等于,!>不大于。

AND 、OR、NOT

 

BETWEEN

select * from student 

where age BETWEEN 13 AND 19

 

查询指定的数据值是否在第一个值和第二个值的范围内。

LIKE

select * from student 

where name LIKE ‘%小%’

 

 

模糊查询,可以使用通配符,

%用来表示任意个任意字符,

_ 下划线用来表示一个字符。

 

select * from student 

where name LIKE ‘_白’

 

 

 

IN

是指从一个集合中去逐一匹配,只要数据值在集合中能找到相同的项,where条件就成立了。

 

select * from student 

where name IN (‘小张’,’小黑’,’小平’,’小李’)

 

———————————-

select * from student 

where name IN (select name from student where age <20)

 

 

 

 

 

EXISTS

用来判断一个子查询是否有结果,当子查询返回了至少一个结果时,where条件成立。

 

select * from student 

where exists(select * from student where age =99)

 

 

 

什么设置一个字段为自增

1、在成立表要以修改字段结构的下,设置字段的数据类型为int,然后选中auto_increment上的勾。

2、当插入一长数平时,不要手动填入主键字段。

3、主键生成的数字相对不会面更,尽管记录受去除。

group by子句

将点名字段中的同样之价值进行分组。值相同的特显示一行。

示例1:

SELECT age,COUNT(name) from student group by age

示例2:

每当sql server 中所显示的字段列表中,不可知利用group by前边没有起了之配段名,除非选取聚合函数。

SELECT age,address,COUNT(name) from student group by age,address

何以设置主键

1、在创建表要于改动字段结构的当儿,在主键字段的”索引”下拉菜单中挑选“primary”。(一摆设表只允许设置一个主键,平日它们是int自增的。)

 

order by子句

依据倒序排序

SELECT * from studentorder by id DESC

小练习:

1、 新建一个出品product数据库

2、 在数据库被补充加产品product表,并确立字段pId (主键)、pName(产品名称)、pModel(产品型号)、pPrice(Price)(产品价格)

3、 添加5长活信息

4、 在数据库被再一次上加一个出品入库表(saveInLib),并起字段:sid(主键)、pName(产品名称)、saveIn提姆e(入库时)、saveInCount(入库数量)。

5、 添加5长活入库记录。

 

top子句

mySQL中之数据类型

当mySQL中每个字段,都得明确其存放的数的项目,一旦指定了种,该字段(列)中之数码都须符合这一个类其余限定,否则便会晤招错误。

 

而字符等门类需要指定内容之顶酷尺寸。

 

Having子句

用来为分组设置条件

示例:

SELECT age,name from student group by age,name having name = '小李'

int整数类型

只可以存放整数

DISTINCT子句

排并回到结果被再度的值。

SELECT DISTINCT age from student

varchar字符类型

好储存任一字符,包括符号、数字、字母,可是他们还晤面于当成字符为处理。

insert into插入数据

Date日期

用来存储日期和时

平等次于栽一行数

insert into student (name,age,sex,address,phone) values('小宝',13,1,'城革大本营',12345678)

数值类

TinyInt 异常小之整数存储格式,1字节(8各项之老二前进制数),它的取值范围是:不牵动符号时0 ~ 255,带刚负号时-128 ~ 127

SmallInt 小平头,2字节,不带来符号时0~65535,带刚负号时-32768~32767

MediumInt 中等整数,3字节,不牵动符号时0~16777215,带刚负号时-8388608 ~ 8388607

Int 标准整数,4字节,不带符号时0 ~ 4294967295 ,带刚负号时-2147483648 ~ 2147483647

BigInt 大整数,8字节,不带来符号时0~18446744073709551615

 

Float 单精度浮点数,4字节,最小值,正负1.175494351E-58(1.175494351*10-58)最大值,正负3.102823466E+38(3.102823466E*1038)

Double 双精度浮点数,8字节,最小值,正负2.22507385072014E-308,最老价值:正负1.17976931348623157E+308。

 

Decimal
以字符串格局储存浮点数。它的取值范围不是一直的,取决于用户指定的尺寸。

同等次于栽多行数据

insert into student (name,age,sex,address,phone) values
('大宝',28,1,'城革大本营',12345678),
('小宝',13,1,'城革大本营',12345678),
('老宝',82,1,'城革大本营',12345678);

数值类的字段可以安装的参数:

探访略字段名按表的字段顺序来插入数据

insert into student values('小白楼',60,1,'沙坪坝',12345678)

专注:这种方法要按照表的字段顺序(除了主键ID)来排语句被的许段值,并且拥有字段都须填写值

unsigned属性

“整理”菜单中的unsigned选项,代表无符号,代表就同样配段被的数值不可知也负数,因为无符号就是代表没有正负号。倘诺“整理”菜单留空,什么还无拣的口舌,就是象征有记号,能够吧正数也得啊负数。

聚合函数

AVG() 求平均值

SUM() 求合

MIN()/MAX() 求最酷最小值

COUNT() 总计行数

unsigned zerofill属性

当数的增幅小于类型的无比深开间时,则在数码后边自动填写充0

UPDATE语句

update dbo.student set name='小白龙' where id = 14

auto_increment

自增

DELETE语句

delete dbo.student where id=14

默认à定义

此选项代表,填充数据经常如该字段为空值时,所用的默认值。

练习

成立同摆学生数据表,包含字段id、name、age、sex、address、phone、classNum

1、 五回性插入5修学生数量,并且不写字段名。

2、 用select语句询问ID为2暨ID为4里面的笔录,(用BETWEEN关键字)。

3、 查询有所有姓王的同窗(用LIKE模糊查询)。

4、 查询出班上年纪为(16、17、23、24)的同校

5、 总括各班分别发出稍许名学员

6、 分别总括男生与女子的年华总合。

7、 找到年龄最深的女人。

8、 修改id为3底学生姓名也”李小虫”

9、 删除id为3的学生。

连接查询

而询问多布置数据表并拿这么些数据表以得的逻辑关系进行连接,让它们显示的结果类似于同张数据表。

跟连接有关的要害字:

INNER JOIN 、OUTER JOIN ( LEFT和RIGHT)、FULL JOIN、CROSS JOIN

 

字符串数据类型

字符类型可以储存任何价值,甚至是二进制模式的图像、声音、视频。

CHAR[M] 代表M字节的字符。

varChar 常用的字符存储格式,使用时得指定最深内容长度。

中间连接

其依据一个要么几乎单相同的字段将记录匹配在一起,将立刻半布置表中的数目并查询出来。

中连接的特点是,只体现有涉及的多寡,不过没有干之数据是勿汇合被呈现出的。

存储大容量的公文

TinyBlob ,blob,TinyText,text

前方片只是象征二向前制字符串,后少独凡是意味着不二迈入制字符串,都能够储存大量的文件音讯。

MediumBlob,MediumText

LongBlob,LongText

语法:

SELECT <字段列表> FROM <第一张表> <连接类型> <第二张表> <ON 连接条件>

枚举类型

ENUM / SET 类型

设置其默认值为(‘值1’, ‘值2’, ‘值3’,…),由用户指定多单可摘值,字段中之价值必须是中间有,最四只好发出65535个可选值。

 

二表连接,示例:

select * from student INNER JOIN class ON student.cid = class.id

日期时项目

Date 1000-01-01 ~ 9999-12-31

TIME -838:59:59~838:59:59

DateTime 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

提姆eStmp 1970-01-01 00:00:00 到2037年之中的之一一个随时

Year 存储1901~2155年之一个岁。

 

多表连接,示例:

select student.name,classInfo.className,teacher.name from student
INNER JOIN 
classInfo  ON student.cid = classInfo.cid
INNER JOIN 
teacher ON classInfo.teacher= teacher.tid

小练习:

1、 成立同摆放员工数据表,employee,包含字段:eId(标准整数,主键、自增)、姓名eName(varchar,50)、年龄eAge(tinyInt,无符号)、工号eNum(smallInt,不足之位数用0填充)、学历(枚举:初中~硕士)、性别(枚举:男,女)、出生日期(Date提姆(Tim)e)、基本工资(Float,默认:1300)、自我介绍text。然后输入五名为员工的消息。

 

 

T-SQL语言功底的增删改查

多表连接的以别名,省略as

select s.name,c.className,t.name from student as s
INNER JOIN 
classInfo as c  ON s.cid = c.cid
INNER JOIN 
teacher as t ON c.teacher= t.tid

咱们得经as关键字来为多少表定义一个号,而且通过此别名调用表中的字段。

瞩目:只要定义了号,就非得下别名,原表的名即非可知重复用了。

而as关键字是好简简单单的:

select s.name,c.className,t.name from student  s
INNER JOIN classInfo  c  ON s.cid = c.cid
INNER JOIN teacher  t ON c.teacher= t.tid

加:内部连接的INNER
JOIN可以简化为JOIN ,效果是均等的。

SQL语句

凡是同一派系专门用来数据库操作的语言,SQL语句之语法不仅仅适用于mysql数据库,同时也适用于几有的主流数据库。当然不同商店说的数据库在语法细节上依然小距离。

 

标连接

中连接有自然的排他性,第二张表是本着第一张表的填补,假设第一摆表不待第二张表中之少数数据,那么第二张表中无给用之多少就是无会面给出示出来。

select语句

询问语句,专门用于在数量表中遵照用户指定的准举行查询。

语法:

SELECT <字段列表> FROM <左表><LEFT | RIGHT > [OUTER] JOIN <右表> ON <连接条件>

如果下LEFT就是亮左表中之持有数据,要是使用Right就是突显右表中之有着数据

简简单单语法描述:

SELECT <字段1,字段2,字段3…..> FROM <数据表名> [WHERE 筛选标准]

里字段部分代表你想只要于这张数据表中查询哪些字段(列),假诺假若询问所有字段,可以
* 号表示。

示例:

SELECT pName FROM product

//从产品表中查询所有产品名称

SELECT pName,pPrice FROM product

//从产品表中查询所有产品名称和价格

SELECT * FROM product

//从产品表中查询中所有产品的字段

SELECT pName,pPrice-30 FROM product

//在查询时给所有产品减30元

SELECT pName as '产品名',pPrice as '价格' FROM product

//在查询时修改结果集中的字段名

SELECT 3.1415926 *12 *12

//用select语句来进行数学运算

 

示例:

select *from student as s RIGHT JOIN Class Info as c  ON s.cid = c.cid

where子句

概念一个查询条件,然后以询问过程遭到之所以这些标准来罗符合条件的笔录。

 

SELECT * FROM product WHERE pPrice >=1000

查询价格大于等于1000的产品

SELECT * FROM product WHERE pPrice <>3000

SELECT * FROM product WHERE pPrice !=3000

查询价格不等于3000的产品

SELECT * FROM product WHERE pName = '中兴z954'

 

查询产品名称是vivoz954底活信息(在mysql中双引号与单引号都表示字符串,可是推荐应用单引号,因为我们前倘若读书的mssql server 中字符串用单引号表示)

多部外部连接示例:

select * from student  s RIGHT JOIN classInfo  c  ON s.cid = c.cid
LEFT JOINteacher t ON c.teacher=t.tid

逻辑与and

SELECT * FROM product
WHERE pPrice <800 AND pId >6 AND pName ='Nokia v998'

 

净连接

毕连接( FULL JOIN 或 FULL OUTER JOIN )

用来体现所连接的所有表的所有数据,尽管这条数没有其他涉及关系。

select *from student  s FULL JOIN classInfo  c  ON s.cid = c.cid

逻辑或or

SELECT * FROM product

WHERE pPrice <800 OR pId >6

 

练习:

1、 先重开讲解时谈的事例。

2a、
借使现在制作一个百货公司购物系统,产品音信表(product)(id、name、price)、用户表(customer)(id、name)、购物清单表(saleList)(id、产品编号pid、用户号码cid)

2b、 用一久select语句询问有用户之买进清单上的富有成品。

2c、 用一漫长select语句询问得到有用户之贩清单及之有着产品的总价。

 

3a、假要现在制一个影院的数据查询系统,坐位表(site)(id、row、col)、客户表(customer)(id、name、phoneNum)、电影票(ticket)(id、cid、sid、mid)、电影表(movie)(id、name、mtime)

3b、查询有平等会电影之有着坐位上的客户的音讯。

3c、查询有平街电影之保有坐位上的客户的音,并且出示空座位。

(如何判定一个字段的值为NULL值:

select * from movie where name is null)
select s.id,c.name from dbo.ticket t
join dbo.customer c on t.cid=c.id
join dbo.movie m on t.mid=m.id
right join dbo.site s on t.sid = s.id
where m.id=1
union
select id,'无座' as name  from site where id not in
(select site.id from ticket
join dbo.customer on ticket.cid=customer.id
join dbo.movie on ticket.mid=movie.id
right join dbo.site on ticket.sid = site.id
where movie.id=1)

3d、查询有一个客户看了的持有电影之名号。

逻辑非not

SELECT * FROM product

WHERE not pName = '中兴z954'

 

 

子查询

其是借助一个select查询语句,并无是直接从数据表中来获取数码,而是因而外一个查询语句子之结果集中来进展查询。

示例:

select s.name,s.age,s.sex from (

select * from student where sex = 0

) as s

where age >20

个中,在from关键字之尾,并无是数据表而是select语句。

insert插入数据

通向指定的数据表的指定字段插入一长记下。

穿插连接

交叉连接在真相上,也得用作是一样栽内连。只显示有相同涉及的多少。

语法:

INSERT INTO 表名(字段1,字段2,字段3,……) values(值1,值2,值3,….)

内,字段的职和价值的岗位必须逐项对应。

示例

–内连接写法

select * from classInfo

inner join teacher

on classInfo.teacher=teacher.tid

 

–交叉连接写法

select * from classInfo,teacher

where classInfo.teacher=teacher.tid

 

 

二者的结果是同样的

 

示例:

INSERT INTO userinfo(uName,uPhone,uIDCard)

VALUES('江小白','010-89562321','5001234567814541X')

 

望数表中插入一修用户消息

 

INSERT INTO userinfo(uName) VALUES(‘张小强’)

栽入一长用户音讯,可是唯有姓名,其他字段自动留空或使用默认值(假诺中某字段设置也不同意吗null,而没默认值的说话,就势必须要给这一个字段赋值了)。

 

INSERT INTO userinfo VALUES

(3,'王小虎','010-89562321','5001234567814541X')

 

美观略字段名,可是拥有的字段都无法不比照顺序来挨家挨户赋值。包含主键ID(要以顺序来填写主键值)

 

两遍性插入多长长的语句

insert into student(sName,sAge,sSex,sPhone)

values('小黑',20,'女','010-89562314'),

('小强',20,'男','020-89562314'),

('小红',20,'女','021-89562314'),

('小黄',20,'男','019-89562314'),

('小李',20,'女','022-89562314')

 

 

联合UNION

采取有限单或少单以上查询合并后止回去一个结出集

比如:

赢得班上年龄过20暨富有男生的合集

select * from student where age>20

union

select * from student where sex = 1

 

 

前提每条select语句重临的字段列表的个数与顺序必须是一模一样的。

 

Update修改数据

依照指定的规格规定需要改的实施,然后修改指定字段的数量。

共后回到重新的数目

union同后底结果自动去排除多独select结果负之再一次数据,假设用还展现这一个重新数据,大家可以应用union all关键字:

select * from student where age>20

union all

select * from student where sex = 1

 

创办及修改数据库、表

 

语法:

update 数据表名 set 字段1=值1,字段2=值2,……..WHERE 条件

则where是一个可选参数,但是平日状态下都亟待写where条件,假如不写就是修改整张表的持有执行。

SQL Server中之对象名

大部分情状下大家以的凡数据表或数据库的简写情势,实际上SQL
server中的数据表有4交汇命名约定。

[数据服务器名.[数据库名.[模式名.]]] 对象名

.test.dbo.student

数据库服务器名:默认是负当前一度登陆的此数据服务器。

数据库名:默认是依赖于客户端左上斗的下拉列表中曾经摘的数量库名,或因故use
指令指定数据库。

use test select * from student where sex = 1

示例:

UPDATE userinfo SET uName = '江老怪' WHERE uid = 1

 

修改第1久记下之人名也川老怪

UPDATE userinfo SET uName = '江老怪'

 

改所有行的用户称吧河流老怪

UPDATE userinfo

SET uName = '小二黑',uPhone='111111',uIDCard='11111111' WHERE uid = 3

 

 

模式名

SQL server对象可以拥有二种格局名。

第一种植形式:该目的拥有的权限的用户。

其次种形式:默认dbo,允许五个登陆用户共享的同样种植访问形式。

情势所代表的饶是造访权限,平时我们用默认的dbo形式。

delete删除

依据规则去指定的笔录

CREATE语句

它由此来成立数据库对象

语法:

delete from 表名 where 条件

即便如此where是一个可选参数,可是普通意况下都得写where条件,假诺非写就是剔除整张表的所有执行。

语法:

CREATE <对象类型> <对象名称>

CREATE DATABASE news

CREATE TABLE newContext( id int )

示例:

DELETE FROM userinfo WHERE uid = 2

 

 

CREATE DATABASE成立数据库

新创建的数据库,除了创设者、系统管理员、数据库所有者以外,其外人都不可以访问。

小练习:

1、 记忆背诵增删改查指定的语法。

2、 手动新建一个数据库product,在其中新建数据表product,那个表中的字段:pid(主键)、pName(产品名)、pModel(型号)、pIntro(简介)、pFrom(产地)、p普赖斯(Price)(Price)(价格) 。

3、 用insert语句添加10长达不同之出品数量

4、 查询

a) 查询有产品数量

b) 查询有产品的产品名和价格

c) 查询所有价格以2000上述的活

d) 查询有产品吗奥斯汀(Austen)又标价超3000的成品

e) 查询所有产地不是达累斯萨拉姆的出品

5、 将第5长达记下之制品号修改为T1000

6、 删除所有价格低于5初之成品。

 

用第三书后的sql语句复制到一个word文档中,然后首席执行官检查组员,班长检查总经理。

3、5、6每题20分。

第4书写中的每个小题8分协同40分

 

命令行与高档查询

CREATE DATABASE 的全体语法

CREATE DATABASE
[
[ON | PRIMARY ]
(
[NAME = ‘实例名’ ,]
[FILENAME = ‘文件名’ ,]
[SIZE = 文件大小 ,]
[MAXSIZE = 文件最大容量]
)
]
[
[ON | PRIMARY ]
(
[NAME = ‘实例名’ ,]
[FILENAME = ‘文件名’ ,]
[SIZE = 文件大小 ,]
[MAXSIZE = 文件最大容量]
)
]
 [COLLATE <核对名称>]
[FOR ATTACH [ WITH <server broker> ||FROM ATTACH_REBUILD_LOG ||WITH DB_CHAINING ON|OFF|TRUSTWORTHY ON|OFF  ]]
[AS SNAPSHOT OF<源数据库名>]
ON

 

故在少只地方:一凡是定义数据库文件的职。二凡定义数据日志库文件之岗位。

PRIMARY 关键字用于指定六只数据库文件被的主文件。

NAME 指定文件的实例名称。也固然是于数据库的逻辑名(非物理文件称)

FILENAME 就是凭借数据文件的情理地方及文件称,mdf(数据库)  ldf(日志文件)

SIZE 数据库大小,可以于数字背后用KB或GB表示数据库的大大小小。

MAXSIZE 最特别小容量。

 

Mysql命令行

1、 在phpstudy的右键菜单中,mysql工具 à mysql命令行

2、 弹出之吩咐框中指示”enter password”,输入默认密码root

3、 尽管看到”you mysql connection”就注脚你登陆成功了。

4、 在指令行中,每一样修指令都须盖分集团;停止,否则系统会认为你立刻漫漫指令还并未得,始终要求你继续输入。

 

COLLATE

用以拍卖排序和字母大小写等问题

 

查数据库列表

show Databases

FOR ATTACH

以都是的有数据库文件附加到如今服务器上。当前,那多少个文件假使数据库的一致局部。

 

选料数据库use

WITH DB_CHAINING

跨越数据库所有权

 

格式:

use 数据库名

选定指定数据库也当下默认为操作的数据库。

于使操作数据表中的多少此前,必须要选定一个时数据库。

 

TRUSTWORTHY

也sql server数据库文件添加安全层

摆有当下数据库被的数据表

show tables

创办数据库示例:

CREATE DATABASE TESE22BB
ON
(
NAME =TEST22BB,
FILENAME = 'e:\test22bb.mdf',
SIZE =30MB,
MAXSIZE = 50MB
)
LOG ON
(
NAME = 'TEST22BBLOG',
FILENAME='e:\test22bb.ldf',
SIZE = 10MB,
MAXSIZE = 20MB
)
GO

 

故那种方法,大家得以当指定的硬盘或U盘路径之下创建数据库。

 

留神:假设欲针对数据库文件举行复制、剪切或删除操作。

 

位列有数表中的字段

格式:show columns from 表名

Describe 数据表名

 

查数据库音讯

EXEC sp_helpdb ‘test’

盖接近查询语句之结果集的艺术回数据库的大大小小、拥有者、创造日期、文件路径等信息。

 

数据库暨数码操作

CREATE TABLE创制数据表

CREATE TABLE 数据表名

创制表此前确定是否就摘时数据库

 

始建一个新的数据库

令格式:create database
数据库名

整语法

CREATE TABLE [数据库.[数据库所有者]] 数据表名
(
<字段名><字段的数据类型>
[DEFAULT <默认值表达式>]
|
[IDENTITY [seed,increment][NOT FOR REPLICATION] ]
[ROWGUIDCOL]
[COLLATE<COLLATION NAME>]
[PRIMARY KEY]
[NULL | NOT NULL]
[<column constraint 字段约束>]
|
[table_constraint 表约束]
|
[字段名 as 计算列表达式]
)
[ON (<文件组>)|DEFAULT]
[TEXTIMAGE_ON(<文件组>)|DEFAULT]

 

于时数据库中成立数据表

留神,在开立从前要采纳时数据库。

格式:create table 表名(字段1 数据类型,字段2 数据类型,……)

示例:

create table stdInfo(

sName varchar(20),

sAge int,

sSex varchar(5)

);

 

DEFAULT 默认值

据该字段在从来不输入值的景下默认使用的价值。

始建包含自加主键的数据表

示范:成立客户表:

create table customers(

 id int not null auto_increment,

 name varchar(20) not null,

 age int not null,

 address varchar(100) not null default 'empty',

 primary key(id)

);

 

说明:

not null 代表该字段不允许出现空值,就是说当您利用insert语句插入数据记录的当儿,必须于者字段赋值,否则数据操作以有误。

auto_increment 自增

Default 默认值

Primary key 指定数据表的主键

IDENTITY标识、自增量

默认状况下,每条记下自动扩展1

除去数据表

格式:drop table 数据表名

NOT FOR REPLICATION

尽管是依靠对斯表展开复制的下,ID主键的价是重新排列,仍然延用以前的ID

去数据库

格式:drop database 数据库名

ROWGUIDCOL

凡是凭将一个表中的数额复制到此外一个表中时,如若来ID重复情形下,应用咋样处理。

复改表结构:扩大字段

丰盛一个字段

alter table student add sScore float null;

 

其中:

add 代表多一排列

Null 代表是字段允许空值。

student 是数量表名

sScore 是骤增的字段名,前面是数据类型。

COLLATE

用来拍卖排序和字母大小写等问题。

再度改表结构:删除字段

alter table student drop column sScore;

 

其中:

drop column 代表去字段操作

sScore 要为删去的许段名

student 是表名

PRIMARY KEY

设置该字段为主键

重命名数据表

rename table student to sInfo;

 

只顾:to前边是修改前的本来表名,to前边是改后底新表名。

NULL/NOT NULL

是否同意吗空

再也改表结构:添加自增主键

alter table product

 add pid int

 not null

 primary key

 auto_increment

 first;

 

其中

primary key 设置新字段为主键

first 将新字段放在另字段的前,处于第一个。

 

字段约束

针对字段中输入的数据开展平整的克。

小练习:

呼吁同学把所有SQL都勾及一个SQL文件中,按“班级-姓名(可以是拼音).SQL”的计保留

某某校的学员管理数据库被生学员表明(T_STUDENT)、班级表(T_CLASS),表结构及储存的数码如下表所示:

学生表(T_STUDENT):

STU_ID

(int, 主键,学号)

STU_NAME

(nvarchar(10),姓名)

STU_AGE

(int,年龄)

STU_CID

(int,外键,班级号)

1

张三

18

1

2

钱四

16

2

3

王玲

17

3

5

李飞

19

4

9

赵四

18

5

10

李可

20

6

11

张飞

18

7

12

周瑜

16

8

13

王亮

17

7

14

董庆

19

1

15

赵龙

18

2

16

李丽

20

3

班级表(T_CLASS):

CLS_ID

(int, 主键, 班级号)

CLS_JOB

(nvarchar(50), 专业名)

CLS_DEPART

(nvarchar(50), 系名)

CLS_DATE

(int, 入学年份)

1

软件

计算机

2013

2

微电子

计算机

2013

3

无机化学

化学

2014

4

高分子化学

化学

2012

5

统计数学

数学

2015

6

现代语言

中文

2016

7

国际贸易

经济

2013

8

国际金融

经济

2014

 

故而 SQL 语言形成以下功用

  1. 建库、建表,要求加加主键
  2. 插指定的数
  3. 觅来装有年龄小于19岁的学生学号、姓名、年龄。
  4. 学生张三转到化学系 111
    班,请更新相关的阐发。
  5. 去除班级表的主键这等同排。
  6. 将学员表明改名为T_STD
  7. 也班级表添加字段CLS_COUNT人数字段
  8. 啊班级表添加主键。
  9. 去除班级表

 

 

mysql_4_聚合函数

计算列

可以创立一个自我没有另外数的排,这一个列的值由其他列来动态的成形。

比如:

PCount AS price*num

这边我们就是定义了一个总计列,总价=单价*数量

 

注意:

1、不可知臆度主键、外键、唯一键

2、只好引用当前数码表中的字段

 

mysql数据库的备份与回复

表约束

对插入表的数码开展界定

备份

以phpmyAdmin中运用“导出”效能以数据表的布局以及数据保存也一个.sql文件(保存格式采纳SQL)

ON

倘数据库由三个组成部分构成,我们可以指定数据表存储于哪个部分。

恢复

以phpmyAdmin中点击“导入”,选取.sql文件的路线(格式选拔SQL),点击执行。

 

TEXTIMAGE_ON

与ON的意图类似,不过它只有在表中暴发Text或Image类型的字段时才使得。

mysql中之聚合函数

即使针对点名字段中之同样排数据举行总括与运算的函数。

创设数据表的示范:

use testStudent2;

CREATE TABLE student(

sid int IDENTITY PRIMARY KEY NOT NULL,

sName nvarchar(50) NOT NULL,

sAge int,

sSex bit  DEFAULT 0 NOT NULL,

sYW float DEFAULT 0 NOT NULL,

sSX float DEFAULT 0 NOT NULL,

sCount AS sYW+sSX

)

 

GROUP BY分组

以指定字段旅长数据内容又的记录,聚合为同组。剔除重复的值。

示例:

SELECT * FROM student GROUP BY sSex

SELECT sName FROM student GROUP BY sAge

 

练习:

创设一个产品销售表,字段如下:pid、pname(产品名称)、pPrice(产品价格)、pNum(产品销售数量)、pCount(产品销售总价= p普赖斯(Price)(Price)* pNum),用CREATE语句创造是数据表。

 

COUNT 总计个数

用于总结(按规范)查询有聚合后底笔录或询问的结果一共爆发略条。示例:

SELECT COUNT(*) FROM student //统计表中一共有多少条记录

SELECT COUNT(1) FROM student //同上,性能更强。

SELECT COUNT(1) FROM student WHERE sAge>17 //统计符合条件的记录总数

SELECT COUNT(1),sSex FROM student GROUP BY sSex

//将GROUP BY与COUNT两个函数结合起来使用,按性别进行分组统计。

 

ALTER修改语句

ALTER <数据对象类型><数据对象名称>

AVG求平均值

格式:AVG(字段名)

对点名的字段中(一列被) 的数据值举行呼吁平均值的运算。

SELECT AVG(sAge) FROM student

SELECT AVG(sScore) FROM student WHERE sAge<=18

SELECT AVG(sScore),sSex FROM student GROUP BY sSex

 

 

ALTER DATABASE 修改数据库

GROUP_CONCAT分组连接

用一律布置表中的大都进行记录受之指定的许段值,连接成一个字符串。每个值期间因逗号举办分隔。经常用于获取聚合后底每个分组中玉茭的积极分子。

SELECT GROUP_CONCAT( sName ) FROM student

//连接所有学生的姓名

SELECT GROUP_CONCAT( sName ) FROM student WHERE sAge>18

//连接所有18岁以上的学生姓名

SELECT GROUP_CONCAT(sName),sSex FROM student GROUP BY sSex

//得到所有男生和女生的名单

 

 

改数据库名

ALTER DATABASE test MODIFY NAME = test22

用数据库test改名为test22

ORDER BY排序

依照指定的字段的值的轻重缓急的主次,来排查询的结果。

SELECT * FROM student ORDER BY sScore

//通过成绩来排列学生。默认为升序(从小到大)

SELECT * FROM student ORDER BY sScore DESC

//通过成绩来排列学生。添加DESC就是降序(从大到小)

 

 

改数据库大小

ALTER DATABASE test MODIFY FILE (SIZE = 500MB)

留意:不克转换多少,只好叠加其的容量。

最为酷价值最小值MAX()、MIN()

当查询结果遭到的指定字段中找到最好老的价或最小之值。

SELECT MAX(sScore) FROM student

//得到成绩最高分数

SELECT MIN(sScore),sSex FROM student GROUP BY sSex

//分别得到男生和女生最低分

 

 

ALTER TABLE 修改数据表

无限常见的操作就是改数据表名和表中的字段。

 

求和sum()

当询问结果受到针对点名字段的值求和。

SELECT SUM(sSCore) FROM student

//全班总分

SELECT SUM(sSCore),sSex FROM student GROUP BY sSex

//查看男生总分和女生总分

 

 

上加字段

ALTER TABLE dbo.student

ADD --这个关键字代表添加

phoneNum char(20) DEFAULT '00000000',

sAddress nvarchar(100) ,

createTime DateTime DEFAULT GETDATE()

--GETDATE()代表获取系统当前时间

小练习:

1、用Create指令创造一个产品销售记录数据表,包含字段:产品名、销售地区、销售数额、销售金额。(10私分)

2、倘使本公司发售的制品只有发三栽,销售地区为才暴发三单。用insert语句插入十久产品销售记录。(产品以及销售地区一定有双重值。)(15分开)

3、总计每种产品之销售总额(10分割)

4、总括每种产品之平均销售额。(10细分)

5、总结每种产品的销售总数据。(10分开)

6、在每个地方销售的各样产品之称呼,连接成一个缘逗号分隔的字符串。(15细分)

7、同时总结每种产品的最特别销售额。(10划分)

8、总结产品在每个地区的低销售额。(10分)

9、拿到总销售额。(10私分)

 

 

 

 

 

 

 

mysql_高等查询

改字段名

EXEC sp_rename ‘表名.原字段名’ , ’新字段名’ , ’COLUMN’

示例:

EXEC sp_rename 'student.createTime','regTime','COLUMN'

数据过滤通配符

通配符,就是借助能通用的匹配其他字符的符。

修改字段类型

ALTER TABLE 表名 ALTER COLUMN 字段名 类型

示例:

ALTER TABLE dbo.student

ALTER COLUMN sAge nvarchar(30)

%通配符

%代表擅自个数的任一字符,它便是故当select语句被及LIKE关键配合以的。

删去字段

ALTER TABLE 表名 DROP COLUMN 字段名

示例:

ALTER TABLE dbo.student

DROP COLUMN sAddress

字段的值会被齐去

示例:

SELECT * FROM student WHERE sName LIKE '王%'

 

摸索所有姓上的学员

LIKE关键字于此地表示模糊查询,不是比如说=那样必须完全配合。

 

SELECT * FROM student WHERE sName LIKE '%五'

 

觅以“五”字最终的多寡

 

SELECT * FROM student WHERE sName LIKE '%老%'

 

摸中间含有“老”字的字符。

顾:就算数据的开或最终为空,依然可以配合到数,因为%不但代表擅自个数的人身自由字符,它一律也得表示没有字符。

改表名

EXEC sp_rename ‘原表名’,’新表名’

示例:

EXEC sp_rename 'student','studentInfo'

DROP语句

删除数据库对象,比如:删除数据表、视图、存储过程、触发器

语法:

DROP <数据对象> <数据对象名>

注意事项:

1、%不但代表擅自个数的擅自字符,它呢可空字符。

2、数据尾部底空格或会见苦恼通配符的摸索,比如:现有数据’abc
 ’,假如其最后有一个要么两个空格的话,则
%abc将不会面翻找到该数额,因为后多余的空格也是字符。解决智是前后都加上%。

3、%不克配合配null值。

 

DROP语句可以以删除多摆数据表

DROP TABLE 表1,表2,….

示例:

drop table table1,table2,table3

_(下划线)通配符

_ 通配符的企图与%类似,不过其只好配合单个任意字符。

 

DROP删除数据库

DROP DATABASE 数据库名

示例:

SELECT * FROM student WHERE sName LIKE '小_'

SELECT * FROM student WHERE sName LIKE '小__'

 

搜索以“小”开首的事后自由三个字符的数据,而且得是少单字。

 

在意:下扛线以及%不同的凡前者不般配配字符,必须得起一个字符才会匹配。

 

SELECT * FROM student WHERE sName LIKE '_老_'

 

 

练习:

用户CREATE 语句子创制一个电影院相关的数据库,其中富含数据表(site)(id、row int、col int)、客户表(customer)(id int,name
nvarchar(50)、phoneNum char(20))、电影表(movie)(id int 、name nvarchar(50)、mtime date提姆e)

 

其间,用户电话的默认值是12345678

影视的默认时间是眼下系时

每个表底id都得是自增的主键

改site数据表名为userSite

修改customer中之字段phoneNum的档次也char(50)

 

SELECT 查询中之第一字

数据库相关的情节

in关键字

于一个汇集中开展匹配,只要数据以及聚集中的人身自由一宗相同,就看数据满足条件。

 

SELECT * FROM student WHERE sAddress IN('北京','西安','天津','山东')

 

查找地址是 新加坡,埃德蒙顿(Fast),金奈 或 青海之学童音讯

 

网数据库

limit关键字

limite后边要与五只数字,代表从指定的记录起头(使用数据记录在物理上的次而非是ID),查找多少条记下出。

master

存储了数据库的焦点目的音讯,没有这数据库Sql
Server就无可知正常运作。

注意:

1、 次序是从0起头的,也就是说第一长条记下之序号是0

2、 这里的序号不顶ID,它仅是代表排列次序。

3、 LIMIT关键字是mysql所独有的,比如:mssql和Oracle中就从未Limit关键字。

 

SELECT * FROM student LIMIT 3,2

 

从第4长记下起始,获取之后的少漫漫记下。

 

msdb

供了SQL Server的代表服务着要是实施的职责与调剂计划

join关键字 – 链表

join关键字用于在数据库被并且询问多张在涉嫌关系之数据表。

 

model

让SQL server用于数据库模板消息之囤

as关键字

用来对配段段取一个号

SELECT sName as '姓名',sAge as '年龄',sAddress as '地址' FROM student

 

 

tempdb

因此来存放在有现新闻,重开数据库服务端时,它存储的信息会叫清空。

多表查询

暌违数据库

数据库默认的仓储地方

C:\Program Files\Microsoft SQL
Server\MSSQL10.MSSQLSERVER\MSSQL\DATA

假若大家得将它们移动位置的话,就待首先分离数据库:

右击数据库图标弹出菜单à任务à分离à弹出分手数据库窗口à选中”删除连接”à确定

诸如此类我们便可以复制与分叉数据库了。

内连接

尽管是依仅查询两布置表中暴发关联关系的多少,而尚未提到关系的多寡是不会师受询问出来的。

 

 
   

 

叠加数据库

用以将已经分此外数据库文件mdf、ndf(数据库协助文件)、ldf 添加到数据库服务端挨展开运转。

右击“数据库”à在弹出菜单中接纳”附加”à在“附加数据库”窗口被点击上加
à 拔取mdf文件à确定à确定

方式一:select同时from多张多

在select的from语句后而写副多张表的名,然后于where条件语句被写副多表之间的连条件。

 

示例:

SELECT * FROM student,score WHERE student.sid = score.sid

 

注意:内连续之中,要分主表和附表,附表只是用于对主表所紧缺的情节举办补偿,比如达例被,主表是学员成绩,student学生只是在补主表中缺少的学习者姓名等数据。

SELECT

student.sName as '姓名',

   student.sAge as '年龄',

   score.sProject as '科目',

   score.score+10 as '成绩',

   score.sid as '编号'

FROM student,score

WHERE student.sid = score.sid

 

 

当多表查询的早晚,为了防止由于字段名重复而生错误,大家可以以配段名前边加上表名,以显示区分。

 

备份与还原数据库

方法二:inner join

动用inner join同样好完成上例被的功力,而且主表与附表、连接条件一目了然。INNER JOIN子句的前方是主表,前边是附表,ON前面是声明连接的尺码。

 

SELECT

   student.sName as '姓名',

   student.sAge as '年龄',

   score.sProject as '科目',

   score.score as '成绩',

   score.sid as '编号'

FROM score INNER JOIN student

ON score.sid = student.sid

 

 

只顾:省略INNER直接写JOIN关键字,也是中间连接。

 

备份

相对于分别数据库,备份的时光我们无待截止数据库的运转。备份可以于用户在用数据库的状态下开展。在指定数据库的右键菜单中à任务à备份à在“目录-备份到”区域被指定数据库备份的门道(默认路径是在sql server的装目录下,假诺需要变更备份路径,需要先去默认路径,再点击添加)

左连接

在少数布置表联合查询的时节,我要来得主表中连无干关系之数在内的装有数据。

 

SELECT * FROM score

LEFT JOIN student

ON score.sid = student.sid

 

 
   

 

还原

右击“数据库”à在弹出菜单中采取”还原数据库”à在“还原数据库”窗口被指定
”设备来” à点击”设备来”后底
”…” 按钮à添加à采取备份文件à确定à选中数据库前方的针对性勾à接纳对象数据库下拉列表à确定

数据库备份文件的扩张名是bak

sqlServer_束

自律就是填补加相同栽限制,为字段或表添加限制,以保险数量可用户制定的条条框框。

右连接

询问附表(JOIN关键字下的评释)中隐含无涉嫌关系的数目在内的持有数据。

SELECT * FROM score

RIGHT JOIN student

ON score.sid = student.sid

 

约的归类

多张表连接

示例:

SELECT * FROM score

INNER JOIN student ON score.sid = student.sid

INNER JOIN class ON student.cid = class.cid

 

因约束范围

实体约束

域约束

参考完整性约束

经过重大字IN来开展关联查询

询问所有数学战绩在60私分以上的学生的音。

Select * from student where

sid in

(

    SELECT sid FROM score

    WHERE score >60 And sProject = '数学'

)

 

IN在这边表示,sid必须同()内的查询结果之一相等。

 

冲约束的办法

主键约束

外键约束

唯约束

CHECK约束

DEFAULT约束

规则

默认值

约的概念

域约束

域约束用来拍卖一个仍旧两个字段。

照:商品价位不克啊负数。

当用户插入一行数平日,只要有一字段非称约束原则,那么整条记录还爱莫能助插入。

实体约束

她由此来对执行举行约。

按部就班:要求每个学生的全名、电话、地址都非可知起还。

平的价不克于这实践现身。

参照完整性约束

某个同字段的价值,必须包含于(当前表明或其它表底)其他字段值的限量外。

自律之命名

主键约束之命名:PK_student,PK代表主键Primary Key 。

CHECK约束:CK_ students_4j432j,CK_ students_ageNotSmall0

键约束

主键、外键、替换键、倒置键

主键约束

确保主键的价是唯一的。

安为同样张莫主键的表添加主键

ALTER TABLE Table_1

ADD CONSTRAINT PK_table111

PRIMARY KEY (id)

外键约束

即使为确保数量的准确性,比如:确保各一样长达论坛贴子的发贴人都是真在于用户表的。

经sql manageMent studio 来补充加外键

1、确定要给界定的数据表。

2、进入被限的数据表的“设计”视图,在空白处点击右键菜单中之“关系”项。

3、点击添加按钮新建一个封锁。

4、选中新加上的牢笼,在右手的“表和排规范”后边有一个按钮”…”,点它打开外键关系编辑窗口。

5、选中相应的申明的附和字段即可。

 

外键约束的双向性

当半张表中加加了外键之后,它所确立的律对峙时片摆设表底行事都是有着约束效用的:

1、 外键引用表,不可知补加主键表中未存的价。

2、 主键表中未克去除已经给外键表引用的主键。

 

一般外键在外键引用表上加加

第一要区分哪张表是主键表(是指用已经存在的值当约束范围),哪张表是他键表(是依添加数据时为律必须符合范围的那么张表)

 

始建外键的当儿,平日是于外键表上成立的。

练习:

1、 用create创造学生表达(sid、sname、sage、cid)和班级表(cid、cname、cteacher)

2、 对霎时有限摆表添加外键约束,班级表是主键表、学生表达是外键引用表。

3、 在学生表达中上加一个休有的班级试一下。

4、 在班级表中删除一个业已于引述的班级试一下。

 

透过SQL语句来创设外键

在创制数据表的而针对有字段添加外键

CREATE TABLE ticketVIP
(
tid int identity primary key not null,
cid int not null
FOREIGN KEY REFERENCES customer(id)
)

中,FOREIGN KEY REFERENCES之后的表名(字段名)就是意味着字段与哪张表的何人字段建立外键关系。

查询同一摆表中的外键音讯

语法:

EXEC sp_helpconstraint 表名

示例:

EXEC sp_helpconstraint ticketVIP

每当既在的数据表中添加外键

ALTER TABLE dbo.ticketVIP

ADD CONSTRAINT

FK_dbocustomer_ticketVIP

--外键的名字

FOREIGN KEY (cid)

--指定当前表的字段

REFERENCES dbo.customer(id)

--指定与哪张表的哪个字段建立外键关系

练习:

1、 用create创制商品表product(pid、pname、pPrice(Price)),添加至少5修数据。

2、 用create创立客户表customer(cid、cname)添加至少5长达数。

3、 用create成立购物清单saleList (sid、pid、countNum、sale提姆e、cid),并且增长对pid外键。

4、 用ALTER TABLE指令来给saleList表的cid添加外键。

数据表的打援

尽管约一个张表中的某个字段的价值必须符合另一个字段的曾在的值的克。

譬如说现有一布置员工表,员工表达中字段如下(员工id、员工姓名、上级领导id),在斯我们好约“上级领导id)”必须属于“员工id”的界定外。

create table employee(

eid int identity primary key not null,

eName nvarchar(10),

lindaoID int

FOREIGN KEY REFERENCES

employee(eid)

)

留神:创造于援的法和成立外键的道一致,区别是表名与字段都是眼下声明中之。

平等用ALTER语句也得添加自引用

ALTER TABLE employee

ADD CONSTRAINT

FK_linDao_Must_Be_employee

--自引用的名字

FOREIGN KEY (lindaoID)

--指定当前表的字段

REFERENCES employee(eid)

--指定与哪个字段建立自引用关系

级联动作

当大家转移数据记录的时候,可以同时操作简单摆表中的暴发关系的数据。

诚如而言添加数据不需要级联操作,只有去和修改的时节发出或为破坏了外键约束而造成个别个表明内数据的谬误,因而即便用一起的改要删除两独表明内的数据。

于开创数据库的又丰硕外键与级联动作

遵照:现创设同布置工资表与职工表并建立级联关系。就是说当员工新闻为去除的下,其工资记录并给删去。

CREATE TABLE EMoney(

mid int identity primary key not null,

mtime datetime,

howMuch float not null,

eid int not null,

CONSTRAINT FK_money_give_to_employee

FOREIGN KEY(eid)

REFERENCES employee(eid)

ON UPDATE NO ACTION

ON DELETE CASCADE

--当主键列的相关数据被删除后,外键列的相关数据也一起被删除

)

中间,CONSTRAINT 同FOREIGN
KEY、REFERENCES语句就是创立外键并宣称数据的仗关系。

ON UPDATE NO ACTION

NO ACTION就是据不执行其它履行,默认值。

ON DELETE CASCADE

CASCADE建立级联删除关系,在这里即去除员工的而,删除另一样摆表中该员工的连带记录。

练习:

创办一个班级表,并和学员表建立级联关系。要求去除班级之时段,那么些表中的学生消息也还要于剔除。

唯约束

虽约定一个字段中之价值未克再,每一个值都是绝无仅有的。

每当开立数据表的时候添加唯一约束

CREATE TABLE USERINFO(

uid int identity primary key NOT NULL,

uName nvarchar(50),

uPhone char(20) UNIQUE

)

顾:唯一约束和唯一索引上的效用是平等的。

于既是的表中添加唯一约束

ALTER TABLE dbo.employee

ADD CONSTRAINT UQ_name_no_repeat

UNIQUE(eName)

CHECK约束

透过用户从曾定义之尺码来针对一个或者多少个字段进展约。

针对曾存在的多寡表添加check约束

ALTER TABLE dbo.employee

ADD CONSTRAINT CN_AGE_MORE_ZERO

--约束的名称

CHECK

--说明这是一个CHECK约束

(eAge>=0 AND eAge<250)

在意:添加CHECK约束的时,数据表中现在之数要要满意约束规范。

CHECK约束规范示例

限制字段age的数据范围为0到250

age BETWEEN 0 AND 250

限制字段PhoneNum 值必须为电话座机号

PhoneNum LIKE ‘[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’

限制字段的值为多个可选值之一,比如:学历(初中、高中、大专、本科、研究生、博士)

xueLi IN(‘初中’,’高中’,’大专’,’本科’,’研究生’,’博士’)

限制一个字段的值必须小于另外一个字段,比如年龄必须大于工龄。

(age>workYears)

 

练习:

1、 现有学生表达如下(age、name、phoneNum、sex(nvarchar))

限制age 必须0到50。

限制phoneNum必须是11位数字

限性别只好输入“男”或“女”

夺约束

有时候我们要少已或剥夺约束。

临时禁用约束

ALTER TABLE employee

NOCHECK

CONSTRAINT CK_ageMoreZero

--这里要指定约束的名字

复原就禁用的格

ALTER TABLE employee

CHECK

CONSTRAINT CK_ageMoreZero

--这里要指定约束的名字

规则

规则及check约束是这些相近之,它们的别是规则只可以限量一个字段,可是规则定义一赖,可以屡屡应用。

哪怕本:年龄不克吧负数,那个规则可行使为客户表、员工表、学生表。

始建规则并将这么些下及指定的字段

--创建规则

create rule age_rule as @eAge>0

--把自定义的规则绑定到字段

exec sp_bindrule 'age_rule' ,'employee.eAge'

--‘规则名’,’表名.字段名’

注销规则绑定

exec sp_unbindrule 'employee.eAge' --‘表名.字段名’

删去规则

drop rule 规则名

示例:

drop rule age_rule

索引 index

目录是一个排、排序的情势,索引之后的结果就是是目录。

以:新华字典,它便起种植二种植索引排序模式:拼音、扩偏旁部首,按笔画。

sql server中的目标归类

比如聚集性分类

聚集索引

随:对于新华字典来说这极要的、物理上的实际排列形式就是是拼音顺序。

聚集索引就是数量的最为主最的排列情势,对于数据表而言,自增主键id就是聚集索引。

一样张数据表只可以发出一个聚集索引。

切莫聚集索引

准:对于新华字典来说,它有少数栽补充性的排列情势,按偏旁部首、按笔画。

勿聚集索引是靠,非物理上的其实排列形式的逻辑目录顺序的目录。

于数据表而言,创立了主键之后,其他的目都是匪聚集索引。

同等布置表中尽多可添加249个未聚集索引。

手动在SQL management中加上引用

右击指定数量表弹出右键菜单
à ‘设计’ à 在编辑表结构界面空白处没点击右键
à “索引/键” à点击“添加”来创建新的索引 à 在“列”选项中挑选对呀一个字段举办排序,以什么办法排序。

目的用途和用意

凡是增长多少查询的性质与效用。

以:我们仍用户年龄创立了目录。

推行用户年龄的查询操作时,性能会生出非常充分之升官。

select age from student order by age where age>20

随唯一性分类

唯一索引

以一个字段中, 不克存双重的一模一样的数量。强制约束一个字段中之价值未可以重复。

匪唯一索引

每当一个字段中,可以在一样之多少。

怎添加唯一索引

通过右击指定数量表弹出右键菜单à “设计” à在编辑表结构界面空白处点击右键
à “索引/键” à“添加”或选中指定的索引à采取列à 左侧“是唯一的”这无异于项上摘“是”à确定。

如此尽管好当一个指定字段之上添加唯一索引了。

依单列或多排分类

单列索引

举凡据一个索引只对一个字段举行排序。

多列索引

举凡凭借一个目按照多独字段展开排序。其排序模式:第一个目录排序之后,对里面的价相同重复的数,再比如次独字段来排序。

哪补充加多列索引

因此右击指定数量表弹出右键菜单à “设计” à在编辑表结构界面空白处点击右键
à “索引/键” à“添加”或选中指定的索引à点击“列”之后的微本钮à在弹有窗口被补充加六只“列名”。

目标长处

当我们于询问时采纳order
by或 group by的时候,sql的推行功效会大大提升。

目录的相干sql指令

查一摆放数表中的有着索引的连带音讯

exec sp_helpindex 数据表名

示例:

exec sp_helpindex student

创造目录

简写语法

CREATE INDEX 索引名 ON 数据表 ( 字段名 desc )

全体语法

CREATE [UNIQUE] [CLUSTERED] [NonCLUSTERED] index 索引名 on <表/视图名>(字段 asc/desc)

其中:

UNIQUE 创立唯一索引

CLUSTERED /NonCLUSTERED 聚集索引或非聚集索引

示例:

create Unique nonclustered index

IX_ageMore on student(name desc)

重命名索引

Exec sp_rename ‘表名.原索引名’ , ’新索引名’ ,’index’

示例:

Exec sp_rename 'student.IX_ageMore','IX_AM','index'

去索引

DROP INDEX 表名.索引名

示例

drop index student.IX_AM

视图

于我们数据库被其实是很多的物理表。而视图就是因物理表的询问结果,来转的如出一辙布置虚拟的数据表。

当sql management中开创视图

比如:

幸存一个事实上有多少表student

下一场依照student 中负有年龄过20寒暑之学童来大成一张虚拟表,也即使是视图。

当数据库下的“视图”节点上接触右键菜单
à “新建视图” à 在添加表中选中需要之多少表 à 在视图的计划界面写副SQL语句,比如:

select id,name,age from student where age>=20

视图分类

正式视图

哪怕是由一个依旧六只物理表通过规范查询语句组成的视图,理论及保有用select语句询问有之结果集还足以用来转视图。

还要,我们本着视图中的数额举办修改时会合一贯影响至这原来的大体数据表。

搜索引视图

固然吃视图添加索引

CREATE [UNIQUE][CLUSTERED][NonClustered] index 索引名 on <表 / 视图名>(字段 asc/desc)

若我们啊一个视图创造了聚集索引,那么我们不怕以是视图叫做索引视图。

一定给受视图添加了一个主键,然后系统会为索引视图成立缓存,因而索引视图的特性要压倒标准视图。

分区视图

这种视图可以当一如既往高抑多高数据库服务器上总是一组有关的数据表,以达成像是当操作一个数据表的效率。这是落实分布式数据库的平种植方法。

视图的得失

优点

1、方便重新排列物理表的数量,和操作源数据表一样。

2、对于复杂的sql查询语句而言,只需要写一不良,就好用结果很成一个永久性的视图。

3、安全性高,只被特定的用户访问片段字段列,或局部数据。

缺点

1、性能不赛,查询耗时吃资源。

2、对于由于复杂的select语句生成的视图而言,修改视图被之数目平日发生或会晤错。

故而,视图常常只好以叫小型或针对性能要求不高之种上。

视图的系SQL指令

视图的拜会

select 字段,…. from 视图名 [where 条件]

视图的操作和表的操作卓殊类似

视图结构的改动

事实上就是修改生成视图的select语句

Alter view 视图名 as 新查询语句

示例:

alter view View_1 as select id,name,age from student where age>20

视图的开创

Create View 视图名 as 查询语句

示例:

Create view View_22 as select id,name,age from student where id>3

删除视图

Drop view 视图名

随堂锻练

1、成立同摆学生数据表,包含字段id(int)、name(nvarchar)、age(int)、sex(bit)、address(nvarchar)、phone(char)、classNum(int)。

2、 创立同张班级音信班,cid(int)、className(nvarchar)、teacher(int)。并补充加点儿之上数量。

再一次创同摆放老师表,id(int)、name(nvarchar)、age(int)、phone(char)。并补充加点儿以上数据。

1、 用一修insert语句五次性插入十修以上生新闻,并且探望略字段名。

2、 用一长长的select语句询问学生表ID为2届ID为4之间的记录,(用BETWEEN关键字)。

3、 用一条select语句询问有装有姓上的同桌(用LIKE模糊查询)。

4、 用一长条select语句询问出班上年纪也(16、17、23、24)的同班

5、 对学生姓名添加唯一索引

6、 创立视图,将学生表明、班级表、讲师表连接为一个视图。以学员表明也主表。

7、 查询者视图,展现有男生的真名、年龄、班号、教授姓名。

sqlServer_囤过程

存储过程是同一多重SQL代码集,相当于是将我们输入的差不多长SQL语句保存也一个函数。

创办存储过程

创建不带参数的存储过程

语法:

CREATE PROC[EDURE] 存储过程名 AS   SQL语句序列……

施行存储过程

EXEC[UTE] 存储过程名

示例:

CREATE PROC  showNum2 AS
select 1+1;
select 10*21;
select 100/3;
execute showNum

开创带输入参数的积存过程

语法

CREATE PROC[EDURE] 存储过程名

[@参数名1 数据类型 ][, [@参数名2 数据类型 ]]…

AS   SQL语句序列……

履存储过程

EXEC[UTE] 存储过程名 参数值1, 参数值2,….

示例:

CREATE PROC  addNum 

@num1 int,@num2 int

AS

select @num1+@num2

execute addNum 25,13

创设带默认值的输入参数的仓储过程

含默认值参数,可以不输入具体的参数值,在无输入值使用默认值。

语法

CREATE PROC[EDURE] 存储过程名

[@参数名1 数据类型=默认值 ]…

AS   SQL语句序列……

示例:

CREATE PROC  addNum 

@num1 int=1,@num2 int=1

AS

select @num1+@num2

execute addNum 8

创办带输出参数的囤过程

语法

CREATE PROC 存储过程名

[@参数名1 数据类型 ][, [@参数名2 数据类型 ]]…

[@输出参数名 数据类型 ] OUTPUT

AS   SQL语句序列……

示例:

CREATE PROC  addNum 
@num1 int,@num2 int,
@result int OUTPUT
--定义输出变量@result,它的值会被自动输出
AS
select @result=@num1+@num2
-------执行存储过程-----
DECLARE @result2 int;
--定义变量@result2
execute addNum 8,1,@result2 OUTPUT
--执行存储过程addNum将其输出结果存放在@result2中
select @result2
--显示@result2中的内容

练习:

成立一个仓储过程,传入一个职工的日工资、要扣除的罚款、本月干活数,用OUTPUT重回本月实际工资。

翻开存储过程的音

EXEC sp_help 存储过程叫

示例:EXEC sp_help porcTest

改存储过程

语法:

Alter proc[edure] 存储过程名 [@参数1 数据类型],[@参数2 数据类型],[@输出参数名 数据类型] OUTPUT

示例:

ALTER PROC porcTest AS select * from student

删去存储过程

语法:

DROP PROC[EDURE] 存储过程名

示例:

drop proc porcTest

练习

2、传入一个id参数,依照这id来查询相应的学生领会记录,并返这些学生的姓名、年龄、电话。

3、传入一个age参数,依照是age参数来回到所有年龄超越该年龄的生记录。

SQL Server中的数据类型

数值类

数据类型

取值范围

存储空间

tinyint

0~255

1字节

smallInt

-2768到32767

2字节

int

-231到231-1

4字节

bigint

-263到263-1

8字节

decimal(p,s)

-1038+1到1038-1

5到17字节

numeric(p,s)

-214748.3648到214748.3647

4字节

smallmoney

-922337203685477.5808到

922337203685477.5807

9字节

money

-3.438到-1.1838,0, 3.438到1.1838

4字节

real

-1.79308到-2.23308, 0, 1.79308到2.23308

4字节或8字节

证实:decimal(8,3) 表示存储了一个8个数字,小数位数是3员。

字符数据

数据类型

存储空间

char(n)

每字符1字节,最大可以存储8000字节

varchar(n)

每字符1字节,最大可以存储8000字节

text

每字符1字节,最大可以存储2GB

nchar(n)

每字符2字节,最大可以存储4000字节

nvarchar(n)

每字符2字节,最大可以存储4000字节

ntext

每字符2字节,最大可以存储2GB

说明:

1、 其中援助Unicode字符集的以n初叶。

2、 我们好用varchar(max),表示可变换长。

日期以及工夫档次

数据类型

值范围

精度

存储空间

smalldatetime

01/01/1900 到06/06/2079

1分钟

4字节

datetime

01/01/1753到

12/31/9999

0.0033秒

8字节

datetime2

01/01/0001到12/31/9999

100纳秒

3字节

date

01/01/0001到12/31/9999

1天

3字节

time

00:00:00.0000000

23:59:59.9999999

100纳秒

3到5字节

 

其次进制数据类型

数据类型

值范围

存储空间

bit

null , 0 和 1

1比特

binary

固定长度的二进制数据

8000字节

varbinary

可变长度的二进制数据

最大8000字节

image

可变长度的二进制数据

最大2G

 

除此以外还有xml、table类型。

T-SQL变量

T-SQL变量遵照使用限制我们得以分为:全局变量(系统变量)和一部分变量(用户变量)

全局变量

在整SQL Server中都能看到的变量,通常用来代表SQL server的网参数。

写法:

@@变量名

例子:

SELECT @@SERVERNAME,@@CONNECTIONS

全局变量只可以看,不可知赋值。

 

常用全局变量

@@IDENTITY

直达同蹩脚实践insert语句后插入的数记录的id

示例:

insert into teacher values('小李',22,'19119111011')

select @@IDENTITY

@@ROWCOUNT

让影响的行数

示例:

delete from teacher

select @@ROWCOUNT

局部变量

效用域:仅限于在一个批处理(指同一批次履的代码)内中。

用途:

1、在循环语句被著录循环的次数要用于控制循环的格。

2、控制流程语词的走向。

3、存储函数或存储过程的回来值。

语法:

部分变量必须盖@开首

Declare @变量名 类型 [,@变量名2 类型]…..

扬言一个要四只变量,示例:

declare @num1 int ,@num2 int

赋值:

于T-SQL中,可以就此select 或 set 来针对变量举行赋值操作

set

相同次只好针对一个变量进行赋值

示例1:

declare @num1 int ,@num2 int,@num3 int

set @num1=10

set @num2=25

set @num3= @num1+@num2

select @num3

示例2:

declare @num1 int

set @num1 =(select top 1 age from student)

select @num1

( select语句被的top关键字表示询问及之数据集的极致下面的几乎条数记录。比如:查询最下面的3久学生数select top 3 * from
student )

示例3:

declare @num1 int

set @num1 = (select COUNT(1) from

student where age>19)

print @num1

select

它们用来体现变量的值,或者对变量举行赋值。

得同样涂鸦对几近个变量举办赋值。

示例1:

declare @num1 int,@num2 int

select @num1=14,@num2=18

select @num1,@num2

设若select 前边是赋值语句的话,则不会合展现变量的价值。

如果select 前面是变量的话,则展现变量的价值。

示例2:

declare @num1 int

select @num1 = (select COUNT(1) from student where age>19)

print @num1

示例3:

declare @num1 int

select @num1 =  COUNT(1) from student

 where age>19

print @num1

出口变量

print

一如既往破只可以输出一个变量: print @num1

select

无异于赖输出多独变量

示例:

select  @num1 as 总数,@num2

T-SQL运算符

注释

差不多行注释 /* 被诠释的情节
*/

单行注释 — 被诠释的始末

运算符

+、-、*、/

运算方法:

以:求圆面积

select 3.1415926 *4*4

相比较运算符

>、<、>=、!=或<>

如:

if 2>3

print '2比较大'

else

print '3比较大'

赋值运算符

= 等号
,与其余编制语言一样,将左侧边的价赋值到左手。

逻辑运算符

AND 逻辑与

OR 逻辑或

NOT 逻辑非

字符串连接 +

select '阿姨'+'你好'

位运算符

&按位逻辑与、|按号逻辑或、^按拉逻辑异或、~按拉逻辑非

T-SQL语法相关

语句块

if 9-5=5

 begin --相当于{

print '你说对了'

 end --相当于}

else

begin

print '你说错了'

end

GO指令

代表开端运行,GO之后的语属于其他一个批次底代码。

declare @num1 int

set @num1=10

go

select @num1+1

执行报错,这是坐用户定义的部分变量只会当同一个批次中中,而go指令将代码分隔成了零星个批次。

T-SQL中之流程控制

if语句

于一个或几个原则的论断下决定流程的走向。能够匹配and、or等逻辑运算符来。

if..else语句

如果…或者

星星段子代码中然则会举行同样截

if…else if…else语句

大抵规格判断

示例:

declare @age int;

set @age=61

if @age<12

print '儿童'

else if @age<20

print '少年'

else if @age<30

print '青年'

else if @age<50

print '中年'

else

print '中老年'

while循环

当极吧true时执行循环代码,当极为false时离循环

declare @num1 int

set @num1=0

while @num1<10

begin

print @num1

set @num1=@num1+1

end

GOTO语句

让眼前程序执行的各类来变动,跳反至指定的标记处。

示例:

print '今天是星期天'

goto theDay

print '今天是星期一'

print '今天是星期二'

theDay:

print '今天是星期三'

case语句

一定给swith,就是为一个变量的价来决定履行顺序的呐一个有。

以身作则1,依照数据表中著录的性别来显示孩子。

select id,name,

CASE sex

WHEN 1 THEN '男'

WHEN 0 THEN '女'

END

AS 性别

FROM student

示例2,单选判断题

DECLARE @N char(2)

SET @N='C'

SELECT

CASE @N

WHEN 'A' THEN '正确'

WHEN 'B' THEN '错误'

WHEN 'C' THEN '错误'

WHEN 'D' THEN '错误'

END

示例3,遵照学生的年纪来判断是否成年

SELECT ID,NAME,

CASE

WHEN AGE>18 THEN '成年人'

WHEN AGE<=18 THEN '未成年人'

END AS 成年否

FROM student

从今地点例子中大家得看来,CASE语句能够当select查询数据表的时段,通过规范来判定相应字段的价值,并遵照标准由定义再次来到结果。

随堂磨练:

1、 定义三单int型的变量,求最好老价值。662

2、用create创制一个生表明(sid、姓名sname、年龄sage、性别ssex、战表score ),要求于select查询时,展现对成绩的褒贬,40之下两样,60细分以下较差、80之下合格、100要么以下可以。

SELECT sname,sage,

case

when score<40 then '差'

when score<60 then '较差'

when score<80 then '合格'

when score<100 then '优秀'

end as '评价'

from student

3、创建一个囤过程,该存储过程实现输入1或0,查询上题数据表中的持有男生如故女孩子的平分分。

4、使用循环为上题的数据表中上加多少记录,姓名使用张1、张2…..,年龄,战表是遵照机数生成的。

提示:

类型转换

DECLARE @i int

SET @i =1

SELECT '张'+CAST(@i AS varchar)

成就随机生成

select ROUND( RAND()*100,0 )

5、写一个囤积过程,要求回如下数值。

1、1、2、3、5、8、13、21…………………数排的个数可以随心所欲指定。

6、写一个储存过程,四单传入参数,一个出口参数,数据表的字段如下:(学生姓名 varchar(10)、性别 bit、出生年月 datetime 、成绩集合 varchar(1000)  、重返值:新增学生记录之id int output)。将盛传的值作为同一长记下插入到数码表中。

眼前三单传入参数分别吗学员姓名、性别、出生年月,第四独参数varchar代表学生的成集合拼接成的字符串,如:“2:85,3:90,5:66”表示学科ID为2底课程成绩是85,学科ID为3的教程战绩是90,以此类推。第四个参数为新增成功后的那么漫长学生记录之ID,实际上尽管是回来的输出参数。

create proc proc_InsertStudent

@sname nvarchar(50),

@ssex bit,

@birthdate datetime,

@scoreSum varchar(200),

@rid int output

as

insert into student(sname,ssex,birthdate,scoreSum) 

values(@sname,@ssex,@birthdate,@scoreSum)

set @rid = @@identity

declare @rrid int

exec proc_InsertStudent '江小白',1,

'1995-12-22','2:85,3:90,5:66',@rrid output

select @rrid

7、实现单表分页的仓储过程,输入表名、pageSize、pageIndex

提醒:拼接并尽同一条字符串格局的sql语句:

declare @tname varchar(50),@sql varchar(100)

set @tname=’student’

set @sql=’select * from’ + @tname

exec(@sql)

提示:分页语句

select top 10 * from student 

where sid not in

(

select top(10*(3-1)) sid from student order by sid

) order by sid

答案:

create proc getPage

@tname varchar(50),

@pIndex int,

@pSize int,

@keyName varchar(50)

as

declare @sql varchar(200);

set @sql='select top('+CAST(@pSize as varchar(10) )+') * from '+

@tname+

' where '+@keyName+' not in

(

select top('+CAST(@pSize as varchar(10))+

'*('+CAST(@pIndex as varchar(10))+'-1)) '+@keyName+' from

'+@tname+' order by '+@keyName+'

) order by '+@keyName

exec( @sql)

exec getPage 'student',2,8,'sid'

T-SQL中之流程控制语句2

Try……Catch语句

当大家实践顺序出现谬误的时节,一般都汇合报错,并且已执行。可是尽管当try语句之限定外失误的话,程序会延续运行,并且以错误信息在catch语句范围外进行拍卖。

语法:

BEGIN TRY

执行存储过程

END TRY

BEGIN CATCH

……

END CATCH

除非当try中的语句暴发误的景下,才会失去履行CATCH中的语。

示例:

BEGIN TRY

exec getPage 'student',2,8,'sid'

END TRY

BEGIN CATCH

print '错错错错错错'

END CATCH

return语句

打存储过程、批处理着白退出

if 3>2

begin

print '东'

print '南'

return

print '西'

print '北'

end

print '中'

waitfor等待

当T-SQL执行及waitfor语句申时,程序会进入等状态,等侍指定时间过后,程序还继续执行前边的语。

语法:

waitfor delay ‘hh:mm:ss’ --时分秒

示例:

declare @i int

set @i=0

while @i<3

begin

waitfor delay '00:00:02'

set @i=@i+1

print @i

end

算术函数

操作对象就限于:int、float、money、smallmoney、decamal

三角形函数

sin()、cos()、tan()、cot()

select SIN(0.5*PI()),TAN(0.25*PI())

--sin(90度),tan(45度)

反三角函数

asin()、acos()、atan()

幂函数

power() 次方,比如:select POWER(2,10) –2的10次方

sqrt() 开(平) 方 , select sqrt(81)

square 平方, select SQUARE(9)

Log() 对数, select Log(9)

取近似值

round(浮点数,位数)
保留指定位数的小数,最后一各个四放任五契合

select ROUND(3.1415926,4)

FLOOR(浮点数) 向下取整,丢弃小数部分保留整数。

select floor(3.999)

标志函数

abs() 取绝对值,如:select
abs(-30)

Sign() 用于判断一个数值的处女,重返值才生三独(1、0、-1),如

select sign(-10)

刚数回1、负数再次来到-1、零重返0

其他

PI() 圆周率 select PI()

RAND() 随机数( 0到1内的微数 ) ,如:

select ROUND( RAND()*100,0) 得到0到100中间的整数

字符串函数

操作对象只是限制:char、varchar、binary、nvarchar、varbinary类型

Ltrim() 去丢字符串左侧的空格。select  LTRIM( ‘      abc     ‘)

Rtrim() 去丢字符串左侧的空格。select  RTRIM( ‘      abc     ‘)

ascii() 将字符转换为里ascii码表中的职。select ascii(‘A’)

char() 将ascii码转换为字符。如:select char(65)

lower() 转换字母为小写。如:select LOWER(‘Hello 基特(Kit)ty’)

upper() 转换字母为杀写。如:select upper(‘Hello 基特ty’)

str() 将数字转换为字符串。语法:str(数价,字符串长度,小数位数)比如:select ‘圆周率是’+str(3.1415926,5,3)

charIndex 重返子字符串在任何一个字符串中首先浅出现的职务。语法:

charIndex(子串,母串),就是判定前者是否为后人的子集,假如无于母串中找到子串则归回0。比如:select
charindex(‘day’,’today is a good day’)

substring(字符串,先河位置,截取长度) 截取字符串,示例:

select substring(‘today is a good day’,12,4)

数据类型转换函数

convert()

convert( 目的数据类型(长度) , 需要为转换的多寡要字段名 ),示例:

select '我们班上有'+CONVERT( varchar(2),10)+'个同学'

CAST()

示例:

select '我们班上有'+CAST(10 as  varchar(2))+'个同学'

str()

系统函数

col_length(表名,字段名)

回表中的字段的长,示例:

select col_length('Product','ProductName')

col_name()

重回指定字段的列名 , 那么些表是坐id的款型传播的。

select COL_NAME(OBJECT_ID('Product'),2)

翻第二只字段的名

落平等摆表中的享有字段的音讯

select * from syscolumns where id=OBJECT_ID('Customer')

得到同张表的字段的总额

select COUNT(1) from syscolumns where id=OBJECT_ID('Customer')

DateLength()

赢得数码的实际上尺寸,示例:

select

CompanyName,

DATALENGTH(CompanyName)/2 as '名称长度'

from dbo.Customer

翻开函数的佑助消息

将光标移动至函数之上按下F1键,就足以打开联机丛书并显示该函数的连带文档。

isDate()

看清日期数是否合法,是归1,否重临0。

select ISDATE('20160229')

getDate()

得到时工夫,比如:

select GETDATE()

无数时候在急需吗日期类型的字段添加当前时光也默认值的时光需要采纳到该函数。

isNull(表达式1,表达式2)

当表明式1底值未呢空时,重返表明式1的价值。

即使表明式1底值为null空时,重回表明式2的价值。

示例:

select CompanyName,

ISNULL(cast(regTime as varchar),'未添加注册时间') 

from dbo.Customer

ISNUMERIC()

判定是否为合理的数值,即便是数值为字符串的样式是。

select ISNUMERIC(‘123f457’)

是返回1,否返回0

练习:

1、现有字符串如下:”2:80,3:91,4:75”,其中,逗号用于分隔不同的科目和大成。其中1:语文,2:数学,3:泰语,4:物理。将接近这样的数额存放于生数表中。然后,建立一个囤过程,输入学生id,重回那么些学生的各科战表(每列的称号必须是科目名。)、各科总分,所有科目标平均分。

(倘若这4门户且是选项修课,也就是说有些人恐怕出4独战绩,有些人想必只是发生一个成绩)

declare @id int,@scoreChar char(30),

@isCharOver bit

select

@id=1, --要查询的学生记录的id

@isCharOver =0 --用来判断成绩字符串是否结束。

set @scoreChar=(select score from dbo.student

where id=@id

) --得到存放成绩的字符串

declare @scroeWithNum1 char(5), --语文成绩

@scroeWithNum2 char(5), --数学成绩

@scroeWithNum3 char(5), --英语成绩

@scroeWithNum4 char(5) , --物理成绩 @scroeWithNum char(5) --临时存放成绩的变量

while @isCharOver=0

begin

declare @douIndex int

set @douIndex= charIndex(',',@scoreChar) --获取逗号出现的位置。

if @douIndex = 0 --如果没有找到逗号的话

set @isCharOver=1 --就设置字符串结束的标记为

set @scroeWithNum = LTRIM( RTRIM(substring(@scoreChar,0,@douIndex))) --打印截取出的成绩

set @scoreChar =  LTRIM( RTRIM( substring(@scoreChar,@douIndex+1,30)))

------如果是最后一个成绩的话-----------------

if @isCharOver = 1

begin

set @scroeWithNum= @scoreChar

end

------End___如果是最后一个成绩的话-----------------

---第二次分隔成绩-----------

declare @sNum char(1),@RealScore char(3)

set @sNum = substring(@scroeWithNum,0,2)

set @RealScore =substring(@scroeWithNum,3,3)

if @sNum=1

set @scroeWithNum1 =@RealScore;

else if @sNum=2

set @scroeWithNum2 =@RealScore;

else if @sNum=3

set @scroeWithNum3 =@RealScore;

else if @sNum=4

set @scroeWithNum4 =@RealScore;

---End__第二次分隔成绩-----

end

select @scroeWithNum1 as '语文',

@scroeWithNum2 as '数学',

@scroeWithNum3 as '英语',

@scroeWithNum4 as '物理'

触发器

当用户执行某种操作之后,会为活动激动之囤过程,就叫做触发器。触发器的推行取决于sqlserver执行之某种操作,而无是由于用户直接调用的。

随激活顺序分类

自此触发器

当用户执行某种操作完后,才相会吃点的触发器。

轮换触发器

当用户执行某种操作起来在此以前,被硌的触发器,这种触发器可以阻碍或因故指定的操作来替换原来的操作。

论执行的操作分类

1、数据操纵语言DML触发器,是负触发器所当数据表中出了insert、update、delete操作时点。

2、数据定义语言DDL触发器,那好像触发器是看重当服务器或数中施行了create、alter、drop语句时于触发。

3、登录触发器:是依当用户登录sql server时触发。

DML触发器描述

1、 在sql server 2008丁,DML触发器通过行使简单布置逻辑表DELETED和INSERTED。这片摆设凡起家于数据服务器底内存中之,咱们只有只读博权限。DELETED和INSERTED表的字段结构以及触发器所当的讲明的结构是相同的。触发器执行长删改操作后,这有限摆着的笔录也会受以更新。

2、 触发器可以经数据表中的相关表实现级联操作,可以运用相比较约更扑朔迷离的级联操作,也可以实现比约更复杂的束缚。

3、 触发器的意义很强劲,可以兑现无数苛的操作,可是过多用触发器会招致数据库性能的降落与程序维护的劳顿。

触发器的运用

创造触发器

语法:

create trigger 触发器名 on 表名 for 操作类型

AS

若干T-SQL语句

GO

瞩目:DML触发器是针对某个张表的某型操作而接触的。

示例:

按成立一个触发器mytrigger用来监视student这张表的update操作,只要举办update语句,就会面激活触发器mytrigger

create trigger mytrgger3 on student for update
as
print '这是第三个触发器'
update student set name = '小小白' where id=1

横流:当我们针对同张表的一样操作定义了大多单触发器的早晚,那差不多只触发器会给同时触发。

改触发器

语法:

Alter trigger 触发器名 on 表名 for 操作类型

AS

若干T-SQL语句

GO

示例:

ALTER trigger mytrgger3 on student for update

as

print '这是修改之后的update触发器'

查触发器的情节

exec sp_helptext 触发器名称

示例:

exec sp_helptext mytrgger

翻开时数据库有多少只触发器

select * from sysobjects where xtype=’TR’

--实际上就是读取了系统数据表,因为触发器的内容就是存放在系统数据库中的。

拉开或关闭触发器

夺触发器

disable trigger [触发器名] on 表名

示例:

disable trigger mytrgger3 on student

开启触发器

enable trigger [触发器名] on表名

示例:

enable trigger mytrgger3 on student

剔除触发器

Drop trigger 触发器

示例:

drop trigger mytrgger3

练习

于学员说明中定义一个insert触发器,当插入一久数的下,检测插入的斯学生的多少是否过25春,倘使盖删除这漫漫数据并指示,该学生超过了征集年龄。

答案在662笔记

去与更新

当我们于数据库中实施长删改操作的下,系统会以sql
server服务器的内存中改两布置临时表Deleted和Inserted临时表。

假定我们前几日亟需支付一个学校图书管理序列,每个同学面前失去借书都谋面转一个借书记录。

1、首先学生数据表中得一个sNum学号字段

2、创制借书记录表,其中借书记录得同学号相关联(不是id)。

CREATE TABLE borrowRecord(

bid int identity primary key not null,

sNum int, --关联学生表学号

borrowDate datetime, --借书日期

returnDate datetime --还书日期

)

除去示例:

–当学生毕业未来,假要学生表中的学员记录就用为去除掉。借书记录为急需以深受删去掉。

create trigger delStudentWithBR on student for delete

as

delete borrowRecord 

from borrowRecord as br,deleted as d

where br.sNum=d.sNum

--从deleted临时表中找到刚才被删除的那个学生的学号

--然后删除所有这个学号名下借书记录。

创新示例:

便有在相互关联字段的价值暴发了改动。

--当学生的学号发生发生改变的时候,借书记录表中的学号也要同时改变,以保证数据仍然与这学生相关联。

create trigger studentNumChange on student for update

as

if update(sNum) --判断是否是指定的字段的值发生了改变

begin

--同时更新借书记录表中的学号

update borrowRecord set sNum = i.sNum

--将借书记录表中的学号改为修改之后的学号

From borrowRecord as br,deleted as d, inserted as i

where br.sNum = d.sNum

--找到借书记录表与更新前的学号相同的记录

--更新操作会同时影响Deleted和inserted这两张表

end

其中:

于履行触发器的update操作的上,Deleted和inserted这简单张表会以更新的一刹那,先用改进在此之前记录放入Deleted表中,然后拿履新后的记录放入inserted表中。由此咱们虽足以经过读取这有限摆表的内容,得到所更新记录之原值和新值,以及当时张记录的id

练习:

故而上例被的发明,假而毕业年龄22,判断年龄字段暴发更新,其值更新为超等于22的早晚,就自动判断这学生已经毕业了,因而去那个学生的学生表和借书表中之相干数据记录。

1、 怎么着判定你更新的凡春秋字段?

if update(age)

2、 如何明确刚刚被修改的是哪一条记录。

select age from deleted

select id, age from inserted

大家得经上述两长达代码得到更新前后的年,和所更新记录的id。

create trigger studentAgeChange on student for update

as

if update(age) --判断是否是指定的字段的值发生了改变

begin

--需要变量:修改后的年龄、学号、id

declare @age int,@sNum int,@id int

set @age = (select age from inserted)

set @sNum = (select sNum from inserted)

set @id = (select id from inserted)

if @age>= 22

begin

delete from student where id=@id

delete from borrowRecord where sNum=@sNum

end

end

临时表与表变量

基本概念

表变量

表变量和我们事先在外语言中见到的二维数组,是来过多貌似以外的,然而大家好像操作数据表一样来操作它们,只需要记住一点,那便是表变量是存在叫外存中的,它的实践效用高,然而其像变量一样来效率域和生活周期。

临时表

用于长期存储数据以的申,它选拔的是系的tempdb数据库。

中央原则

于可以因而发明变量的上,就尽可能的动表变量。实用不同意的境况下,再接纳临时表,因为临时表对系统的支付相比较至极。

唯独当临时数据量很死时,才提议用临时表。

创建表变量

语法

declare @变量名 table(字段列表….)

示例:

declare @mytable table(

id int,

name nvarchar(50),

age int

)

insert @mytable select 1,'小强',17

insert @mytable select 2,'小明',13

union all select 3,'小红',18

union all select 4,'小丽',19

select * from @mytable

示例2:

declare @mytable table(

id int identity primary key,

name nvarchar(50),

age int

)

insert into @mytable values

('小强',17),

('小明',13),

('小红',18),

('小丽',1)

select * from @mytable

示例3,从数额表中读取数据存入表变量:

declare @ttt table(

id int, name nvarchar(50), age int

)

insert @ttt select id,name,age from student

select * from @ttt

始建临时表

语法:

cteate table #临时表名(字段列表)

示例1:

create table #tt(

id int,

name nvarchar(50),

age int

)

insert #tt select 1,'小强',17

union all select 2,'小明',19

select * from #tt

示例2:

create table #tt2(

id int identity primary key,

name nvarchar(50),

age int

)

insert into #tt2 values('小强',17),

('小明',19),('小红',20)

select * from #tt2

练习:

开创一个表变量用于存放彩票号码,有些许字段(id,num char(8))。

用来随机函数生成50只彩票号码,存入这一个表变量中。然后显示有装有的彩票号码。

用户从定义函数UDF

user define function

其那么些类似于储存过程要js中的function,平日而言它如故配合select语句来开展以的,它的用法很像对某个字段举办操作的聚合函数。

骨干语法:

创建UDF

CREATE FUNCTION [模式] 函数名

([@参数名 [AS] 参数类型 [=默认值] [READONLY] [,………]])

RETURNS 返回值的类型

AS

BEGIN

[若干语句]

RETURN (返回单一值)

END

以身作则1,定义一个函数将bit类型值转化为阳还是女:

CREATE FUNCTION backSex(@sex bit)

returns varchar(10)

AS

BEGIN

RETURN(

select case @sex

when 1 then '男'

when 0 then '女'

end

)

END

select name,dbo.backSex(sex) from student

示例2:

ALTER FUNCTION backSex(@sex bit)

returns varchar(10)

AS

BEGIN

declare @sexChar varchar(10)

if @sex=1

set @sexChar = '男'

else

set @sexChar = '女'

RETURN @sexchar

END

select name,dbo.backSex(sex) from student

用途:

其的可以起至简化查询语句之企图,避免编制重复的语。

再就是要小心,它还可再次回到表

练习:

1、 在询问学生数的下,按照学生年龄,来展现学生表中的每个学员是否已经改为年。通过从自然函数实现。

2、 在询问学生数的时光,遵照学生的地点,来判断其中是否包含“加纳阿克拉”多少个字,包含彰显”本地学生”,不含有则展现“外地学生”。通过自自然函数实现。

3、 针对student表,用用户从定义函数,实现每页为10长长的的分页。传入参数是页数pageIndex,传出参数是存放了每页数据的结果集。

create function getPage(@pindex int,@psize int)

returns table

as

return(select top(@psize) * from student 

where id not in

(

select top(@psize*(@pindex-1)) id from student order by id

) order by id

)

select * from dbo.getPage(3,3)

sqlServer_游标

基础概念

当数据库在询问的这刹那间,它其实是拿数据记录有序的等同执行行取出来,那么游标在是历程遭到的意图,就是意味如今方读取的凡第几履。

以sql server中游标的生命周期,由个5片组成。

1、定义一个游标

可知道成在数量集上的指针,我们可以控制是指针来一条条底以数据集遍历出来,或者也得独自用于取特定的尽,所以游标必须定义在select语句询问的数据集之上。

语法:

DECLARE 游标名称 cursor

[ LOCAL | GLOBAL ]

[ FORWARD_ONLY | SCROLL ]

[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]

[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]

[ TYPE_WARNING ]

FOR

select 查询语句

[ FORUPDATE [OF 字段名列表…] ]

概念游标的早晚,我们设游标类型和游标变量,对于游标变量来说,就是按t-sql的变量的规则来定义的。

游标变量

我们能够当概念时事先对游标变量赋值,或者定义了事后再赋值。

--在定义时直接赋值

declare myCursou cursor for

select id,name from student



--先定义后赋值

declare @myCursou cursor

set @myCursou = cursor for select id,name from student

LOCAL和GLOBAL只会二选用同

用来定义游标的功用域,LOCAL是凭借游标可以于手上批处理、函数或存储过程中接纳,GLOBAL是靠游标对于当下数量连接来说在全局中。

示例:

declare myCursou1 cursor GLOBAL for

select id,name from student



declare myCursou2 cursor LOCAL for

select id,name from student

go

open myCursou1 --全局游标在批处理之外也可以访问

open myCursou2 --局部游标当批处理执行完之后就不存在了

FORWARD_ONLY和SCROLL二选一

FORWARD_ONLY只好一行一行的前进,而未可以后回落或者过了中的实施。

SCROLL定义之游标可以以数据集的另方向的旁岗位走。

示例:

declare Cursou_test cursor for --未定义移动方式

select id,name from student

declare Cursou_test2 cursor FORWARD_ONLY for --只进游标

select id,name from student

declare Cursou_test3 cursor SCROLL for --滚动游标

select id,name from student

open Cursou_test

open Cursou_test2

open Cursou_test3

FETCH NEXT FROM Cursou_test --只能一行行前进

FETCH NEXT FROM Cursou_test2 --只能一行行前进

FETCH ABSOLUTE 1 FROM Cursou_test3 --表中的绝对位置的正序第条

FETCH RELATIVE 2 FROM Cursou_test3 --相对于当前针对位置前进条

FETCH RELATIVE -2 FROM Cursou_test3 --相对于当前针对位置后退条

FETCH FIRST FROM Cursou_test3 --第一条

FETCH LAST FROM Cursou_test3 --最后一条

2、打开游标

open 游标名称

游标需要打开才可以使用

3、使用游标

拿游标拿到的数码传局部变量

我们得INTO关键字,将游标中的select语句询问后底价值存入局部变量。

游标每一回执行才回一修数。

示例:

declare @id int,@name nvarchar(50)

--临时变量

declare myCursor cursor LOCAL for

select id,name from student

--定义游标

open myCursor --打开游标

fetch next from myCursor into @id,@name

print @name

透过巡回(配合游标)来遍历数据表

declare CursorX cursor SCROLL for

select id,name from student

--定义游标

open CursorX

declare @id int,@name nvarchar(50)

FETCH NEXT FROM CursorX INTO @id,@name

while @@FETCH_STATUS=0 --游标执行后的状态

begin

print CAST(@id as nvarchar(10))+@name

FETCH NEXT FROM CursorX INTO @id,@name

end

close CursorX

deallocate CursorX

--其中,@@FETCH_STATUS代表上一条游标语句执行后的状态,它的返回值有三个:

 

返回值

说明

0

FETCH 语句执行成功

-1

FETCH 语句失败或行不在结果集中

-2

提取的行不存在

 

4、关闭游标

close 游标名称

游标使用完后,需要关闭。

5、释放游标

DEALLOCATE 游标名称

对下游标时性及的片指出

1、 游标对性能的吃至极严重的。

2、 用完游标之后自然假如关张与假释。

3、 尽量不要在数据量较生之上用游标。

4、 尽量选取FAST_FORWARD快速只前进情势来操作游标。

5、 使用游标平时会面比从来select 查询慢2-3倍,假设数据量较丰富之比重还谋面增多。虽然得以就此此外办法解决之题目尽量避免使用游标,它仅是终极的平等种植接纳。

练习

1、通过游标和循环,查询学生表中的奇数行之数。

2、通过游标和存储过程来实现对学生表的分页效用。

sqlServer_事务

论您错过银行转化,你从帐户A转5000首到帐户B,实际上这就要分点儿步来操作,第一步,帐户A上扣除5000长。第二步,在帐户B上存入5000冠。虽然第一步都就,然则出于一些原因促成第二步没有科学履行之口舌。就会晤促成卓殊惨重的损失。

之所以,我们便待一致种体制,来保管率先漫漫告句执行后,第二修告句也会履行。不过实际情状下,咱们不容许100%保这或多或少。由此退而求其次,用平等种体制来保管,假若第二长长的语句没有对实施的话,那么我们便撤除第一长告词所进行之操作,这种机制就称为事务。

得像的拿其解吧操作软件时之历史记录。

基本概念

业务需要明确的启跟截至点,就随指定在哪一样步初阶记录“历史记录”,然后以哪一样步已历史记录。

SQL server中之select、insert、update和delete语句都足以改为作业之同部份。

事情的标记点

BEGIN TRAN 设置工作的起先点。

COMMIT TRAN 提交业务,保存你所执行的操作,让该不可防止。

ROLLBACK TRAN 回滚事务,撤除你曾举办之操作。

SAVE TRAN
保存标记符,保存点,就是以公的操作以是存档,允许以工作回滚到您时封存的操作地点。

BEGIN TRAN

表示一个工作单元开,在此之后没有付诸的所有语句都属于工作的一样片段。

语法:

BEGIN TRAN [SACTION] [<事务名称>|<@事务参数>] [WITH MARE[<’描述’>]]

COMMIT TRAN

交由事条,也即使是事情之极,当执行了commit
tran之后,我们所进行之操作就落实保存。

语法:

Commite tran[SACTION] [<事务名称>|<@事务参数>]

RollBack tran

回滚事务,在并未保存点的情下,回滚到事情最初并未尽操作时的状态,在起保存点的情况下,可以回滚到保存点。

语法:

ROLLBACK TRAN [SACION ] [<事务名称>|<保存点名称>| <@事务参数>|<@保存点参数> ]

SAVA TRAN

创办保存点,以便我们在工作回滚的下引用它。

语法:

SAVA TRAN[SACTION] [<保存点名称>] [<@保存点参数>]

留神:当大家回滚事务的时刻,保存点会自动为免除,尽管用户保存了大半独保存点,执行ROLLBACK时也会为整个清空。

即使这尚待保存点的话,只好重新创造SAVE TRAN了。

事情的实际操作

当我们开事务之后,我们操作的实在都是缓存中的数额。唯有当提交业务之时光,操作才会面写副日志。

示例1:

BEGIN TRAN --开始事务

DECLARE @errorSum int --定义错误计数器

SET @errorSum=0

update student set age = 11 where id=1

--在事务中操作SQL语句

SET @errorSum=@errorSum+@@ERROR

--@@ERROR是上一次t-sql发生的错误的编号

--此处用来判断是否有出错,没错时@@ERROR的值为零

--有错时就将错误编号进行累加

exec jfdsa --执行一个不存在的存储过程来人为制造错误

SET @errorSum=@errorSum+@@ERROR

if @errorSum<>0

begin

print '有错误,事务开始回滚'

ROLLBACK TRAN --事务回滚

end

else

begin

print '成功,事务已提交'

COMMIT TRAN --事条提交

end

示例2,使用保存点

BEGIN TRAN mytran

insert into student values('小小白',15,0,'中国','12234678')

SAVE TRAN mysave

delete student where id=1

ROLLBACK TRAN mysave

COMMIT TRAN

练习

1、模拟提款机,实现一个银行转化的例子,创建帐户表account表(id、accName、accNum、money),实现从一个帐户转5000片及其余一个帐户,假使起谬误,则事务回滚,没有不当即使成功转帐。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图