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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【JDBC-01】
01 JDBC Java DataBase Connectivity

02 DriverManager Class.forName("com.mtsql.jdbc.Driver")
   Connection getConnection("jdbc:mysql://127.0.0.1:3306/dbname","root","root")
   Statement createStatement(String sql)
   PreparedStatement prepareStatement(String sql)

03 conn.setAutoCommit(false)
   conn.commit()
   conn.rollback()

04 Statement
    boolean execute(String sql)
    int executeUpdate(String sql) (insert update delete)(create alter drop)
    ResultSet executeQuery(String sql) (select)



【MySQL-03】
01 多表查询
    00 笛卡尔积
    01 内连接-隐式内连接 where
    02 内连接-显式内连接 [inner] join
    03 左外连接 left [outer] join
    04 右外连接 right [outer] join
    05 嵌套查询
        01 子查询结果 单行单列
        02 子查询结果 多行单列
        03 子查询结果 多行多列

02 事务
    01 start transation / commit / rollback
    02 事务提交方式:
        01 自动提交:mysql默认自动提交
        02 手动提交:oracle默认手动提交
    03 查询与修改事务提交方式
        01 SELECT @@autocommit;【1 自动,0手动】
        02 set @@autocommit = 0;

03 事务的四大特征
    01 原子性
    02 持久性
    03 隔离性
    04 一致性

04 事务隔离级别
    01 read uncommitted
    02 read committed
    03 repeatable read
    04 serializable

05 可能存在问题
    脏读、不可重复读、幻读

06 用户权限控制

【MySQL-02】
01 DQL  查询语句
    排序查询
        order by  id [ASC],age DESC
        //按照 id 升序,如果 id 相同,按照年龄 降序

    聚合函数
        count(1) //主键 *
        max(math)
        min(math)
        sum(math)
        avg(math)
        【注意】聚合函数的使用,排除null值
            01 选择不包含非空的列进行计算
            02 IFNULL 函数

    分组查询 //group by area
        1. 分组之后查询的字段:分组字段、聚合函数【注意点】
        2. where 和 having 的区别?
                1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
                2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

    分页查询 // limit 开始的索引,查询的条数
        开始的索引 = (当前的页码 - 1) * 每页显示的条数
        【limit,mysql的方言】

02 【约束】
    主键约束 primary key 【一张表中只能有一个主键】
        ALTER TABLE stu MODIFY id INT PRIMARY KEY;
        ALTER TABLE stu DROP PRIMARY KEY;【】

    非空约束 not null
        ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
        ALTER TABLE stu MODIFY NAME VARCHAR(20);

    唯一约束 unique        某一列的值不能重复(但是,可以存储多个null值)
        ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
        ALTER TABLE stu DROP INDEX phone_number;【】

    自动增长 auto_increment
        ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
        ALTER TABLE stu MODIFY id INT;

    外键约束 foreign key
        constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
        ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
        ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

01 员工与部门信息混在一起,一张表
02 员工信息与部门信息分开,两张表,缺少外键约束
     department (id,dept_name,dept_location)
     employee(id,name,age,dept_id)
创建表的时候添加外键约束:
    constraint emp_dept_fk foreign key (dept_id) reference department(id);
删除外键约束:
    alter table employee drop foreign key emp_dept_fk;
创建表之后,添加外键约束:
    alter table employee add constraint emp_dept_fk foreign key (dept_id) reference department(id);

03 【级联操作】
    constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) [on update cascade] [on delete cascade];
    01 级联更新:on update cascade
    02 级联删除:on delete cascade【外键约束】

04 【范式】

第一范式:每一列 不可再拆分

    01 存在严重的数据冗余:姓名、系名、系主任
    02 数据添加存在问题:添加新开设的系和系主任,数据不合法
    03 数据删除存在问题,某同学毕业了,连系的信息也删除了


第二范式:在第一范式的基础上,表中的每一个字段都完全依赖于主键
          【消除非主属性对候选码的部分依赖】
    当存在一个复合主键包含多个主键列的时候,才可能会发生不符合第二范式的情况。
    primary(A,B)
    AB -> C 成立,且 A -> C 成立
    或者  
    AB -> C 成立,且 B -> C 成立

    01 函数依赖:学号 -> 姓名 (学号,课程名称)-> 分数
    02 完全函数依赖:(学号,课程名称)-> 分数
    03 部分函数依赖:(学号,课程名称)-> 姓名
    04 传递函数依赖:学号->系名 系名->主任
    05 【码】:如果一个表中,一个属性或属性组,被其他属性所完全依赖


第三范式:在第二范式的基础上,表中的每一列都直接依赖于主键,而不是通过其他的列间接依赖于主键【任何非主列不得传递依赖于主键】,即:
    不存在 主键列 -> 非主键列x -> 非主键列y

05 【实体之间的关系】
    一对一
    一对多
    多对多 (联合主键)

06 【数据库的备份和还原】

