• MySQL数据库基本操作



    前言

    MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 应用软件之一。在本篇中,会让大家快速掌握 MySQL 的基本操作,并轻松使用 MySQL 数据库。


    数据库基本操作

    1、登陆数据库

    交互登陆 mysql -u root -p
    在这里插入图片描述
    免交互登陆 mysql -uroot -pabc123
    在这里插入图片描述

    2、查看数据库结构

    查看数据库信息

    show databases;
    show databases\G
    命令结束,后面必须以;结尾表示结束命令,或者\G来结束命令
    在这里插入图片描述

    查看数据库中包含的表

    USE 数据库名;
    show tables;
    show tables in mysql;
    在这里插入图片描述

    显示数据表的结构

    DESCRIBE [数据库名.]表名;
    可缩写成:DESC 表名;
    在这里插入图片描述
    Field:字段名称
    Type:数据类型
    Null:是否运行为空
    Key:主键
    Default:默认值
    Extra:扩展属性

    常用的数据类型

    int整型
    float单精度浮点4字节32位
    double双精点浮点8字节64位
    char固定长度的字符类型
    varchar可变长度的字符类型
    text文本
    image图片
    decimal(5,2)5个有效长度数字,小数点后面有2位
    Char(10)如果存入数据的实际长度比指定长度要小,会补空格至

    char和varchar的区别

    对char来说,最多能存放字符个数255个,char如果存入数据的实际长度比指定长度要小 会补空格至指定长度。如果存入的数据的实际长度大于指定长度 低版本会被截取,高版本会报错
    char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了​

    varchar存储规则

    4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
    5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65535字节

    MySQL数据文件

    MysQL数据库的数据文件存放在**/usr/local/mysql/data**目录下,每个数据库对应一个子目录,用于存储数据表文件。每个数据表对应为三个文件,扩展名分别为".frm"、“.MYD"和”.MYI”。

    MYD文件

    MYD文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAw表都会有一个"“.MYD"文件与之对应,同样存放于所属数据库的文件夹下,和”.frm"文件在一起。

    MYI文件

    “.MYI"文件也是专属于MyISAM存储引擎的,主要存放MyISAM表的索引相关信息。对于MyISAM4存储来说,可以被 cache 的内容主要就是来源于”.MYI"文件中。每一个MyISAM表对应一个".MYI”文件,存放于位置和".frm"以及".MYD”一样。

    MyISAM存储引擎

    MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件(frm,myd,myi)。每个表都有且仅有这样三个文件做为MyISAM

    存储类型的表的存储,也就是说不管这个表有多少个索引,都是存放在同一个.MYI文件中。

    另外还有".ibd"和 ibdata文件,这两种文件都是用来存放Innodb数据的,之所以有两种文件来存放Innodb的数据(包括索引),是因为Innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。独享表空间存储方式使用".ibd"文件来存放数据,且每个表一个".ibd"文件,文件存放在和MyISAM数据相同的位置。如果选用共享存储表空间来存放数据,则会使用ibdata文件来存放,所有表共同使用一个(或者多个,可自行配置)ibdata文件。

    数据库SQL语句

    ​SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。

    SQL语言的分类

    类型说明
    DDL(数据定义语言)用于创建数据库对象,如库、表、索引等
    DML(数据操作语言)用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据
    DQL(数据查询语言)用于从数据表中查找符合条件的数据记录
    DCL(数据控制语言)用于设置或更改数据库用户或者角色权限(用于控制不同数据段直接的许可和访问加别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别、如COMMIT、ROLLBACK、GRANT、REVOKE)

    DDL数据定义语言

    用于创建数据库对象、如库、表、索引等
    creat
    drop
    alter

    创建新的数据库

    CREATE DATABASE 数据库名;
    在这里插入图片描述

    创建新的表

    CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
    
    • 1

    主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。

    use lx;
    create table class1 (id int not null,name char(10) not null,gender char(1),primary key (id));
    创建一个表class1 id int整形 not null 不为空
    name char(10)固定长度的字符串(10字节)
    gender char(1)固定长度的字符串(1字节)
    prinmary key(id)z指定主键为id的字段
    在这里插入图片描述
    在这里插入图片描述

    删除指定的数据表

    use 数据库名
    DROP TABLE 表名;

    DROP TABLE [数据库名].表名;
    在这里插入图片描述

    删除指定的数据库

    DROP DATABASE 数据库名;
    在这里插入图片描述

    DML数据操控语言

    数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据。
    insert
    update
    delete

    格式

    INSERT INTO 表名(字段1,字段2[,...]) VALUES(字段1的值,字段2的值,...);
    
    • 1

    向数据表中插入新的数据记录

    use lx;

    create table class (id int not null,name char(10) not null,score decimal(5,2),passwd char(48) default’',primary key (id));
    在这里插入图片描述

    insert into class (id,name,score,passwd) values(1,‘liu’,100,PASSWORD(‘123456’));
    insert into class (id,name,score,passwd) values(2,‘xu’,99,123456);
    在这里插入图片描述
    #PASSWORD(‘123456’):查询数据记录时,密码字串以加密形式显示:若不使用PASSWORD(),查询时以明文显示。

    查询数据记录

    SELECT 字段名1,字段名2[,…] FROM 表名 [WHERE 条件表达式];

    select * from class;

    在这里插入图片描述
    select name,score from class where id=1;
    查询class表中id为1的name和score
    在这里插入图片描述

    修改、更新数据表中的数据记录

    UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
    
    • 1

    insert into class (id,name,score,passwd) values(4,‘zhangsan’,98,123456);
    insert into class (id,name,score,passwd) values(5,‘lisi’,66,123456);
    select * from class;
    在这里插入图片描述
    update class set id=6 where name=‘xu’;
    把name为xu的id改为6
    select * from class;
    在这里插入图片描述
    update class set name=‘wangwu’,score=100 where id=5;
    把id=5的name改为wangwu,score改成100
    select * from class;
    在这里插入图片描述

    在数据表中删除指定的数据记录

    DELETE FROM 表名 [WHERE 条件表达式];

    delete from class where id=5;
    删除id=5的数据记录
    select * from class;
    在这里插入图片描述

    DQL数据查询语言

    select name from class\G         #以列表方式竖向显示
    select * from class limit 2;      #只显示头2行
    select * from class limit 2,3;    #显示第2行后的前3行
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    DCL数据控制语言

    修改表名

    ALTER TABLE 旧表名 RENAME 新表名;

    alter table class rename nanjing; #修改表名class为nanjing
    show tables;
    select * from nanjing;
    在这里插入图片描述

    拓展表结构(增加字段)

    ALTER TABLE 表名 ADD address varchar(50) default ‘地址未知’;

    ​#default ‘地址未知’:表示此字段设置默认值 地址不详;可与 NOT NULL 配合使用

    alter table nanjing add address varchar(50) default ‘地址未知’;
    在这里插入图片描述

    修改字段(列)名,添加唯一键

    ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];

    alter table nanjing change name student varchar(20) unique key; #把name改为student并设为唯一键
    select * from nanjing;
    在这里插入图片描述
    在这里插入图片描述
    insert into nanjing (id,student,score,passwd) values(2,‘lisi’,50,123456);
    select * from nanjing;
    在这里插入图片描述
    insert into nanjing (id,student,score,passwd) values(6,‘liu’,90,123456); #因为id=6已经有用户使用了,主键id有唯一性。
    insert into nanjing (id,student,score,passwd) values(7,‘liu’,90,123456); #因为student设为了唯一键,所以同名也不行。
    每个表中只能由一个主键 ,但是许多内容都需要唯一性,这就是唯一键的作用
    在这里插入图片描述

    删除字段

    ALTER TABLE 表名 DROP 字段名;

    alter table nanjing drop address; #删除address字段
    select * from nanjing;
    在这里插入图片描述

    拓展

    use lx;
    create table if not exists info ( id int(4) zerofill primary key auto_increment, name varchar(10) not null,cardid int(18) not null unique key, hobby varchar(50));
    在这里插入图片描述

    • if not exists 表示检测要创建的表是否已存在,如果不存在就继续创建
    • int(4) zerofill 表示若数值不满4位数,则前面用“0”填充,例如0001
    • auto_increment 表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
    • unique key 表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键
    • not null 表示此字段不允许为NULL
      insert into info (id,name,cardid,hobby) values (1,‘zhangsan’,957,‘chang’);
      此时id为0001,id为主键,指定为1,从1开始
      在这里插入图片描述
      insert into info (name,cardid,hobby) values (‘lisi’,9527,‘tiao’);
      在这里插入图片描述
      insert into info (name,cardid,hobby) values (‘lisi’,12138,‘rap’);
      insert into info (name,cardid,hobby) values (‘wangwu’,123,‘lanqiu’);
      在这里插入图片描述

    一、克隆/复制表格

    方法一

    ​create table 新表名 like 复制的表名; ​
    仅​复制格式,不复制内容

    在这里插入图片描述
    ​insert into 新表名 select * from 复制的表名; ​
    ​复制原表内容到新表
    在这里插入图片描述
    在这里插入图片描述

    方法二

    create table 新表名 (select * from 复制的表名)
    ​数据结构和数据一起复制过来了,克隆
    在这里插入图片描述

    清空表/删除表内数据

    方法一

    delete from info;
    #DELETE清空表后,返回的结果内有删除的记录条目;
    清空表内数据但是不会删除表的数据结构
    工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM
    删除所有记录后,在此添加的记录会从原来最大的记录id后面继续自增写入数据
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    方法二

    truncate table CLASS1;
    #TRUNCATE清空表后,没有返回被删除的条目:TRUNCATE
    工作时是将表结构按原样重新建立
    因此在速度上TRUNCATE会比DELETE清空表快
    使用TRUNCATE TABLE 清空表内数据后,id会从1开始重新记录
    在这里插入图片描述

    drop、truncate、delete区别

    drop table 数据表名

    • 属于DDL
    • 不可回滚(无法恢复)
    • 不可带where
    • 表内容和结构删除
    • 删除速度快

    truncate table 数据表名

    • 属于DDL
    • 不可回滚
    • 不可带where
    • 表内容删除
    • 删除速度快

    delete from 数据表名

    • 属于DML
    • 可回滚(可恢复)
    • 可带where
    • 表结构在,表内容要看where执行的情况
    • 删除速度慢,需要逐行删除

    不再需要一张表的时候用drop
    想删除部分数据行的时候用delete,并且带上where子句
    保留表而删除所有数据的时候用truncate
    删除速度:drop>truncate> delete
    安全性 delete 最好

    补充:将mysql数据库中的表导出成excel表格

    select * from 某个表 into outfile ‘文件路径’ ;
    在这里插入图片描述

    报错原因

    mysql文件的导出和导入路径有默认设置,即secure-file-priv,当导出的文件路径和默认路径冲突时就会报错

    解决办法

    查看secure-file-priv设置
    show variables like ‘%secure%’;
    在这里插入图片描述
    secure-file-priv的值有三种情况:
    secure_file_prive=null ––限制mysqld 不允许导入导出
    secure_file_priv=/path/ – --限制mysqld的导入导出只能发生在默认的/path/目录下
    secure_file_priv=‘’ – --不对mysqld 的导入 导出做限制
    退出数据库修改/etc/my.cnf配置
    添加secure_file_priv=‘’
    在这里插入图片描述
    systemctl restart mysqld
    设置一个导出目录
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    创建临时表

    ##添加临时表CLASS2
    create temporary table CLASS2 (
    id int(4) zerofill primary key auto_increment,
    name varchar(10) not null,
    cardid int(18) not null unique key,
    hobby varchar(50));

    查看当前库中所有表

    添加临时表
    create temporary table linshi (
    id int(4) zerofill primary key auto_increment,
    name varchar(10) not null,
    cardid int(18) not null unique key,
    hobby varchar(50));
    查看当前库中所有表
    show tables;
    在这里插入图片描述
    在临时表中添加数据
    insert into linshi values(1,‘zhangsan’,12345678,‘法外狂徒’);
    查看当前表中所有数据
    select * from linshi;
    退出数据库
    quit
    在这里插入图片描述
    ##重新登录后进行查看
    mysql -uroot -pabc123
    ##查看之前创建的临时表中所有数据,发现已经被自动销毁
    select * from linshi;
    在这里插入图片描述

  • 相关阅读:
    基于划分的聚类分析——K-means(机器学习)
    日常Bug排查-集群逐步失去响应
    1544_AURIX_TC275_CPU子系统_存储寻址以及子系统寄存器
    OpenAI Chat completion API 入门指南
    Druid LogFilter输出可执行的SQL
    【愚公系列】2022年09月 微信小程序-WebGL纹理材质的使用
    如何配置AI参数SK接口
    Apache Log4j Server (CVE-2017-5645) 反序列化命令执行漏洞
    正则表达式——Pattern.DOTALL
    【学习挑战赛】经典算法之直接选择排序
  • 原文地址:https://blog.csdn.net/l17605229954/article/details/126806138