SQL Server编程基础

43 阅读5分钟

一、数据库创建和使用

 # GO是批处理语句,用于同时执行多个语句
 # 使用、切换数据库
 use master
 go
 # 创建、删除数据库
 # 方法零(最常用):
 -- 连接数据库工具,右键新建数据库,选择字符集和排序规则
 -- 一般选择utf8.下面介绍一下utf8与utfmb4的区别。
 ​
 # utf8mb4兼容utf8,且比utf8能表示更多的字符。至于什么时候用,看你的做什么项目了,到 http://blog.csdn.net/leelyliu/article/details/52879685 看unicode编码区从1126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些字符,你才用utf8mb4,否则只是浪费空间。
 ​
 # 排序常用如下:
 -- utf8_general_ci :不区分大小写,这个你在注册用户名和邮箱的时候就要使用。校对速度快,但准确度稍差。 (准确度够用,一般建库选择这个)
 -- utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容
 -- utf8_unicode_ci:它和utf8_general_ci对中、英文来说没有实质的差别。准确度高,但校对速度稍慢。
 ​
 # 这下面部分都很无聊,可跳过
 ​
 # 方法一:
 -- 判断是否存在该数据库,如果存在则删除
 if (exists (select * from sys.database where name = 'testHome'))
     drop database testHome
 go
 -- 创建数据库,设置数据库文件、日志文件保存目录
 create database testHome
 on (
     name = 'testHome',
     filename = 'c:\data\students.mdf' 
 )
 log on (
     name = 'testHome_log',
     filename = 'c:\data\testHome_log.ldf'
 )
 go
 # 方法二(设置文件大小)
 if (exists (select * from sys.database where name='testHome'))
     drop database testHome
 go
 create database testHome
 -- 默认就属于primary主文件组,可省略
 on primary (
     -- 数据文件的具体描述
     name = 'testHome_data', -- 主数据文件的逻辑名
     fileName = 'c:\testHome_data.mdf', -- 主数据文件的物理名
     size = 3MB, -- 主数据文件的初始大小
     maxSize = 50MB, -- 主数据文件增长的最大值
     fileGrowth = 10% -- 主数据文件的增长率
 )
 -- 日志文件的具体描述, 各参数含义同上
 log on (
     name = 'testHome_log',
     fileName = 'c:\testHome_log.ldf',
     size = 1MB,
     fileGrowth = 1MB
 )
 go
 ​
 ​
 # 方法3(设置次数据文件)
 if (exists (select * from sys.databases where name = 'testHome'))
     drop database testHome
 go
 create database testHome
 -- 默认就属于primary主文件组,可省略
 on primary (    
     -- 数据文件的具体描述
     name = 'testHome_data',                -- 主数据文件的逻辑名
     fileName = 'c:\testHome_data.mdf',    -- 主数据文件的物理名
     size = 3MB,                        -- 主数据文件的初始大小
     maxSize = 50MB,                    -- 主数据文件增长的最大值
     fileGrowth = 10%                -- 主数据文件的增长率
 ),
 -- 次数据文件的具体描述
 (    
     -- 数据文件的具体描述
     name = 'testHome2_data',            -- 主数据文件的逻辑名
     fileName = 'c:\testHome2_data.mdf',    -- 主数据文件的物理名
     size = 2MB,                        -- 主数据文件的初始大小
     maxSize = 50MB,                    -- 主数据文件增长的最大值
     fileGrowth = 10%                -- 主数据文件的增长率
 )
 -- 日志文件的具体描述,各参数含义同上
 log on (
     name = 'testHome_log',
     fileName = 'c:\testHome_log.ldf',
     size = 1MB,
     fileGrowth = 1MB
 ),
 (
     name = 'testHome2_log',
     fileName = 'c:\testHome2_log.ldf',
     size = 1MB,
     fileGrowth = 1MB
 )
 go

二、判断表或其他对象及列是否存在

 -- 判断某个表或对象是否存在
 if (exists (select * from sys.objects where name = 'classes'))
     print '存在';
 go
 if (exists (select * from sys.objects where object_id = object_id('student')))
     print '存在';
 go
 if (object_id('student', 'U') is not null)
     print '存在';
 go
 -- 判断该列名是否存在,如果存在就删除
 if (exists (select * from sys.columns where object_id = object_id('student') and name = 'idCard'))
     alter table student drop column idCard
 go
 if (exists (select * from information_schema.columns where table_name = 'student' and column_name = 'tel'))
     alter table student drop column tel
 go

