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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵嘉鑫 初级黑马   /  2018-1-11 15:21  /  714 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-1-12 10:50 编辑

数据库

MySQL数据库

本质是一个文件系统,可以进行增删改查
数据库管理系统DBMS
访问数据库中表内的数据
类---表
类中属性---表中字段
类的对象---记录
net start mysql
net stop mysql
SQL语言:数据库的代码
DDL:数据定义语言,用来定义数据库对象
CREATE ALTER DROP
DML:数据操作语言 增删改
INSERT DELETE UPDATE
DQL:数据查寻语言 对表中的记录进行查询
SELECT FROM WHERE
SQL关键字大写,数据库名,表名,字段名用小写
一条SQL语句可以单行和多行
一条语句的结尾以;结尾
参数之间用,分割
字符串和日期使用''单引号包裹
#单行注释
--空格 单行注释
VARCHAR可变长度字符
DATE 日期类型yyyy-MM-dd格式的字符串
DROP DATABASE 库名
PRIMRY KEY主键约束 限制该列的记录值不能
为空且唯一
AUTO_INCREMENT自增
* 约束:
        * constraint
        * 作用: 就是对列中记录的值进行限制, 如果插入的数据不符合约束规则, 则该操作会被立刻终止
* 扩展:
        * 约束的种类:
                * **主键约束**: `PRIMARY KEY`, 限制该列的记录值不能为空且唯一(不能重复), 相当于同时设定了`NOT NULL`和`UNIQUE`
                * **自增约束**: `AUTO_INCREMENT`, 设置该列的记录值可以自动增加
                        * 默认从几开始? 1
                        * 能用于什么类型? 只能用于数字类型(如INT, DOUBLE, 小数1.23自增后是2)
                * 外键约束: `FOREIGN KEY`, 主要是连接另一个表的主键
                * 非空约束: `NOT NULL`, 限制该列的记录值不能为空
                * 唯一约束: `UNIQUE`, 唯一, 限制该列的记录值不能重复
                * 检查约束: `CHECK (条件)`, 限制该列插入的记录值是否符合要求
                * 默认值约束: `DEFAULT 值`, 限制该列记录如果没有插入值, 则使用默认值
CREATE TABLE 表名 (
  列名 数据类型(长度) 约束,
  列名2 数据类型(长度) 约束,
  ...
  列名n 数据类型(长度) 约束
);


// VARCHAR和CHAR一般需要手动指定长度, 日期数字等其他类型有默认长度一般不需要指定
* 列出当前数据库的所有表
        * `SHOW TABLES;`
* 查看表的结构
        * `DESC 表名;`: desc=description描述
* 删除表
        * `DROP TABLE 表名;`
        * 修改表的结构
        * 格式: `ALTER TABLE 表名 操作关键字 列名 数据类型 约束;`
                * 操作关键字
                        * `ADD`: 增加列.
                                * `ALTER TABLE 表名 ADD 新列名 数据类型 约束;`
                        * `MODIFY`: 修改指定列的数据类型和约束(不能修改列名).
                                * `ALTER TABLE 表名 MODIFY 要修改的列名 新数据类型 新约束;`
                        * `CHANGE`: 修改指定列的列名+数据类型+约束.
                                * `ALTER TABLE 表名 CHANGE 旧列名 新列名 新数据类型 新约束;`
                        * `DROP`: 删除列.
                                * `ALTER TABLE 表名 DROP 列名;`
* 修改表名
        * 格式: `RENAME TABLE 旧表名 TO 新表名;`
        插入记录格式2: 不指定主键, 让其自增
        * 当设置了主键自增后, 插入记录时可以不考虑主键字段的值. 即字段名和值都没有主键这一列. 同时可以避免产生主键重复的错误
        * 该方式适用于设置了主键自增(AUTO_INCREMENT)的情况


```sql
INSERT INTO 表名
(非自增列名1, 非自增列名2, ..., 非自增列名n)
VALUES
(值1, 值2, ..., 值n);
```
* 插入记录格式3: 不指定列名, 给所有列添加值
        * 不指定列名, 为所有列添加值
        * 该方式适用于为所有列添加值, 可以省去写列名. 但**不能省略主键**


```sql
INSERT INTO 表名
VALUES
(值1, 值2,...,值n);
```


* 批量插入记录:
        * 适用于批量插入记录
        
