一、数据库的概念
1.数据库:组织、管理、存储数据的仓库
2.数据库的管理系统(DBMS):实现对数据有效组织,管理和存储的系统软件。
3.关系型数据库和非关系性数据库:
关系型数据库:mysql oracle postgresql,关系型数据库是一张二维的表格,表里面有行和列,行记录的是对象的信息和字段的属性,列记录的是对象和字段,行+列就组成一张表。只有关系型数据库才有表
非关系型数据库:缓存型数据库redis、索引型数据库ES,文档型数据库MongoDB
4.关系型数据库和非关系型数据库的优缺点:
关系型数据库的优点:表的结构清晰,逻辑容易整理,记录的数据比较完整。
缺点:读写速度比较慢,并发量差(同时的并发访问支持度不高),数据迁移比较麻烦。
非关系型数据库的优点:支持高并发读写,对海量数据依旧可以保持高效率的存储和访问,架构可扩展。
缺点:键值对形式存储,数据扩展及比较复杂,数据是保存在缓存(内存)当中(redis),如果意外重启所有数据都会丢失。
5.mysql的数据类型:
char:固定长度的字符类型,用于存储固定长度的字符串;,一旦定义好了长度之后,不论你写的值是多少,都会使用固定长度的字节大小,它们保存在磁盘之上都是4字节。
varchar:存储的是可变长度的字符类型,保存字符串时,是多少占多少,但是在保存的字符串结尾默认有一个隐藏的字符串,会多占一个字节。
varchar和char的区别:varchar比char要节约磁盘空间;读写速度char的读写性能高于varchar,char是保存的内容是连续的;varchar在增删改查之后,会产生一个磁盘空间的碎片文件,影响读写性能。
int:存储的数据类型为整数
float:浮点数,小数点
float(m,d):m表示总位数,d表示小数位数
double:双精度浮点数
double(m,d):m表示总位数,d表示小数位数
date:用于存储日期,YYY-MM-DD
datetime:用来存储日志和时间,格式YYY-MMM-DD HH:MM:SS
timestamp:和datetime类似,但是他可以自动记录当前时间
smallinit:存储小整数
bigint:存储大整数
decimal(5,2):存储精度的浮点数
6.数据库管理:一条数据库的语句是连贯的,以分号为结尾表示一条完整的sql语句;但是太长了,不方便阅读和理解,我们可以对一条语句进行分行的写法;关键词不能跨行。
增删改查:sql语句
sql中的名词:数据库叫database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
存储函数:funcrion
调度器:exent
sql的语言规范:在数据库系统中,sql语句不区分大小写;sql语句可以单行也可以多行,但是必须要以分号结尾。
sql的命名规范:库名,表名,列名,都是必须以字母开头,后面可以有数字及特殊符号,但不要使用mysql的命令;库名,表名,用户名严格区分大小写。
sql语言的分类:
DDL:数据库定义语言,创建数据库的对象语言,库,表,列和索引等等 create(创建) drop(删除)alter(改)
DML:数据库操作语言,对表里面的数据进行管理 select update insert delete
DQL:数据库查询语言,数据库的查询语句 select
DCL:数据控制语言,控制和管理数据库用户的角色和权限 grant revoke
TCL:事务控制语言:用来管理数据库的事务,脚本开发及存储过程 commit rollback
7.如何创建库和表的语句
创建库:create database test;
创建表:一条数据库的语句是连贯的,以分号为结尾表示一条完整的sql,但是太长,不方便阅读和理解,我们可以对一条语句进行分行的写法,关键词不能跨行。
查看表的属性
纵向展示表名:只能在虚拟机操作,在
删除库
删除表
8.DML管理语句:
insert:插入数据的两种方法
insert into 表名(字段1,字段2,字段3) values(1,2,3);
insert into 表名 valuse (1,2,3);
insert :插入时间类型的两种方法
null和空值之间的区别:
wc这个表哪列的score值为null
对已有数据修改和更改:
update 表名 set 列名=值 where 条件;
删除表的数据
delete from 表名 where 条件;
9.DQL查询语句:
查看指定列的值
查看指定行
去重查询
10.where语句:条件的筛选
查询id为7的行
查询id为5且score为5.55的行
查询id为5或者score为6.66的行
模糊查询:like
11.alter 修改表名和修改表结构
给表添加一个列:一定要加数据类型char或varchar
修改字段的数据类型:
删除列:把address这列删除
修改列的名称
12.约束条件:
主键约束:primary key 用于标识表中的主键列的值,而且这个值是全表当中唯一的,而且值不能为null,一个表中只能有一个主键。
创建主键的第一种方式:
创建主键的第二种方式:
创建外键:用来建立表于表之间的关系,确保外键中的值于另一个表的主键值匹配,保证数据引用的完整性,多表联查,不要超过三张表,会降低查询效率。
删除主键和外键:
非空约束:保证列中的值不含null值。
唯一性约束(unique key):确保列中的所有值都是唯一的,类似主键,但是一个表可以有多个唯一约束。
自增约束,在列生成的每一行都会自动生成一个唯一标识符,通常和主键一起使用,每次插入新行是,自增列的值会自动增加。
复制表:两种方法
创建临时表:刷新表看不到表名,重启后直接失效
清空表:删除表内内容但是保留表和表结构
二、增删改查日测题(上机实操)
1、创建库,库名 country
2、创建表,表名 province和city 要求如下:
1)、province包含字段:
ct_id为区号,最多四位 主键;
ct_name 城市名 最长5位,不能为空,不能重复
ct_scale 城市规模,可重复,不能为空。
2)、city包含字段
c_id 主键
c_street 不能为空,不能重复。
c_subway int 不能重复 可以为空
c_weather 字符串 可以空 默认值:晴
3)通过修改表city,创建外键关联province的主键,ct_id。
分别插入5条数据,任选。不限制
展示表1的前两行,展示表2的2-4行
有重复数据,去重查询。
修改表city,将c_weather的默认值改为:不详
三、数据库的用户管理
1.创建普通用户:create user
create user 'wc'@'192.168.127.10';
wc表示用户名
192.168.127.10表示新建的用户wc可以在哪些主机上登录,既可以使用IP地址,也可以使用网段,也可以使用主机名。
'wc'@'192.168.127.10' 指定ip登录
'wc'@'192.168.127.0/24' 指定网段登录
'wc'@'%' 百分号表示所有,可以从任何设备登录
查看mysql库中的user表的内容:select * from user;
user:用户名,Host:可以登录的主机,local host指的是本地登录,%:任意主机(IP地址);权限上local host大于"%"的权限。
2.设置用户权限:grant all privileges on *.* to 'wc'@'192.168.127.80' identified by '1234560';
grant all privileges 赋予用户所有权限(增删改查)
on *.* 对所有库及所有表都有操作权限(左边的*代表库,右边的*代表库里的表)
如 on test.* 表示只能对指定的test库进行操作
to 'wc'@'192.168.127.80' 赋权给wc这个用户及登录的主机
3.查看已有用户的权限:
4.取消用户权限:
5.只给用户指定库查的权限
6.给用户添加多个权限
7.删除用户的多个权限
8.删除用户
9. 创建用户并给予密码:
identified by '123456' 使用哪个密码进行登录
10.忘记密码如何免密登录:vim /etc/my.cnf