创建表(Create table)
语法:
Create table 数据库名称 模式名 表名(
列名1 数据类型 PRIMARY KEY,
列名2 数据类型 not null,
………
);
如果你没有指定模式就默认在当前数据库的dbo模式下
例:create table stu(
id int identity primary key, -- identity标识列 primary key主键
name varchar (20) not null,
birthday datetime
);
复制表
如果目标表存在
语法:insert into 目标表 [指定字段] select * from 原表;
如果目标表不存在
语法:select * into 目标表 from 原表;
标识列
创建标识列(identity)
语法:identity [(第一行的值,添加到上一行标识值的增量值)]
可以不写,如果不写就是默认为(1,1),也可以自定义。
允许每个表只有一个标识列
例:create table a(
aid int identity(1,2) primary key,
aname varchar (50) not null
);
重用标识值
SQL server不能重用标识符。如果在标识符中插入行并执行insert语句失败或回滚,则标识值将丢失,并不会再次生成。会导致标识列中出现空白
重置整个表的标识列(删除数据)
truncate删除表内所有值并重置标识符,但是表内的数据将会丢失而且无法找回。
语法:truncate table 表名;
重置标识列(不删除数据)
- dbcc checkident(‘表名’,new_value)重置新的标识符,new_value为新值
- select ident_current(‘a’)当前表标识列的最大值
- select @@identity 当前标识列的最大值。注:要紧跟着错误的语句查询
向表添加列
语法:alter table 表名 add 列名 数据类型 约束
例:alter table
add tel nvarchar (11) not null;
修改列
可以修改列的数据类型,列的大小、not null约束
语法:alter table 表名 alter column 列名 数据类型;
例:alter table stu alter column tel varchar(22)
表中有数据时转变数据类型的时候,数据要能转变为目标类型,转变不成就会报错。两个数据类型必须是兼容的。
删除列
语法:alter table 表名 drop column 列名
例:alter table stu drop column tel;
删除表(drop)
语法:drop table [ if exists] 表名;
添加if exists就不会报错,不管那个表存在不存在
删除具有外键约束的表
约束引用的表。要删除此表,必须先删除引用外键约束或引用表。
语法:
drop table 引用表;
drop table 被引用表;
如果使用单个drop table 删除两个表,则必须将引用表放在前面
语法:drop table 引用表,被引用表;
截断表(truncate table)
truncate table 类似于没有where子句的delete 语句 。但是truncate语句执行的更快,并且使用的系统和事务日志资源更少。
与delect 比较的优点:
- 使用较少的事务日志
delete语句一次删除一行,并且在事务日志中为每个删除的行插入一个条目。truncate table语句通过释放用于存储表数据的数据页来删除数据,并仅在事务日志中插入页面解除分配。
- 使用更少的锁
使用行锁执行语句时,表中的每一行都被锁定以便删除。truncate table 锁定表和页,而不是每一行
- 重置标识
如果要截断的表具有标识列,则当使用truncate table 语句删除数据后,具有标识列的计算器将重置为开始的值(一般是:1)。