mysql数据库

来源:互联网 发布:excel数据插件 编辑:程序博客网 时间:2024/06/06 00:26

外键

(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,Bwhere A.id=B.id
自身连接

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

外连接

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

select student.sno sname,sex,sage,sdept,cno,gradefrom 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 条件

删除数据

格式:

deletefrom 表名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