### 创建表 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; ```