查看数据库.
1.show databases;
2.use 数据库名称;
3.show create database 数据库名称; --查看数据库的创建信息.
4.select database(); --查看当前使用的数据库.
删除数据库(重点)
1.drop database 数据库名称; --删除数据库
修改数据库
1.语法:alter database 数据库名称 character set 'gbk' collate '校对规则';
表结构
创建表
1.语法:
create table 表名称(
字段1 类型(长度) 约束,
字段2 类型(长度) 约束,
字段3 类型(长度) 约束
);
2.注意.
数据库数据类型(重点)
字符串类型(重点)
VARCHAR(用的比较多):长度是可变的。例子:name varchar(8),存进去'hello', 存入进去之后,
字段长度自动变成5.
CHAR:长度不可变。
大数据类型(不常用)
BLOB : 字节(电影 MP3)
TEXT : 字符(文本的内容)
数据值(重点)
TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE
逻辑性
BIT
在Java中是true或者false
在数据库bit类型(1或者0)
日期型(重点)
DATE :只包含日期(年月日)
TIME : 只包含时间(时分秒)
DATATIME : 包含日期和时间。如果插入数据的时候, 字符值为空,字段的值就是空了.
TIMESTAMP : 包含日期和时间.如果插入数据的时候,设置字段的值为空,默认获取当前的系统的时间,
把时间保存到字段中.
4.练习创建一张表结构.
create table employee(
id int,
name varchar(30),
gender char(5),
birthday date,
entry_date date,
job varchar(50),
salary double,
resume text
);
5.查看数据库表结构.
1).查询所有的表机构
show tables;
2).查看表结构的详细的信息.
desc 表名称;
3)
show create table 表名称;
6.删除表
drop table 表名称;
7.修改表(掌握)
1.添加一个新的字段.
alter table 表名称 add 字段名称 数据类型(长度) 约束;
2.修改字段的数据类型, 长度或者约束.
alter table 表名称 modify 字段名称 数据类型(长度) 约束;
3.删除某一个字段.
alter table 表名称 drop 字段名称 ;
4.修改字段的名称.
alter table 表名称 change 旧字段 新字段 数据类型(长度) 约束;
5.修改表的名称.
rename table 旧表名 to 新表名;
8.数据库的数据(CRUD)
插入数据(insert)
1.添加数据,使用insert来添加数据
insert into 表(字段1,字段2,字段3) values(字段1,字段2, 字段3);
insert into 表 values(字段1,字段2, 字段3...);
2.注意实现
插入的数据与字段数据的类型相同.
数据的大小应该在规定的范围内.
数据中的数据的列的位置和字段位置的相同
字符串和日期类型的数据,必须要使用单引号括起来
3.
insert into user (username, job) values ('tom', 'it')
insert into user values (2, 'tom2', ...)
4.插入中文数据乱码.
1.插入中文,会产生乱码的问题.
方案:修改mysql客户端的编码就可以了.改成GBK.
9.修改数据的语句(update).
修改数据,使用update关键字来完成修改数据.
* update 表名称 set 字段1=值1, 字段2=值2, where 条件;
* 修改字段1和字段2的值
*如果没有where的关键字,说明修改的默认所有的记录.
*如果有where的关键字,修改的是符合条件的记录.
10.删除数据(delete)
1.删除语句的语法
* delete from 表 where 条件;
2.删除所有的数据
* delete from 表;
* 一行一行的数据
* 支持事务的操作.事务是数据库中的特性.
*truncate 表;
* 先把整个表删除掉(数据也删除了),创建一个与原来一摸一样的表.
* 不支持事务.
3.练习.
* delete from user where username='tom'
* 删除表中的所有记录
添加事务
* start transaction;
* delete from user where username ='tom2';
* rollback;
* 使用truncate删除表记录.
truncate user;
11. 查询数据select(重点)
1.查询语句的语法
select * from 表;
select 字段1,字段1,字段3 from 表;
DISTINCT
可以对查询的列进行运算.
*查询语句中可以使用as的关键字,起别名.
* 别名的真正的用法,采用的多表的查询,为了区分每张表,表起个别名.
* as的关键字可以省略不写.中间需要使用空格
*一般都是给表来起别名
* select s.username, s.math from stu s;
* select s.username, u.username from stu s, user u
使用where的条件语句,进行查询条件的过滤.
2.练习
create table stu(
id int,
username varchar(20),
math int,
english int,
chinese int
);
insert into stu values (1, '美美',18, 97, 35);
insert into stu values (2, '小凤',98, 97, 95);
insert into stu values (3, '小花',88, 90, 77);
insert into stu values (4, '熊大',79, 59, 95);
insert into stu values (5, '熊二',15, 11, 89);
1.查询表中的所有数据.
select * from stu;
2.查询表中的所有学生的姓名和对应的英语成绩.
select username, english from stu;
3.过滤表中的重复数据.
select DISTINCT english from stu;
4.在所有学生分数加上10分特长分.
select username, math+10, english+10, chinese+10 from stu;
5.统计每个学生的总分.
select username,(math+english+chinese) from stu;
6.使用别名表示学生分数.
select username,(math+english+chinese) as t from stu;
7.查询姓名为美美的学生成绩.
select * from stu where username = '美美';
8.查询英语成绩大于90分的同学.
select username, english from stu where english > 90;
9.查询总分大于200分的同学.
select username,(math+english+chinese) from stu where (math+english+chinese) > 150;
where子句后可以使用的符号.
1.常用的符号
> < <= >= = <>
in --代表的范围
select * from stu where math = 88;
select * from stu where math in (18,88,90); --表示english可以是18, 88,90这几个值.
like --模糊查询
写法:
select * from stu where username like '张_'; --使用_占位符,结果是姓张的,张飞,张三, 张翼德(不符合)
select * from stu where username like '张%'; --使用%占位符,结果是姓张的,只要姓张的都可以.
_:一个位置.
%:多个位置.
and:与
or:或
not:非
between ... and
2.总结查询的语句
select 字段1,字段2, | * from 表 where 条件的过滤;
12.使用order by对结果进行排序.
1.语法
order by 字段 asc | desc;
asc: 升序(默认值).
desc: 降序.
2.注意.
order by 自己放在select的语句末尾.
select * from xx where xx order by xx;
3.练习.
select username, math from stu order by math asc;
select username, math from stu order by math desc;
13.聚集函数.
1.什么是聚集函数:Excel表格.求数量,求和,平均值,最大值,最小值.
2.聚集函数操作的是某一列的数据.
3.聚集函数.
count() --求数量
select count(*) | count(列名) from 表;
练习:
统计一个班级共有多少学生?
select count(*) from stu;
select count(id) from stu;
统计数学成绩大于90的学生有多少个?
select count(math) from stu where math > 60;
select username, count(math) from stu where math > 60; --不会这样查询
统计总分大于220的人数有多少?
select count(*) from stu where (math+english+chinese) > 220;
sum() --求某一列数据的和
注意:没有sum(*), 求的某一列, sum只对数值类型起作用.
练习
统计一个班级数学总成绩?
select sum(math) from stu;
avg() -- 求平均分
select avg(字段) from stu;
max() -- 求最大值
min() -- 求最小值
14.分组查询.
group by 字段 根据字段进行分组.
create table orders(
id int,
product varchar(20),
price float
);
insert into orders values(1, '电视', 900);
insert into orders values(2, '洗衣机', 100);
insert into orders values(3, '电视', 90);
insert into orders values(4, '电视', 900);
insert into orders values(5, '洗衣粉', 90);
insert into orders values(6, '洗衣粉', 90);
练习:
对订单表中商品归类后,显示每一类商品的总价?
select product, sum(price) from orders group by product;
--已经把原来的一组的数据,现在分为两组.在统计数据的时候,以组为单位.
having和where类似,但是只能放在group by后面
where后面不能使用聚集函数,having可以.
15.单表的约束(主键)
1.可以把某一列字段声明主键,这一列的数据有如下特点.
非空
唯一
被引用 --当前主键的列,作为一条记录的标识.
2.声明主键
使用关键字primary key 声明某一个字段为主键.
3.测试主键
创建新的数据
create database day06;
use day06;
create table person(
id int primary key,
username varchar(20)
);
添加数据
insert into person values(1, '美美')
insert into person values(2, '小凤')
4.主键的自动增长.
主键的值特点, 可以把主键的值交给数据库去维护.
自动增长只能使用int 和bigint类型
通过关键字auto_increment
唯一和非空约束
1.唯一的约束.
* 可以把某一个字段声明成唯一的值.
* 使用该关键字 unique
2.非空
* 可以把某一个字段声明成非空的
* 值是不能空值
* 使用关键字 not null
练习:
create table person(
id int primary key auto_increment,
username varchar(30) unique,
email varchar(30) not null
);
16.多表约束(外键)
外键的约束:目的保证表结构中数据的完整性!
外键字段的取值只能从主键获取值.
1.模拟的过程
2.有一个部门,还有一个员工表.一个部门有多个员工.
3.创建表结构.
create table dept(
did int primary key auto_increment,
dname varchar(30)
);
create table emp(
eid int primary key auto_increment,
ename varchar(30),
sal double,
dno int,
foreign key (dno) references dept (did)
);
17.多表的设计.
一对一(了解):
公司表 地址表
id 名称 时间 id 名称 xxx
主键对主键
可以合成一张表.
一对多(重点):一般两张表
主表(一方),从表(多方)
建表原则,在多方表中添加字段,把该字段作为外键,指向一方表的主键.
多对多(重点):
场景:
1.. 订单表 商品表
2.用户与角色.一个用户拥有多个角色.一个角色被多个用户所拥有.
其实有三张表,有一张中间表,存储数据关系.
用户表 角色表
id 主键 id 主键
name rname
用户角色中间表
至少要包含2个字段
uid 外键->用户id
rid 外键->角色id
eg:
中间表
用户表 uid rid 角色表
1 张三 1 1 1.管理员
2.赵四 1 2 2.游客
2 1
多对多拆可以分成2个1对多的场景.