学习笔记:数据库高级

- 实体完整性 ( 行完整性 ):
- 域完整性 ( 列完整性 ):
- 引用完整性 ( 关联表完整性 ):
主键约束: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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值