A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© S.妖妖 初级黑马   /  2019-5-31 13:00  /  1069 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

DDL

-数据定义语言

C(Create): 创建数据库:
    create database 数据库名;//创建数据库
    create database if nor exists 数据库名称;//创建数据库并判断不存在,再进行创建
    create database 数据库名称  character set 字符集名称;//创建数据库并指定字符集
   
R(Retrieve): 查询数据库:
    show databases;//查询所有数据库名称
    show create database 数据库名称;//查询数据库的字符集/创建数据库的语句
U(Update): 修改
    alter database 数据库名称 character set 字符集名称;//修改数据库字符集
D(Delete): 删除数据库:
    drop database 数据库名;//删除数据库
    drop database if exists 数据库名称;//判断数据库存在再进行删除
使用数据库:
    1.select database ();//查询正在使用的数据库名称
    2.use 数据量名称;//使用数据库
表结构操作语句

数据库类型:

1. int:整数类型
        * age int,
2. double:小数类型
        * score double(5,2)
3. date:日期,只包含年月日,yyyy-MM-dd
4. datetime:日期,包含年月日时分秒         yyyy-MM-dd HH:mm:ss
5. timestamp:时间错类型        包含年月日时分秒         yyyy-MM-dd HH:mm:ss       
* 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6. varchar:字符串
表的增删改查

C(Create)创建表格式:
    create table 表名 (
                  数据名
                  数据类型,
                );
复制表:
    create table 表名 like 被复制的表名;
R(Retrieve)查询:
    查看数据库所有表:
        show tables;
    查看表结构:
        desc 表名;
    查看表的字符集:
        show create table 表名;
U(Update):修改
    增加表的一条字段:
        alter table 表名 add 数据名称 数据类型;
    修改以存在数据字段:
        alter table 表名 change 修改的数据名 修改的数据类型;
    修改表名
                alter table 表名 rename to 新的表名;
        修改表的字符集
                alter table 表名 character set 字符集名称;
    修改列名称 类型
                alter table 表名 change 列名 新列名 新数据类型;
                alter table 表名 modify 列名 新数据类型;
D(Delete):删除
    删除列:
        alter table 表名 drop 列名;
    删除表:
        drop table 表名;
    判断表存在再进行删除:
        drop table  if exists 表名 ;
    删除后再重新创建该表:
         truncate 表名;
DML

-数据操作语言

添加数据:
   添加格式:
    insert into 表名(数据名)values(数据);
    insert into 表名 (数据名1,数据名2) values(数据1,数据2);
    insert into 表名 values(数据1,数据2);
删除数据:
    删除格式:
    delete from 表名 where 判断条件;
    delete from 表名(删除整个表);
    delete from 表名; 有多少条记录就会执行多少次删除操作
    truncate table 表名; 效率更高,先删除表,然后再创建一张一样的表。
修改数据:
    修改格式:
    update 表名 set 被修改的数据 where 判断修改条件;
注意:
    如果不加任何条件,则会将表中所有记录全部修改
DQL

-数据查询语言

语法:

        select
            字段列表
        from
            表名列表
        where
            条件列表
        group by
            分组字段
        having
            分组之后的条件
    order by
            排序
    limit
            分页限定

基础查询:
    select * from 表名;//查询表中所有数据
    select 数据名 from 表名;//查询单个表中数据
    select 数据名1,数据名2 from 表名;//查询表中多个字段
排序查询:
    order by 排序字段1 排序方式1,排序字段2 排序方式2....
排序方式:
    asc:升序(默认)
    desc:降序
注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
聚合函数:(将一列数据作为整体,进行纵向计算)
    1.count:计算个数//一般选择非空的列计算
            count(*)//计算列里无论有没有null或者0的都会计算
        2. max:计算最大值
        3. min:计算最小值
        4. sum:计算和
        5. avg:计算平均值
注意:聚合函数计算,配出null值
    解决方案:
        1.选择不包含非空的列进行计算
        2.if null函数判断并替换为0
分组查询:
    语法:group by 分组字段
注意:
        1. 分组之后查询的字段:分组字段、聚合函数
        2. where 和 having 的区别:
            1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
            2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
分页查询:
    语法:
    limit开始的索引,每页查询的条数
    公式:
    开始的索引 = (当前的页码 - 1) * 每页显示的条数
                -- 每页显示X条记录
limit是一个MySQL"方言"

去除重复:

  select  distinct(列名);
计算列
    一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
         ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
         表达式1:哪个字段需要判断是否为null
     如果该字段为null后的替换值
起别名:
         as:as也可以省略
条件查询:
    where 子句判断条件
运算符
        * > 、< 、<= 、>= 、= 、<>
        * between...and  
        * in( 集合)
        * like:模糊查询
                * 占位符:
                        * _:单个任意字符
                        * %:多个任意字符
        * is null  
        * and  或 &&
        * or  或 ||
        * not  或 !
约束

概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。
分类:
    1. 主键约束:primary key
        2. 非空约束:not null
        3. 唯一约束:unique
        4. 外键约束:foreign key
