数据库:
常用的命令
用户管理
数据库编码处理
搭建环境
选择环境:命令行+数据库服务软件【小皮】
编码:utf8
引擎:lnnoDB
端口:默认3306【不允许修改】
常用的脚本命令
1没有登陆之前
1)查看版本 mysql -V
2)查看帮助 mysql --help或者mysql -?
3)登录
mysql -h IP地址 -P 端口 -u 用户名 -p 密码
说明:-h IP地址:连接到制定ip的数据库
-P 端口:需要连接数据服务对应端口
-u 用户名:需要登录的用户的密码
-p 密码:用户登录数据库的密码
连接到本地端口没有修改:
mysql -uroot -p
远程数据库服务【局域网内】:需要对当前用户设置允许远程操作
mysql -h192.168.4.41 -p3306 -uroot
4)退出登录
exit或者quit
5)修改密码【密码的方式有很多】
登录以后修改自己的密码
set password=password(新密码)
6)查看版本
select version();
7)查看当前用户
select user();或者select current_user();
8)选择数据库
use 数据库名;
9)当前数据库
select database();
10)显示当前数据库的所有的表
show tables;
11)看某一个表的结构
desc 表名字
12)查看权限
show privileges;
13)数据库支持的引擎
show engines;
14)提供了加密工具
select password("");
15)创建数据库
create database 数据库名字
16)删除
drop database 数据库名
17)查看当前用户所拥有的所有数据库
show databases;
用户管理:
1.为什么需要进行用户管理?
数据库本身出现的原因是:管理数据问题-文件操作数据不方便+数据不安全
文件数据操作不方便--数据处理问题---
数据不安全--数据库帮我管理--验证身份【账号和密码】
所以需要用户信息验证--多用户分工管理--用户管理
2.认识mysql数据库的用户
查看所有的用户:脚本命令
select user,host from mysql.user;
3.解释mysql的用户以及数据管理方式
mysql数据库服务提供几个默认的数据库来初始化管理信息
sys--数据库软件服务的一些默认的设置
mysql--数据库提供一个用户,数据库等数据的管理
db表--存储所有的数据库信息
user表用来管理用户信息
4 创建新的用户
语法:
create user 用户名@主机或者IP地址 identified by 密码
说明:
用户名:推荐使用java的标识符命名规则
要求--不能使用中文,
不能太长
不能使用关键字
不要使用数字或者特殊符号开头
最好不要包含特殊符号
主机名和IP地址:表示当前用户可以被哪台主机使用访问
有三种类型的值:
locahost或者127.0.0.1 :
表示当前用户只能被当前数据库服务器所在的电脑设备上的工具登录连接
本地登录访问
% :表示允许除了本地以外的其他设备访问【纠错!!】
192.168.12.2 固定IP
表示只有此IP地址所在的设备可以使用此用户登录当前的数据服务
纠错:
%---任意主机使用当前用户可以连接当前数据库服务
192.168.4.%-----表示198.168.4下面所有的主机可以连接当前的服务
密码:
不能以数字开头
案例:创建一个用户-xp
create user xp@localhost identified by "123456"
create user xp@% identified by "123456"
备注:1)新创建的用户没有任何权限操作资源
2)开始的时候只有root管理员有所有权限
3)不指定主机名或者IP地址的时候 默认%
5. 删除用户
删除用户命令:
drop user 用户名@"主机名或者IP"
只能用有删除权限的用户删除其他用户
6.给用户权限
创建的新用户没有任何的权限--如果想让用户做一些使用--需要权限
mysql提供了哪些权限
所有的权限:管理有的权限
all或者all privileges
数据操作的权限
select 查看
delete 删除
update 修改的权限
insert 添加数据的权限
对数据结构的权限
create 拥有创建表和数据库用户的权限
create user
create database
create table
drop删除表 数据库 用户权限
drop user
drop database
drop table
alter 修改数据的权限 用户 表
alter user
alter table
show:查看显示的权限
查看所有的权限:【privileges】
show grants;
新用户拥有的权限 usage
管理员或者拥有者查看别人权限的用户查看别人拥有的权限
show grants for 用户名@主机名或者IP
7 查看mysql中所有的权限 管理员或者拥有查看权限的用户
show privileges;
8.权限关系
操作的权限命名 数据库表中实际管理权限的命名
select select_priv
create user create_user_priv
9.给用户赋予权限【grant】
语法:
grant 权限1,权限2...on数据库.表名 to用户名@主机名或者IP地址
【whit grant option】
说明:
权限列表:可以同时给用户赋予多个权限,使用逗号分割
数据库名.表名:可以指定哪些数据库或者表可以被当前用户有对应权限操作
所有的表都可以操作:*.*
用户名@主机
【whit grant option】:需要被赋予权限的用户给其他用户赋权
权限最初的拥有者是root管理员,管理员赋予权限的时候没有指定
whit grant option,不允许用于给其他用户赋权。
注意:
mysql 数据中,权限给定不是绝对的,例如如果给了create user,同时开启
alter user drop user
一般使用数据的时候都是不适用默认用户去操作数据,都是创建新的用户按需操作
10.收回权限 revoke
语法:
revoke 权限列表 on 数据库.表名 from 用户名@主机名或者IP地址
语法:
收回所有权限和权限下发
revoke grant option from 用户@主机名
revoke all from 用户@主机名
11.修改用户密码
1)自己修改自己的密码 需要自己登陆
set password=password(‘新密码’);
2)管理员修改其他用户的密码
set password for 用户名@主机名 =password(‘新密码’);
3)既可以修改自己的密码也可以修改别人的密码
update 用户名 set password=password(‘新密码’)where user="用户名"and host=‘主机名或者ip’
4)没有登录修改密码
mysqladmin -u用户名 -p旧密码 password 新密码
12.密码管理【管理员】
编码处理:
1.查看编码
查看当前数据库支持的编码有哪些
show character set;
查看当前MySQL环境的编码
show variables like ‘char%’;
2.修改编码
命令修改:
set 编码名字=编码值
配置文件修改:
windows环境
安装目录【和bin同一目录】下有一个 my.ini 配置文件---MySQL核心配置
有的时候没有这个配置文件:my.medium.ini这个文件
---复制到安装目录,修改名字为my.ini
修改:【client】 【mysql】后面添加或者修改default-character-set=编码
linux环境
配置文件 my.cnf
数据库如何操作数据之SQL语言
1问题---数据库软件
客户端----操作业务---与数据库服务沟通
数据库服务软件---存储和处理数据--后台掩藏运行软件
通过客户端告诉数据库服务应该如何操作?
通过编写指令告诉数据库服务--进行相应的操作
数据操作怎么处理?
也可以通过命令指令--让数据库服务
学习数据库的最终目的:
编程语言获取的数据方便安全的持久化存储
一门语言和一个软件之家如何沟通?
编程语言来说--认识数据--语法+指令
需要数据库提供一套指令或者指令集合来操作数据
数据库提供了两门指令语言
---SQL
---PLSQL【中型数据库到高版本 大型数据库必备】
2.SQL
structured Query language 结构化查询语言
结构化:固定语法写法
查询:重点获取自己想要的数据
语言:
关系型数据库核心
关系数据库很多---每个数据库各自为战---定义基础规范
SQL-92
SQL-1999
SQL-2003
标准的定义---基础通用+协议规范+解析方式
每一个数据可以自己开发一些特殊用于指令
3.SQL包含的内容
SQL语言划分为四大模块语言:
DDL【Data Definition Language】:数据库定义语言
作用:用于操作用户 数据库 表,视图的数据库结构
create【创建】 drop【删除】 alter【修改】
DML【Data Manipilation Language】:数据操作语言
作用:主要用来处理数据库表中的数据
insert【插入】 delete【删除】 update【修改】 select【查询】
注意:select单独分为一类 DQL 【Date Query Language】
DCL【Date Control Language】:数据控制语言
作用:控制数据使用范围,用户权限管理
grant【赋予】 revoke【收回】
TCL 【Transaction Control Language】:事务控制语言
作用:控制操作过程事务【失误】
commit【提交】 rellback【回滚】 savepoint【保存点】
4.学习这四门语言完成数据库业务--数据库结构
5.操作数据之间存储引擎
主要数据库的发动机,用户数据库数据与文件之间转化
因为数据操作数据形式不同,所有与数据库定义了多个存储引擎
常用:innoDB MyisaM Memory
1) 查看数据库支持的存储引擎
show engines;
2)存储引擎之--innoDB
8.0默认存储引擎为innoDB
8.0之前默认是MyisaM
优势:
提供了完整的事务处理机制,有很好的容灾功能
提供了外键支持--多表关联查询
提供了自增操作 auto_increment
缺点:读写数据慢,占用空间大
3)MyisaM
8.0之前默认存储引擎
优点:
将数据表拆分为三块:表结构,数据,索引
存储数据速度快,占用空间小
缺点:
不支持事务处理,不支持并发操作
4)Memory
内存存储处理数据--磁盘上也会有一个临时文件
优点:
速度快,方便
缺点:
数据生命周期短,依赖内存
5. 数据库操作--数据库
1.什么是数据库?
管理数据的最小单元 每一个数据库对应一应用【常规应用】
2.查看数据库
查看当前用户所有的数据库 show databases
查看当前使用的数据库:select database();
进入数据库:use 数据库名;
3.创建数据库
create database 【if not exists】数据库名;
if not exists:如果数据不存在才创建
4.删除数据库
drop database 【if exists】
5.数据表的概念
数据库软件---数据库---数据表
数据库中是以表格的方式进行数据管理
2.数据表的创建
create 【temporary】table【if not exists】表名(
字段名 字段数据类型(长度)约束,
字段名2 字段数据类型(长度)约束,
......
【约束条件定义,主外键】
)【engine=存储引擎】;
备注:
表名:
字段名:就是表格的表头,表示每一列信息的所属
数据类型:用于指定当前字段存储的数据类型
长度:指定当前列存储数据的范围
约束:限制当前列的数据操作,规定当前列中数据哪些是不允许
约束条件:约束除了在字段后面定义,有些约束条件还可以独立定义
比如主外键
存储引擎:可以给每一个表指定存储引擎
A.命名 规范参照java标识符
表名:
tab_实际意义名字或者 _实际意义名字
实际意义的名字:
见其名,知其表中存储的信息的意义,不建议使用拼音,不会百度
字段命名:
表名缩写_有意义的字段名
缩写:一般是取表有意义名字,首字母相同取两位,依次类推
所有的名称小写
B.数据类型
整数类型:
tinyint(len) 1个字节
smallint(len) 2个字节
int或者integer(len) 4字节 一般常用
bigint(len) 8个字节
备注:以上类型范围都是动态的,可以限制
小数类型:
浮点数:
float(m,d) 4字节
double(m,d) 8字节
定点小数:
decimal(m,d)
备注:
(m,d)中m表示数据总位数,d表示保留的小数位数
浮点数:
常见小数,没有给定(m,d),默认值,跟java一样默认长度和小数位数
定点数:
有点类似于java中的bigdecimal,数据库中实际以字符串的方式存储数据
对比:
相同:
都是用来定小数,decimal与double类似
超出小数范围的数据存入,自动四舍五入
不同:
浮点型,数据类型,精度比较容易受影响
定点类型不容易受影响,涉及到精度要求很高的--选择定点decimal类型
一般推荐使用double或者decimal
C.字符串
char(n)0-255个字符 固定长度字符串
varchar(n)0-65535个字符 可变长度字符串
text 0--65535个字符 可变长度文本
tinytext 0-255个字符 可变长度文本
longtext
备注:
固定长度和可变长度
固定长度指的是,定义的长度是多少,开辟的空间就是多少
可变长度,存储的值的长度是多少,开辟的空间就是多少
字符串和文本
文本比字符串更加丰富
字符串--存储的时候,定义的长度是多少,最多只能存储多少个字符
文本--不需要指定长度
一般推荐使用:
字符串:varchar
文本:text
D.时间日期的存储
date yyyy-MM-dd 推荐使用
time hh:mm:ss 推荐使用
datetime yyyy-MM-dd hh:mm:ss
timestamp yyyy-MM-dd hh:mm:ss.毫秒 推荐使用
year yyyy或者yy
E:字节数据的存储
blob 0-65535字节
longblob 2^32-1
F.枚举类型
enum(元素1,元素2,元素3)
限制当前字段能存放的数据,不写,默认是第一个值
set(元素1,元素2)
G.json 数据
5.7版本以后,支持存储json字符串数据
联系:创建表存储数据
创建testtype_int
_testtype_double
_testtype_string
_testtype_
查看表中的数据
select*from表名
查看表的结构
desc +表名
添加数据
insert into 表名(字段1,字段2....)values(值1,值2....)
数据库的表格数据约束
1.非空约束 not null
字段名 类型(长度)约束
解释:当字段添加非空约束的时候,当前字段就不允许插入null值
如果插入null会报错
2.默认default
解释,如果没有给次字段添加数据,默认自动添加默认值
字段名 类型(长度)default 默认值
3.检查 check ---
解释:检测你传入的值是否在给定的范围
mysql不支持 使用enum和set使用
4.唯一 unique
解释:一旦字段被定义成唯一约束,表示当前字段的值不能重复,可以为null
语法:
字段添加:字段名 类型(长度)unique
独立添加:
【constraint】约束名【索引】 unique(字段名)
因为标注的数据列是唯一的,所以方便与查询,数据库系统自动对该字段建立索引 Btree 【二叉树】
如果没有给唯一索引起名字,默认约束创建的索引名字是字段名,可以自己给索引起名字
查看对应表的索引语法;
show index from 表名;
5.主键约束 primary key
解释:相当于 unique + not null 但是高于
主键约束的字段 唯一且不为空 【null在数据库中表示无穷的意思,无法比较】
主键才是替代unique来进行准确地数据查询
主键约束分类
单主键地方式,一个表中只有一列拿出来作为主键,方便唯一查询
联合主键的方式:
一个表中有多个字段来表示一条数据唯一 不为空 是unique做不到
例如:
uname 【primary key】 upassw【primary key】
张三 123
张三 1234
李四 123
创建方式:
字段:字段名 类型(长度)primary key
独立:constraint 约束名 primary key(字段1,字段2.....)
备注:每一个表只能创建一个主键 只能用一次 primary key
联合主键唯一方式:
主键字段1-主键字段2-主键字段2....的值是唯一的
联合主键比较耗费资源--尽量不用,除非必须使用
6.外键约束 froeign key
解释:主要用来多个表之间建立联系
外键一般关联另外一个表的主键
外键与被关联的主键定义一致,依赖于被关联的主键存在
定义语法:
【constraint】 外键的名字 foreign key(字段名)references 关联的表 (主键字段)
编写案例:
学生和成绩的关联
学生表
学号 名字
成绩表
编号 学生学号 成绩 科目
注意:一旦两个表发生了主外键关联,外键字段的值必须是关联的主键字段中有得才行
7.自增约束 auto_increment
解释:当字段名被定义了自增约束,当前字段的数据就会自动增长,一般用表格数据的主键编号
语法:
字段名 类型(长度)auto_increment
8.删除表的操作
语法:drop table [if exists]表1,表2.....
9.修改表 alter
1)查看数据表创建语法
show create table 表名;
2)修改数据库表名:
alter table 原来的表名 rename to 新的表名
rename table 原来的表名 to 新的表名
3)添加信息
添加字段:
alter table 表名 add column 字段,名 类型(长度)【约束】【first|after】
添加约束和索引等 独立添加
alter table 表名 add primary key(字段)|foreign key(字段)references表名(字段)|unique(字段)
4.删除信息
删除约束:
alter table 表名 drop column 字段名/约束名
删除主键
alter table 表名 drop primary key;
删除外键
alter table 表名 drop FOREIGN KEY 外键名字
删除索引
alter table 表名 drop index 索引名;
删除字段
alter table 表名 drop column 字段名
5)修改字段信息
alter table表名MODIFY [COLUMN]列名新类型(长度)[FIRST |AFTER col_name]
alter table表名CHANGE [COLUMN]旧的列名―新的列名﹐【类型】【约束】[FIRST |AFTER
col_name]
数据处理---DML
1 dml 语言数据处理
将数据添加到表格 从表格移除 修改数据 从表格获取数据查看
2.创建数据库 创建表
3.表中添加数据的语法 要叫插入数据 关键字 insert
语法1:
insert into 表名(字段1,字段2.....)values(值1,值2....)
备注:字段需要和值一一对应,个数和顺序对应,每插入一条数据就表示
在表格中添加一行数据,如果我们是给表中所有字段添加数据,表名后面的字段列表可以省略
默认的字段个数就是表中所有的字段,顺序按照添加字段或者创建时的表
可简写:insert into 表名 values(值1,值2....)
语法2:
insert into 表名(字段1,字段2.....)values(值1,值2....),(值1,值2....),(值1,值2....)
语法3:
insert into 表名(字段1,字段2) select 字段1,字段2....from 存在的表名
4.删除数据delete
delete from 表名 【where 条件】
备注 如果不加【where 条件】表示删除所有的数据
截段表:
truncate table 表名;
delete和truncate区别;
delete只是删除的表中的数据,表中的一些特殊设置结构没有改变,比如自增
truncate ,截断表
修改数据
语法:
update 表名 set 字段=新的值,字段2=新的值2 where 条件判断
使用dql语言 ---select 关键字 查询
1.投影查询
解释:根据给定的字段获取所有的值
语法:
select 字段/表达式/函数【from 表名】
分类:
(1)表达式运算查询 查询过程可以参与运算
select 运算表达式【from 表名字】
(2)起别名
运算表达式结果字段重命名
select 表达式【as】别名 【from 表名字 【as】别名】
投影查询之--函数查询
MySQL经常做的一些操作编写出来--封装起来--函数
提供了很多的功能函数分为两类
单值函数【一个或者零个参数进,一个结果返回】
数学函数
字符串函数
日期函数
条件函数
信息函数和加密函数
其他函数
多值函数,也叫聚合函数 【0个或者多个参数进,一个结果出】