MSSQL示例(一)DDL

来源:互联网 发布:染色体核型分析软件 编辑:程序博客网 时间:2024/06/05 11:14

DDL(Data Definition Language),数据库模式定义语言。


1、新建表

CREATE TABLE T1( id int,name varchar(50) )--新建表T1,两列

select * from T1 --有空没空select看看结果,下同


2、删除表

DROP TABLE T1 --删除表T1


3、修改表--增删改列

ALTER TABLE T1 ADD c varchar(10),d varchar(10) --修改表T1,增加列c、列d

ALTER TABLE T1 DROP COLUMN c --删除列c;我晕,删除列要带COLUMN,新增列不用;是DROP不是DELETE删除行;

ALTER TABLE T1 ALTER COLUMN d int --将列d从原有类型varchar改为int;

sp_rename 'T1.d',d1,'column' --将表T1的列d改名为d1;使用了系统自带的存储过程sp_rename


4、约束

实体完整性:表中记录不重复(任何两条记录不全等)并且每条记录都有一个非空主键,primary key、unique、索引(index)
域完整性:表中字段值必须与字段数据类型、格式、有效范围相吻合,check、foreign key、not null、数据类型
参照完整性:不能引用不存在的值,foreign key
自定义完整性:根据特定业务领域定义的需求完整性
   
保证数据完整性的几种常用方法
约束(最常用)
过程
函数
触发器

4.1、约束:主键
CREATE TABLE T1( id int primary key,name varchar(10))
DROP TABLE T1 --删除表

--4.2、约束:外键
CREATE TABLE Student( sno int NOT NULL primary key, ) --建学生表,sno学号
CREATE TABLE St_Score( course varchar(50),f_sno int foreign key references Student(sno))--建学生成绩表,设f_sno为外键,关联学生表的sno字段
drop table Student   --提示:无法删除对象 'Student',因为该对象正由一个 FOREIGN KEY 约束引用。
drop table St_Score   --要将外键所在的表St_Score干掉才行,谁指向我先干掉谁,再Student

4.3、约束:自增长
CREATE TABLE T1( id int NOT NULL IDENTITY,name varchar(10) )--IDENTITY 自增长,NOT NULL 非空
insert into T1(name) values('abc')
select * from T1 --{1,abc}
DROP TABLE T1

4.4、约束:唯一,联合唯一
单个唯一
CREATE TABLE T1(name varchar(10) unique ) --unique 唯一值
insert into T1(name) values('abc')
insert into T1(name) values('abc') --违反了 UNIQUE KEY约束 'UQ__T1__72E12F1B690797E6'。不能在对象 'dbo.T1' 中插入重复键。
DROP TABLE T1

CREATE TABLE T1( name varchar(10) )
ALTER TABLE T1 ADD unique(name) --已存在表的情况下加约束,不用加constraint关键字
DROP TABLE T1
联合唯一
CREATE TABLE T1( name1 varchar(10),name2 varchar(10),constraint uc_n1n2 unique(name1,name2) ) --name1和name2联合在一起唯一,约束键名为uc_n1n2
select * from T1
insert into T1 select'a','a'--(1 行受影响)
insertinto T1 select'a','a'--违反了 UNIQUE KEY 约束 'uc_n1n2'。不能在对象 'dbo.T1' 中插入重复键。
insert into T1 select'a','b'--(1 行受影响),不违反唯一约束
DROPTABLE T1

CREATE TABLE T1( name1 varchar(10),name2 varchar(10))
ALTER TABLE T1 ADD constraint uc_n1n2 unique(name1,name2) --已存在表的情况下加约束,读语法:增加_约束_约束名_唯一值约束_(联合约束列1,列2,...)
DROP TABLE T1

4.5、约束:默认值
CREATE TABLE T1( name1 varchar(10) DEFAULT '111',name2 varchar(10),d datetime DEFAULT getdate() )--name1默认值为'111',d默认值为当前时间
insert into T1(name2) values('1')
select * from T1

增加默认值
ALTER TABLE T1 ADD DEFAULT '222' FOR name2 --为列name2增加默认值

修改默认值
ALTER TABLE T1 ALTER COLUMN name1 SET DEFAULT '222'--有文章这么写,但是:关键字 'SET' 附近有语法错误。想修改,可先删再增

删除默认值
ALTER TABLE T1 ALTER name1 DROP DEFAULT --有文章这么写,但是:'name1' 附近有语法错误。
ALTER TABLE T1 DROPconstraint DF__T1__name2__7D0E9093 --知道name1列默认值约束名的情况下

--不知道约束名时,取得T1.name1列的默认值约束名,并删除
declare @cname varchar(50) --定义参数
select @cname =[name] from sysobjects t
where id=(select cdefaultfrom syscolumns where id=object_id(N'T1') and name='name1')
/*ALTER TABLE T1 DROP constraint @cname */--'@cname'附近有语法错误。@cname是字符串,而不是约束对象,提示语法出错;因此执行以下的拼接语句。
exec('ALTER TABLE T1 DROP constraint '+@csname) --删除约束;

4.6、约束:Check约束
ALTER TABLE T1 ADD CHECK (d>='2014-1-1') --约束d为2014年及以后;注意,同一约束可重复增加,没有意义又可能影响性能
ALTER TABLE T1 ADD CONSTRAINT check_dn CHECK (d>='2014-1-1' AND len(name1)=3) --多列检查约束,d为2014年之后,name1长度为3




0 0