Sql server,T-SQL语句,约束,增改删

来源:互联网 发布:淘宝韩男装店铺推荐 编辑:程序博客网 时间:2024/05/16 05:16

我已经饿的没精力写那些废话了…

一、创建数据库

use master --指向系统内置数据库master,存放所有系统数据库和用户数据库GO         --GO 是'批处理'的意思. /*这里以创建数据库 user 为例 注意这个 sysdatabases数据库 sysdatabases  数据表 sysobjects有兴趣的朋友可以执行 select * from sysdatabases 看看结果*/if exists(select 1 from sysdatabases where name='user') drop database usercreate database userGO

二、创建数据表

use user --指向要操作的数据库,这里表示我们要把在数据库user中创建表GO--创建数据表 UserInfo 这里换成了 sysobjects ,这是一点表与数据库的不同if exists(select 1 from sysobjects where name='UserInfo')drop table UserInfocreate table UserInfo([column1]  [datatye1],[column2]  [datatye1],  ...[columnN]  [datatyeN])

这里我们什么约束都没加,下面我们加点其他东西。如下:

use userGOif exists(select 1 from sysobjects where name='UserTest')drop table UserTestcreate table UserTest(UserId int identity(1,1) not null,UserName nchar(5),UserPwd nchar(10),postId int not null,Age int,Sex nchar(1),Country nchar(2),Salary float,Email char(20))GO

not null 不允许为空,插入数据时非空列必须录入数据.
identity(1,1)是增加标识列,identity(标识种子,标识增量).
下面我们用约束来增加其他东西.

三、增加约束
约束种类(大致分为五种):
–PK_column 主键约束 (PRIMARY KEY)
–UQ_column 唯一约束 (UNIQUE)
–FK_column 外键约束 (FOREIGN KEY)
–CK_column 检查约束 (CHECK)
–DF_column 默认约束 (DEFAULT)

下面为上面添加的UserInfo表添加一些约束吧。

--增加约束ALTER table UserTestADD CONSTRAINT PK_UserId primary key (UserId),    CONSTRAINT CK_UserPwd CHECK(LEN(UserPwd)>=6 and LEN(UserPwd)<=10),    CONSTRAINT CK_Sex CHECK(Sex='男' or Sex='女'),    CONSTRAINT DF_Sex DEFAULT('男') for Sex,    CONSTRAINT CK_Email CHECK(Email like '%@%'),    CONSTRAINT FK_postId FOREIGN KEY(postId) REFERENCES UserComm(postId),    CONSTRAINT UQ_Age UNIQUE(Age)GO

alter, add constraint关键字。
主键约束简单不说,检查约束就是CHECK(DESC), DESC随你写.
默认约束DEFAULT(DESC) FOR column.为哪个列添加什么默认值,有时也叫缺省(sheng)值.
其中外键约束那个 postId是外键,主键表为UserComm,建表语句为:

use userIF EXISTS(SELECT 1 FROM sysobjects where name='UserComm')drop table UserCommGOcreate table UserComm(postId int identity(1,1) primary key,postName nchar(10) not null)GO

PS:我喜欢把有外键的表称为外键表,把外键所对应的主键所在的表称为主键表。
唯一约束就是该列中不允许存在相同的数据,主键自带技能.

应该看得懂吧,其实还可以用视图来添加约束,嗯,我懒得截图。。

当然有添加约束就有删除约束:

--删除约束ALTER TABLE UserTestDROP CONSTRAINT PK_UserId,     CONSTRAINT CK_SexGO

看哪个不爽就删哪个,简单粗暴.

接下来谈谈增查改删吧.
查就不说了,太多,嗯,我承认我懒[笑而不语]

1.增加

insert into <表名>(column1,column2, ...)values(value1,value2, ...)

