MYSQL数据库的概念和sql语句

编程入门 行业动态 更新时间:2024-10-05 09:20:53

MYSQL数据库的概念和sql<a href=https://www.elefans.com/category/jswz/34/1770772.html style=语句"/>

MYSQL数据库的概念和sql语句

数据是什么

数:数字信息

据:属性或某种凭据

数据:对一些列对对象的具体属性的描述信息的集合。

数据库是什么

数据库:就是用来组织 (按照规则组织起来的) ,存储和管理 (对数据的增、删、改、查) 数据的仓库。

数据库是企业的重要信息资产。使用数据库时要注意(查和增无所谓,但是删和改要谨慎!

数据库管理系统(DBMS):实现对数据的有效组织,管理和存取的系统软件

mysql工作过程和数据流向图:

数据库的组成

数据库是一个系统,是一个人机系统、硬件、os操作系统、数据库、DBMS管理系统和数据库的用户。

用户是通过DBMS(各种数据库软件)来对数据库进行操作

数据库的分类

mysql:关系型数据库

redis:非关系型数据库 es

关系型数据库

存储数据的结构是一个二维表格

表:行 列

行:记录,用来藐视一个对象的信息

列:字段,用来描述对象的一切属性

mysql(中小型的数据库并发请求 免费)

oracle(大数据量还是用它)

sql-server(已淘汰)

maria DB

postgresql

在关系型数据库当。表里面的数据是关联的,表和表之间的数据也是关联起来的。

非关系型数据库

保存数据不是一张表格。是键值对的形式来保存的。key---->value ky32=12 本身之间没有任何关联

redis:缓存性的数据库

es:索引型数据库

MongDB:文档型数据库

既然有关联查询速度相对来说:

关系型数据库查询速度更慢一些

非关系型数据库可以支持高并发读写。对海量数据依旧保持着高效率的存储和访问。

企业常用的数据库架构形式:

MYSQL数据库的存储引擎

5.5之前:MYSAM,不支持事务的外键的存储引擎。适用于读的多,写得好。

2.6之后默认的存储引擎:inodb,可以支持事务可以支持外键,行级锁定的存储引擎。支持高并发性能的应用。

事务

事务:在数据库当中,一个或者多个操作组成的数据操作的序列。这些操作要么全部成功,失败一个就全部不执行。确保数据的一致性和完整性。

事务的特点

原子性:数据库最小工作单元,要么全部执行成功,要么全部不执行。只要有一个操作失败整个执行的序列都会被回滚。哪怕是完成的操作也会被撤销。

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

隔离性:事物的执行时相互隔离。一个事务的执行不能受到其他执行事务的干扰。在并发事务之间互相隔离。防止数据不一致的情况发生。

持久性:事务一旦提交,他所做的所有修改会被永久保存在数据库中。即使系统崩溃,提交的数据库也不丢失。

确保数据库始终处于一致性的状态,确保数据的完整和一致

mysql的名词

1、 数据库:database

2、 表:tab 行:row 列:column

3、 索引:index

4、 视图:view

5、 存储过程:procedure

6、 触发器:trigger

7、 用户:user

8、 权限:privilege

mysql的语句规范

在数据库系统中,sql不区分大小写,但是建议大写

语句不区分大小写,表名严格区分大小写

sql语句可以单行也可以多行书写,但是默认都以;结尾

换行的规则

关键词不能跨行或者简写

子语句通常位于度路航,便于编辑,提高可读性。

数据库的命名规则

必须以字母为开头,后面可以包含数据,特殊字符:# 和 _ 和 $

不要使用mysql的保留字来命名:table、select 等

数据库名、表名、用户名称 都严格区分大小写

数据库的字符类型

常用的字符类型:

1、 init:占用4个字节。用来存储整数。

2、 char:固定长度的字符串。用来存储固定长度的字符串。

3、 varchar:可变长度的字符类型。用来存储可变长度的字符串。(是无限制的随便写,也要根据类型的长度)

4、 float(m,d):单精度浮点,存储浮点数,m表示总位数,d表示小数位

5、 duble(m,d):双精度浮点数,存储浮点数,m表示总位数,d表示小数位

6、 text:用于存储大文本数据。文档或者长字符串。

7、 image:二进制存储图像。图片、多媒体等。

8、 decimal(5,2):用于存储固定精度的小数,其中5表示总位数,2表示小数位。

9、 date:存储日期:yyyy-mm-dd

10、 datetime:存储日志 YYY-MM-DD HH:MM:SS

11、 timestamp:和datetime格式一致,可以自动更新为当前的时间戳。

重点:

char:' 空格 '固定占4个字节。'ab' 'ab ' 4个字节

varchar:' 空格 '只占用1个字节。 'ab ' 3个字节

char:无论你是否定义了值,都会占用固定长度的字节大小。如果设置了8个哪怕只写了4个也算作把8个占满

varchar:在保存时,varchar 14 实际上长度是5 就占用5个,加一个隐藏符一共6个

varchar比char节省磁盘空间但是varchae读写速度比char慢

sql语句的分类

DDL语句

DDL:数据定义语言,用于创建数据库的对象。创建库、表、索引。都属于数据定义语言。CREATE DROP ALTER

CREATE :创建DROP :删除ALTER:修改show global variables like 'port'; 
#查看数据库当前使用的端口

show databases;
#查看当前数据库中有多少库

use mysql; #使用库

show tables; #查看mysql当中有哪些表

describe user;
#查看表结构
desc user;
#简写

describe user\G;
#纵向查看
desc user\G;
#简写

create database yy; 
#创建库名为yyshow databses; 
#查看有多少库use yy; 
#查看库yycreate table yy (id int(4) not null,name varchar(10) not null,sroce decimal(5,2),passwd char(48),primary key(id)); 
#创建表show databases;drop tables yy; 
#删表drop database yy; 
#删库desc yy; 
#查看表结构

null和空格的区别

null是什么都没有,对象没有任何的描述信息。

空格:也是字符

insert into yy values(1,'zyg',null,' ');

select * from yy where sroce is not null;

DML语句

数据操作语句,对表中的数据进行管理

select:查看表格式
select * from 表名; 
#查看表格式update:更新
update zyg set passwd=password('000') where id =4 ;

insert:添加
insert into zyg (id,name,sroce,passwd) values(1,'章鱼哥',90,'123');insert into zyg values(2,'章鱼哥2',95,'456');

insert into zyg values(4,'章鱼哥4',95,password('666')); 
#加密处理密码

delete:删除 对表进行删除操作
delete from zyg where id = 5;

DQL语句(面试会问)

查询数据记录

selectselect * from zyg where id = 8;select * from zyg limit 4,7; 
#从第四行开始向下走3行select * from zyg limit 2; 
#显示前2行

select distinct sroce from zyg;
#去重查询。压缩重复的行为1行select distinct id,name,sroce from zyg;
#id去重select distinct name,sroce from zyg;
#所有条件去重select distinct name from zyg;
#name去重

alter table 原表名 rename 新表名;
#改表名alter table zyg add birth date;
#添加新信息

update zyg set birth=date('2000-8-24') where id = 3;
#更新信息alter table zyg change birth birthday datetime;
#更改表信息alter table zyg drop birthday;
#删除表信息

alter table zyg modify column passwd varchar(52);
#修改字段类型

DCL语句

数据控制语言,设置或者更改数据库用户的权限

GRANT:赋予权限

REVOKE:取消权限

TCL语句

事务控制语句,管理数据库当中的事务。

commit:确认提交事务

ROLLBACK:在提交事务之后无法回滚

savepoint:保存点,可以回滚。

MYSQL扩展语句和约束方式、用户管理

MYSQL扩展语句

create table if not exists bqb (
id int(4) zerofill primary key auto_inc rement,
name varchar(10) not null,
cradid int(10) not null unique key,
hobby varchar (50)
);

id int(4) zerofill primary key auto_inc rement,#表示该字段可以自增长,默认从1开始每条记录会自动递增1if not exists bqb:bqb这个表不存在,才会创建zerofill:自动填充位置 1 0001primary key:当前表的主键,主键只能有一个,而唯一,而且不能为空auto_increment:表示该字段可以自增长,默认从1开始,每条记录会自动递增1upique key:唯一性约束。跟主键不通,可以为空的。

create table test like bqb;
#复制表结果。通过like这个语法直接复制bqb的表结构。只是复制表结构不能复制表里面的数据insert into test select * from bqb;
#复制表数据。把bqb表里面的数据复制到test表里。两个表数据结构要一致。create table test1 (select * from bqb);
#直接复制。创建一张表,test1,数据从bqb来,表结果也是从bqb;

create table test like bqb;
#复制表结果。通过like这个语法直接复制bqb的表结构。只是复制表结构不能复制表里面的数据
 

delete或truncate或drop:清空表。删除表内的所有数据

delete from test;
#delete删除是一行一行删除,如果表中有子增长列,清空所有记录之后,再次添加内容,会从原来的记录之后继续自增写入

truncate table test;
#在工作当中一般使用truncate清空。清空表的数据,而且会把表结构重写建立,速度上比delete快。推荐。

drop table test1;
​​​​​​​ #直接删除表(不推荐)

创建临时表

临时表一般用于调试,而且临时表创建之后在表目录当中是不显示的。连接退出之后,临时表会被销毁,而且临时表无法创建外键。

create temporary table test1 (
id int(4) primary key,
name char(10),
sex char(2)
);
#创建临时表

 

MYSQL的约束方式

6种常用的约束:

1、 主键约束。用于唯一标识表种的每一行,主键列的值必须是唯一且不能为空,一共表种只能有一个主键。

2、 外键约束。用于建立表于表之间的关系,一般是和另一张表的主键关联。保证数据引用的完整性,一个表可用有多个外键

3、 非空约束。not null 必须要有一个值。

4、 唯一性约束。unique 确保列中的所有值都是唯一的。类似于主键,但是可以为空。而且一个表可以有多个唯一约束。

5、 默认值约束。default 在插入表数据时,如果没有定义值,会提供一个默认值。

6、 自增约束。每行自动生成一个唯一标识。通常和主键在一起使用。

主键约束

主表:

create table student (
card_id int(18) primary key,
stud_name varchar(12) not null,
stud_email varchar(255) unique
);

从表:

create table class (
stud_id int(11) auto_increment primary key,
address varchar(50) default '地址不详',
card_id int(18) not null,
foreign key(card_id) references student(card_id)
);

主表的主键必须和从表的外键一致否则会报错

show create table class;
#查看关联关系

主表和从表:

如果要插入数据。先插入主表,再插入从表。

删除数据。先删除主表,再删除从表

alter table class drop for foreign key class_ibfk_1;
​​​​​​​#删除从表的外键

MUL:表示这是一个索引。

alter table class drop index card_id;
​​​​​​​#删除从表的索引alter table class drop primary key;
#删除主键

alter table class modify stud_id int(12);
#删除自增约束alter table class drop primary key;
#删除主键

练习题

定义一个需求:

1、两张表:school

de_id int(4) 不满四位要补齐,而且自增长 主键
name VARCHAR(15) not NULL email varchar(45) 不可以为空,而且不能重复
money int 不可为空,不能重复

2、cloud_ky32

id 自增长 主键 int class_name 不能为空。
de_id 外键,外键和主表的主键关联。 adress 可以为空,默认是'地址不详' phone int 不能为空,而且不能重复。
3、分别在两张表中插入10条数据 
4、 在第二张表中增加一列,hobby。
5、修改主表的name类型为char(15)
6、更改cloud_ky32的表名,为ky2
7、修改 hobby的列明,改为hob
8、通过命令行,把主表的第一行的money的初始值1000,变成900.

主表:schoolcreate table school (
de_id int(4) zerofill auto_increment primary key,
name varchar(15) not null,
email varchar(45) not null unique,
money int(255) not null unique
);desc school;从表:cloud_ky32create table cloud_ky32 (
id int(4) auto_increment primary key, 
class_name varchar(5) not null,
de_id int(4) zerofill,
adress varchar(50) unique,
phone int(20) not null unique,
foreign key(de_id) references school(de_id)
);desc cloud_ky32;分别在两张表中插入10条数据
主表:school
insert into school values(1,'yy1','1','1');
insert into school values(2,'yy2','2','2');
insert into school values(3,'yy3','3','3');
insert into school values(4,'yy4','4','4');
insert into school values(5,'yy5','5','5');
insert into school values(6,'yy6','6','6');
insert into school values(7,'yy7','7','7');
insert into school values(8,'yy8','8','8');
insert into school values(9,'yy9','9','9');
insert into school values(10,'yy10','10','10');从表:cloud_ky32
insert into cloud_ky32 values(1,'yy1','1','1','123');
insert into cloud_ky32 values(2,'yy2','2','2','1234');
insert into cloud_ky32 values(3,'yy3','3','3','12345');
insert into cloud_ky32 values(4,'yy4','4','4','123456');
insert into cloud_ky32 values(5,'yy5','5','5','1234567');
insert into cloud_ky32 values(6,'yy6','6','6','12345678');
insert into cloud_ky32 values(7,'yy7','7','7','123456789');
insert into cloud_ky32 values(8,'yy8','8','8','1234567890');
insert into cloud_ky32 values(9,'yy9','9','9','1234567891');
insert into cloud_ky32 values(10,'yy10','10','10','1234567892');在第二张表中增加一列 hobby
alter table cloud_ky32 add hobby varchar(50);desc cloud_ky32;修改主表的name类型为char(15)
alter table school modify column name char(15);desc school;更改cloud_ky32的表名,为ky2alter table cloud_ky32 rename ky2;desc ky2;修改 hobby的列明,改为hob
alter table ky2  change hobby hob varchar(51);desc ky2;通过命令行,把主表的第一行的money的初始值1000,变成900.
update school set money='1000' where de_id = 1;
update school set money='900' where de_id = 1;desc school;

创建表

3、分别在两张表中插入10条数据

主表:

从表:

4、 在第二张表中增加一列,hobby。

5、修改主表的name类型为char(15)

6、更改cloud_ky32的表名,为ky2

7、修改 hobby的列明,改为hob

8、通过命令行,把主表的第一行的money的初始值1000,变成900.

思考题

多表关联最多可以关联几张表?

多表关联最多三张表

更多推荐

MYSQL数据库的概念和sql语句

本文发布于:2024-03-07 14:12:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718038.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语句   概念   数据库   MYSQL   sql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!