```sql
INSERT INTO 表名
(列1, 列2)
VALUES
(记录1值1, 记录1值2),
(记录2值1, 记录2值2);


INSERT INTO 表名
VALUES
(记录1值1, 记录1值2),
(记录2值1, 记录2值2);
```
# 查询指定字段
SELECT 列名1, 列名2 FROM 表名;


# 查询所有字段
SELECT * FROM 表名;


# DISTINCT去重
SELECT DISTINCT 列名1, 列名2 FROM 表名;


# AS给字段取别名
SELECT 列名 AS 别名 FROM 表名;


# 对查询结果进行数学计算
SELECT 列名+值 FROM 表名


* 条件查询:
        * 即按指定条件查询记录返回符合条件的结果集, 使用`SELECT`和`WHERE`组合
* `WHERE`:
        * 作用: 条件子句, 过滤符合条件的结果
        * 运算符
                * 比较运算符
                        * `=`: 相等
                        * `<>`或`!=`: 不等
                        * `>`: 大于
                        * `<`: 小于
                        * `>=`: 大于等于
                        * `<=`: 小于等于
                        * `BETWEEN...AND...`: 在一个范围内(包含头和尾), `BETWEEN 0 AND 10;` 0~10
                                * 如:
                        * `IN ()`: 在列表中, 满足列表中一个即可
                                * 如: `IN (1, 3, 5)`
                        * `IS NULL`: 是空
                        * `LIKE 通配符`: 模糊查询
                                * 通配符种类
                                        * `%`: 一个百分号可以表示任意个字符. 比如`王%`, `王大锤`, `王五`
                                        * `_`: 一个下划线可以表示一个字符. 比如`王_`, 只能匹配`王五`
                * 逻辑运算符
                        * `AND`: 与. 两边条件同时成立才成立
                        * `OR`: 或. 两边条件只要有一个成立就成立
                        * `NOT`: 非, 取相反结果
                                * `NOT BETWEEN ... AND ...`: 不在范围内
                                * `NOT IN`: 不在列表中
                                * `NOT LIKE`: 不匹配
                                * `IS NOT NULL`: 非空
                * 日期也是可以比较的
order by 排序
count(列名)
分组查询
group by 背分组的列名
注意:
        * 聚合函数与分组的使用效果
                * 使用聚合函数后再进行分组, 才相当于汇总统计
                        * `SELECT zname, SUM(zmoney) FROM zhangwu GROUP BY zname;`
                * 不使用聚合函数的分组, 只有第一条记录的值
                        * `SELECT zname, zmoney FROM zhangwu GROUP BY zname;`
        * `HAVING`和`WHERE`的区别
                * 过滤时机不同
                        * WHERE是在分组前先对查询结果进行过滤
                        * HAVING是在查询结果分组后再次过滤
                * 是否可跟随聚合函数不同
                        * WHERE条件中不可使用聚合函数
                        * HAVING条件中可以使用聚合函数
                * 条件可用列名不同
                        * HAVING条件中的列名必须是SELECT或GROUP BY中使用过的列名
                        * WHERE条件中可以使用表的所有列名
JDBC java数据库连接
insert into values 增
delete from 删
update set 改
select from 查
DBCP连接池
getConnection()获取连接
BasicDataSource
* `BasicDataSource`类的配置方法
        * 成员方法:
                * `void setInitialSize(int size)`: 初始连接数. 连接池中最初的连接数
                * `void setMaxActive(int n)`: 最大连接数量. 程序能够连接数据库的最大连接数量
                * `void setMinIdle(int n)`: 最小空闲连接. 连接池中允许存在的最小空闲数量, 如果小于该数量, 则会创建新的连接, 直到满足该最小空闲连接数
                * `void setMaxIdle(int n)`: 最大空闲连接. 连接池中允许存在的最大空闲数量, 如果超出该数量, 则超出的空闲连接会被真实关闭


* DBCP的`BasicDataSource`类: 实现了`javax.sql.DataSource`接口
        * 构造方法:
                * `BasicDataSource()`: 创建对象
        * 成员方法:
                * `void setDriverClassName(String name)`: 设置驱动类名
                * `void setUrl(String url)`: 设置连接地址
                * `void setUsername(String username)`: 设置用户名
                * `void setPassword(String password)`: 设置密码









0 个回复

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