zoukankan      html  css  js  c++  java
  • MySQL基础操作语句

    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;

  • 相关阅读:
    C++ istringstream总结
    C++各数据类型的最值
    AcWing 机器人跳跃问题 二分
    蓝桥杯 矩形面积交
    蓝桥杯 完美的代价
    蓝桥杯 数的读法
    国内 镜像 下载
    redis的pipline使用
    MySQL额外操作
    sql强化演练( goods 表练习)
  • 原文地址:https://www.cnblogs.com/woainifanfan/p/6952547.html
Copyright © 2011-2022 走看看