笔记5.28-

2015.5.28

***数据库·表的约束***

一、防止同一条数据完全重复

1.主关键字约束(主键约束)---PK

①能够唯一地区分每一行数据---不许重

②表中的数据按照主关键字排序---有序

③主关键字不能为空---不为空

④一个表只能有一个主键,但可以设置组合主键

操作:

添加主键:在表的设计界面,在相应的列上右击“设为主键”

删除主键:在表的设计界面,在相应的列上右击“删除主键”

2.唯一键约束(候选键)---UK

①唯一键不许重,可以为空

②一个表中可以有多个唯一键

③唯一键不能自动排序

操作:

在表的设计界面上右击“索引/键”,在弹出窗口上点击左下角“添加”,右键属性列表,修改类型“唯一键”,设置列

tips:

ctrl+0 清空不想要的某列某项数据

3.自增长列(标识列,Identity列)

①不能手动向自增长列里面填值,如果要写INSERT语句的话,则INSERT语句应当把这一列忽略

②自增长列主要用于整型、长整型、Decimal型

③不要随便把自增长列设置为主键

操作:

在表的设计界面中选中相应的列,在下面的属性面板→标识规范→选择“是”

二、防止有些该填的没有填

1.非空约束

不能为NULL

操作:

在表的设计界面中“允许NULL值”的复选框去掉

2.默认值

如果不给赋值的话,会使用默认值填上

操作:

在表的设计界面,选择相应的列,在下面的属性面板中设置默认值

三、防止乱填

1.类型

2.Check约束---CK

按照某种规则对数据进行检查

操作:

在表的设计界面中,右击相应的列,选择CHECK约束,在弹出的对话框中,设置约束的名称和表达式

3.外键约束---主表,从表

①主表是用来约束从表的,外键应当建立在从表上,从表中的外键列是不能随便乱填内容的,只能填写主表主键中存在的数据

②一旦建立起外键关系来,从表的外键不能乱填,反过来,主表中的主键列也不能乱删除乱改动

操作:

先建好主表,从表的设计界面上右击“关系”,在弹出的对话框中选择“添加”,在右边属性列表中设置“表和列的规范”

★级联删除的设置

***数据库函数***

一、数学函数

SQRT 平方根

select SQRT(2)//输出结果为1.414

ABS 绝对值

select ABS(-234)//输出结果为234

ROUND

①保留小数点后几位

select ROUND(4.532,1)

②四舍五入

select ROUND(4.532,0)//输出结果为4.500

CEILING 取大于已知小数的最小整数

select ceiling(COUNT(*)/5.0) from News

FLOOR 取小于已知整数的最大整数

select floor(COUNT(*)/5.0) from News

二、字符串函数

LOWER 大写转小写

select LOWER(‘UserName‘)---username

UPPER 小写转大写

select UPPER(‘UserName‘)---USERNAME

LTRIM 压缩左边空格

select LTRIM(‘          me‘)---me

RTRIM 压缩右边空格

select LTRIM(‘me          ‘)---me

*截取字符串

select LEFT(Title,5) from News 截取前几个字符

select RIGHT(Title,5) from News 截取后几个字符

select SUBSTRING(Title,3,5) from News 任意位置截取字符//3表示截取字符位置,5表示截取字符个数

*替换字符串

select REVERSE(Title) from News 翻转字符串

select CHARINDEX(‘中国‘,Title) from News 字符串出现的位置---标题中字符"中国"出现的位置

select REPLACE(Title,‘中国‘,‘美国‘) from News 替换字符串---标题中字符"中国"的位置替换成"美国"//"中国"表示原字符,"美国"表示替换字符

select REPLACE(Title,3,4,‘china‘) from News 指定位置、指定个数替换字符串//3表示替换位置,4表示替换个数,"china"表示替换字符

三、其他

select RAND()

随机数生成函数,0-1之间

select LEN(‘china‘)//输出结果为5

取字符串长度

select GETDATE()

获取当前时间

select YEAR(sbirthday) from Student

取日期时间年份

select MONTH(sbirthday) from Student

取日期时间月份

select DAY(sbirthday) from Student

取日期时间天数

*取日期时间部分字符

select DATEPART(yy) from Student 取日期时间年份

