create
database test
go
use
test
create
table table1
(
use_id int not null,
use_name varchar(200) not null,
use_message varchar(300) not null,
use_QQ int not null
)
select
* from table1
--
增加行
.
删除用
drop
alter
table table1
add
use_talk varchar(200)
insert
into table1 values('1','yofee','nomessage','343201118','no talk')
--
修改属性
alter
table table1
alter
column use_QQ int not null
--
添加主键约束
,
如果表已经有主键了
,
这个就没啥用勒
...
alter
table table1 add constraint PK_primarykey primary key (use_ID)
--
修改主键约束
.
先删除主键
,
再新建一个
.
alter
table table1 drop constraint PK_primarykey
alter
table table1 add constraint PK_primarykey2 primary key (use_name)
--
添加外键约束
.
先建立一个
order1
表
,
此表不必要有主键
.
但对应另一个表的列就一定要是主键
!
create
table order1
(
for_use_ID int ,
book_name varchar(200) not null
)
alter
table order1 add constraint FK_order1_table1 foreign key (book_name) references table1 (use_name)
--
显示
DBMS
给予
primary key
的名称
exec
sp_help table1
--
创建视图
,
视图是个虚拟的表
,
不包括数据
(
个人感觉几乎可以把这个和表看成一回事
).
create
view vw_table1_order1
as
(select table1.use_ID,order1.book_name from table1,order1)
select
* from vw_table1_order1
go
--
数据操纵语言
:DML insert into,update,delete,truncate(
删除一个表中的所有行
)
insert
into table1 values('2','tiantian','no message','476910304','no talk')
update
table1 set use_ID = 3 where use_qq='476910304'
go
select
* from table1
delete
from table1 where use_id = 3
truncate
table table1--
当然
,
这里有外键约束
,
所以没法删除哈
insert
into table1 values ('2','nic','haha','512014116','
Content
)
--
计算平均值
select
avg(use_QQ) as 'QQ
平均值
'
from table1 --
最小
,
最大
,
求和类似于此
--
触发器
..
不接受任何大于
1000
的用户编号
.
exec
sp_help table1
go
create
trigger table1_over_1000--
触发器名称
on
table1 for insert,update --table1
是准备控制的表名
,insert,update
是控制的操作
as
if((select max(use_id) from table1) > 1000)
begin
print
'table1.use_id >1000.'
rollback
end
select
* from table1
insert
into table1 values('3','kaka','baxide','213544','Content two
'
)
insert
into table1 values('1003','ronaldo','yeshibaxide','610039','I want to go to walk!')
--
存储过程
,
重点
--
之一简单创建与调用
create
procedure firstproc as select * from table1
exec
firstproc
go
--
之二自主式创建存储过程并调用
.
create
proc adddata_table1
@use_id int,
@use_name varchar(50),
@use_message varchar(200),
@use_QQ int,
@use_talk varchar(100)
as
insert into table1 (use_id,use_name,use_message,use_QQ,use_talk) values(@use_id,@use_name,@use_message,@use_QQ,@use_talk)
exec
adddata_table1 @use_id = 4,@use_name = 'daye',@use_message='
Nothing left
!'
,
@use_QQ=343201118,@use_talk='
But just want write something yet
.'
select
* from table1
--
疑问
:
上面这个存储过程里面写的列属性可以和表内对应的列属性不一样吗
?
--
设计实验如下
:
create
proc add_table1
@use_id varchar,--
这个不一样了哈
!
@use_name varchar(50),
@use_message varchar(200),
@use_QQ int,
@use_talk varchar(100)
as
insert into table1 (use_id,use_name,use_message,use_QQ,use_talk) values(@use_id,@use_name,@use_message,@use_QQ,@use_talk)
exec
add_table1 @use_id = '20',@use_name = 'carlos',@use_message='
爱生活
,
爱拉登
,
自然美
!'
,
@use_QQ=512014556,@use_talk='Notalk
.'
select
* from table1
--
插入是成功了
,
就是和设想中的有点不一样
,
为什么
use_id
我填的是
,
得到的
use_id
却是呢
?
可能是乱改了就会出错吧
,
以后还是尽量一致的好
!
--
判断表中是否有重复行
.
如果有的话就显示
:contains duplicates
select
distinct 'contains duplicates'
where
exists(select use_id,count(*) from table1 group by use_id having count(*) > 1)
--
计算出所有用户的数量
select
count(*)as '
总计人数
'
from table1
--
计算出号码不一样的用户数
select
count(distinct use_id) from table1
--
领悟
having.
过滤掉
use_id > 2
的用户
.
而且用
having
必须先指定组
.group by.
另附一个小招
.
把两个列连起来显示的办法
:D
select
rtrim(use_message)+' '+use_talk as 'usersword' from table1
group
by rtrim(use_message)+' '+use_talk
having
(select count(distinct use_id) from table1)>2
--
一个晚上把一本六百多页的书搞定了
?
强
!
为自己先汗一个
�C
口
-......