### 创建表
1、创建数据库
```sql
create database mstest default character set utf8 collate utf8_general_ci
```
2、创建数据表
```sql
create table user(
id int,
name varchar(11)
)
```
Java 数据类型:基本数据类型 byte short int long double float boolean char
引用类型
MySQL 数据类型
- 整数类型:tinyint(1个字节)、smallint(2个字节)、mediumint(3个字节)、int(4个字节)、bigint(8个字节)
- 一个字节 byte 8位的二进制数
- 浮点类型:float(4个字节)、double(8个字节)
- 日前和时间类型:datetime、date、timestamp、time、year
- year(1个字节)取值范围 1901~2155
- time(3个字节)取值范围 -838:59:59 ~ 838:59:59
- date(3个字节)取值范围 1000-01-01 ~ 9999-12-31
- datetime(8个字节)取值范围 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
- timestamp(4个字节)表示 1970 年 1 月 1 号到现在的毫秒数
- 字符串类型:char、varchar、text
- char(M) M 个字节
- varchar(M) M+1 个字节
- text 长度+2 个字节
- 二进制类型:bit、binary、varbinary、tinyblob、blob、mediumblob、longblob
- bit(M) M个字节
- binary(M) M个字节
- varbinary(M) M个字节
- tinyblob 长度可变的二进制数据,最多是 255 个字节
- blob 长度可变的二进制数据,最多 2 的 16 次方 -1 个字节
- mediumblob 最多 2 的 24 次方 -1 个字节
- longblob 最多 2 的 32 次方 -1 个字节
—》新增
—》修改
—》删除
—》查询
### 管理数据库结构
数据库
1、创建数据库
```sql
create database mstest default character set utf8 collate utf8_general_ci;
```
2、删除数据库
```sql
drop database mstest;
```
3、查看数据库
```sql
show databases;
```
4、选择数据库
```sql
use mstest;
```
数据表
1、创建数据表
```sql
create table user(
id int,
name varchar(11)
);
```
2、删除数据表
```sql
drop table user;
```
3、查看数据库所有的表
```sql
show tables;
```
4、查看表结构
```sql
desc user;
```
5、修改数据表的结构
- 新增一个字段
```sql
alter table user add gender varchar(2);
```
- 删除一个字段
```sql
alter table user drop gender;
```
- 修改一个字段
```sql
alter table user change name no int;
```
数据
1、添加数据
```sql
insert into user(id,name) values(1,"张三");
```
2、查询数据
```sql
select * from user;
```
3、修改数据
```sql
update user set id = 2;
```
4、删除数据
```sql
delete from user;
```
### SQL 函数
SQL 提供了很多函数,可以完成很复杂的功能,但是一般实际开发中不会用 SQL 来完成复杂的业务操作, SQL 只是一个简单的存储机制,会消耗大量的资源。
Java 程序来完成相对复杂的操作,SQL 只是负责对数据进行保存和管理。
- 数学函数:
- abs(num) 求绝对值
```sql
select abs(score) from user where id = 1;
```
- floor(num) 返回小于 num 的最大整数
```sql
select floor(score) from user where id = 3;
```
- ceil(num) 返回大于 num 的最小整数
```sql
select ceil(score) from user where id = 2;
```
- 字符串函数
- insert(s1,index,len,s2)
s1 中 index 位置开始,长度为 len 的字符替换为 s2
```sql
select insert(name,1,2,"小红") from user where id = 1;
```
- upper(),ucase() 将字母值变为大写
```sql
select ucase(name) from user where id = 4;
```
- lower(),lcase() 将字母值变为小写
```sql
select lcase(name) from user where id = 4;
```
- left(s,len) 返回 s 字符串的前 len 个字符
```sql
select left(name,1) from user where id = 1;
```
- right(s,len) 返回 s 字符串的后 len 个字符
```sql
select right(name,1) from user where id = 1;
```
- substring(s, index,len) 截取 s 字符串,从 index 位置开始,长度为 len
```sql
select substring(name,2,2) from user where id = 1;
```
- reverse() 反序输出
```sql
select reverse(name) from user where id = 1;
```
- 日期函数:
- curdate()、current_date() 获取当前日期
```sql
select current_date();
```
- curtime()、current_time() 获取当前时间
```sql
select curtime();
```
- now() 获取当前日期+时间
```sql
select now();
```
- datediff(d1,d2) 获取 d1 和 d2 之间相隔的天数
```sql
select datediff("2019-02-11","2017-03-16");
```
- adddate(d,n) 返回 d 日期之后 n 天的日期
```sql
select adddate("2019-02-11",600);
```
- subdate(d,n) 返回 d 日期之前 n 天的日期
```sql
select subdate("2019-02-11",600);
```
- 聚合函数
- count() 根据某个字段统计总记录数
```java
select count(*) from user;
```
- sum() 计算某个字段值的总和
```java
select sum(score) from user;
```
- avg() 求某个字段总和的平均值
```sql
select avg(score) from user;
```
- max() 求某个字段的最大值
```sql
select max(score) from user;
```
- min() 求某个字段的最小值
```sql
select min(score) from user;
```