数据库mysql

发布于:2024-12-20 ⋅ 阅读:(183) ⋅ 点赞:(0)

一、数据库的相关概念

1.数据库的分类

  • 关系型数据库 mysql oracle
  • 非关系型数据库 redis

2.数据库的概念  

        database:用来组织、存储、管理数据的仓库  

        数据库的管理系统:DBMS 实现对数据的有效组织、管理和存储的系统软件

        市面上常见的DBMS:mysql;oracle;sql-server(windows研发);postgresql(大象数据库);influsdb等。

(1)关系型数据库的核心

        是一张表格,数据存储在表格当中,表有行和列。

        列:又叫字段,是描述对象的属性

        行:描述对象的信息

        数据是保存在表里面的,关系型数据库的表与表之间是有关联的,数据之间也是有关联的。一个关系型数据库可以有多个库,库里面保存的是表,表里面有数据。但是,每个库是独立的。数据库当中,多张表存储在库中,通过表与表之间的字段进行关联。

(2)非关系型数据库

        库里面保存的是键值对,以 key=value 的形式保存。

        常见的有:es (elasttic search) 索引型非关系型数据库;redis 缓存型非关系数据库;prometheus 时序性的非关系数据库;monggoDB 文档型非关系数据库 等等。

(3)区别

        关系型数据库:并发量很低,一旦访问大量集中,数据库会很快崩溃

        非关系型数据库:redis---->用户第一次访问数据库--->redis上生成一个缓存的键值对---->访问缓存键值对。可以高并发读写,对海量的并发依旧可以保持高效的存储和访问。而且也可以实现高可用的构架。

3.关系型数据库的常见数据类型

  •  int(n)

        数据类型是整数,n表示数据的长度限制(范围在-2147483648到2147483647之间)

  • char(n)

        是保存字符串类型的数据,保存固定长度的字符。

  • varchar(n)

         也是保存字符串类型的数据,保存可变长度的字符。

char和varchar的区别

        char的字段,无论是否有值,char都会占据4字节(硬盘空间)。

        varchar是按照实际的字符长度进行记录,但是在结尾会多加一个字符,多一个字节。 

        varchar比char节省磁盘空间

        读写速度,char比varchar要快的多。

        char的存储方式是连续磁盘空间;varchar多次查询之后,会产生一些磁盘文件的碎片。

  • text 存储大文本数据

  •  date:用来存储日期

        格式:YYYY-MM-DD

  • datetime 用来存储时间

         格式:YYYY-MM-DD HH:MM:SS

  • timestamp 可以自动存储当前的时间戳

  • float(n,m)

        单精度浮点数,带小数点的值。n是总位数,m是小数点后几位

  • double(n,m) 双精度浮点数

  •  image:存储图片或者多媒体文件

 4.数据库的存储引擎和事务

        mysql:innoDB 支持事务,支持行级锁定,支持外键的存储引擎。

        事务:插入数据、更新数据、删除数据。

事务的四个特性

(1)原子性

        事务是整个数据库工作的最小单位,不可分割,要么全部执行成功,要么全部失败。只要有一个出错,所有已成功的都会被失败。

(2)一致性

        事务执行前后,数据的完整性约束是不能被破坏的,满足所有条件约束的情况下,事务才能被提交。

(3)隔离性

        事务之间的执行是隔离的,一个事务的执行不能受到其他事务的干扰。

(4)数据的持久性  

        事务一旦被提交,将永久性的保存到数据库,保证数据不会丢失。  

mysql支持事务的四种隔离级别

(1)未提交读

        允许脏读,可以看到未提交的修改,read uncommitted

(2)提交读

        read committed,只允许看到修改提交之后的数据。

(3)可重复读

        mysql的默认隔离级别,一个事务,在执行两次select语句,保证得到相同的结果

(4)串行读

        后一个事务必须等待前一个事务完成之后才能继续,在这个过程中,表会完全锁住,读写都会阻塞。

可能出现的问题

(1)脏读

        A事务在访问数据并且修改了数据,但是修改的结果没有提交到数据库,B事务也访问了这条数据,而且看到了未提交的结果。

(2)不可重复读

        在一个事务之内,多次读同一数据。在A事务没有结束时,另一个B事务也访问该数据,由于在A事务中两次读取数据,在中间B事务修改了数据,导致A事务两次查询的结果是不一致的,这就是不可重复读,不能读到相同的数据。

(3)幻读

        A事务对数据进行了修改,B事务也对数据进行了修改,A事务发现数据还是有没有修改的数据,产生了幻觉。

二、mysql

1.数据库的常见名词

名词 意思
database 数据库
table
row
column
index 索引
view 视图
user 用户
privilege 权限
procedure 存储过程

