上后谈爱情

导航

 

1. 数据输入完整性:创建数据表时候给其添加约束条件:分类:实体完整性,域完整性,引用完整性

      实体:即表中的一行(一条记录)代表一个实体(entity

      实体完整性的作用:标识每一行数据不重复。主键;唯一标识数据库每一行这个一列,唯一标识数据库中每一条记录,每一个表中

            约束条件:  主键约束(primary key)数据唯一,不能为NULL,先创建主键才能自增属性,主键value相同SQL报错

                唯一约束(unique),自动增长(auto_increment)

2. 创建主键约束三种方式:

   

   联合主键本质上一个主键 PRIMARY KEY(id,classid); 

  3.创建表之后在添加主键:ALTER TABLE student ADD PRIMARY KEY (id)

  4. 唯一约束:性别 唯一: 这一列数值不能有重复元素,不能有多个NULL,允许空值

   

      5.自动增长列:

3.引用完整性:外键:表中有其他表的主键,要想有外键,必须要现有主键,主键和外键类型必须一致

Student 是父表,Score是子表,对子表添加一个 外键约束:子表不允许出现主表之外数值:

      外键关键字: FOREIGN Key  constraint 关键字 外表之间进行外键约束 Constraint 约束名 主键

  外键约束两种方式:创建时候 2.ALTER 修改:

例:
CREATE TABLE student(
sid int pirmary key,
name varchar(50) not null,
sex varchar(10) default ‘男’
);

create table score(
    id int,
    score int,
    sid int , -- 外键列的数据类型一定要与主键的类型一致
    CONSTRAINT fk_score_sid foreign key (sid) references student(id)
);

  2. ALTER: 关键字 constarint 约束名称 references 关联

ALTER TABLE score ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(sid);

4. 表与表之间的关系:

    1、一对一关系:人与身份证之间关系,主从关系设计方案:t_person 表示人,t_card 表示身份证

      ① t_card 表中添加外键列,并且添加外键唯一约束

       ② 给t_card 表的主键添加外键约束,即 t_card 表主键也是外键,reference 和constain 关键字

        2.一对多:对多和多对一,这是从哪个角度去看得出来的。t_usert_section的关系,从t_user来看就是一对多,而从t_section的角度来看就是多对一!这种情况都是                  在多方创建外键,从表sid不是主键

    3.多对多:例如t_stut_teacher表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系,创建中间表,给出两个外键,一个对应t_stu,另外一个对应 t_tea

 

5. 为什么进行拆表:1.解决表的冗余数据,2.

 

-------------------------------------------------------------------------------------------------------------------------

1. 多表查询:1.合并结果集 UNION ,UNION ALL    

           2. 连接查询 JOIN  3.子查询

 

1.批量插入; INSERT INTO A VALUES('a',10),('b',20),('c',30);

  合并查询集:SELECT * from table_A UNION select * FROM table_B;// 注意:合并查询 列数据类型必须一致

     UNION vs UNION ALL区别:前者查询两种并集,UNION ALL 显示两个表所有的数据

2. 连接查询:非常重要:内连接,外连接,自然连接 

    连接查询求出多个表的乘积,t1*t2:

从之上结果显示出来看,直接连接查询 出现迪卡尔效应,出现多个扩展集合,出现非常多的重复集合,在查询过程中必须加入过滤条件通过关联关系 去除迪卡尔效应 通过主外键之间的关系去除冗余信息

  1. 使用主外键关系做为条件来去除无用信息:注意:多表查询必须指定列的从属表:emp.deptno;

        SELECT * from emp,dept, where emp.deptno=dept.deptno;

     2.1 上面连接语句就是内连接,但是不是SQL中标准查询方式,在SQL中标准查询语句: ON 只用于内连接 MySQL默认的连接方式就是内连接

 

SELECT * FORM emp e INNER JOIN dept d ON e.deptno=d.deptno;// 内连接 关键字 INNERJOIN , ON 

e,d 别名,AS 省去,如果 * 换成 e.score,e.name

 

  2.2 外链接: 从左连接,从右连接,全外连接

左外连接:

          SELECT * FROM student s LEFT JOIN score  c ON s.stuid=c.stuid;

 

     左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。左右表分开显示

连接查询心得:两张表至少一个主外键条件,三张表至少需要俩个主外键关系

连接不限与两张表,连接查询也可以是三张、四张,甚至N张表的连接查询。通常连接查询不可能需要整个笛卡尔积,而只是需要其中一部分,那么这时就需要使用条件来去除不需要的记录。这个条件大多数情况下都是使用主外键关系去除。

两张表的连接查询一定有一个主外键关系,三张表的连接查询就一定有两个主外键关系,所以在大家不是很熟悉连接查询时,首先要学会去除无用笛卡尔积,那么就是用主外键关系作为条件来处理。如果两张表的查询,那么至少有一个主外键条件,三张表连接至少有两个主外键条件

 

3.自然连接:连接查询明显出现无用笛卡尔乘积,需要利用主外键之间关系去除无用,自然连接自动找到这一等式关系:条件:

    1.两张表中名称与数据类型完全一致,在连接查询只需要数据类型一致就行,

 

 

 

4. 子查询:非常重要

   一个SELECT 语句中嵌套另外一个SELECT,子查询就是一个嵌套查询,如果一条语句中存在两个或者两个以上SELECT,那么就是子查询     

 l 子查询出现的位置:

  • where后,作为条为被查询的一条件的一部分;
  • from后,作表;

当子查询出现在where后作为条件时,还可以使用如下关键字:

  • any
  • all

l 子查询结果集的形式:

  • 单行单列(用于条件)
  • 单行多列(用于条件)
  • 多行单列(用于条件)
  • 多行多列(用于表)

练习:

    1.查询与SCOTT 同一个部门员工:    求出SCOTT属于哪一个部门

        SELECT * FROM emp WHERE enam='SCOTT';// 

       SELECT  deptno from emp where ename='SCOTT';

之上语句两条查询语句进行合并 SELECT * from emp WHERE deptno=(SELECT deptno from emp where enam='SCOTT');

2.查询工资 高于 JONES 的工资

     SELECT sal FROM emp WHERE ename='JSON';  SELECT * FROM emp WHERE sal>($第一步查询语句)

 结果: SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='JONES')

3. 工资高于30 部门所有人的信息;

    SELECT * FROM emp WHERE sal>(SELECT MAX(sal) FROM emp WHERE deptno=30);

4.查询工作和工资与MARTIN(马丁)完全相同的员工信息 多个相等值 用IN

SELECT * FROM emp WHERE (job,sal)IN (SELECT job,sal FROM emp WHERE  ename='MARTN')

 

5. 查询员工编号为7788的员工名称、员工工资、部门名称、部门地址

SELECT e.ename,e.sal,d.dname,d.loc FROM emp e,dept d WHERE e.deptno=d.deptno AND ename='7788'; 这个

使用子查询: SELECT e.ename,e.sal,d.dname,d.locfrom emp,(SELECT * from dept) d WHERE e.deptno=d.deptno AND ename='7788';

6. 数据库备份: 

      生成SQL 脚本:mysqldump -uroot -p123 数据库名称>路径    mysqldump  保留数据库建立的代码,代码不存在创建数据库的语句

 

数据库为恢复:前提先有数据库 SOURCE c:\mysql.sql

 

采用这种方式 不使用Source mySQL -u root -p123 mydb1<d:\mydb1.sql;

 

posted on 2017-06-06 17:09  上后谈爱情  阅读(302)  评论(0编辑  收藏  举报