1、数据库的分类
mysql:关系型数据库
redis:非关系型数据库
关系型数据库:存储数据的结构是一个二维表格
表:行 列
行:记录,用来描述一个对象的信息
列:字段,用来描述对象的一个属性
2、常见的关系型数据库
mysql(中小类型的数据并发请求)
oracle(大数据量):对事务控制能力较强。事务生效需要提交
关系型数据库:表里的数据是关联的,表与表之间的数据也是关联的
非关系型数据库:保存数据不是一张二维表,以键值对来保存数据,key→value
既然有关联,查询速度相对来说,关系型数据库查询速度更慢一些,非关系型数据库可以支持高并发读写,对海量数据依旧保持着高效率的存储和访问
(重点)多表关联,最多可以关联几张表?
最多3张表(太多表查询时间较长,降低数据库查询读写性能)
3、事务
(1)事务定义
在数据库中指的是由一个或多个操作组成的数据操作的序列,这些操作要么全部成功,要么失败一个全部不执行,确保数据一致性和完整性
(2)事务特点
①原子性:数据库的最小工作单元,要么全部执行成功,要么全部不执行。只要有一个操作失败,整个执行序列都会被回滚,即便是完成的操作也会被撤销
②一致性:事务执行前后,数据库的完整性约束不能被破坏。只有满足所有的约束条件情况下,事务才能被提交
③隔离性:事务的执行是相互隔离的,一个事务的执行不能受到其他执行事务的干扰,并发事务之间互相隔离。防止数据不一致
④持久性:事务一旦提交,它所做的所有修改会永久的保存在数据库中。即便系统崩溃,提交的数据也不会丢失
4、mysql名词
①数据库database
②表table 行row 列column
③索引index
④视图view
⑤存储过程procedure
⑥触发器trigger
⑦用户user
⑧权限privilege
5、mysql语句规范
①在数据库系统中,sql不区分大小写,但建议大写。语句不区分,表名严格区分大小写
②sql语句可以单行书写,也可以多行书写,默认以;结尾
换行规则:关键词不能跨行或简写
③子语句通常位于独立行,可以便于编辑,且提高可读性
④字符串只能支持单引号
6、mysql命名规则
①必须以字母开头,后面可以包含数字,只支持三个特殊符号#_$,不要使用mysql的保留字来命名数据库,例如table、select等
②数据库名、表名、用户名严格区分大小写
7、mysql的常用字符类型
①int:整数类型。占4个字节,范围很大
②char:固定长度的字符串类型。长度可以小于等于此长度
③varchar:可变长度的字符串类型。存储可变长度的字符串(有限制的长度,根据类型设定的长度)
④float:单精度浮点数类型
float (m,d)——m表示总位数,d表示小数位
⑤double:双精度浮点数类型
double (m,d)——m表示总位数,d表示小数位
⑥decimal:固定精度的小数类型
decimal (m,d)——m表示总位数,d表示小数位
float、double、decimal都是浮点数,没什么大区别
⑦text:文本类型。存储大文本数据,例如文档或者长字符串
⑧image:图像类型。二进制存储图像,例如图片,多媒体
⑨date:日期类型
格式:yyyy-mm-dd(年-月-日)
⑪datetime:日期类型
格式:YYYY-MM-DD HH:MM:SS(年-月-日 时:分:秒)
⑫timestamp:日期类型。可以自动更新为当前的时间戳
格式:YYYY-MM-DD HH:MM:SS(年-月-日 时:分:秒)
char和varchar的区别:
char无论是否定义了值都会占用固定长度的字节大小4个
varchar定义了长度14,实际占用5个,加一个隐藏符,占6个字节数
举例 | char所占字节数 | varchar所占字节数 |
‘ ’ | 4 | 1 |
‘ab’ | 4 | 变成‘ab ’ 3 |
‘abcd’ | 4 | 变成‘abcd ’ 5 |
优点 | 读写速度快 | 节省磁盘空间 |
都是字符串类型,一定要用单引号 |
8、sql语句分类(重点)
(1)DDL:数据定义语言,用于创建数据库的对象,例如库、表、索引——对表的结构操作
CREATE创建 DROP删除 ALTER修改
(2)DML:数据操作语言,对表中的数据进行管理——对表的内容操作
select查询 update更新 insert添加 delete删除
(3)DQL:查询数据记录(重点)
(4)DCL:数据控制语言,设置或更改数据库用户或者用户的权限
GRANT赋权 REVOKE取消权限
TCL事务控制语句,管理数据库中的事务
commit确认提交事务,一旦提交无法回滚ROLLBACK
savepoint有保存点可以回滚
alter和update的区别:
alter用来修改基本表,是对表的结构进行操作,比如对字段增加,删除,修改类型
update用来修改表中的数据,修改某一行某一列的值
新建 | 创建表create table yyy (id int(6) not null,name varchar(20) not null,sccore decimal(3,1),passwd char(4),primary key(id)); |
增 | 插入表内容insert into yyy values(1,'郭三',60,'1234'); |
给用户密码加密 update yyy set passwd=password('0000') where id = 3; insert into yyy values(5,'咩咩',99.9,password('1234')); | |
删 | 删除表中的内容行delete from yyy where id = 2; |
清空表中内容truncate table yyy; | |
删除表中的列 alter table yyy drop column birthday; | |
改 | 修改表名alter table yyy rename sss; |
修改表的结构alter table yyy add birth date; | |
修改列名alter table yyy change birth birthday date; | |
修改表的字符串类型alter table yyy modify column name char(30); 给已存在用户设置生日update yyy set birthday=date('2000-10-10') where id = 5; | |
查 | 指定唯一条件查询表select * from yyy where id = 3; |
从第3行开始向下查询2行select * from yyy limit 2,2; | |
显示前4行select * from yyy limit 4; | |
查询null和非null对象(空格也代表一种描述信息,不是null) select * from yyy where passwd is null; select * from yyy where passwd is not null; | |
查询列select score from yyy; | |
指定条件去重查询 select distinct score from yyy; select distinct name,passwd from yyy; |
①登录数据库mysql -u root -p123
②查看当前数据库中有哪些库show databases;
③查看当前数据库使用的端口号show global variables like 'port';
新建
④创建数据库create database yst;
⑤切换库use mysql;
⑥查看表show tables;
⑦纵向查看表结构describe user\G;
增
⑧切换到自定义的数据库yst中use yst;
创建表create table yyy (id int(6) not null,name varchar(20) not null,sccore decimal(3,1),passwd char(4),primary key(id));
查询表的结构desc yyy;
NULL什么都没有,对象没有任何描述信息
空格——也是字符
⑨插入表内容insert into yyy value(1,'郭三',60,'1234');
或者insert into yyy values(1,'郭三',60,'1234');
⑩给用户密码加密(用唯一值指定对象)
方法1:update yyy set passwd=password('0000') where id = 3;
方法2:insert into yyy values(5,'咩咩',99.9,password('1234'));
出现此错误,因为加密后的密码是一长串字符串,超过加密前设定的passwd字符串长度,需要增加passwd字符串长度
删
⑪删除表中的内容行delete from yyy where id = 2;
⑫删除表中的列 alter table yyy drop column birthday;
⑬清空表中内容truncate table yyy;
改
⑭修改表名alter table yyy rename sss;
⑮修改表的结构alter table yyy add birth date;
⑯修改列名alter table yyy change birth birthday date;
⑰修改表的字符串类型alter table yyy modify column name char(30);
⑱给已存在用户设置生日update yyy set birthday=date('2000-10-10') where id = 5;
查
⑲指定唯一条件查询表select * from yyy where id = 3;
⑳从第3行开始向下查询2行select * from yyy limit 2,2;
㉑显示前4行select * from yyy limit 4;
㉒查询null和非null对象(空格也代表一种描述信息,不是null)
select * from yyy where passwd is null;
select * from yyy where passwd is not null;
㉓查询列select score from yyy;
㉔指定条件去重查询select distinct score from yyy;
select distinct name,passwd from yyy;
删库!!!禁用!!!坐牢!!!