7.1、显示当前数据库服务器中的数据库列表
7.2、使用数据库
7.3、显示数据库中的数据表
7.4、显示当前所使用的数据库名称
7.5、显示当前数据库的状态
7.6、显示当前数据库中某表的表结构 (DESCRIBE )
7.7、显示所支持的字符集
7.8、修改账号的密码
10.1、数据库database
10.2、表table
mysql类型
mysql类型描述
java类型
字符串
char(n)
固定字符串。char(5) ,表示字段长度为5字符。
l 例如:”abc” ,右侧添加空格
String
varchar(n)
可变字符串。char(5),表示字段长度为5字符。
l 例如:”abc” ,长度为3
String
整形
bit
比特。一个位。
boolean
tinyint
byte
MEDIUMINT
short
int
int
bigint
long
时间
date
日期
java.sql.Date
datetime
日期时间
null
time
时间
java.sql.Time
timestamp
时间戳,数据库可以自动维护时间
java.sql.Timestamp
java.util.Date 父类,有3孩子:java.sql.Date、java.sql.Time、java.sql.Timestamp
使用:
l 一般使用util.Date ,如果使用sql.Date 位置放置dao层。
l util.Date提供 api,long getTime()
l new java.sql.Date(new java.util.Date().getTime() )
l new java.sql.Time(new java.util.Date().getTime() )
l new java.sql.Timestamp(new java.util.Date().getTime() )
大数据
blob
64k,字节大数据对象,Binary Large Object
Blob
longblob
4G
text
64k,字符大数据对象,Character Large Object
Clob
longtext
4G
mysql> use day14;
Database changed
mysql> create table users(
-> id varchar(20),
-> firstname varchar(50),
-> secondname varchar(50),
-> age int
-> );
Query OK, 0 rows affected (0.10 sec)
mysql> desc users;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id | varchar(20) | YES | | NULL | |
| firstname | varchar(50) | YES | | NULL | |
| secondname | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
删除表: mysql> drop table 表名;
修改表:
重命名表名:mysql> alter table 表名 rename 新的表名;
11.1、录入insert
- 格式1:mysql> insert into 表名 values(值1,[
1值如果字符串需要使用引号,常用单引号。
2值如果整形,一般直接写数据
3多个值之间使用逗号分隔
]值2);
例如:mysql> insert into users values('u001','shi','tian',18,998);
要求:4值的个数必须与表中列的个数一致- 格式2:mysql> insert into 表名(列名1,列名2,…) values(值1,值2,…);
例如:mysql> insert into users(id,firstname,age) values('u002','diao',38);
如果表中列没有约束,默认值字符串null,整形null11.2、更新update
- 格式1:mysql> update 表名 set 列名1=值1, 列名2=值2,…. ;
例如:mysql> update users set counts=87;
更新表中所有数据- 格式2:mysql> update 表名set 列名1=值1, 列名2=值2,…. where 条件;
例如:mysql> update users set secondname='baole' where id='u002';11.3、删除delete
- 格式1: mysql> delete from 表名;
删除表中所有数据,慎用- 格式2:mysql> delete from 表名 where 条件;
11.4、中文数据录入
- 前提:mysql安装时设置的编码UTF8,创建数据库时使用编码默认UTF8。
- 如果db数据库编码是UTF8,创建表时,表的编码也是UTF8
- 显示创建表的sql语句:mysql> show create table users;
| users | CREATE TABLE ``users` (
`id` varchar(20) DEFAULT NULL,
`firstname` varchar(50) DEFAULT NULL,
`secondname` varchar(50) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`counts` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |- `’
- 重音符:esc键下面 `
如果使用列名等关键字,必须是重音符括起来。- create table `order`();
单引号:’- 解决方案:mysql> set names gbk;
- 分析:
cmd命令窗口:录入的数据编码,GBK
查询服务器编码设置:mysql> show variables like '%char%';
12.1、没有条件查询
- 查询所有
mysql> select * from users;- 查询部分信息
格式:mysql> select 字段1,字段2,字段3,… from 表名;
mysql> select firstname,secondname from users;
mysql> select id,firstname,secondname,age,counts from users;- 查询用户编号、姓名,及格
mysql> select id,firstname,secondname,counts-60 from users; #表达式
mysql> select id,concat( firstname,secondname),counts-60 from users; #表达式可以是方法- 修改上面查询显示字段名称,用"姓名"表示姓名,用"及格"表示及格
字段别名格式: select 字段1 AS 别名 , 字段 别名 from 表名;
字段 [AS] 别名
mysql> select id,concat( firstname,secondname) as 姓名,counts-60 及格 from users;
mysql> select id,concat( firstname,secondname) as `姓 名`,counts-60 及格 from users;12.2、带有条件查询
格式:mysql> select * from 表名 where 条件条件:字段 运算符 值 ,例如:username=”jack” 或 age > 18条件1 and 条件2 or 条件3
- 查询分数等于60的学生
mysql> select * from users where counts = 60; #如果整形直接写,如果字符串使用单引号。- 查询姓"张"学生
mysql> select * from users where firstname=张; #语法错误,字符串必须使用单引号
mysql> select * from users where firstname='张';- 查询年龄大于18的学生
mysql> select * from users where age > 18;- 显示分数在60-80的学生
mysql> select * from users where counts >= 60 and counts <=80;
mysql> select * from users where counts between 60 and 80; # 字段 between 值1 and 值2- 查询编号为u001和u002的学生
mysql> select * from users where id='u001' or id='u002';
mysql> select * from users where id in ('u001','u002'); # 字段 in (值列表)- 查询年龄是18或20的学生
mysql> select * from users where age = 18 or age = 20;- 查询名中含有"云"的学生
- 模糊查询,不完全匹配查询,like语句
格式:select….. where 字段 like 值
特殊符号:%表示任意多个字符 ; _表示一个字符
值:
- ‘abc’ , 按照abc查询
- ‘%abc’ , abc结尾
- ‘abc%’ , abc开头
- ‘%abc%’ ,含有abc
mysql> select * from users where secondname like '%云%';
- 查询名中第二字还有"云"的学生
mysql> select * from users where secondname like '_云%';- 查询分数小于60 或 大于90分的学生
mysql> select * from users where counts < 60 or counts > 90;- 查询分数等于60 或者 分数大于90并且年龄大于23
mysql> select * from users where counts = 60 or counts > 90 and age > 23;
mysql> select * from users where counts = 60 or (counts > 90 and age > 23); #运算符优先级, and优先or- 查询没有考试的学生
mysql> select * from users where counts is null;- 查询所有考试的学生
mysql> select * from users where counts is not null;- 分数不是100
mysql> select * from users where counts != 100;
mysql> select * from users where counts <> 100; #都不进行null计算
12.3、聚合函数的使用
聚合函数:对表中一列数据的统计,结果一个(一列,一行)
- 有多少条记录
计算总记录数,count函数
格式:select count(字段 | * | 数字) from… #注意:如果使用字段不进行null计算
mysql> select count(id) from users;
mysql> select count(*) from users;
mysql> select count(1) from users;- 平均成绩
函数avg
mysql> select avg(counts) from users;
mysql> select sum(counts)/count(id) from users;- 最高成绩
函数max
mysql> select max(counts) from users;- 最小年龄
函数min
mysql> select min(age) from users;- 班级总成绩
函数sum
mysql> select sum(counts) from users;- 查询所有的年龄数
mysql> select age from users;
sql排序格式:select .. where … order by 字段名称; #默认升序
select .. where … order by 字段名称 asc|desc; #asc升序,desc降序
mysql> select age from users order by age asc;- 去重复
mysql> select distinct age from users order by age asc;12.4、组合
- 添加班级字段(classes)
mysql> alter table users add column classes varchar(3);
# 班级信息初始化
mysql> update users set classes = '1';
mysql> update users set classes = '2' where id in ('u005','u006','u007');- 查询1班和2班的平均成绩
# 两个班的平均成绩
mysql> select sum(counts)/count(id) from users;- 查询班级的平均成绩不及格的班级成员信息
查询不及格的班级
mysql> select sum(counts)/count(id) as avg, classes from users group by classes having avg < 60;
查询2班的成员信息
mysql> select * from users where classes = '2';
- 多表查询 (多个表是一个表:子查询,将查询语句所谓另一个sql语句语法的一部分)
格式1: select * from A,B where A.id = B.id- 表的别名:select * from 表名 as 别名
格式2:select * from A as a,B b where a.id = b.id;- #模拟
select * from users u, B b where u.classes = b.classes;- 结果:
select u.* from
users u,
(
select sum(counts)/count(id) as avg, classes from
users
group by classes
having avg < 60
) b
where u.classes = b.classes;