• 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

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

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

    use mysql; #使用库

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

    1. describe user;
    2. #查看表结构
    3. desc user;
    4. #简写

    1. describe user\G;
    2. #纵向查看
    3. desc user\G;
    4. #简写

    1. create database yy;
    2. #创建库名为yy
    3. show databses;
    4. #查看有多少库
    5. use yy;
    6. #查看库yy
    7. create table yy (id int(4) not null,name varchar(10) not null,sroce decimal(5,2),passwd char(48),primary key(id));
    8. #创建表
    9. show databases;
    10. drop tables yy;
    11. #删表
    12. drop database yy;
    13. #删库
    14. desc yy;
    15. #查看表结构

    null和空格的区别

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

    空格:也是字符

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

    select * from yy where sroce is not null;

    DML语句

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

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

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

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

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

    DQL语句(面试会问)

    查询数据记录

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

    1. select distinct sroce from zyg;
    2. #去重查询。压缩重复的行为1行
    3. select distinct id,name,sroce from zyg;
    4. #id去重
    5. select distinct name,sroce from zyg;
    6. #所有条件去重
    7. select distinct name from zyg;
    8. #name去重

    1. alter table 原表名 rename 新表名;
    2. #改表名
    3. alter table zyg add birth date;
    4. #添加新信息

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

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

    DCL语句

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

    GRANT:赋予权限

    REVOKE:取消权限

    TCL语句

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

    commit:确认提交事务

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

    savepoint:保存点,可以回滚。

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

    MYSQL扩展语句

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

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

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

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

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

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

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

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

    创建临时表

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

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

     

    MYSQL的约束方式

    6种常用的约束:

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

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

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

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

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

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

    主键约束

    主表:

    1. create table student (
    2. card_id int(18) primary key,
    3. stud_name varchar(12) not null,
    4. stud_email varchar(255) unique
    5. );

    从表:

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

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

    1. show create table class;
    2. #查看关联关系

    主表和从表:

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

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

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

    MUL:表示这是一个索引。

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

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

    练习题

    定义一个需求:

    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.

    1. 主表:school
    2. create table school (
    3. de_id int(4) zerofill auto_increment primary key,
    4. name varchar(15) not null,
    5. email varchar(45) not null unique,
    6. money int(255) not null unique
    7. );
    8. desc school;
    9. 从表:cloud_ky32
    10. create table cloud_ky32 (
    11. id int(4) auto_increment primary key,
    12. class_name varchar(5) not null,
    13. de_id int(4) zerofill,
    14. adress varchar(50) unique,
    15. phone int(20) not null unique,
    16. foreign key(de_id) references school(de_id)
    17. );
    18. desc cloud_ky32;
    19. 分别在两张表中插入10条数据
    20. 主表:school
    21. insert into school values(1,'yy1','1','1');
    22. insert into school values(2,'yy2','2','2');
    23. insert into school values(3,'yy3','3','3');
    24. insert into school values(4,'yy4','4','4');
    25. insert into school values(5,'yy5','5','5');
    26. insert into school values(6,'yy6','6','6');
    27. insert into school values(7,'yy7','7','7');
    28. insert into school values(8,'yy8','8','8');
    29. insert into school values(9,'yy9','9','9');
    30. insert into school values(10,'yy10','10','10');
    31. 从表:cloud_ky32
    32. insert into cloud_ky32 values(1,'yy1','1','1','123');
    33. insert into cloud_ky32 values(2,'yy2','2','2','1234');
    34. insert into cloud_ky32 values(3,'yy3','3','3','12345');
    35. insert into cloud_ky32 values(4,'yy4','4','4','123456');
    36. insert into cloud_ky32 values(5,'yy5','5','5','1234567');
    37. insert into cloud_ky32 values(6,'yy6','6','6','12345678');
    38. insert into cloud_ky32 values(7,'yy7','7','7','123456789');
    39. insert into cloud_ky32 values(8,'yy8','8','8','1234567890');
    40. insert into cloud_ky32 values(9,'yy9','9','9','1234567891');
    41. insert into cloud_ky32 values(10,'yy10','10','10','1234567892');
    42. 在第二张表中增加一列 hobby
    43. alter table cloud_ky32 add hobby varchar(50);
    44. desc cloud_ky32;
    45. 修改主表的name类型为char(15)
    46. alter table school modify column name char(15);
    47. desc school;
    48. 更改cloud_ky32的表名,为ky2
    49. alter table cloud_ky32 rename ky2;
    50. desc ky2;
    51. 修改 hobby的列明,改为hob
    52. alter table ky2 change hobby hob varchar(51);
    53. desc ky2;
    54. 通过命令行,把主表的第一行的money的初始值1000,变成900.
    55. update school set money='1000' where de_id = 1;
    56. update school set money='900' where de_id = 1;
    57. desc school;

    创建表

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

    主表:

    从表:

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

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

    6、更改cloud_ky32的表名,为ky2

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

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

    思考题

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

    多表关联最多三张表

  • 相关阅读:
    Prompt-Tuning(一)
    解决Autodesk License Patcher (NLM Crack)重命名电脑名的问题
    k8s使用
    软考 系统架构设计师系列知识点之基于架构的软件开发方法ABSD(6)
    后端返回base64文件流下载
    27 微服务配置拉取
    JVM如何优化
    Python开源项目月排行 2023年9月
    Python-入门-介绍(一)
    cubase 安装教程
  • 原文地址:https://blog.csdn.net/m0_75209491/article/details/134069886