数据库管理
数据库运维
sql语句 数据库用来怎删改查的语句*
备份 数据库的数据进行备份*
主从复制,读写分离 高可用。*
数据库的概念和相关的语法规范
数据库:组织、存储、管理数据的仓库。
数据库的管理系统(DBMS):实现对数据有效组织,管理和存取的系统软件
mysql
oracle:大数据系统一般使用
sql-server
MariaDB 也是mysql mysqld
postgreSQL 大象数据
关系型数据库和非关系型数据库
mysql oracle postgreSQL
关系型数据存储的结构:是一张二维的表格,表里有行和列
列是对象,字段
行:对象的信息,字段的属性
行+列组成一张表。
非关系型数据库:缓存型数据库:redis
索引型数据库:ES
文档型数据库:MongoDB
键值对形式存储的结构
key value
test1=3
关系型数据库和非关系型数据库的优缺点:
关系型的优点:表的结构清晰,逻辑容易整理,记录的数据比较完整
缺点:读写速度比较慢,并发量查,数据迁移比较麻烦。
非关系数据库优点:高并发读写,对海量的数据依旧可以保持高效率的存储和访问,架构可扩展。
缺点:键值对形式存储,数据逻辑比较复杂,数据都是保存在缓存当中(内存)当中(redis),如果意外重启所有数据都会丢失。
mysql的数据类型:
char:固定长度的字符串类型,用于存储固定长度的字符串
varchar:可变长度的字符串类型,存储的是可变长度的字符串
char定义好了长度之后,不论你写的值是多少,都会占用固定长度的字节大小,保存在磁盘上都是4字节
varchar在保存字符串时,多少就保存多少,在保存的字符串结尾默认有一个隐藏的结束符,会多占一个字节
varchar比char要节约磁盘空间
读写速度:char的读写速度性能要高于varchar char是连续的磁盘空间,保存的内容是连续的
varchar在增删改查之后,会产生一个磁盘空间的碎片文件,影响读写性能
init 存储的数据类型为整数
floal:浮点数,小数点 float(m,d):m表示总位数,d表示小数位数
double:双精度浮点数 double(m,d)m表示总位数,d表示小数位数
date:用于存储时间,YYYY-MM-DD
datetime 用来存储日志和时间,格式YYYY-MMM-DD HH:MM:SS
timestamp:和达特time类似,但是他可以自动记录当前时间
smalinit:存储小整数
bigint:存储大整数
decimal(5,2):存储浮点,存储精度的浮点数,5表示总位数,2表示小位数
数据库的管理:
增删改查---------sql语句
sql中的名词:
数据库:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
存储函数:funcrion
调度器:exent
sql的语言规范
在数据库系统中,sql语句不区分大小写,但是建议大写
sql语句可以分为单行和多行,但是必须要以“;”结尾
命令规范:库名,表名,列的名字,都必须以字母开头,后面可以数字,后面也可以跟上特殊符号
不要使用mysql的保留字,table select show databases
数据库名,表名,用户严格区分大小写
sql语言的分类:
1、DDL 数据库定义的语言:创建数据库的对象语言,库,表和索引等等
create drop
2、DML:数据库操作语言,对表里数据进行管理
select update insert dalete
3、DQL:数据库查询语言,数据库的查询语句
select
4、DCL数据控制语言,控制和管理数据用户的角色和权限
grant revoke
5、tcl 事务控制语句,用来管理的数据库的事务,脚本开发,存储过程等等
commit rollback savepoint
DDL:创建库和表的语句
创建完刷新一下
create database xy102; F5 刷新
创建表的格式需要注意哪些
一条数据库的语句是连贯的,已分号为结尾表示一条完整的sql但是写法太长了,不方便阅读和理解,我们可以对一条语句进行分行的写法
关键词不能跨行
create table student ( id int (4) not null, name char (10) not null, score decimal (5,2) )
查看属性
key:表示是否是主键或者是外键
default:如果没有数据的默认展示结果
extra:提供列的附加信息,自增长等等
删除表和库
drop database 库名 drop tables 表名
DML和DQL 管理语句和查询语句
DML
insert 插入数据
insert into 表名 (字段1,字段2,字段3)values(字段1的值、2的值、3的值)
字符串要用单引号引起来
select * from student;查看
第二种方法
insert into student values(3,'张三',90.1);
desc student
null和空值之间的区别
null就是啥也没有,就是为空
空值也是值,只是值为空
select * from student where name is null 筛选的值 查数据
修改和更新
是对已有的数据进行修改和更新
update语法
update 表名 set 列名=值 where 条件 update student set score=90.1 where id=3;
时间
实时插入时间
自动插入
自动插入当前时间
delete 删除表的数据
语法:delete from 表名 where
DQL语句,查询语句
select 查询内容,查询内容 fron student;
select score from student;
select name,score from student;
查看指定行
limit
select * from student limit 2,3; 显示第二行后面三行
显示1到第三行
去重查询
select distinct name from student;
名称去重查询
where 语句 条件的筛选
select * from student where id =7 add score=71;
and 表示且
or 表示或
模糊查询
like
以什么为开头
select * from student where name like '顾%';
以什么为结尾
包含内容即可
alter
通常用于修改数据库中的结构或对象,例如表(table)的定义或其他数据库对象的属性。主要用途包括:修改表结构,修改索引,修改视图,修改数据库对象的其他属性
修改表名和表结构
alter table student rename stu01
给表添加一个列
alter table stu01 add address varchar(50) default '地址不详'; 表 stu01 将会有一个新的 address 列,如果新插入的数据行没有为 address 列指定值,则默认为 '地址不详'
修改字段的数据类型;
alter table city stu01 modify column address char(10);
删除列
alter table stu01 drop address;
修改列的名称
alter table stu01 change name user_name char(10); 数据类型一定要加
数据库的增删改查
查
约束条件和用户管理
删
主键
主键约束 primary key
用于标识表中的主键列的值,而且这个值是全表当中唯一的,而且值不能为null
一个表只能有一个主键。
设置主键
第一种
第二种方法
插入数据 id不能重复 不然会报错
外键
外键:用来建立表与表之间的关系。确保外键中的值与另一个表的主键值匹配,保证数据引用的完整性
多表联查,不要超过三张,找过三张,会降低查询速度。
非空约束;保证列中的值不含null值
唯一性约束:确保列中的所有值都是唯一的,类似主键,但是一个表可以有很多个唯一约束,
自增约束,在列生成的每一行都会自动生成一个唯一标识符,通常和主键一起使用,每次插入新行时,自增列的值会自动增加
唯一性约束
唯一约束可以有好多个 但是不能为空
自增约束
两种方式添加
终端可以查看
表与表的关系 要用唯一性进行关联
create table if not exists student ( crad_id int(5) primary key auto_increment, stu_name char(10) not null, stu_email varchar(128) not null unique key ); create table class ( stu_id int(11) zerofill primary key auto_increment, address varchar(128) default '地址不详', crad_id int(5) not null, foreign key (crad_id) references student (crad_id) );
连接主键
删除表
删除索引的名称
show create table 表名 查看表的详细信息
总结
复制表
create table 新表名 like 表名
create table stu_01 like student 复制新库 insert into stu_01 select * from student;把数据导入 create table stu_02 (select * from student);
临时表
临时表
清空表*
drop 删除表
delete from 表名;:一行一行的清空表数据,速度比较慢,如果有自增长字段,delete清空之后,会继续按照原来的序号,继续递增
truncate table 表名;:清空表保留表结构,但是清空之后原有的记录全部抹去,自增长也将重头开始,速度比较快
数据库的用户管理
创建用户
设置用户权限
取消权限
mysql -u root -p123456
进到mysql库然后查询
创建用户
crant user ''@'ip地址'; 创建用户 grant all privileges on *.*to ''@'' identified by '123456' all 给于所有权限 远程登录 数据库的操作权限(增删改查) *.*:*表示库 *:库里的表 identified by '123456':就是创建密码
设置用户权限
查看用户权限 show grants for '用户'@'ip'; 移除权限 revoke all privileges on *.* from ''@'ip' 更改完刷新flush privileges grant select on xy102.* to '用户'@'ip' 每次更改完毕要退出在进入 添加权限 grant insert,update,alter,delete on xy102.* to '用户'@'ip' 更改完刷新flush privileges 退出重连一下
取消权限
revoke insert,update,alter,delete on xy102.* from'用户'@'ip'
删除用户
drop user '用户'@'ip'
创建用户加密码
mysql 本地的免密登录
etc/my.cnf
重启数据库
即可实现免密登录
show grants for '用户'@'ip地址'
show grants for ‘用户’@‘’
实验
1、创建库,库名 country
create database
2、创建表,表名 province和city 要求如下:
1)、province包含字段:
ct_id为区号,最多四位 主键;
ct_name 城市名 最长5位,不能为空,不能重复
ct_scale 城市规模,可重复,不能为空。
2)、city包含字段
c_id 主键
c_street 不能为空,不能重复。
c_subway int 不能重复 可以为空
c_weather 字符串 可以空 默认值:晴
通过修改表city,创建外键关联province的主键,ct_id。
分别插入5条数据,任选。不限制
展示表1的前两行,展示表2的2-4行
有重复数据,去重查询。
修改表city,将c_weather的默认值改为:不详
操作
先创建两个表
先创建表 create table province ( ct_id int (4) primary key, ct_name varchar (5) not null unique key, ct_scale varchar (10) not null ) create table city( c_id int(4) primary key, c_street varchar(8) not null unique key, c_subway int (8) unique key, c_weather varchar (8) default '晴' ); alter table city add column ct_id int(4); 在city表中新添加一个类型 创建外键关联province的主键 ctid alter table city add constraint foreign key (ct_id) references province (ct_id); 分别插入5条数据,任选。不限制 insert into city values (2,2,2,2,2); insert into province values (1,'南京','雨'); select * from province limit 0,2; 查看行 select * from city limit 1,3; 修改 alter table city modify c_weather varchar(50) default '不详';