黑马程序员技术交流社区

标题: 【石家庄校区】JavaEE个人学习总结3day01-mysql [打印本页]

作者: sun2ice    时间: 2018-1-11 15:29
标题: 【石家庄校区】JavaEE个人学习总结3day01-mysql
本帖最后由 sun2ice 于 2018-1-11 15:41 编辑

#day 01-SQL语句

##数据库
* 概念: 存储数据的仓库. 本质是一个文件系统, 数据按照指定的格式将数据存储起来, 用户可以对数据库中的数据进行增删改查
* DBMS: Database Management System, 数据库管理系统. 是操作和管理数据库的大型软件, 用于建立, 使用和维护数据库, 对数据库进行统一管理和控制, 以保证数据库的安全性和完整性. 用户通过数据库管理系统访问数据库中表内的数据
* 常见数据库
    * `MySQL`
    * `Oracle`
* 数据库: 存储数据表
* 数据表: 存储记录
    * 由行和列组成的
* DBMS: 操作数据库
* 表和Java类的对应关系
    * 表名: Java类名
    * 列名: 成员属性名
        * 记录: 类对象
        
## MySQL
* 安装
* 配置和遇到的问题
* 命令行的登录和退出
    * 登录: `mysql -u 用户名 -p 密码`
    * 退出: `exit`

##SQL基本语言
* SQL的概念: Structured Query Language, 结构化查询语言
    * 结构: 数据表是由行和列组成的, 是有结构的, 从这种结构中查询
* SQL的4中分类
    * DDL: Data Defination Language, 数据定义语言, 用来定义数据库对象(库, 表等)
        * CREATE
        * ALTER
        * DROP
    * DML: Data Manipulation Language, 数据操作语言, 对表中的记录进行增, 删, 改
        * INSERT
        * UPDATE
        * DELETE
    * DQL: Data Query Language, 数据查询语言, 对表中的记录进行查
        * SELECT
        * FROM
        * WHERE
    * DCL: Data Control Language, 数据控制语言, 创建修改用户, 权限
* SQL特点
    * SQL不区分大小写
    * 一条SQL语句以`;`分号结尾, 一条语句可以多行书写
    * 单词之间通过空格分隔, 参数之间通过`,`逗号分隔
    * 字符串和日期要用`''``""`引起来, 建议单引号
   
##SQL注释(2+1种)
```
* 2种单行注释
    * `#单行注释`
    * `-- 单行注释`: 减号后必须有一个空格
* 1种多行注释: `/* 注释内容 */`
```
##SQL的数据类型
```
* `INT`: 整数
* `DOUBLE`: 小数
* `VARCHAR`: 可变长度字符
* `CHAR`: 固定长度字符
* 其他看文档
* VARCHAR和CHAR的区别:
    * VARCHAR(200), 可变长度字符, 存储占用的内存空间是可变的, 如果你的数据容量小于我们指定的空间大小, 那么就会按照实际的数据空间来开辟内存大小
        * 优点: 节省内存
        * 缺点: 因为每次存入数据时都会判断数据的实际大小, 来动态修改内存空间, 所以需要占用资源, 效率低
    * CHAR(200), 固定长度字符, 存储占用的内存空间是不可变的. 无论实际存入的数据容量是多大, 都占用这么大的空间
        * 优点: 插入数据时不需要额外操作, 效率高
        * 缺点: 可能会浪费空间
```
## 约束

* 约束:
    * constraint
    * 作用: 就是对列中记录的值进行限制, 如果插入的数据不符合约束规则, 则该操作会被立刻终止
* 扩展:
    * 约束的种类:
        * **主键约束**: `PRIMARY KEY`, 限制该列的记录值不能为空且唯一(不能重复), 相当于同时设定了`NOT NULL`和`UNIQUE`
        * **自增约束**: `AUTO_INCREMENT`, 设置该列的记录值可以自动增加
            * 默认从几开始? 1
            * 能用于什么类型? 只能用于数字类型(如INT, DOUBLE, 小数1.23自增后是2)
        * 外键约束: `FOREIGN KEY`, 主要是连接另一个表的主键
        * 非空约束: `NOT NULL`, 限制该列的记录值不能为空
        * 唯一约束: `UNIQUE`, 唯一, 限制该列的记录值不能重复
        * 检查约束: `CHECK (条件)`, 限制该列插入的记录值是否符合要求
        * 默认值约束: `DEFAULT 值`, 限制该列记录如果没有插入值, 则使用默认值   
##SQL对库的操作
```
* 创建库
    * 使用默认字符集创建库: `CREATE DATABASE 库名;`
        * 默认是UTF-8编码
    * 指定字符集: `CREATE DATABASE 库名 CHARACTER SET '字符集';`
