本人之ASP.NET学习笔记08MySQL基础知识

发布时间:2018-12-17  栏目:MySQL  评论:0 Comments

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(产品型号)、p普赖斯(Price)(产品价格)

3、 添加5漫漫活信息

4、 在数据库被再度补充加一个产品入库表(saveInLib),并确立字段:sid(主键)、pName(产品名称)、saveInTime(入库时)、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提姆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'

 

询问产品名称是BlackBerryz954底成品信息(在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(产地)、pPrice(价格) 。

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

4、 查询

a) 查询有产品数量

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

c) 查询有价格在2000上述之成品

d) 查询所有成品也辛辛那提还要标价高于3000底产品

e) 查询所有产地不是第比尔y斯之成品

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)* 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('北京','西安','天津','山东')

 

招来地址是 新加坡,武汉,爱丁堡 或 江西底学习者音信

 

系统数据库

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、p普赖斯(Price)(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 基特ty’)

upper() 转换字母为甚写。如:select upper(‘Hello 基特(Kit)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、 在询问学生数量的当儿,按照学生的地址,来判定其中是否含有“Austen”两独字,包含展现”本地学生”,不带有则显得“外地学生”。通过从自然函数实现。

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地图