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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 lovemiya 于 2018-5-9 15:43 编辑

MySQL单表
# MySQL

## 概述

**数据库就是一个文件系统,通过标准的SQL语句获取数据**

### 关系数据库概述

**关系数据库存放的是实体之间的关系**

#### 常见的关系数据库

- MySQL
- Oracle
- SQLServer
- DB2
- SyBase

## SQL的分类

### DDL:数据定义语言

- create, drop, alter

### DCL:数据控制语言

- grant,if..

### DML:数据操纵语言

- insert, update, delete

### DQL:数据查询语言

- select

## SQL对数据库进行操作

### 创建数据库

- 语法
  - create database 数据库名称 character set 字符集 collate 字符集校对规则;

```sql
create database db1 character set utf8 collate utf8_bin;
```

## 使用SQL

### 对数据库进行操作

#### 创建数据库

- 语法
  - create database 数据库名称 character set 字符集 collate 字符集校对规则;

```mysql
creata database db1 character set utf8 collate utf8_bin;
```

#### 查看数据库

- show databases;

```mysql
show databases;
```

#### 修改数据库

```mysql
alter database db1 character set gbk;
```

#### 删除数据库

```mysql
drop database db1;
```

#### 其他数据库操作

- 切换数据库

```mysql
mysql>use db2;
Database changed
```

- 查看当前正在使用的数据库

```mysql
select database();
```

### SQL对数据库表进行操作

#### 创建表

- 语法
  - create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束...);
- 字段类型

| Java中的类型        | MySQL中的类型                |
| ------------------- | ---------------------------- |
| byte/short/int/long | tinyint/smallint/int/bigint  |
| float               | float                        |
| double              | double                       |
| boolean             | bit                          |
| char/String         | char/varchar                 |
| Date                | date/time/datetime/timestamp |
| File                | BLOB/TEXT                    |

- **char**和**varchar**的区别:
  - **char**:固定长度,长度不足会被三个空格补全
  - **varchar**:长度可变
- **datetime**和**timestamp**的区别:两者都是既有日期又有时间的类型
  - datetime:如果不给值,默认为null;
  - timestamp:如果不给值,默认为当前时间;
- 约束
  - 约束的作用:保证数据的完整性
  - 单表约束分类:
    - 主键约束: primary key 主键约束默认就是唯一非空的;
    - 唯一约束: unique
    - 非空约束: not null
- 建表语句:

```mysql
create database web_test1;
use web_test1;
create table user(
        id int primary key auto_increment,
    username varchar(20),
    password varchar(20),
    age int,
    birthday date
);
```

#### SQL查看表

- 查看某个数据库下的所有表

```mysql
show tables;
```

- 查看某个表的结构信息

```mysql
desc user;
```

#### SQL删除表

```mysql
drop table user;
```

#### SQL修改表

- 添加列

```mysql
alter table user add image varchar(100);
```

- 修改列类型,长度和约束

```mysql
alter table user modify image varchar(150);
```

- 删除列

```mysql
alter table user drop age;
```

- 修改列名称

```mysql
alter table user change image pic varchar(150);
```

- 修改表名

```mysql
rename table user to employee;
```

- 修改表的字符集

```mysql
alter table user character set gbk;
```

### 对数据库表的记录进行操作

#### SQL添加表的记录

- 语法:
  - 向表中插入某些列:`insert into user (列名1,列名2,列名3...) values(值1,值2,值3...)`
  - 向表中插入所有列:`insert into user values(值1,值2,值3...)`
- 注意事项
  1. 值的类型/顺序与数据库中表的类型/顺序一致
  2. 值的最大长度不能超过列设置的最大长度
  3. 值的类型是字符串或者是日期类型,使用单引号
- 添加中文记录需要将MySQL数据库服务器中的客户端部分的字符改为gbk.
- my.ini文件

#### SQL修改表的记录

- 注意事项
  1. 值的类型与列的类型一致.
  2. 值得最大长度不能超过列的最大长度
  3. 字符串类型和日期类型添加单引号
- 修改某一列的所有值

```mysql
update user set password = 'abc';
```

- 按条件修改数据

```mysql
update user set password = 'xyz' where username = 'bbb';
```

- 按条件修改多个列

```mysql
update user set password = '123',age = 34 where username = 'aaa';
```

#### SQL删除表的记录

- 注意事项
  1. 删除表的记录,指的是删除表的一行数据
  2. 删除如果没有条件,默认删除表中的所有记录
- 删除某一条记录

```mysql
delete from user where id = 2;
```

- 删除表中的所有记录

```mysql
delete from user;
```

- **delete from user**和**truncate table user**的区别
  - delete from user;
    - 删除所有记录,属于DML语句,一条记录一条记录删除.事务可以作用在DML语句上
  - truncate table user;
    - 删除说有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表.事务不能控制DDL语句.

#### 查看表的记录(重点)

- 普通查询
  - select * from exam;
  - select distinct english from exam;
  - select name,english+chinese+math as sum from exam;
- 条件查询
  - 使用where子句
    - `>,<,>=,<=,<>,=`
    - like: 模糊查询
    - in:范围查找
    - 条件关联:and,or,not
  - select * from exam where name = '李四';
  - select * from exam where name like '李%';
- 排序查询
  - select * from exam order by chinese desc;
- 分组统计查询
  - 聚合函数
    - select sum(english) from exam;
    - select sum(english) from exam where name like '李%';
    - select count(english) from exam;
    - select max(english) from exam;
    - select min(english) from exam
    - select avg(english) from exam;
  - 分组查询
    - 使用group by 字段名称
    - select product,sum(price) from order group by product order by sum(price) desc;
  - 总结
    - S(select)...F(from)...W(where)...G(group by)...H(having)...O(order by);

0 个回复

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