建议初学者从三方面学习数据库
数据库时如何存储数据库的
字段 记录 表 约束(主键 外键 唯一键 非空 check(约束范围) default(设置默认值) 触发器)
数据库时如何操作的
insert(插入) update(更新) delete(删除) T-SQL 存储过程 函数 触发器
数据库是i如何显示数据
selecet (查询)(重点)
如何建数据库
1. 启动数据库服务
2.启动连接
create table dept // 创建dept这个表
(
dept_id int primary key identity,
dept_name nvarchar(100) not null,
dept_address nvarchar(100)
)
create table emp
(--不能写成{
emp_id int constraint pk_id_ha primary key,
emp_name nvarchar(20) not null,
emp_sex nchar(1),
dept_id int constraint fk_dept_id_ha foreign key references dept(dept_id)
)
注意: 表的字段 在前 类型在后,例如 emp_id int constraint pk_id_ha primary key identity , identity 这个关键字意思是自增。emp_id 是字段,int是数据类型,constraint是关键字 用来设置名字, pk_id_ha是emp_id的名字,primary key 是关键字意思是设置emp_id这个字段为主键。关键字nvarchar(20),意思是设置字符长度为20,其中nvarchar中的n代表可以支持中文,var表示长度可变的,只要数据类型前有n都表示支持中文。emp_name nvarchar(20) not null,这句话的意思是设置emp_name这个字段为nvarchar长度为20,不能为空。
create database AA 的意思是创建AA数据库,这个需要先创建数据库,才可以在数据库中创建表。
create table stu
(
stu_id int primary key,
stu_sal int check(stu_sal >= 1000 and stu_sal <=8000),
stu_sex nchar(1) default ('男') --()可以省,在数据库中字符串是单引号,双引号是数据的名字
)
insert into stu (stu_id,stu_sal)values (1,1000)
insert into stu values (2, 5000,'女')
drop table stu
注释:stu_sal int check(stu_sal>= 100 and stu_sal <= 8000)这个就是check约束,作用:保证事物的取值在一个合法范围内,约束stu_sal大于等于1000小于等于8000。stu_sex nchar(1) default ('男')这个是default约束,default约束作用,保证事物的属性一定会有一个值。
insert into stu (stu_id,stu_sal)values (1,1000)这句话就是插入一个值,在stu表中。指定插入名字对应的数据。
drop table stu --删除stu表
唯一约束:stu_name nvarchar(20) unique ,唯一键可以为空。 作用,保证了事物的属性不允许重复,但允许其中只能 有一列为空。
not null非空也理解为一个约束。
一个字段默认为null,null允许为空用户可以不给该字段赋值,not null不允许为空。
要注意null和default的区别
相同点:都允许用户不赋值
不同点:null修饰的字符段默认不赋值为null,default修饰的字段默认不赋值是default设置的值。
unique键是否允许多列为空?
答案:
sqlserver2005只允许一列为空,
Oracle11G允许多个unique列为空。
主键和唯一键区别及其两者配合使用举例
主键用没有实际意义的字段。外键必须是其他表的主键或者唯一键。 唯一键设置有为有实际意义业务的字段。
表和约束的区别
数据库是通过表来解决事物的存储问题
数据库是通过约束来解决事物取值的有效性和合法性的问题
建表的过程就是指定事物属性及其事物属性各种约束的过程
什么是关系
事物与事物之间关系分三种,一对一,一对多,多对多。
定义:表和表之间的联系。
实现方式:通过设置不同类型的外键来表示表和表之间的不同关系。
分类:(假设是A表和B表)
一对一
既可以把表A的主键充当表B的外键,也可以把表B的主键充当表A的外键
一对多(在多的以一方添加外键)
把表A的主键充当表B的外键或者把A表的主键添加到B表的外键
多对多
班级 老师
学生 老师
多对多必须的通过单独的一张表来表示
联合主键设置:banji是一个表,jisoshi是一个表
create table banji_jiaoshi_mapping
(
banji_id int constraint fk_banji_id foreign key references banji(banji_id),
jiaoshi_id int foreign key references jiaoshi(jiaoshi_id),
kecheng nvarchar(20),
xonstraint pk_banji_jiaoshi_id primary key(banji_id,jiaoshi_id)
)
主键:
定义:能够唯一标识一个事物的一个字段或多个字段的组合且不能为空称为主键。
注:
含有主键的表叫做主键表。
主键通常是整数 不建议使用字符串当主键,(如果主键用于集群式服务可以考虑用字符串当主键)。
主键建议用一个业务逻辑无关的字段。
要使用代理主键,不要使用业务主键,任何一张表强烈建议不要使用业务含义的字段充当主键,我们通常在表中单独添加一个整型的编号充当主键字段。
主键的值通常都不允许修改,除非本记录被删除。
主键不要定义成id,而要定义成表名id或者表名_id。
外键:(来自/参考)
定义:如果一个表中的若干字段是来自于另外若干个表的主键或者唯一键,则这个若干字段就是外键。
外键通常来自另外表的主键而不是唯一键,因为唯一键可能设置为null,外键不一定是来自另外的表,也可能是来自本表的主键。
含有外键的表叫外键表,外键字段来自的那张表叫做主键表。
问题:
先删主键表还是外键表?
答案:先删外键表
先删主键表会报错,因为这会导致外键表中的数据引用失败。