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

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

一、创建数据库

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

二、创建数据表

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

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

use user
GO
if exists(select 1 from sysobjects where name='UserTest')
drop table UserTest
create 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 UserTest
ADD 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 user
IF EXISTS(SELECT 1 FROM sysobjects where name='UserComm')
drop table UserComm
GO
create table UserComm(
postId int identity(1,1) primary key,
postName nchar(10) not null
)
GO

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

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

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

--删除约束
ALTER TABLE UserTest
DROP CONSTRAINT PK_UserId,
     CONSTRAINT CK_Sex
GO

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

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

1.增加

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

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

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

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

alter table UserTest
add 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_Pwd
from x

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

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

--y表不存在
select x_Id,x_Name,x_Pwd
into y
from 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.不能用于有外键约束的表.就是需要先解除外键约束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值