select DATEPART(mm) from Student 取日期时间月份

select DATEPART(dd) from Student 取日期时间天数

select DATEPART(hh) from Student 取日期时间小时

select DATEPART(mi) from Student 取日期时间分钟

select DATEPART(ss) from Student 取日期时间秒数

*转换格式

select CAST(123 as varchar(20))//输出varchar格式123

select CAST(‘123‘ as int)//输出int格式123

2015.5.30

视图View

视图:查询结果---与视图相对应的是表

表---真正存储数据的地方

视图---不存数据,展示查询的结果

定义:

select * from view_表名

语法:

create view 视图表名

as

select代码行

go

as...go等效于c#语句中的花括号

tips:

①视图就是为了查询数据方便,一般不要试图向视图中插入数据,容易出错。

②视图可以由一个表生成,也可以由多个表生成,还可以由表中各视图生成新的视图。

掌握:

1.视图是什么

2.会建视图、会查视图

3.知道视图的主要功能是查询,不是增删改

索引Index

索引:为了提高查询效率

索引的类型:簇索引(聚集索引)、非簇索引(非聚集索引)---簇索引比非簇索引检索效率高

操作:在表的设计界面上右击“索引/键”,在弹出窗口上点击左下角“添加”,设置索引

tips:

①数据的默认存储次序跟簇索引的次序是一样的。一个表中只有一个簇索引。

②非簇索引是单独放置的,查询的时候,先查询非簇索引,再根据非簇索引查询内容。一个表可以有多个非簇索引。

要记住的:

1.索引是什么

2.索引的分类、效率、原理

3.索引提升查询效率,但会影响增删改的效率

4.如何建索引、删索引

存储过程

SQL编程

数据类型:列的类型

变量定义:declare 变量名 类型名---变量名以@开头

赋值和取值:

赋值:set 变量=值或select 变量=值

eg.set @a=‘hello world‘

select @a=‘hello world‘

取值:变量名

declare @a varchar(50)---定义变量

set @a=‘hello world‘---给变量赋值

print @a---取值输出

运算符:算术、关系、逻辑、其他

算术:+ - * / % 没有++(自增) --(自减)

关系:> < >= <= = <> !=  //<> !=都是不等于,但常用的是<>

逻辑:and(与) or(或) not(非)

其他:

between...and...

exists

like

is(null)

没有条件运算符?: 也没有复合运算符%= += -=()

条件分支:

if 表达式---一定注意SQL的if语句不加小括号

begin

end

else

begin

end

存储过程的创建:

create procedure(或简写作proc) 存储过程名

形参名 形参类型,

形参名 形参类型,

......

形参名 形参类型

as

函数体

go

存储过程的调用:

存储过程名 实参1,实参2,...实参n

案例一:往Info中送入数据,如果主键已经存在,则执行修改操作,否则执行插入操作

案例二:做一个存储过程,输入水果代号、人员用户名、购买数量,把库存和账户扣掉相应的值

案例三:同案例二。但要检查:1.库存够不够 2.余额够不够

案例1

create procedure testinfo
@code varchar(50),
@name varchar(50),
@sex bit,
@nation varchar(50),
@birthday datetime(50)
as
declare @c int
select @c=count(*) from info where [email protected]
[email protected]>0
begin
update info set [email protected],[email protected],[email protected],[email protected] where [email protected]
end
else
begin
insert into info(code,name,sex,nation,birthday)values(@code,@name,@sex,@nation,@birthday)
end
go
testinfo ‘代号‘,‘姓名1‘,‘性别1‘,‘民族‘,‘生日1‘
select * from info//执行插入数据
testinfo ‘代号‘,‘姓名2‘,‘性别2‘,‘民族‘,‘生日2‘
select * from info//执行修改数据

案例2

create proc buyfruit
@uid varchar(50),
@id varchar(50),
@count int
as
update fruit set [email protected] where [email protected]
declare @cost decimal(8,2)
declare @p decimal(8,2)
select @p=price from fruit where [email protected] //从表中查询单价
set @cost=cast(@count as decimal)*@p
update login set [email protected] where [email protected]
go
buyfruit ‘用户名‘,‘水果代号‘,个数//执行后查询库存和账户是否扣掉相应的值

