数据库笔记
创建一数据 至少 添加了两个文件 .mdf主文件和.ldf日志文件
管理系统
一个系统创建一个数据库datebase
便于个性化管理 避免命名冲突 安全性更高
表是由行和列组成的 一个表表示一个实体或一个对象的集合
列:又叫做字段或属性 用来描述实体的,列用来表示实体的特征
数据库中 新建表table 打开表设计器
数据类型
char 定长的字符 不足长用空格字符补齐
vrchar 可变的char类型 不会补空格
在这里 不加n时候 一个汉字占两个字符位
若加在数据类型前n 一个英文字母占两个字符空间 其他语言则占一个
image text ntext datetime int smallint money Bit
主键primary key 用唯一确定的一行作为索引 有两种 业务主键 逻辑主键
数据冗余 (重复)
缺点:浪费空间 修改时麻烦易出错
解决办法 拆分成两个关系的表(外键foreign key)(把一个[主]表的主键作为另一个[子]表的字段)
自增identity(1,1)
SQL语句入门
大小写不敏感主要分类
DDL数据定义语言 creat drop alter
DML数据操作语言 insert update delete
DQL数据查询语言 select
DCL数据库控制语言 grant授权 revoke取消授权commit rollback
创建数据库 create datebase 数据库名 on primary(name,filename,size,filegrowth)log on( )
删除数据库 use master drop datebase 数据库名
创建表create table class(类型名 字段名 相关的约束)
删除表drop table 表名
查询select*from 表名 where 条件
逻辑运算符 <> and or not
插入数据 insert into表名(列名1,列名2)values(值1,值2)
更新数据 up date 表名 set 要更新的字段=值1 ,要更新字段=值2 where 条件
数据删除 delete from 表名 (和drop不同 不删除表格式;另truncate可删除自动编号) where 条件
重新初始化表 truncate table 表名
添加约束
保证数据的完整(正确)性而实现的一套机制
主键约束(PK)primary key constraint 唯一且不为空
唯一约束(UQ)unique constraint 唯一 允许为空 但只能出现一次
默认约束(DF)default constraint 默认值
检查约束(CK)check constraint 范围以及格式限制
外键约束(FK)foreign key constraint 表关系
约束删除 drop
alter table 表名
add 约束名 constraint primary key(约束名)
select
top 取得前几项
distinct
排序
最大值
最小值
count行数
sum 求和
too通配符 % _ [ ] [^9]
分组 group by
having 对结果进行查询
连接 union union all
插入一个表或一个结果集 可用union all
也可insert into student_temp select *from student
复制一个表select*into class_temp from studetent where sage>=20
select identity_insert studen_temp on
安全 快速 准确
一些字符串函数
查找 1,在2中的位置,X是起始位置 charindex(字符串1,字符串2,X)
查字符串长度 select 列名 ,len(列名) as'字符长度' from 表名
lower()转大写 upper()转小写
ltrin() rtrun() 去左边或右边空格
从右到左取n个字符 select right('-----',n)
从左到右取n个字符 select left('-----',n)
替换 replace(‘AFDAB’,‘B’,'C')将A中的B替换成C
替换指定位置字符select stuff(A,n,n+x,B) 将A中的n开始到n+x个字符替换成B
截取字符 substring (A,n,x)从A的第n个开始,截取x长度的字符串
一些日期函数
取得当前的系统日期 select getdate()
为当前时间添加指定时间段select dateadd(dd,10,getdate())
指定两个日期的间隔select datediff (datepart,startdate,enddate)
求用户年龄 select datediff (yy,birthday,getdate())
日期的某一部分 datename (datepart ,date) datepart==year ,day,quarteryear ,month...
数据类型转换
+连接左右类型有一个为int则全是int
cast(转换前 as 转换后)
convert (转换前,转换后)
declare
空值的处理
isnull(表达式,值) 当表达式为空时,返回 值 ,非空则返回表达式本身值
数学函数
abs 绝对值
ceiling 最小数的最小整数
floor 最小数的最小整数
power 幂值
round 四舍五入 控制精度
sign 正数0 负数1
sqrt 浮点
变量
局部变量 全局变量
局部变量是用户定义的变量 一般以@开头
定义语法 declar @变量名 数据类型
变量赋值set,select
变量输出
1.print文本形式输出在消息中 多个变量要用+号,
2.select表格形式
全局变量@@开头 系统定义的 只能读取 不能修改
@@error 记录的是最近一次执行语句错误号 可提示是否执行成功
@@identity 最后一次插入的标识值
@@language 当前使用的语言的名称
@@max-connections 可以同时创建的最大连接数
@@rowcount 受上一个语句影响的行数
@@servername
分支语句
一、if ()begin end
if(exists())begin end
case
case
when 条件1then 值1
when 条件2then 值2
when 条件3then 值3
二、事物Transaction
三、存储过程 procedure(相当于c#中的方法)
建立过程 creat procedure 过程名 begin 执行语句 end
返回值 return
四、Raiserror
(msg_id|msg__str,severity,state With option[,.....n])
五、触发器
六、数据库设计
--创建一个叫myschool的数据库
create database myschool
on primary
(
name='myschool',
filename='d:\data\myschool.MDF',
SIZE=3MB,
FILEGROWTH=10%
)
log on
(
name='myschool_LOG',
filename='d:\data\myschool_LOG.lDF',
SIZE=3MB,
FILEGROWTH=15%
)
use myschool
GO
CREATE TABLE CLASS
(
CID INT IDENTITY (1,1)PRIMARY KEY,
CNAME VARCHAR(10) NOT NULL,
CDESCRIPTION NVARCHAR(40)
)
create table student
(
sid int identity(1,1) primary key ,
sname varchar(10) not null,
sage int not null,
sno varchar(4) ,
ssex nvarchar(4) not null,
sbirthday date,
sphone varchar(18),
saddress nvarchar(40)
)
create table teacher
(
tid int identity(1,1) primary key ,
tname nvarchar(10)not null,
tage int not null,
tphone nvarchar(18) ,
salary money
)
create database MYcompany
on primary
(
name ='mycompany',
filename= 'd:\data\mycompany.mdf',
size=5MB,
filegrowth=1mb
)
log on
(
name='mycompany_LOG',
filename='d:\data\mycompany_LOG.lDF',
SIZE=3MB,
FILEGROWTH=15%
)
create table department
(
did int identity primary key,
dname varchar(10) not null
)
create table employee
(
eid int identity primary key,
ename varchar(10)not null,
esex nvarchar(2) not null,
eage int,
esalary money
)