学习笔记:数据库高级

- 实体完整性(行完整性):
- 域完整性(列完整性):
- 引用完整性(关联表完整性):
主键约束:primary key        数据唯一,且不能为null
CREATE TABLE student( classid int, stuid int, name varchar(50), primary key(classid,stuid) );
ALTER TABLE student ADD PRIMARY KEY (id);
                                             
唯一约束:unique [key]        特点:数据不能重复。
非空约束:not null
默认约束:default
自动增长:auto_increment        给主键添加自动增长的数值,列只能是整数类型
外键约束: foreign key

实体完整性        即表中的一行(一条记录)代表一个实体(entity),标识每一行数据不重复。
*主键约束(primary key*        
*唯一约束(unique)*        
*自动增长列(auto_increment)*
域完整性       域代表当前单元格, 限制此单元格的数据正确,不对照此列的其它单元格比较
数据类型
非空约束(not null
默认值约束(default)
check约束(mysql不支持)check(sex='' or sex='')
引用完整性        关联表完整性
外键约束:FOREIGN KEY
constraint 自定义外键名称 foreign key(外键列名) references 主键表名(主键列名)
ALTER TABLE 表名 ADD CONSTRAINT 自定义外键名 FOREIGN KEY(外键列名) REFERENCES
主键表名(主键列名);

多表关系:

 多对一:

需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键

多对多:
需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一 方的主键
一对一:
让一对一的双方的主键进行建立关系,主键约束

多表查询:

多表查询有如下几种:
1. 合并结果集:UNION(去重)  UNION ALL(不去重)
SELECT* FROM t1 UNION SELECT * FROM t2
2. 连接查询
        2.1内连接 [INNER] JOIN ON        满足条件才留下
                
        语法:
        select 列名 from 1
        inner join 表2 on 1.列名=2.列名
        inner join 表3 on 1或表2.列名=3.列名 where
        等价于:
        select 列名 from 1,2,3
        where 表1.列名=2.列名 and 1/2.列名=3.列名
        2.2外连接 OUTER JOIN ON        //主表都留下,次表满足才留下
                -左外连接 LEFT [OUTER] JOIN        //主表在左
                - 右外连接 RIGHT [OUTER] JOIN        //主表在右
                - 全外连接(MySQL不支持)FULL JOIN
        2.3 自然连接 NATURAL JOIN        //得到笛卡尔积,去除重复列
3.子查询
一个select语句中包含另一个完整的select语句。
子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。
l 子查询出现的位置:
        a. where后,作为条为被查询的一条件的一部分;
        b. from后,作表;
l 当子查询出现在where后作为条件时,还可以使用如下关键字:
        any() 其中任意一个     all() 其中所有的       in()在里面包含      not 取反
l 子查询结果集的形式:
        a. 单行单列(用于条件)
        b. 单行多列(用于条件)
        c. 多行单列(用于条件)
        d. 多行多列(用于表)
 

多行新增:

insert into 表名(列名) values (列值),(列值),(列值)

多表更新: 在连接查询基础上更新

(1)update 1,2 set 列名=列值 where 1.列名=2.列名 and 其他限定条件
(2)update 表1 inner join 表2 on 1.列名=2.列名 set 列名=列值 where 限定条件
内连接 全有才能改,左右外联,主表有就可以改

多表删除:在连接查询基础上删除

delete 被删除数据的表 from 删除操作中使用的表 where 限定条件
delete d,e,s from department d,employee e,salary s where d.depid=e.depid and s.empid=e.empid and depname='人事部'
内连接 全有才能删,左右外联,主表有就可以删

日期运算函数:

数据库优化

1、避免全表扫描,首先应考虑在 where order by 涉及的列上建立索引

2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫 描

3、应尽量避免在 where 子句中使用 != <> 操作符,否则引擎将放弃使用索引而进行全表扫描。

4、应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致 引擎放弃使用索引而进行全表扫描 (考虑使用union all)

5、in not in 也要慎用,否则会导致全表扫描。(用between 和 exists)

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值