约束:规定表中的数据规则的一种方式。数据必须规范,如果违法约束行为,则无法被执行。
注:建表前,建表后,都可以创建约束。
约束分类:主键、外键、Unique约束、Check约束、Default约束
主键:Primary key 约束;唯一、非空、不可修改;
外键:
Foreiign key 约束,加强两张表中的一列或多列数据之间的连接关系;
先建立主表的主键,然后才可定义从表的外键;
只有主表中的主键才能被从表用来做为外键;
主要限制了从表更新和插入的操作;
当删除主要的某条数据,需先删除从表中的数据,才可删除主表数据;
Unique约束:
确保表中的一列数据不可重复,即不可相同;
注:和主键约束相同点:唯一性;与主键约束区别:主键在一张表中只能有一个,Unique约束在一张表中可以有多个(多列)
Check约束:通过逻辑表达式判断其数据的有效性——用于限制列的输入范围(一列或多列),例如Age列-——可现在年龄范围区间等......
Default约束:即默认值——例如常见的默认日期、GUID等;如果没有为列设置默认值,则默认为NULL;
数据库脚本:用于创建数据库对象的语句集合。
T-SQL:Transact-SQL——基于SQL(Structured Query Language)结构化查询语言,用于应用程序和数据库直接沟通的编程语言。
SQL Server支持的一种脚本语言。
SQL语言:
Structured Query Language——结构化查询语言,一种有目的的编程语言,用于存取数据、查询、更新和管理关系数据库,高级的非过程化的编程语言。
作用:可以完成移植。提高数据访问效率,完成对数据的相关处理;
SQL语言分类:
- DQL 数据查询语言——select 列 from 表 where 条件
- DML 数据操纵语言:
- insert 插入 insert into 表名(列,列,......)values(值,值,......)
- update 更新 update 表 set 列=值,列=值,where 条件
- delete 删除 delete from 表 where 条件
- DDL 数据定义语言——创建数据库及其对象 create/alter/drop database/table/view/index/......
- DCL 数据控制语言——用于授予或回收访问数据库某种特权,对数据实行监视等;commit提交、rollback 回滚、grant 授权
数据库脚本
use dbname——选择要操作的数据库
go——批处理命令
create database dbname——创建数据库
示例如下:
USE [master] GO /****** Object: Database [MEASDatabase] Script Date: 2023-06-05 17:14:53 ******/ --DROP DATABASE [MEASDatabase] --GO /****** Object: Database [MEASDatabase] Script Date: 2023-06-05 17:14:53 ******/ CREATE DATABASE [MEASDatabase] CONTAINMENT = NONE ON PRIMARY ( NAME = N'MEASDatabase', --数据库文件名称 FILENAME = N'D:\MEASDatabase\MEASDatabase.mdf' , --主要数据文件路径——绝对路径 SIZE = 14336KB , --数据库主要文件的初始化大小 MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB --文件增量,可设置固定值,也可使用百分百 --FILEGROWTH = 10% --文件增量 ) LOG ON ( NAME = N'MEASDatabase_log', FILENAME = N'D:\MEASDatabase\MEASDatabase_log.ldf' , SIZE = 21504KB , MAXSIZE = 1024000KB , FILEGROWTH = 10240KB ) GO
注:使用可视化工具创建后,可选择数据库右键--编写数据库脚本......,查看对应脚本
创建数据库需要选择master系统数据库——master系统数据库,记录了SQL Server系统的所有系统级信息,还记录了所有其他数据库的存在,
数据库文件的位置,SQL Server的初始化信息。
创建表:创建表时,注意use dbname
-----建表DICT_CONFLICTRULECONFIG 冲突规则配置表---- IF NOT EXISTS ( SELECT * FROM sysobjects WHERE id = object_id('DICT_CONFLICTRULECONFIG') AND OBJECTPROPERTY(id, 'IsUserTable') = 1) CREATE TABLE [dbo].DICT_CONFLICTRULECONFIG( [ID] [int] IDENTITY(1,1) primary key NOT NULL, [CRULENAME] [varchar](50) NOT NULL,--冲突规则名称 [CRULEATTRIBUTE] [varchar](20) NOT NULL,--规则属性(个性化/医学常识) [CRULECLASSIFY] [varchar](20) NOT NULL,--规则分类(冲突规则下的前后置或间隔) [TIMELENGTH] [varchar](20) NOT NULL,--时长 [TIMEGRANULARITY] [varchar](20) NOT NULL,--时间粒度 [RELATIONSHIPTYPE] [varchar](20) NOT NULL,--关系类型 [CRULEEXPLAIN] [varchar](200) NOT NULL,--规则描述 [PRECHECKITEM] [varchar](50) NOT NULL,--前置检查项目 [POSTCHECKITEM] [varchar](50) NOT NULL,--后置检查项目 [DEPARTMENT] [varchar](20) NOT NULL,--医技科室 [ORGANIZATIONCODE] [varchar](20) NULL,--机构名称code [ORGANIZATION] [varchar](20) NULL,--机构名称 [CREATEDATE] Datetime DEFAULT getdate() NOT NULL,--建表时间 [ISENABLE] int default 0 NOT NULL,--启用0/禁用1 [DELETED] int default 0 NOT NULL--删除标志默认0,不删除0,删除1 CONSTRAINT [PK_DICT_CONFLICTRULECONFIG] PRIMARY KEY CLUSTERED ( [ID] ASC -- 可以考虑 desc 哦 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
删除表:drop table 表名 —— 表中没有数据时,可删除表结构,重新新增表结构
创建表后,修改表——不删除表的情况下修改:
新增列: 可通过可视化工具新增后,查看脚本
if not exists(select * from syscolumns where id=object_id('DICT_DEPARTMENT') and name='IsDelete') begin ALTER TABLE DICT_DEPARTMENT ADD IsDelete NUMERIC(18, 0) DEFAULT ((0)) NOT NULL; end if not exists(select * from syscolumns where id=object_id('DICT_DEPARTMENT') and name='DeleteUser') begin ALTER TABLE DICT_DEPARTMENT ADD DeleteUser VARCHAR(100) NULL; end go
删除列:alter table 表名 drop column 列名
修改列:alter table 表名 alter column 列名 是否为空 ....例如:
ALTER TABLE StudentInfo ALTER COLUMN NAME VARCHAR(100) not null
--修改字段长度
alter
table
DictCheckItems
alter
column
OfDepartName
varchar
(60)
---修改表中字段信息----
IF EXISTS(SELECT Name FROM SysColumns WHERE id=Object_Id('QS_PARAM') AND Name = 'ONLINENOCOUNT')
BEGIN
update QS_PARAM set ONLINENOCOUNT=0 where ONLINENOCOUNT is null;
END
GO
--删除字段 alter table 表名 drop column 字段名; --修改字段名称 exec sp_rename 'UserMEAS.PermissionID' , 'RoleCode', 'column' eg: if exists(select * from syscolumns where id=object_id('UserMEAS') and name='PermissionID') begin exec sp_rename 'UserMEAS.PermissionID' , 'RoleCode', 'column' end go if exists(select * from syscolumns where id=object_id('UserMEAS') and name='RoleId') begin alter table UserMEAS drop column [RoleId]; end go --判断是否存在某条数据 if not exists (select * from [DictPublic] where Type='默认密码') insert into DictPublic (Id, Type, TypeCode, TypeName, TypeLevel, IsEnable, Remark, PTypeCode) values(NEWID(),'默认密码','PassWord','666666','1','1','用户默认密码','') go
ALTER TABLE UserRIQC ALTER COLUMN id nvarchar(50) NOT NULL; if object_id(N'pk_id','PK') is null ALTER TABLE TableMutualRecognition ADD CONSTRAINT pk_id PRIMARY KEY (id);