目录
1. pre
Java EE:企业级Java开发 Web
前端:页面展示,数据
后端:连接数据库
数据库:存数据
1.1 什么是数据库
数据库:Database---->DB
概念:数据仓库,软件
作用:存储数据,管理数据
1.2 数据库分类
关系型数据库:(SQL)
- MySQL,
- 通过表与表之间,行与行之间的关系进行数据的存储
非关系型数据库:(NoSQL)
- Redis
- 非关系型数据库,对象存储,通过对象的自身属性决定
DBMS(数据库管理系系统)
- 数据库的管理软件,管理和操作数据
- MySQL---->数据库管理系统
1.3 MySQL的安装与使用
-
启动mysql:
net start mysql57
终止mysql:
net stop mysql57
-
进入masql:
mysql -u root -p
然后输入密码 或
mysql -u root -p(+密码)
1.4 创建数据库
基字符集:utf8
数据库排列规则:utf8_general_ci
注:
utf8_general_ci----->不区分大小写
utf8_bin------>区分大小写
1.5 连接数据库
mysql -u root -p123456 -- 连接数据库
--------------------------------------
-- 所有语句都用;结尾
show databases; -- 查看所有的数据库
use school -- 切换数据库use数据库名
Databases changed -- 若显示,则切换成功
show tables; -- 查看数据库中所有的表
describe students; -- 显示数据库中所有的表的信息
create database westos; -- 创建一个数据库
exit; -- 推出连接
-- 单行注释
/*
多行注释
*/
数据库xxx语言
DDL 定义
DML 操作
DQL 查询
DCL 控制
2. 操作数据库
2.1 操作数据库
- 创建数据库
create database[if not exists] westos;
- 删除数据库
drop database[if exists] westos;
- 使用数据库
-- 如果表名或或字段名是一个特殊字段,需要带``
use `school`
- 查看数据库
show databases --查看所有的数据库
2.2 列的数据类型
2.3 数据库的字段属性*
主键
- 唯一标识符,不能重复
Unsigned
- 无符号的函数
- 声明后该列不能为负数
zerofil
- 0填充的
- 不足的位数,用0来填充
自增
- 通常理解为自增,自动在上一条记录的基础上 +1
- 通常用来设计唯一的主键~ index,必须是整数类型
- 可以自定义设计主键自增的起始值和步长
非空
- 假设设置为 not null,如果不给其赋值,就会报错
- NULL,如果不填写,默认值是null
默认
- 设置默认的值
- eg. 默认值是男,若不指定该列的值,则会有默认的值
-- 每个表都必须存在的五个字段
id -- 主键
`version` -- 乐观锁
is_delete -- 伪删除
gmt_create -- 创建时间
gmt_updata -- 修改时间
2.4 创建数据库表*
-- 表的名称和字段尽量用``括起来
-- auto_increment 自增
-- 字符串用单引号括起来
-- 所有的语句后面加,(英文),除了最后一句
--primary key 主键,一般一个表只有唯一的主键
CREATE TABLE IF NOT EXISTS `menbers` (
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(10) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`psw` INT(10) NOT NULL DEFAULT '123456' COMMENT'密码',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
格式
create table if not exists `表名` (
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
......
`字段名` 列类型 [属性] [索引] [注释],
primary key(`id`)
)[表类型] [字符集设置] [注释]
2.5 数据表的类型——MyISAM和InnoDB
常用命令
show create database school -- 查看创建数据库的语句
show create table student -- 查看student数据表的定义的语句
desc student -- 显示表的结构
数据表的类型
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大 |
- 常规使用
- MYISAM 节约空间,速度较快
- INNODB 安全性高,事务的处理,多表多用户操作
MySQL引擎在物理文件上的区别
- InnoDB在数据库表中只有
.frm
文件,以及上级目录下的ibdata
文件 - MYISAM对应的文件
.frm
表结构的定义文件.MYD
数据文件 (data).MYI
索引文件(index)
设置数据库表的字符集编码
charset=utf8
默认编码:Latin1
------不支持中文
在my.ini中配置:
character-set-server=utf8
2.6修改、删除 命令
-
修改
-- 重命名 alt table 表名 rename as 新表名; -- 增加表的字段 alt table 表名 add 字段 [列类型]; -------------------------------------------------------------------------------------- -- 重新定义字段类型 alt table 表名 modify 字段 新类型; -- 修改表中的字段 alt table 表名 change 旧表名 新表名 [类型]; -------------------------------------------------------------------------------------- -- 删除表中的字段 alt table 表名 drop 字段;
-
删除
-- 删除表 drop table if exist 表名;
3、MySQL数据管理
3.1 外键
3.2 DML语言
数据库:存储数据,管理数据
DML语言:数据操作语言
- insert
- updata
- delete
3.3 insert-----添加
-- 写插入语句时,字段与值一一对应
INSERT INTO `student`(`name`) VALUES ('张三')
INSERT INTO `student`(`name`,`sex`,`psw`,`age`) VALUES ('ketty','女','123456','12')
-- 插入多个字段
INSERT INTO `student`(`name`,`sex`,`psw`,`age`)
VALUES ('ally','女','123456','12'),('lily','女','123456','10')
INSERT INTO `student`
VALUES (6,'carry','女','123456','10','111111','dkjncjdkmckd')
语法:insert into 表名(字段1,字段2,字段3,字段4) values('值1','值2','值3','值4')
注:
-
字段与字段之间用英文逗号
,
隔开INSERT INTO `student`(`name`,`sex`,`psw`,`age`) VALUES ('ketty','女','123456','12')
-
字段可以省略,但后面的值必须一一对应
INSERT INTO `student` VALUES (6,'carry','女','123456','10','111111','dkjncjdkmckd')
-
可以同时插入多条数据,
values
后的值必须用,
隔开INSERT INTO `student`(`name`,`sex`,`psw`,`age`) VALUES ('ally','女','123456','12'),('lily','女','123456','10')
3.4 updata-----修改
-- 修改内容,指定位置
UPDATE `members` SET `name`='Alice' WHERE id=4
-- 不指定条件时,会改变所有的表
UPDATE `members` SET `name`='Alice'
-- 修改内容。指定范围
UPDATE `members` SET `email`=NULL WHERE id BETWEEN 1 AND 3
-- 修改多个属性,英文逗号隔开
UPDATE `members` SET `name`='Ally',`psw`='100000',`sex`='male',`email`='98340@qq.com' WHERE id=7
语法:update 表名 set column_name=value,where [条件]
操作符 | 含义 | 范围 | 结果 |
---|---|---|---|
= | 等于 | ||
<>/!= | 不等于 | ||
> | |||
< | |||
>= | |||
<= | |||
between A and B | [A,B] | ||
and | 5>1 or 1>2 | false | |
or | 5>1 or 1>2 | true |
注:
column_name
是数据库的列,尽量带反引``号
- 如果没有指明条件,则会修改所有的列
values
可以是具体的值,或一个变量- 设置的多个属性之间,用英文
,
隔开
3.5 delete-----删除
-
delete
-- 不会影响自增 delete from members
-
truncate
-- 自增会归零,不会影响事务 truncate table members
4. DQL 查询数据🔺🔺🔺
4.1 DQL(核心)
Data Query Language——数据查询语言
-- 查询全部 select 字段 from 表名
select * from student
-- 查询指定字段
select `字段名`,`字段名` from 表名
-- 查询指定字段并将字段命名为
select `字段名` as 新名,`字段名` as 新名 from 表名 as 新名
-- 函数 concat(a,b)
select concat('姓名:',字段名) as 新名字 from 表名
4.2 去重&&数据库的表达式
- 去重
-- 去重distinct
select distint `字段名` from 表名
- 数据库的列(表达式)
-- 查询系统版本
select version()
-- 计算(表达式)
select 表达式 as 新的字段名
-- 查询自增的步长(变量)
select @@auto_increment
4.3 where子句之逻辑运算符
作用:检索数据中符合条件的值
搜索条件由一个或多个表达式组成
select `字段名`,`字段名` from 表名
where 限制条件
- 逻辑运算符
运算符 | 语法 | 描述 |
---|---|---|
and && | a and b / a&&b | |
or || | a or b / a||b | |
not ! | not a / !b |
4.4 模糊查询
- 模糊查询
运算符 | 语法 | 描述 |
---|---|---|
is null | a is null | a为空,结果为真 |
is not null | a is not null | a不为空,结果为真 |
between…and… | a between b and c | a在b,c之间 |
like | alike b% // a like b_ // a like b_ _ // a like %b% | |
in | in(a,b,c…) |
-- 查询email非空的
select `id`,`name` from `members`
where email is not null
-- 查询名字中有A
select `id`,`name` from `members`
where `name` like 'A%'
-- 查询名字中有A且共2字
select `id`,`name` from `members`
where `name` like 'A_'
-- 查询名字中有A且共3字
select `id`,`name` from `members`
where `name` like 'A_ _'
-- 查询名字中有A且在中间
select `id`,`name` from `members`
where `name` like '%A%'