mysql数据库

外键

(1)插入非空值时,如果主键表中没有这个值,则不能插入。

(2)更新时,不能改为主键表中没有的值。

(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。

(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
定义外键:

foreign key 列表 reference 被参照的表(被参照的表名)

修改基本表

(1) 增加列明: Alter table 表名 add 列名 数据类型

(2) 修改数据类型: Alter table 表名 alter column 列名 数据类型

(3) 增加唯一约束条件:Alter table 表名 add Queue(列名)

数据查询

查询一般格式为:

select all/distinct 目标列,..... 
from 表名 
where 条件表达式 
group by 列名 
having 条件表达式 
order by 列名 asc(升序)/desc(降序) 

先根据where子句的条件表达式从from子句指定的基本表或视图中找出满足条件的元组,再按select子句中的目标列表达式,选出元组中的属性值,形成结果表,如果有grop by 子句,则将结果按列名的值进行分组,属性值相等的元组就分为一组,如果有group by子句带having短语,则只有满足指定条件的组才会输出,如果有order by子句,结果表中还要按照列名的值升序或降序排序

单表查询
select 目标列表达式 目标列别名,.... from 表名

目标列表达式不仅仅是属性列,也可以是算术表达式,函数,等,列如

select sname,2013-sage from student

2013-sage表示查询学生的出生年份

用户可以查询的时候指定列名的别名

(1) 消除取值重复的行:distinct 关键字
(2) 查询满足条件的值:

比较: =,>,<,>=,<=,!=,<>,!>,!<,not
确定范围:between and ,not between and
字符匹配:like,not like
空值: is null,is not null
逻辑运算: and,or, not  
聚合函数
count(distinct/all *)统计元组个数
count(distinct/all 列名) 统计列中值的个数
sum(列名) 统计列值的总和
avg 计算列值的平均值
max 求列值的最大值
min 求列值中的最小值

如果知道distinct短语,表示计算时取消指定列中的重复值,不知打则默认为all

连接查询
等值与非等值连接查询

连接查询的where 子句中用来连接两个表的条件称为连接条件,或连接谓词,其一般格式为:

表名1.列名 比较运算符 表名2.列名2 (比较运算符)

表名1.列名1 between 表名2.列名2 and 表名2.列名3(谓词)

当连接运算符为=时,称为等值连接,其他运算符称为非等值连接,连接谓词中的列名称为连接字段,连接条件中的各连接字段类型必须是可比的,但名字不必相同:

select A.*,B.* 
from A,B
where A.id=B.id
自身连接

连接操作不仅仅可以在两个表之间进行,也可以一个表与其自身进行连接,称为表自身连接

外连接

如果舍弃的元组保存在结果关系中,而在其他属性上填Null,那么这种连接叫做外连接,也就是 两个表某个列进行等值查询时,若来一张表不存在,则返回的结果集中其他列设置为null 例如:

select student.sno sname,sex,sage,sdept,cno,grade
from student left out join sc on (student.sno=sc.sno);

查询结果:

左外连接列出左边关系中所有的元组,又外连接列出右边关系中的所有的元组

自然连接

他是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉

复合条件连接

在where子句中可以有多个连接条件,称为复合条件连接
例如:

select student.sno,sname,from student,sc 
where student.sno=sc.sno and sc.cno='2' and sc.grade>90 
嵌套查询

一个select-from -where 语句称为一个查询会,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询,例如:

select sname from student 
where sno in(select Sno from sc where cno='2')

sql语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询,但是子查询的select语句中不能使用order by子句,order by 子句只能对最终查询结果排序

不相关子查询

子查询的查询条件不依赖于父查询,称为不相关子查询,也就是先执行子查询,子查询的结果用于建立父查询的查找条件

相关子查询

子查询的查询条件依赖于父查询,这类子查询称为相关子查询,例如:

带有any或all谓词的子查询

子查询返回单只时可以用比较运算符,但返回多值时要用any或all谓词修饰符。语义为:

带有exists谓词的子查询

带有exists谓词的子查询不返回任何数据,只产生逻辑真true或逻辑假值fals

集合查询

使用并操作union,交操作intersect和差操作except将查询的结果集合并起来,操作的集合和个查询结果的列数必须相同,对应项的数据类型也必须相同 例如:

select语句的一般格式

select语句的一般格式:

select 目标列名 别名,.... 
from 表名或视图名....
where 条件表达式
group by 列名 having 条件表达式
order by 列名 asc/desc

数据更新

插入数据

sql的数据插入语句insert通常有两种形式,一种是插入一个元组,另一种是插入子查询结果,后者可以一次插入多个元组
插入元组:

insert into 表名 (列名....)
valuse (列名值....)

插入子查询结果:
子查询不仅仅可以嵌套在select语句中,用以构造父查询的条件,也可以嵌套在insert语句中,用以生成要插入的批量数据 格式:

insert into 表名 (列名....)
子查询;

修改数据

格式:

update 表名
set 列名=表达式,....
where 条件
删除数据

格式:

delete
from 表名
where 条件

数据库完整性

实体完整性

关系模型的实体完整性在create table中用primary key定义,对单属性构成的嘛一种是列级约束条件,另一种是标记约束条件,对多个属性构成的码只有定义为标记约束条件

参照完整性定义

关系模型的参照完整性在create table 中的foreign key 短语定义哪些列为外码,用references短语指明这些外码参照哪些表的主码
当参照完整性被破坏了,系统可能按照完整性情况及违约处理:

当上述的不一致发生时,系统可以采用以下的策略加以处理
1.拒绝(no action)执行,为默认策略

2.级联(cascade)操作,当删除或修改被参照表的一个元组造成了参照表的不一致,则删除或修改参照表中的所有造成不一致的元组

3.设置为空置(set-null)当删除或修改被参照表中的一个元组时造成不一致,则将参照表中的所有造成不一致的元组的对应属性值设置为空置,例如:

属性上的约束条件定义

在create table 中定义属性的同时可以根据应用要求,定义属性上的约束条件,即属性值限制
1.列值非空(not null)

2.列值唯一(unique)

3检测列值是否满足一个布尔表达式(check短信)
例如:

完整性约束命名子句

sql还在create table 语句中提供了完整性约束条件命名

  1. 完整性约束命名子句

    constraint 完整性约束条件名 primary key 短语|foreign key 短语|check短语
    

例如:

2.修改表中的完整性限制

例如:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值