* 删除库
    * `DROP DATABASE 库名;`
* 查看所有库
    * `SHOW DATABASES;`
* 使用库
    * `USE 库名;`
* 查看当前使用的库
    * `SELECT DATABASE();`
```
##SQL对表的操作
```
* 创建表: `CREATE TABLE 表名 (列名1 数据类型 约束, 列名2 数据类型 约束);`
* 删除表: `DROP TABLE 表名;`
* 查看当前库中的所有表: `SHOW TABLES;`
* 修改表的结构: `ALTER TABLE 表名 操作关键字 列名 数据类型 约束;`
    * 增加列: `ALTER TABLE 表名 ADD 新列名 新数据类型 新约束;`
    * 删除列: `ALTER TABLE 表名 DROP 列名;`
    * 修改列的数据类型和约束(不能修改列名): `ALTER TABLE 表名 MODIFY 列名 新数据类型 新约束;`
    * 修改列的列名, 数据类型, 约束: `ALTER TABLE 表名 CHANGE 旧列名 新列名 新数据类型 新约束;`
* 修改表名: `RENAME TABLE 旧表名 TO 新表名;`
```
##SQL对记录的操作
```
* 增
     一次插入一条记录: `INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);`
     一次性插入一条记录(省略自增主键): `INSERT INTO 表名 (非主键自增列1, 非主键自增列2) VALUES (值1, 值2);`
     一次插入所有列的记录(省略列名): `INSERT INTO 表名 VALUES (值1, 值2);`
        * 值的数量和顺序必须和表的列一致
     一次插入多个记录(指定列): `INSERT INTO 表名 (列1, 列2) VALUES (记录1值1, 记录1值2), (记录2值1, 记录2值2);`
     一次插入多个记录(省略列): `INSERT INTO 表名 VALUES (记录1值1, 记录1值2), (记录2值1, 记录2值2);`
* 删
     删除符合条件的记录: `DELETE FROM 表名 WHERE 条件;`
     删除所有记录: `DELETE FROM 表名;`
     清空表: `TRUNCATE TABLE 表名;`
     `DELETE FROM 表名;`和`TRUNCATE TABLE 表名;`的区别
     DELETE, 逐条删除记录, 不会重置自增计数器
     TRUNCATE, 删除表再重建, 会重置自增计数器
* 改
     修改符合条件的记录: `UPDATE 表名 SET 列名1=新值, 列名2=新值 WHERE 条件;`
     修改所有记录: `UPDATE 表名 SET 列名1=新值, 列名2=新值;`
* 查
     查询指定列: `SELECT 列名1, 列名2 FROM 表名;`
     查询所有列: `SELECT * FROM 表名;`
     条件查询: `SELECT 列名1, 列名2 FROM 表名 WHERE 条件;`
     运算符
        * 比较运算符
            * `=`: 相等
            * `<>`或`!=`: 不等
            * `>`: 大于
            * `<`: 小于
            * `>=`: 大于等于
            * `<=`: 小于等于
            * `BETWEEN...AND...`: 在一个范围内(包含头和尾)
                * 如: BETWEEN 0 AND 10
            * `IN ()`: 在列表中, 满足列表中一个即可
                * 如: IN (1, 3, 5)
            * `IS NULL`: 是空
            * `LIKE 通配符`: 模糊查询
                * `%`: 一个百分号可以表示任意个字符. 比如'王%', 王大锤, 王五
                * `_`: 一个下划线可以表示一个字符. 比如'王_', 只能匹配王五
        * 逻辑运算符
            * `AND`: 与. 两边条件同时成立才成立
            * `OR`: 或. 两边条件只要有一个成立就成立
            * `NOT`: 非, 取相反结果
                * `NOT BETWEEN ... AND ...`: 不在范围内
                * `NOT IN`: 不在列表中
                * `NOT LIKE`: 不匹配
                * `IS NOT NULL`: 非空
* 去重:     `SELECT DISTINCT 列名1, 列名2 ... FROM 表名 WHERE 条件;`
* 别名:
    * `字段名 AS 别名`
    * `表名 AS 别名`
```
   






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2