主键约束:

1. 含义:非空且唯一
2. 一张表只能有一个字段为主键
3. 主键就是表中记录的唯一标识

关键字:primary key
格式:
    create table 表名(
                数据名
                数据类型
                primary key
                );
删除主键格式:
    alter table 表名 drop primary key;
已存在表,添加主键:
    alter table 表名 modify 数据名 数据类型 primary key;
自动增长:

概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长
添加主键约束,并完成主键自动增长格式:
    create table 表名(
        数据名
        数据类型
    primary key auto_increment  
    );
删除自动增长:
    alter table 表名 modify 数据名 数据类型;
添加自动增长:
    alter rable 表名 modify 数据名 数据类型 auto_increment;
非空约束:

关键字:not null //某一列的值不能为null
创建表时添加约束:
    create table 表名(
    数据名
    数据类型 not null
    );
删除非空约束:
    alter table 表名 modify 数据名 数据类型;
创建表后,添加非空约束:
    alter table 表名 modify 数据名 数据类型 not null;
唯一约束:

关键字:unique //某一列的值不能重复
创建表时添加唯一约束:
    create table 表名(
        数据名
        数据类型 unique
        );
删除唯一约束:
    alter table 表名 drop index 数据名;
已存在表添加唯一约束:
    alter table 表名 modify 数据名 数据类型 unique;
外键约束:

关键字:foreign key //让表与表产生关系,从而保证数据的正确性
创建表时添加外键:
    create table 表名(
    ...
    外键列
    constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
    );
删除外键:
    alter table 表名 drop foreign key 外键名称;
已存在表中添加外键:
    alter table 表名 add constrainit 外键名称 foreign key(外键字段名称)references 主表名称(主表列名称);
级联操作:

添加级联:
    alter table 表名 add constraint 外键名称 foreign key(外键字段名称)
    references 主表名称 on update cascade on delete cascade;
级联更新:
    on update cascade
级联删除:
    on delete cascade
数据库的设计

1.分类:

一对一:
    如:人与身份证
    理解:一个人只能有一个身份证,一个身份证对应一个人
    实现方式:一对一实现,可以在任意一方添加唯一外键指向另一方的主键
一对多(多对一)
    如:部门与员工
    理解:一个部门有多个员工,一个员工对应一个部门
    实现关系:在多的一方建立外键,指向一方的主键
多对多:
    如:学生与课程
    理解:一个学生可以选择多个课程,一个课程可以供多个学生选择
    实现方式:多对多关系实现需要借助第三张中间表,中间表至少包含两个字段,两个字段作为第三张表的外键,分别指向两张表的主键
数据库设计的范式

概念:

    设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求

        设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

        目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
分类:
    1. 第一范式(1NF):每一列都是不可分割的原子数据项
                2. 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)
                        * 几个概念:
                                1. 函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A
                                        例如:学号-->姓名。  (学号,课程名称) --> 分数
                                2. 完全函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值。
                                        例如:(学号,课程名称) --> 分数
                                3. 部分函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可。
                                        例如:(学号,课程名称) -- > 姓名
                                4. 传递函数依赖:A-->B, B -- >C . 如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称 C 传递函数依赖于A
                                        例如:学号-->系名,系名-->系主任
                                5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
                                        例如:该表中码为:(学号,课程名称)
                                        * 主属性:码属性组中的所有属性
                                        * 非主属性:除过码属性组的属性
                                       
                3. 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
多表&事务

查询语法:
    select
        列名列表
    from
        表名列名
笛卡尔积:
    有两个个集合A,B,取这两个集合的所有组成情况.
    要完成多表查询,需要消除无用的数据
多表查询的分类:

内连接查询:
    隐式内连接:使用where条件消除无用数据
    例:select * from emp,dept where emp.`dept_id` = dept.`id`;
    显式内连接:
        select 字段列表 from 表名1 inner join 表名2  on 条件(inner单词可省略)
    例:select * from emp inner join dept on emp.`dept_id` = dept.`id`;
外连接查询:
    左外连接:
        语法:select  字段列表 from 表1 left outer join 表2 on 条件;
        查询的是左表所有数据以及其交集部分
    例:select         t1.*,t2.`name` from emp t1 left join dept t2 ON t1.`dept_id` = t2.`id`;
    右外连接:
        语法:select 字段列表 from 表1 right outer join 表2 on 条件; 查询的是右表所有数据以及其交集部分
    例:select         * from dept t2 right join emp t1 on t1.`dept_id` = t2.`id`;
子查询:
    概念:查询中嵌套查询,称嵌套查询为子查询
        例:select max(salary工资) from emp表名;
    子查询不同情况:
        席查询的结果都是单行单列的:
            子查询可以作为条件,使用运算符去判断
        子查询的结果是多行单列:
            子查询可以作为条件,使用运算符in来判断
        子查询的结果是多行多列:
            子查询可以作为一张虚拟表参与查询;
多表查询

评分

参与人数 1黑马币 +5 收起 理由
bneo-B + 5 很给力!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马