web02 数据库
1 数据库介绍
1.1 什么是数据库
按照特殊格式存储数据的仓库,方便我们存取操作
1.2 数据库管理系统
DBMS应用软件---mysql 操作仓库(数据库)、表、记录
1.3 实体(类)和表关系
一个实体对应一张表
一个对象对应一条记录
1.4 常见数据库
java语言中:mysql、oracle、DB2
2 数据库安装和使用
2.1 安装mysql
按照文档一步步来,注意不要有中文路径
2.2 使用
windows窗口
默认开机自启动,不管它
dos命令窗口
需要超级管理员用户打开窗口
开启: net start mysql
关闭:net stop mysql
2.4 数据库连接
客户端视图工具 sqlyog 明天玩 【简单】
dos命令窗口
直接连接数据库【掌握】
-- 格式
mysql -u用户名 -p密码
-- 例如
mysql -uroot -proot
指定ip连接
-- 格式
mysql -h主机名(ip地址) -u用户名 -p密码
-- 例如
mysql -h127.0.0.1 -uroot -proot
指定ip全名连接
-- 格式
mysql --host=主机名 --user=用户名 --password=密码
-- 例如
mysql --host=localhost --user=root --password=root
3 SQL语句
3.1 什么是sql
structured query language
结构化查询语言,通过sql语句可以实现对记录的增删改查操作【CURD】
CURD:create 创建、update 更新、retrieve 检索(read)、delete删除
3.2 sql方言
sql是一套标准,所有的厂商都支持,各自厂商自此基础上增加特有的语句,这部分我们称为方言;
例如:分页、注释
3.3 sql语法
-
sql语句可以单行或多行书写,以分号结尾
-
sql语句忽略大小写,建议关键字大写
-
注释
-
单行 -- 注释内容 # 注释内容(mysql特有)
-
多行 /* 注释内容 */
-
3.4 sql分类
分类 | 操作对象 | 主要关键字 |
---|---|---|
DDL:数据定义语言 | 数据库 表 | create alter drop |
DML:数据操作语言 | 记录 | insert update delete |
DQL:数据查询语言【非官方】 | 记录 | select |
TCL:事务控制语言 | 事务 | commit rollback |
DCL:数据控制语言 | 用户 | grant revoke |
3.5 DDL【敲一遍】
进入企业后,一般一个项目对应一个数据库,一个实体对应一张表,数据库和表创建成功后不做 修改了
操作数据库
创建数据库
直接创建
-- 格式
create database 数据库名;
-- 例如
create database ee_day02;
先判断数据库是否存在,如果不存在创建
-- 格式
create database if not exists 数据库名;
-- 例如
create database if not exists ee_day02;
创建数据库并指定字符集
-- 格式
create database 数据库名 character set 字符集;
-- 例如
create database ee_day02_1 character set gbk;
查看数据库
查看所有数据库
-- 格式
show databases;
查看建库语句
-- 格式
show create database 数据库名;
-- 例如
show create database ee_day02_1;
修改数据库
修改数据库字符集(编码集)
-- 格式
alter database 数据库名 character set 字符集;
-- 例如
alter database ee_day02_1 character set utf8;
删除数据库
直接删除数据库
-- 格式
drop database 数据库名;
-- 例如
drop database ee_day02_1;
先判断数据库是否存在,如果存在删除
-- 格式
drop database if exists 数据库名;
-- 例如
drop database if exists ee_day02_1;
使用数据库
查看当前使用的数据库
-- 格式
select database();
使用、切换数据库
-- 格式
use 数据库名;
-- 例如
use ee_day02;
操作表
创建表
-- 格式
create table 表名(
字段名 字段类型 [约束],
字段名 字段类型 [约束],
....
);
-- 格式
create table student(
id int,
name varchar(32),
birthday date
);
常见的字段类型
int 整型
double 浮点型
varchar 字符串
date 日期 格式:yyyy-MM-dd
查看表
查看所有表
-- 格式
show tables;
查看表结构
-- 格式
desc 表名;
-- 例如
desc student;
查看建表语句
-- 格式
show create table 表名;
-- 例如
show create table student;
快速创建一个表结构
-- 格式
create table 新表 like 旧表;
-- 例如
create table teacher like student;
修改表
新增字段
-- 格式
alter table 表名 add 字段名 字段类型;
-- 例如
alter table teacher add remark varchar(50);
修改字段类型
-- 格式
alter table 表名 modify 字段名 新类型;
-- 例如
alter table teacher modify remark varchar(100);
修改字段名
-- 格式
alter table 表名 change 旧字段 新字段 新类型;
-- 例如
alter table teacher change remark intro varchar(101);
删除字段
-- 格式
alter table 表名 drop 字段名;
-- 例如
alter table teacher drop intro;
修改表字符集
-- 格式
alter table 表名 character set 字符集;
-- 例如
alter table teacher character set gbk;
修改表名
-- 格式
rename table 旧表名 to 新表名;
-- 例如
rename table teacher to th;
删除表
直接删除
-- 格式
drop table 表名;
-- 例如
drop table th;
先判断表是否存在,如果存在删除
-- 格式
drop table if exists 表名;
-- 例如
drop table if exists th;
3.6 DML【重点】
新增记录
插入全部字段
-- 格式
insert into 表名 values(值1,值2...);
-- 例如
insert into student values(1,'tom','1999-12-12');
insert into student values(3,'jack',null);
注意:
除了数值类型外,其他类型插入统统使用字符串,推荐使用单引号
全能插入
-- 格式
insert into 表名(字段1,字段2...)values(值1,值2..);
-- 例如
insert into student(id,name) values(2,'jerry');
蠕虫复制
快速复制另一张表的数据
前提:二个表结构要求字段一致
-- 快速创建一个表结构 与 student 相同
create table stu like student;
-- 蠕虫复制
insert into 新表 select * from 旧表;
insert into stu select * from student;
中文乱码【了解】
dos命令窗口在大陆 GBK编码
查看数据库字符集(编码集)
show variables like '%character%';
临时修改数据库编码集
set names gbk;
修改记录
-- 格式
update 表名 set 字段名=字段值,字段名=字段值 [where 条件];
-- 例如
update stu set birthday = '1998-1-1';[不建议使用]
update stu set birthday = '1988-2-3' where id =4;
删除记录
-- 格式
delete from 表名 [where 条件];
-- 例如
delete from stu; [只能跑路了]
delete from student where name ='tom';
truncate
摧毁表,重建表,与原来表结构相同
-- 格式
truncate table 表名;
-- 例如
truncate table student;
3.7 DQl【掌握】
简单查询
准备数据
-- 创建表
create table student1(
id int,
name varchar(20),
chinese double,
english double,
math double
);
-- 插入记录
insert into student1(id,name,chinese,english,math) values(1,'tom',89,78,90);
insert into student1(id,name,chinese,english,math) values(2,'jack',67,98,56);
insert into student1(id,name,chinese,english,math) values(3,'jerry',87,78,77);
insert into student1(id,name,chinese,english,math) values(4,'lucy',88,98,90);
insert into student1(id,name,chinese,english,math) values(5,'james',82,84,77);
insert into student1(id,name,chinese,english,math) values(6,'jack',55,85,45);
insert into student1(id,name,chinese,english,math) values(7,'tom',89,65,30);
练习
-- 查询表中所有学生的信息
select * from student1;
-- 查询表中所有学生的姓名和对应的语文成绩
select name,chinese from student1;
-- 查询表中学生姓名(去重)
select name from student1;
select distinct name from student1;
select distinct name,chinese from student1;
-- 在所有学生数学分数上加10分特长分【查询结果】
select name,math from student1;
select name ,math+10 from student1;
-- 统计每个学生的总分
select name,chinese+english+math from student1;
-- 使用别名表示学生总分
select name,(chinese+english+math) as 'total' from student1;
-- 表名
select stu1.name from student1 stu1;
distinct
对我们查询结果去重,多个字段所有信息全部相同
-- 格式
select distinct 字段1,字段2 from 表名;
格式
select [distinct] * | 字段 [as] 别名 from 表名 [as] 表别名