【MySQL-01】
01 sql语句分类
    DDL 数据定义语言 建库、建表
    DML 数据操纵语言 增删改
    DQL 数据查询语言 查询
    DCL 数据控制语言 用户权限设置

cmd 连接数据库 mysql -h 127.0.0.1 -uroot -proot

02 sql语法
    语句以分号结尾
    SQL中不区分大小写    注释
        --     单行注释
        /**/   多行注释

03 【DDL】

    创建【数据库】
        CREATE DATABASE learndemo;
        CREATE DATABASE learndemo IF NOT EXISTS learndemo;
        CREATE DATABASE learndemo DEFAULT CHARACTER SET gbk;
        CREATE DATABASE IF NOT EXISTS tmpdemo2 CHARACTER SET gbk;

    查看数据库
        show datebases;
        SHOW CREATE DATABASE learndemo;

    修改数据库的默认的字符集
        ALTER DATABASE learndemo CHARACTER SET utf8;

    删除数据库
        DROP DATABASE [if exists] learndemo;

    查看正在使用的数据库
        SELECT         DATABASE();

    使用/切换数据库
        USE learndemo;

int
double(5,2)
date                 yyyy-MM-dd
datetime        yyyy-MM-dd HH:mm:ss
timestamp        yyyy-MM-dd HH:mm:ss //如果没有指定,默认系统当前时间
varchar(20)



    创建【数据表】
        create table student(
         id int,
         name varchar(32),
         age int ,
         score double(4,1),
         birthday date,
         insert_time timestamp
        );
    快速创建一个表结构相同的表
        CREATE TABLE studentlike LIKE student;


    查看当前数据库的所有表
        SHOW TABLES;
    查看表结构
        DESC student;
    查看创建表的sql语句
        SHOW CREATE TABLE student;


    修改表名
        alter table student rename to newtablename;
    修改表的字符集
        alter table student character set utf8;
    增加一列
        alter table student add gender varchar(20);
    修改列名称 名称
        alter table 表名 change 列名 新列别 新数据类型;
        alter table 表名 modify 列名 新数据类型;
    删除列
        alter table 表名 drop 列名;


    删除表
        DROP TABLE [IF EXISTS] studentlike;            


04 【DML】
    插入数据
        INSERT INTO student
        (id,NAME)
        VALUES
        (1,'成龙');
    查询数据
        SELECT id,NAME,birthday
        FROM student;
    更新数据
        UPDATE student
        SET
        NAME = '迪丽热巴',
        id = 2
        WHERE id = 1;
    删除数据
        DELETE FROM student
        WHERE id = 2;
    清空表中的全部数据
        TRUNCATE TABLE student;【推荐】
        DELETE FROM student;

05 【DQL】
    查询数据
        select 字段列表
        from 表名
        where 条件列表
        group by 分组字段
        having 分组之后的条件
        order by 排序的字段
        limit 分页限定

    某一列数据与固定值运算
        SELECT
        id+10
        FROM student;
    某一列数据与其他列数据运算
        SELECT
        *,(math+english) AS 总成绩
        FROM student;

06 【条件查询】

CREATE TABLE student3 (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);

INSERT INTO student3
(id,NAME,age,sex,address,math,english)
VALUES
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);

SELECT math 数学,IFNULL(english,0) 英语,math+IFNULL(english,0) AS 总成绩
FROM student3;


    运算符
        > >= < <= <>
        between 100 and 200 [100,200]
        in(1,2)
        like '张%'/like '张_'
            % 匹配任意多个元字符
            _ 匹配一个字符
        is null
        and
        or
        not




【Junit】
类名Test
public void test方法名(){}

@Test
@Before
@After

【反射】
    获取类的字节码
    构造器
    方法
    属性
        忽略访问权限修饰符的安全检查 setAccessible(true)

【注解】JDK 1.5后的新特性,说明程序的
01 编写文档 (生成doc文档)
02 代码分析 (使用反射)
03 编译检查
    @Override
    @Deprecated
    @SuppressWarnings("all") 压制警告

    【本质】注解本质上就是一个接口,默认继承 java.lang.annotation.Annotation类

【属性】:接口中的抽象方法
    01 属性的返回值类型只能去以下类型:
        基本数据类型、String、枚举、注解
        以上类型的数组
    02 定义了属性,在使用时需要给属性赋值
        01 默认初始化值,default
        02 如果只有一个属性需要复制,且属性名称为value,则value可以省略
        03 数组复制,{}包裹,只有一个数值,{}可以省略


【元注解】
    @Target 注解作用的位置
        ElementType.TYPE/METHOD/FEILED
    @RETENTION 注解被保留的阶段
        RetentionPolicy.SOURCE/CLASS/RUNTIME
    @Documented 注解是否被抽取到 api 文档中
    @Inherited 注解是否被子类继承

【获取指定的注解】
    getAnnotation(Class)
    //在内存中生成了该注解接口的子类实现对象
        调用注解中的抽象方法,获取配置的属性值

0 个回复

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