Chart5
create database MovieRental; select name, SUSER_SNAME(sid) as [login] from sys.database_principals where name='dbo'; alter authorization on Database::MovieRental to easy5; /* 架构(schema) */ create SCHEMA Inventory; GO create SCHEMA People; Go create schema Rentals; GO create schema Alt; GO select name, SCHEMA_NAME(schema_id) as schemaName, USER_NAME(principal_id) as principal from MovieRental.sys.schemas; /* Create Table */ create table Inventory.Movie ( MovieId int not null, Name nvarchar(20) not null, ReleaseDate date null, Description nvarchar(200) null, GenrentId int not null, MovieRatingId int not null ); --IDENTITY只能在如下情况下建立: --在创建表时创建新的IDENTITY列 --在现有表中创建新的IDENTITY列 --不能 把已经存在的列,修改为IDENTITY列 Drop Table Inventory.Movie; GO create table Inventory.Movie ( MovieId int not null Identity(0,1), Name nvarchar(20) not null, ReleaseDate date null, Description nvarchar(200) null, GenrentId int not null, MovieRatingId int not null ); create table Inventory.Movie ( MovieId int not null, Name nvarchar(20) not null, ReleaseDate date null, Description nvarchar(200) null, GenrentId int not null, MovieRatingId int not null ); alter table Inventory.Movie select table_name from MovieRental.INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='Inventory'; create table Inventory.MovieRating ( MovieRatingId int not null, Code nvarchar(20) not null, Description nvarchar(200) null, AllowYouthRentalFlag bit not null ); Drop table Inventory.MovieRating; Go create table Inventory.MovieRating ( MovieRatingId int not null identity(0,1), Code nvarchar(20) not null, Description nvarchar(200) null, AllowYouthRentalFlag bit not null ); create table Inventory.Genre ( GenreId int not null, Name nvarchar(20) not null ); insert into Inventory.Genre(GenreId, Name) values(1,'Comedy'), (2,'Drama'), (3,'Thriller'), (4,'Documentary'); drop table Inventory.Genre; GO create table Inventory.Genre ( GenreId int not null identity(0,1), Name nvarchar(20) not null ); --insert into Inventory.Genre(GenreId, Name) --values(1,'Comedy'), --(2,'Drama'), --(3,'Thriller'), --(4,'Documentary'); insert into Inventory.Genre(Name) values ('Comedy'), ('Drama'), ('Thriller'), ('Documentary'); /*------------------------------------------------ constraint(约束) */ ----------------------- --主键(PK)primay key create table Inventory.MovieFormat( MovieFormatId int not null identity(1,1) constraint PKInventory_MovieFormat primary key clustered, Name nvarchar(20) not null ); insert into inventory.MovieFormat(Name) values('Video Tape'), ('DVD'); alter table Inventory.Movie add constraint PKInventory_Movie primary key clustered(MovieId); alter table Inventory.MovieRating add constraint PKInventory_MovieRating primary key clustered(MovieRatingId); alter table Inventory.Genre add constraint PKInventory_Genre primary key clustered(GenreId); ------------------------------------- --候选键(AK)Unique create table Inventory.Personality ( PersonalityId int not null identity(1,1) constraint PKInventory_Personality primary key, FirstName nvarchar(20) not null, LastName nvarchar(20) not null, NameUniqueifier nvarchar(5) not null, constraint AKInventory_Personality_PersonName unique(FirstName, LastName,NameUniqueifier) ); alter table Inventory.Genre add constraint AKInventory_Genre_Name unique(Name); alter table Inventory.MovieRating add constraint AKInventory_MovieRating_Code unique(code); alter table Inventory.Movie add constraint AKinventory_movie_NameAndData unique nonclustered(Name,ReleaseDate); --------------------------------------- --选择唯一性(AFK) unique index drop table alt.employee; Go create table alt.employee ( employeeId int not null identity(1,1) constraint PKalt_employee primary key, employeeNumber nvarchar(10) not null constraint AKalt_employee_employeeName Unique, insurancePolicyNumber nvarchar(20) null ); --Sql server 2008 通过“经筛选的索引”实现“选择唯一性” create unique index AKFalt_employee_insurancePlicyNumber on alt.employee(insurancePolicyNumber) where insurancePolicyNumber is not null; --InsurancePolicyNumber列的值:not null的值必须唯一,null可以有多个 --123属于not null:只能唯一,不能重复,执行出错 --insert into alt.employee(employeeNumber, insurancePolicyNumber) -- values('A00001','123'), -- ('A00002','123'); insert into alt.employee(employeeNumber, insurancePolicyNumber) values('A00003',null), ('A00004',null); create table alt.employee2 ( employeeId int not null identity(1,1) constraint PKalt_employee2 primary key, employeeNumber nvarchar(10) not null constraint AKalt_employee_employeeName2 Unique, insurancePolicyNumber nvarchar(20) null ); --Sql server 2008 通过“创建索引视图”实现“选择唯一性” create view alt.employee2_InsuancePolicyNumberUniquess with schemabinding as select insurancePolicyNumber from alt.employee2 where insurancePolicyNumber is not null; insert into alt.employee2(employeeNumber, insurancePolicyNumber) values ('A00001','123'), ('A00001','123'); --查看约束(constraint) select TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE from INFORMATION_SCHEMA.TABLE_CONSTRAINTS --where CONSTRAINT_SCHEMA = 'Inventory' order by CONSTRAINT_NAME, TABLE_NAME --默认值约束(DFL)default create table Rentals.MovieRental ( MoviecRentalId int not null identity(1,1) constraint PKRentals_MovieRental primary key, ReturnDate date not null constraint DELRentals_MovieRental_ReturnDate default(GetDate()), ActualReturnDate date null, ); alter table Rentals.MovieRental add constraint DELRentals_MovieRental_ActualReturnDate default(DateAdd(DAY,4,GetDate())) for ActualReturnDate; alter table Rentals.MovieRental add customerId int not null; insert into Rentals.MovieRental(customerId) values(1); ---------------------------------- --外键(FK) --联级4种方式: no action cascadeset nullset default