go
create schema MySecondSchema authorization dbo;
go
-- 脚本与批处理
/*
创建表
create table 架构名.表名
(
列名 类型名
, 列名 类型名
, ...
);
*/
create table MySecondSchema.PersonTbl
(
stuName nvarchar(10) -- 姓名
, stuSex char(1) -- 性别 f 女 m 男
, stuAge int -- 年龄
);
-----------------------
-- 简单的增删改查的语句
-----------------------
-- 增加数据 insert value语句
-- insert into 架构名.表名(列1, 列2, ...) values(值1, 值2, ...);
insert into MySecondSchema.PersonTbl(stuName, stuSex, stuAge)
values ('刘‘, 'm', 23);
insert into MySecondSchema.PersonTbl(stuName, stuSex, stuAge)
values ('赵', 'm', 19);
-- 查询数据 select
-- select 列1, 列2, ... from 架构名.表名;
select stuName, stuSex, stuAge from MySecondSchema.PersonTbl;
-- 修改数据 update
-- update 架构名.表名 set 字段1=值1, 字段2=值2, ... where 条件;
update MySecondSchema.PersonTbl set stuAge = 30 where stuName = '刘琦';
update MySecondSchema.PersonTbl set stuAge = 45;
-- 删除数据 delete / drop
-- delete from 表名 where 条件;
-- drop database|table|schema 名字;
delete from MySecondSchema.PersonTbl where stuName='刘琦';
--
drop database MyFirstDataBaseTest;
---------
-- 练习:插入数据、修改数据、删除数据
---------
----------------------------------
-- 主键、外键、约束
----------------------------------
insert into MySecondSchema.PersonTbl(stuName, stuSex, stuAge)
values ('赵', 'f', 18);
-- 能够唯一区别员工数据的东西——主键
-- 在设计表的时候,设计一个id字段 int 自动增长
-- 业务主键和逻辑主键
-- 身份证号
-- id
-- 联合主键
----------------------------------
-- 主外键
----------------------------------
----------------------------------
-- 约束
----------------------------------
-- 约束是表的组成部分
-- 保护数据完整性的机制:让存储的数据有意义的条件
-- 分类
-- 主键约束
-- 唯一约束
-- 检查约束
-- 默认约束
-- 非空约束
-- 主外键约束
-- 基本语法(语法很多,记住我介绍的)
/*
alter table 架构名.表名
add constraint 约束名 约束类型
*/
-- SSMS T-SQL
use MyThirdDataBase;
go
create schema SConst authorization dbo;
go
create table SConst.tblCons1
(
stuId int not null -- 主键约束
, stuName nvarchar(10) -- 唯一约束
, stuSex char(1) -- 检查约束
, stuAge int -- 检查约束
, inputDate datetime -- 默认约束
);
-------------------------------------------------
-- 使用T-SQL
create table SConst.tblCons2
(
stuId int -- 主键约束
, stuName nvarchar(10) -- 唯一约束
, stuSex char(1) -- 检查约束
, stuAge int -- 检查约束
, inputDate datetime -- 默认约束
);
-- 添加约束
alter table SConst.tblCons2
add constraint PK_tblCons2_stuId primary key(stuId);
-- 一次性添加多个约束
alter table SConst.tblCons2
add
constraint UQ_tblCons2_stuName unique(stuName)
, constraint CK_tblCons2_stuSex check(stuSex='m' or stuSex='f')
, constraint CK_tblCons2_stuAge check(stuAge>=0 and stuAge<=150)
, constraint DF_tblCons2_inputTime default(getdate()) for inputdate;
--- 琐碎的语法 ---
-- 删除约束
-- alter table 架构名.表名 drop constraint 约束名;
alter table SConst.tblCons2
drop constraint CK_tblCons2_stuAge;
-- 修改表结构
-- 添加字段、删除字段、修改字段
-- email varchar(20) null
alter table SConst.tblCons2 add email varchar(10) null;
alter table SConst.tblCons2 alter column email nvarchar(10) not null;
alter table SConst.tblCons2 drop column email;
-- 自动增长
-- 通过修改字段的办法实现
--alter table SConst.tblCons1
--alter column stuId int identity(1,1) not null;
-- 删除约束
alter table SConst.tblCons1
drop constraint PK_tblCons1;
-- 删除字段
alter table SConst.tblCons1
drop column stuId;
-- 重建字段
alter table SConst.tblCons1
add stuId int identity(1,1) not null;
-----------------------------------------
-- 如何添加主外键约束
-----------------------------------------
-- T-SQL
-- 课程表
create table SConst.tblCourseT_SQL1
(
cId int identity(1,1) not null
, cName nvarchar(10) not null
, cDesc nvarchar(100) null -- description
);
alter table SConst.tblCourseT_SQL1
add constraint PK_tblCourseT_SQL1_cId primary key(cId);
-- 学生
create table SConst.tblStudentT_SQL1
(
stuId int identity(1,1) not null
, stuName nvarchar(10) not null
, cId int null -- 外键
);
-------------
-- SSMS
-- 找到外键表 -> 右键设计 -> 关系 -> 添加-> 设置列规范
-- T-SQL
-- 课程表
create table SConst.tblCourseT_SQL2
(
cId int identity(1,1) not null
, cName nvarchar(10) not null
, cDesc nvarchar(100) null -- description
);
alter table SConst.tblCourseT_SQL2
add constraint PK_tblCourseT_SQL2_cId primary key(cId);
-- 学生
create table SConst.tblStudentT_SQL2
(
stuId int identity(1,1) not null
, stuName nvarchar(10) not null
, cId int null -- 外键 stuTocId
);
-- 语法
/*
alter table 外键表
add constraint FK_外键表名_主键表名_外键字段名_主键字段名
foreign key(外键表中的外键字段) references 主键表名(主键字段);
*/
alter table SConst.tblStudentT_SQL2
add constraint FK_tblStudentT_SQL2_tblCourseT_SQL2_cid
foreign key(cid) references SConst.tblCourseT_SQL2(cid);
-------------------------------------------
-- 补充与说明
-------------------------------------------
-- 主外键表中,关联主键表的字段必须是主键和唯一键
-- 主外键在一张表中(特别)
-- Empolyee 雇员表
-- empId, empName, empSex, empAge, ... , master
-- 1 杨 男 30 NULL
-- 2 苏 男 31 1
-- 3 蒋 男 19 2
-- 4 韩 男 32 NULL
-- 命名:如果不给对象命名,系统就会自动的创建随机字符串命名
create table SConst.StudentTest
(
stuId int identity(1,1) not null primary key
, stuName nvarchar(10) not null
);
create table SConst.StudentTest2
(
stuId int identity(1,1) not null
constraint FK_JK123_kk_jj_11_22_33 primary key
, stuName nvarchar(10) not null
);
--------------------------------------------------------
-- 在SQL Server中定义表等自己的数据命名不允许使用关键字
---------
-- 如果需要,则用一个界定符表示 : "ANSI-SQL" 或 [SQL Server]
create table [table]
(
id int null
);
create table "database"
(
id int null
);
-- . 的含义
-- [PK_架构名.表名_字段]
-- . 表示成员的访问
-- [dbo.database]
alter table [dbo].[database]
add constraint "pk_dbo.database_id" primary key(id);
--
select stuName, stuSex, stuAge from MySecondSchema.PersonTbl;
-- 忌讳
select * from MySecondSchema.PersonTbl;
-- 利用. 可以在任意一个数据库下访问其他数据库的成员
use master;
select stuName, stuSex, stuAge from MyThirdDataBase.MySecondSchema.PersonTbl;
-- 有一个简写的形式访问dbo架构
-- 数据库名..表名
-- 等价于
-- 数据库名.dbo.表名
1、 复习
-> 概述
-> SQL Server 的简单架构
-> 协议: 清楚连接方式(不管via)
-> 关系引擎(查询优化器)
-> 存储引擎: 负责所有的数据库文件的执行
-> 缓存池、数据库文件等
-> 其他数据库与SQL Server
-> 实例与安装
-> 正在内存里运行的一个具体对象
-> 生成的exe文件,就是应用程序执行"文件"
-> 双击这个文件,程序运行起来,这个运行着的东西,称为"实例"
"赵涛 09:27:50 运行状态的数据库程序,以及为这些程序分配的一些内存空间。实例是位于内存中的,只在数据库处于运行状态时才存在。实例负责实现给用户提供网络连接、读写数据文件等等各种功能。"
-> 数据库文件部分(了解)
-> 系统数据库
master
model
msdb
tempdb
-> 用户数据库
-> 数据库文件组成
-> 数据文件.mdf和非主数据文件.ndf
-> 日志文件.ldf
-> 创建数据库与分离附加
-> SSMS
-> T-SQL
-> 在数据库当中所有的操作都会最后转换成SQL语句有数据库管理系统执行
-> 语法
if db_id('数据库名') is not null
drop database 数据库名;
create database 数据库名
on primary
(
name = '逻辑名'
, filename = '文件路径\文件名.mdf'
, size=
, maxsize=
, filegrowth=
), (...filename = '非主数据文件.ndf'...)
filegroup 文件组名 (...),(...)
log on
(
name = '逻辑名_log'
, filename = '文件路径\文件名_log.ldf'
, size=
, maxsize=
, filegrowth=
);
-> 登录开启sa用户
-----------------------------------------------------------
2、 架构(数据表的命名空间)
-> SSMS
-> 找到数据库节点 -> 安全性 -> 架构 -> 右键新建
-> T-SQL
-> use 数据库;
-> create schema 架构名 authorization 用户名;
3、 表及相关概念
-> 表、列、行
-> 表在存储数据的时候就是在存储一个相关的信息,用"列"来描述这个些信息
-> 一张表存储一类事物,而表的列存储与这类事物息息相关的参数信息
-> 用一行描述一个完整数据
表就是类、列就是属性、行就是一个对象,一整张表就是一个集合
-> 列(域field、属性、字段)
-> 行(元组、记录)
4、 数据类型
-> 数字类型: int、tinyint
-> 时间类型: datetime 格式 "yyyy-MM-dd hh:mm:ss.sss"
-> 字符串类型: char nchar varchar nvarchar text ntext
-> 二进制类型: image
-> bit类型: 1 0 'true' 'false'
字符串
定长: char(数字):ANSI格式ASCII码nchar(数字):unicode格式
8000字节 4000字符
如果: char(10) 存储 '1' 实际 '1 '
可变长度:
varchar(数字) nvarchar(数字)
如果: varchar(10) 存储 '1' 实际 '1'
大文本文件:一个字符串超过8000个字节的
2000: text ntext
2005+: varchar(max) nvarchar(max) 2G
使用字符串
-> 一般存储汉字使用unicode字符串 nchar或nvarchar
-> 存储密码数字等使用char或varchar
-> 电话座机:vahrcahr,手机char,邮箱varchar?
5、 新建表
-> SSMS
-> T-SQL