创建数据库、表、架构以及约束

来源:互联网 发布:mac 终端偏好设置 编辑:程序博客网 时间:2024/05/17 03:26
--SQL基础
-- 使用select + 表达式或一个值,可以显示这个值的结果
-- 使用print + 表达式或一个值,可以打印这个结果
select @@VERSION;
print @@version;


--数字直接书写即可
--字符串使用单引号括起来
--在数据库中时间类型比较特殊,以字符串的形式进行书写,但是只有在赋值时间类型的变量的时候,
--或往数据表中插入数据的时候,才会表现出时间类型。
--在SQL语句中bool类型也是这样,布尔类型可以表示成0或1,是真与假的含义,也或者表示成‘ture’或'false'
select 1+3; --4
select '1'+3;   --4
select '1'+'3'; --13
select CAST('2014-3-4' as datetime);


--目录视图-查询所有表对应的架构名称
use TSQLFundamentals2008
GO
select SCHEMA_NAME(SCHEMA_ID) as table_schema_name,name as table_name
from sys.tables


--------------------------------------------------------------------------------------------
--创建数据库
--------------------------------------------------------------------------------------------
--注意:go不是命令,但是在写SQL脚本的时候,一般将执行单位用go分割开来
/*
use tempdb; --切换数据库上下文
go --go不是命令,但是在写SQL脚本的时候,一般将执行单位用go分割开来


select DB_ID('数据库名字');--查询数据库ID
if DB_ID('数据库名字') is null drop database 数据库名字 --如果数据库存在就删除


create database 数据库名
on 
(
name='数据库逻辑名'
, filename='数据库文件名,就是路径'
, size=数据库的大小(数字类型)
, maxsize=最大多少
, filegrowth=1MB|10%
)
log on
(
name='数据库日志逻辑名'
, filename='数据库日志文件名,就是路径'
, size=数据库的大小(数字类型)
, maxsize=最大多少
, filegrowth=1MB|10%
);
go
*/
--例子,新建数据库test
use master;
go
if DB_ID('test') is not null drop database test
go
create database test
on
(
name='test'
,filename='D:\DataBase\test.mdf'
,size=5Mb
,maxsize=1Gb
,filegrowth=10%
)
log on
(
name='test_log'
,filename='D:\DataBase\test_log.ldf'
,size=5Mb
,maxsize=1Gb
,filegrowth=10%
)
go
use test;
go


--------------------------------------------------------------------------------------------
--创建架构
--------------------------------------------------------------------------------------------
/*
--语法
use 数据库名
go
--create schema 架构名 authorization 所有者
go
--注意:go不是命令,但是在写SQL脚本的时候,一般将执行单位用go分割开来
*/


--例子
use test
go
create schema lc authorization dbo
go


--------------------------------------------------------------------------------------------
--创建表
--------------------------------------------------------------------------------------------
/*
create table 表名
(
   列名1 类型 not null | null
   ,列名2 类型 not null | null
   ,列名3 类型 not null | null
   ......
   ,列名4 类型 not null |null
)
--一般创建表的时候,都会多创建几个列名
--id列名 ->主键
--逻辑数据
--业务数据
--isDel列名     ->软删除
--inputTime列名 ->输入时间


-- 表名的引用使用全路径
-- 数据库名.架构名.表名
-- create table test.dbo.T_Users
-- create table test..T_Users
*/
--例子
create table test.dbo.T_Users
(
Id int not null identity(1,1)--identity代表从1开始自动增长
,Name nvarchar(20) not null
,Age int
,Gender char(1) not null --m代表男,f代表女
,IsDelete bit not null
,InPutTime datetime not null
)


--------------------------------------------------------------------------------------------
-- 数据库操作语言 : 增删改查
--------------------------------------------------------------------------------------------
-- 增加数据
-- insert into 表名(字段1, 字符2, ..., 字段N) values(值1, 值2, ..., 值N);


--values多个数据可以用,隔开同时插入,是在2008才有的功能
--N代表是unicode编码
insert into test.dbo.T_Users
(Id,Name,Age,Gender,IsDelete,InPutTime)
 values
(1,N'张三',29,'m',0,'2014-2-14 19:50:00.234')
,(2,N'李四',29,'m',0,'2014-2-14 19:50:00.234')
,(3,N'王明',29,'m',0,'2014-2-14 19:50:00.234')


-- 查看数据
-- select 字段1, 字符2, ..., 字段N from 数据库.架构.表名;


select * from  T_Users


-- 修改数据
-- select 字段1, 字符2, ..., 字段N from 数据库.架构.表名;
UPDATE T_Users set Age=50 where Id=1


-- 删除数据
-- select 字段1, 字符2, ..., 字段N from 数据库.架构.表名;
delete from T_Users where Id=2


--------------------------------------------------------------------------------------------
-- 约束
--------------------------------------------------------------------------------------------
--保证数据完整性的一种操作机制
--所谓数据完整性,其一样是保证数据准确性和有效性


--主键约束(可设置自动增长)
--默认约束(设置默认值)
--唯一约束
--非空约束(not null)
--检查约束(数据库中的和或、不用and、or、not)
--外键约束


--使用T-SQL添加约束语法:
/*
alter table 表名
add
constraint 约束名 约束条件;
*/


--主键约束(可设置自动增长)
alter table test..T_Users
add
constraint PK_T_Users_Id primary key(Id);
--当出现有重复值时,删除这个字段,然后在添加一个名字一样的字段
alter table test..T_Users
drop column Id;

alter table test..T_Users
add
Id int not null identity(1,1);
--默认约束(设置默认值)
alter table test..T_Users
add
constraint DF_T_Users_IsDelete default(0) for IsDelete
,constraint DF_T_Users_InPutTime default(getdate()) for InPutTime
--唯一约束
alter table test..T_Users
add
constraint UQ_T_Users_Name unique(Name);
--非空约束
not null
--检查约束(数据库中的和或、不用and、or、not)
alter table test..T_Users
add
constraint CK_T_Users_Gender check(Gender='m' or Gender='f')
,constraint CK_T_Users_Age check(sge>0 and age<150);
--外键约束
--什么是主外键关系
--1、主键表中删除数据必须保证外键表中没有该数据的引用
--2、外键表中添加数据如果添加引用主键数据,必须保证主键表中包含有该数据
alter table 外键表
add
constraint 约束名 foreign key(外键表中的外键) --(FK_外键表_主键表_主键)
references 主键表名(主键表中的主键)


--完整例子:
Alter table test.dbo.T_Users
add
constraint PK_T_Users_Id primary key(Id) --主键约束
,constraint DF_T_Users_IsDelete default(0) for IsDelete--默认约束
,constraint UQ_T_Users_Name unique(Name) --唯一约束
,constraint CK_T_Users_Age check(sge>0 and age<150)--检查约束
,constraint FK_T_Users_Score_Id foreign key(ScoreId)
references Score(Id);--外键约束

0 0
原创粉丝点击