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 语句中提供了完整性约束条件命名
完整性约束命名子句
constraint 完整性约束条件名 primary key 短语|foreign key 短语|check短语
例如:
2.修改表中的完整性限制
例如:
- mysql 数据库
- MYSQL数据库
- mysql数据库
- mysql数据库
- mysql数据库
- MySql数据库
- 数据库:MySQL
- mysql 数据库
- Mysql数据库。。
- MySQL数据库
- MySql 数据库
- mysql数据库
- Mysql数据库
- mysql数据库
- MySQL数据库
- mysql数据库
- MySql数据库
- MySQL数据库
- java的动态代理机制详解
- java的单例模式,为什么需要volatile
- Android中CountDownTimer倒计时的用法
- JAVA获取json中的全部键值对
- 关于webview的加载及缓存的总结
- mysql数据库
- Zeroc Ice原理介绍
- Java泛型详解
- GDOI2017游记
- PHP7的session无法使用memcache
- 超详细的vim+cscope 的使用规则
- float类型数据在内存中如何存储的?
- Android 性能优化之旋转屏幕优化
- 半闲居士视觉SLAM十四讲笔记(3)三维空间刚体运动