时间: 2024-11-18 04:07:50

笔记5.28-的相关文章

Android菜鸟的成长笔记(28)——Google官方对Andoird 2.x提供的ActionBar支持

在Google官方Android设计指南中(链接:http://www.apkbus.com/design/get-started/ui-overview.html)有一个新特性就是自我标识,也就是宣传自己,所以很多应用现在也自然的使用ActionBar并提供自己的logo. 微信的应用: Google的Android设计指南中是这样说的:应用的 启动图标 作为启动应用的入口是展示 logo 的最佳场所.你也可以将启动图标放置在 操作栏 上,从而保证在应用内的所有页面上都能看到它. 在使用Act

《The Swift Programming Language》的笔记-第28页

·        第28页 本页里的主要内容是: 1 介绍swift语言里的各类数制,或者说某一整数的不同表示形式. 1)十进制,无前缀 2)二进制,以0b开头,后边是若干个0和1的序列 3)八进制,以0o开头,后边是若干0~7的序列 4)16进制,以0x开头,后是0~9.a~f序列 以常量31为例,二进制表示31为:0b11111 以常量31为例,八进制表示31为:0o37 以常量31为例,16进制表示31为:0x1f 2 科学计数表示数 1)以10为底的科学计数 2)以2为底的科学计数 12

《Effective C++》学习笔记——条款28

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 五.Implementations Rule 28:Avoid returning "handles" to object internals 规则 28:避免返回handles指向对象内部成分 假设我们的程序涉及矩形.每个矩形由其左上角和右下角表示.

[Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法

js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+1}" 反射获取函数源代码的功能很强大,使用函数对象的toString方法有严重的局限性.toString方法的局限性ECMAScript标准对函数对象的toString方法的返回结果(即该字符串)并没有任何要求.这意味着不同的js引擎将产生不同的字符串,甚至产生的字符串与该函数并不相关. 如果函数

python学习笔记(28)文件管理

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 原链:http://www.cnblogs.com/vamei/archive/2012/09/14/2684775.html 笔记:学的越来越多,是不是忘得也越来越多 #第n讲 文件管理 ''' 文件管理的功能命令基于linux 的文件管理功能 ls rename 不得不说,linux 的基础命令真的很通用 linux 基础命令 . 指向当前目录 .. 指向父目录 文件附加信息

【算法学习笔记】28.枚举法 解题报告 SJTU_OJ 1255 1256 魔戒

1256. 你的魔戒?不,是你的魔戒.加强版 Description 在前往末日火山的途中,佛罗多与他的霍比特人同胞不幸被半兽人抓住了.半兽人要对每个霍比特人进行询问,以找出哪个霍比特人携带了至尊魔戒.每个霍比特人可能会说以下几种话: I have the ring. 我有魔戒. I have not the ring. 我没有魔戒. XXX has the ring. XXX有魔戒.(XXX表示某个霍比特人的名字) XXX has not the ring. XXX没有魔戒. Today is

UNIX环境编程学习笔记(28)——多线程编程(三):线程的取消

lienhua342014-11-24 1 取消线程 pthread 提供了pthread_cancel 函数用于请求取消同一进程中的其他线程. #include <pthread.h> int pthread_cancel(pthread_t tid); 返回值:若成功则返回0,否则返回错误编码 pthread_cancel 调用并不会立即终止目标线程,而只是向目标线程发出取消请求.调用线程不等待目标线程终止,在默认情况下,目标线程在取消请求发出以后还是继续运行的,直到目标线程到达某个取消点

linux命令学习笔记(28):tar命令

通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的 工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中 改变文件,或者向档案中加入新的文件.tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案. 利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文

RHCE 学习笔记(28) Target Service

这一节比较简单,学习了RHEL7里面的 Target 服务. RHEL7里面,初始进程变成了systemd.RHEL6和之前的版本使用的初始进程是init,init是一个线性的启动过程,一个接一个的启动,比较慢:systemd则可以多进程启动,速度提高很多.另外,systemd还有简化了开发,集成日志等优点. 前面学习systemctl的时候,对service结尾的特定服务可以执行start,stop,restart等操作:另外还有一类后缀是以target的结尾,这些target 服务可以视作一