2.sql语句的规范

  • sql语句不区分大小写,但是建议用大写,sql可以是单行也可以是多行,默认是以“;”结尾。如果是多行表示一个sql语句,关键词必须要在一行。
  • 库名、表名、列名和行的值,是 严格区分大小写的。表、库都必须以字母为开头,不要使用sql的保留字段(如table select show database等),表名和库名尽量不要使用特殊字符。

3.sql语句的分类

(1)DDL

        数据库定义语言,创建数据库,表示、索引等的语法 。

create 创建

drop 删除

ALTER 修改---->只能对表修改

 (2)DML

         数据库操作语言,对表里的数据进行管理。

select 查

update 更新数据

insert 插入

delete 删除数据

(3)DQL

        查询语句,查询数据表中的符合条件的数据。

select

(4)DCL

        数据库控制语言,对数据库用户的权限进行控制。

GRANT 赋权

REVOKE 取消权限

(5)TCL

       事务控制语句。

commit 提交

rollback 回滚

save 回滚

savepoint 保存点,用来回滚的

 4.null和空值

  • null就是什么都没有,什么都不存在
  • 空值也是有数据的,也是值

三、mysql实际操作

依赖软件:navicat

1.新建一个库,在库里新建一个表

打开navicat,双击mysql1即可连接,双击mysql,点击查询,点击新建,输入

create database test1;  #鼠标框住右键第一行执行

点击mysql1按F5刷新

create table stars (

id int(3) not null,

#声明表中的字段的名称和字段的类型,not null表示一定要写入数据

name char(10) not null,

#字段的名称是name,长度是10个字符,这一列不能为空,值一定要有

address char(20) default'地址不详’

#default默认的给这一列数据生成一个值,不写入数据,默认就是地址不详

)

select * from stars;

#select 查;*所有列;from 表名 确定哪个表

#查询stars表中的所有列

 2.查看表的结构

desc 表名; #查看表的结构

key: 键 主键或者外键

default:表示插入数据时没有写数据,自动添加字段

extra:提供一些附加的信息

 3.删除表和库

drop table stars; #删除表

drop database test1; #删除库

4. 插入数据

法一: 

insert into 表名 (字段1,字段2,字段3,.......) values(字段1的值,字段2的值,字段3的值,......)

#表名后面的字段可以省略

法二:

5.修改:更新表的数据

update 更新表的数据

update  表名 set ... where ...

#通过where定义要更新的地方

6.删除数据行

delete 删除表中的数据行

delete  from 表名 where ...

7. select查询语句

显示固定范围的行 

显示第3行到第五行

SELECT * FROM stars LIMIT 2,3;

去重显示 

 SELECT DISTINCT address from stars;

 

 模糊查询

SELECT * FROM stars WHERE name like '%3%';   #name的列中包含3

SELECT * FROM stars WHERE name like '%3';      #name的列中以3结尾

SELECT * FROM stars WHERE address LIKE '北%';    #以北开头

 

 8.对表的结构进行修改

修改表名

alter table 旧表名 rename 新表名;

 增加字段

 alter table 表名 ADD 字段名 类型;

修改字段的类型  

 ALTER TABLE 表名 MODIFY COLUMN 字段名 要修改的类型;

修改列的名称  

 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;

 删除字段

 alter table 表名 drop 字段名;

 四、mysql当中的六个约束

 1.六个约束

  •  主键约束(primary key)

         用来标识表中的每一行,主键的字段必须是唯一的,且不能为空。

  • 外键约束(foreign key)

        用来建立表与表之间的关系。一张表的外键和另一张表的主键的值要匹配,确保数据的引用完整性。

  • 非空约束(not null)

         插入或者是更新的操作这个字段必要有值。

  • 唯一性约束(unique key)

        类似于主键的唯一性,但是一个表可以有多个唯一性约束。

  • 默认值约束(default)

        不输入内容时,默认是default的值。

  • 自增约束(auto_increment)

        一般都是和主键一起使用,唯一性和数据类型都有要求。

2.创建主从表

#创建主表

CREATE TABLE student (
crad_id INT(11) PRIMARY KEY,
stu_name CHAR(10) NOT NULL,
stu_email VARCHAR(50) UNIQUE KEY
);
INSERT INTO student VALUES(3204,'栗子','123@123.com');
SELECT * FROM student;

#创建从表

CREATE TABLE class (
stu_id INT(4) PRIMARY KEY auto_increment,
address VARCHAR(50) DEFAULT'地址不详',
crad_id INT(11) NOT NULL,
FOREIGN KEY (crad_id) REFERENCES student(crad_id)
);
INSERT INTO class VALUES(1,DEFAULT,3204);
SELECT * FROM class;
 

#两张表靠外键进行关联

列的名称最好一致,值最好一致

多表联合查询时,表与表之间的关联不要超过三张表,超过之后速度会下降。


网站公告

今日签到

点亮在社区的每一天
去签到