注意事项:
1)如果省略表名后面的列名,那你values后面的值需要与表中列的顺序,数据类型,个数等等逐个对应上.表示你增加所有数据.(ps:标识列不允许指定数据的哦)
2)如果你不想插入整行而是部分列,那可以把你不想插入的列省略不写,然后一个一个对应就不用说了.注意点就是,省略的列是否允许为空,如果非空,那么很抱歉,插入的时候你还是带上它吧,它还是爱你的.
3)对于检查约束的列,需要根据检查约束来添加, 比如上面的:

alter table UserTestadd CONSTRAINT CK_Sex CHECK(Sex='男' or Sex='女')

那你录入性别的时候就只能写男女,嗯,没毛病.
4)默认约束的,录入时的value如果想用默认值可以写DEFAULT.

alter table UserTestadd CONSTRAINT DF_Sex DEFAULT('男') for Sex--性别采用默认值insert into UserTest(....,sex)values(....,DEFAULT)

5)另外,如果存在外键约束,需要先添加主键表中的数据,再来添加外键表的,因为外键表中的外键值取决于主键表中的主键值.
这一点跟删除正好相反,后面再说,如果我还没饿死的话.
6)每个数据值的数据类型,精度和小数位必须与相应列匹配,诶,这不是废话吗~

1.1 增加多行数据
1.1.1 将现有表中的数据添加到已存在的表中
要求: 表已存在,且表中列的个数,数据类型,顺序必须与源表中的一致

insert into <表名>(列名)
select (列名)
from <源表名>

--y表已存在,且表中列的个数,数据类型,顺序与x表中的一致insert into y(y_Id,y_Name,y_Pwd)select x_Id,x_Name,x_Pwdfrom x

1.1.2 将现有表中的数据添加到新表中
要求:表之前不存在,执行下列语句过程中自动创建.

select (列名)
into <表名>
from <源表名>

--y表不存在select x_Id,x_Name,x_Pwdinto yfrom x

注意事项:
在插入时,标识列的数据是不允许指定的。
如果要插入标识列,可以新建一个标识列:IDENTITY(类型,种子,增量) AS 列名

select identity(int,1001,1) AS x_Id,x_Name,x_Pwd into y from x

1.1.3 union

--UNION 将不同的数据或查询结果组合成一个新的结果集--效果与 INSERT SELECT 是一样的,只不过数据是手写的...INSERT t1(USERNAME,PASSWORD)    SELECT 'a', '123456' UNION    SELECT 'b', '123456' UNION    SELECT 'c', '123456' UNION    SELECT 'd', '123456' UNION    SELECT 'e', '123456' UNION    SELECT 'f', '123456' 

参考链接:http://www.cnblogs.com/xiaofuwei/p/4886020.html
2.修改

update <表名> set column1=a1,column2=a2, ... where column1>b1 and column2<b2 or not column3=b3 ...

修改三要素:
1.修改的表
2.修改的列.(多列)
3.修改的条件,(逻辑运算符)

最后结果: 0行(where的查询条件没有查询到数据),一行或多行受影响.

3.删除

3.1 delete

咳咳,我果然没有饿死….
这里指的是删除表中的数据,而不是删除表(drop).所以:
1.存在外键约束的表,要删除主键表中的数据,需要先删除外键表中与要删除的数据有约束的数据(好像有丢丢绕口,多读几遍就顺了~)
2.带标识列的表,delete后继续增加数据,标识列会继续增加,而不会从标识种子开始增长.
本来截个图最好理解,我还是多说几句吧,比如你表中的ID列是identity(1,1).然后现在表中三条数据,ID就是1,2,3. 删除这三条数据后,再添加一条数据,它的ID是几呢?猜猜看,猜到了就…..什么也不给你, 嘿嘿, 是4哦.

delete from table_name where [DESC] --这里from可以省略

3.2 truncate
都差不多, 三行搞定:
1.类似于没有where语句的delete,就是这哥们只会把你表里的数据全部删除,不带眨眼的.
2.带标识列的表,删除数据后从标识种子开始增长.这是唯一的竞争点了.
3.不能用于有外键约束的表.就是需要先解除外键约束

原创粉丝点击