三、创建、删除表

 -- 判断是否存在当前table
 if (exists (select * from sys.objects where name = 'classes'))
     drop table classes
 go
 create table classes(
     id int primary key identity(1, 2),
     name varchar(22) not null,
     createDate datetime default getDate()
 )
 go
 if (exists (select * from sys.objects where object_id = object_id('student')))
     drop table student
 go
 -- 创建table
 create table student(
     id int identity(1,1) not null,
     name varchar(20),
     age int,
     sex bit,
     cid int
 )
 go

四、给表添加字段、修改字段、删除字段

 -- 添加字段
 alter table student add address varchar(50) not null;
 -- 修改字段
 alter table student alter column address varchar(20);
 -- 删除字段
 alter table student drop column number;
 ​
 -- 添加多个字段
 alter table student
 add address varchar(22),
     tel varchar(11),
     idCard varchar(3);
 ​
 -- 判断该列名是否存在,如果存在就删除
 if (exists (select * from sys.columns where object_id = object_id('student') and name = 'idCard'))
     alter table student drop column idCard
 go
 if (exists (select * from information_schema.columns where table_name = 'student' and column_name = 'tel'))
     alter table student drop column tel
 go

五、添加、删除约束

 -- 添加新列、约束
 alter table student 
     add number varchar(20) null constraint no_uk unique;
 -- 增加主键
 alter table student
     add constraint pk_id primary key(id);
 -- 添加外键约束
 alter table student
     add constraint fk_id foreign key (cid) references classes(id)
 go
 -- 添加唯一约束
 alter table student
     add constraint name_uk unique(name);
 -- 添加check约束
 alter table student with nocheck
     add constraint check_age check (age > 1);
 alter table student
     add constraint ck_age check (age >= 15 and age <= 50)
 -- 添加默认约束
 alter table student
     add constraint sex_def default 1 for sex;
 -- 添加一个包含默认值可以为空的列
 alter table student
     add createDate smalldatetime null
     constraint createDate_def default getDate() with values;
     
 -- 多个列、约束一起创建
 alter table student add
     id int identity constraint id primary key,
     number int null constraint uNumber references classes(number),
     createDate decimal (3, 3)
     constraint createDate default 2010-6-1
 go
 -- 删除约束
 alter table student drop constraint no_uk;

六、插入数据

 insert into classes(name) values('1班');
 insert into classes values('2班', '2011-06-15');
 insert into classes(name) values('3班');
 insert into classes values('4班', default);
  
 insert into student values('zhangsan', 22, 1, 1);
 insert into student values('lisi', 25, 0, 1);
 insert into student values('wangwu', 24, 1, 3);
 insert into student values('zhaoliu', 23, 0, 3);
 insert into student values('mazi', 21, 1, 5);
 insert into student values('wangmazi', 28, 0, 5);
 insert into student values('jason', null, 0, 5);
 insert into student values(null, null, 0, 5);
  
 insert into student 
 select 'bulise' name, age, sex, cid 
 from student 
 where name = 'tony';
 ​
 -- 多条记录同时插入
 insert into student
     select 'jack', 23, 1, 5 union
     select 'tom', 24, 0, 3 union
     select 'wendy', 25, 1, 3 union
     select 'tony', 26, 0, 5;

七、查询、修改、删除数据

 -- 查询数据
 select * from classes;
 select * from student;
 select id, 'bulise' name, age, sex, cid from student where name = 'tony';
 select *, (select max(age) from student) from student where name = 'tony';
 -- 修改数据
 update student set name = 'hoho', sex = 1 where id = 1;
 -- 删除数据(from可省略)
 delete from student where id = 1;

八、备份数据、表

 -- 备份、复制student表到stu
 select * into stu from student;
 select * into stu1 from (select * from stu) t;
 select * from stu;
 select * from stu1;

九、利用存储过程查询表信息

 -- 查询student相关信息
 exec sp_help student;
 exec sp_help classes;