容易忽略的SQL语句(二)
来源:互联网 发布:网络机房建设报价单 编辑:程序博客网 时间:2024/05/16 17:25
1使用WITH ROLLUP来汇总数据
结合使用WITH ROLLUP和GROUP BY子句中的列的次序来增加层次化的数据汇总,WITH ROLLUP会对应每一个细项的分给进行一次汇总统计。如下条语句:
select CLPAIssueUserID,CLPADeposeJudge,COUNT(*) from CLPatientAccount group by CLPAIssueUserID,CLPADeposeJudge with rollup
2 插入默认值
插入数据时使用默认值
INSERT INTO TABLE VALUES(DEFAULT,...)
3显示的向一个IDENTITY列插入值
要显示的把一个数字值插入到一个具有IDENTITY属性的列中,必须使用SET IDENTITY_INSERT命令。如下:
打开插入 SET IDENTITY_INSERT TableA ON
插入后关闭 SET IDENTITY_INSERT TableA OFF
4 使用INSERT...SELECT语句插入行
例:
insert into test select '3','c','2','200'
或
Insert into test select * from test1
4 根据FROM 和 WHERE子句更新行
UPDATE ShoppingCartItem
SET Quantity=2
MoidfyDate=GetDate()
From ShoppingCartItem c
INNER JOIN Product p
ON C.productid=p.productid
Where p.name='steven' and c.Qutity>2
其实FROM后面的子句只是为了过滤数据
5 TRUNCATE TABLE
TRUNCATE TABLE语句和DELETE语句差不多用于从表中删除行。TRUNCATE TABLE删除行比DELETE快,因为它记录很少的日志。和DELETE不同的是,TRUNCATE TABLE必须删除表中的所有行。
尽管TRUNCATE TABLE 能更快的删除行,但是如果表中的列具有外键约束,或者表使用事务复制或合复制发布,或者表参与了一个索引的视图则不能使用TRUNCATE TABLE。还要记住,如果有IDENTITY列,列会被重置为列定义的种子值。
6 分块删除行。
使用 DELETE TOP(n) 来实现分块删除行。如:
while(select COUNT(*) from DSDrugFinance)>0
begin
delete top(10) from DSDrugFinance
End
这种分块的方法也能够用于INSERT 和UPDATE,
INSERT TOP(100) PLUserr set col1=''
...
UPDATE TOP(25) table set column='...'
...
7 事务
DECLARE @Error int
BEGIN TRANSACTION
INSERT INTO test VALUES ('','',DEFAULT,'')
SET @Error=@@ERROR
IF(@Error<>0) GOTO Error_Handel
COMMIT TRANSACTION
Error_Handel:
if @Error<>0
BEGIN
ROLLBACK TRANSACTION
END
对要做的业务处理事务操作的时间尽可能的短。保持事务打开会让资源在很长一段时间处于锁定状态,这样会阻塞其他用户进行操作或读取数据
最小化由事务锁定资源。
在事务执行SELECT语句会在关联表上加锁,这样会导致其他用户/会话不能执行操作或读取数据
不要开启一个需要在事务内等待用户或外部反馈的事务。
8 创建计算列
在CREATE TABLE或ALTER TABLE中能够从独立的或者基于列的计算继承。
ALTER TABLE Production
ADD CostPerUnit AS (ActualCost/Quantity)
计算列不会保存在数据库中,加上关键字PEERSISTED后,计算列中的数据可以存储在数据库中
ALTER TABLE Production
ADD CostPerUnit AS ((ActualCost/Quantity) PERSISTED)
9 一个表能有多个外键,并且每一个外键能基于一个或者引用超过一列(引用组合主键或者唯一索引)的多重(组合)键。而且,尽管照外键和主键的列名不需要一致,但是主键/唯一列必须要有一致的数据类型。另外,你不双腿在跨数据库或者服务器的表上定义外键约束
10 创建递归外键引用
表中的外键列能定义成引用它自己的主键/唯一键。这个技术通常用于表现递归关系。
--创建递归外键引用
CREATE TABLE Company
(
CompanyID int NOT null primary key ,
ParentCompanyID int null,
CompanyName varchar(25) not null,
CONSTRAINT FK_Company_Company
FOREIGN KEY(ParentCompanyID)
REFERENCES Company(CompanyID)
)
GO
INSERT INTO Company
(CompanyID,CompanyName)
VALUES
(
1,'ANTA'
)
--插入成功
INSERT INTO Company
(CompanyID,ParentCompanyID,CompanyName)
VALUES
(
2,1,'ERKE'
)
--插入失败,因为CompanyID为的数据
INSERT INTO Company
(CompanyID,ParentCompanyID,CompanyName)
VALUES
(
3,8,'PEAK'
)
- 容易忽略的SQL语句(二)
- 容易忽略的SQL语句
- SQL 容易忽略的连接语句
- oracle sql语句转化为mysql 容易忽略“||”作用
- 容易忽略的问题
- 关于oracle sql优化的一个容易忽略的问题。
- 注意那些容易被忽略的SQL注入技巧
- 注意那些容易被忽略的SQL注入技巧
- 注意那些容易被忽略的SQL注入技巧
- 使用时容易忽略SQL Server的21个问题
- 使用时容易忽略SQL Server的21个问题
- 使用时容易忽略SQL Server的21个问题
- 使用时容易忽略SQL Server的21个问题
- 注意那些容易被忽略的SQL注入技巧
- 使用时容易忽略SQL Server的21个问题
- 请注意那些容易被忽略的SQL注入技巧
- SQL 入门容易忽略的地方——order by
- SQL 入门容易忽略的地方——where
- Tom小猫,让我看清你的五脏六腑5(转)
- 最全的CSS浏览器兼容问题整理
- 日志类之序
- 如何给10^7个数据量的磁盘文件排序
- poj 3468 A Simple Problem with Integers(splay tree解法)
- 容易忽略的SQL语句(二)
- 背景音乐自动播放代码
- fcntl函数的应用
- 把java数组转化成List
- 一些总结的数据
- 嵌入式学习网站
- 第十六~第二十章:全排列,跳台阶,奇偶排序,第一个只出现一次等问题
- 中签概率,IP访问次数,回文等问题
- 程序员编程艺术:第九章、闲话链表追赶问题