首页 > 数据库 >一文带你从入门到精通——MySQL(一)

一文带你从入门到精通——MySQL(一)

时间:2024-11-19 22:18:10浏览次数:3  
标签:一文 -- name field MySQL table 约束 主键 入门

目录

一. MySQL基础知识

1.1 引言

1.2 数据库

1.2.1 数据库简介

1.2.2 数据库分类

1.3 SQL语句

1.3.1 SQL通用语法

1.3.2 SQL数据类型

1.3.3 SQL字段约束

1.3.3.1 主键约束

1.3.3.2 非空约束

1.3.3.3 唯一约束

1.3.3.4 默认约束

1.3.3 SQL分类

1.3.3.1 常用DDL

1.3.3.2 常用DML   

1.3.3.3 常用DQL


一. MySQL基础知识

1.1 引言

        MySQL是目前最好的 RDMS(Relational Database Management System,关系数据库管理系统) 应用软件之一,它最早由瑞典MySQL AB公司开发,后被SUN公司收购,目前为Oracle甲骨文公司旗下产品。

1.2 数据库

1.2.1 数据库简介

        在介绍MySQL的具体内容之前,我们首先需要了解一个与之紧密相关事物——数据库。那什么是数据库呢,顾名思义,它就是一个存储数据的仓库,其本质是一个文件系统,它可以存储和管理大量的数据,例如可以存储大量的商品信息、用户信息、用户浏览信息等,当然也可以对这些数据进行管理和维护,例如新增数据、修改数据、删除数据、查看数据等。

1.2.2 数据库分类

        目前数据库可以分为两个大类: 关系型数据非关系型数据库

        关系型数据库即遵循SQL标准的数据库,其特点是有结构、安全性高,强调以二维表格的形式存储数据,常见的有MySQL、Oracle、SQL Server等数据库;而非关系型数据库是一种NoSQL的数据库,特点是没有结构、查询效率高,但不是很安全,强调以key-value对的形式存储数据,常见的有HBase、Redis等数据库。

1.3 SQL语句

        了解数据库之后,我们应该如何对数据库中所存储的数据进行维护呢?答案是使用SQL语句,它能够帮助我们快速地进行对数据库中任何对象的一系列增删改查等操作。

1.3.1 SQL通用语法

        SQL是一种结构化查询语言,也是所有关系型数据库都要遵循的一种规范,需要严格遵循以下的通用语法:

        1. SQL语句可以单行或多行书写,以分号结尾。  

        2. 可使用空格和缩进来增强语句的可读性。

        3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

        4. 可以使用 /**/,-- ,#的方式完成注释,注意: --后面必须有一个空格

SELECT field_name 
FROM table_name
WHERE conditions;
-- 这是单行注释,不能换行
#这也是单行注释
/*
这是多行注释,
可以任意换行
*/

1.3.2 SQL数据类型

        与其他编程语言一样,SQL中也有各种的数据类型,用于存储不同的数据,主要可以分为以下四种类型:

字符串类型:char(char_length)、varchar(char_length),其中char表示定长字符串,varchar表示可变长字符串

整数类型:tinyint(4)、smallint(6)、 mediumint(9)、int(11)、bigint(20),这五种类型的所能表示的整数范围依次增加,括号里的数表示该类型的默认长度

浮点类型:float、double、decimal(x, y),其中float表示单精度浮点数,double表示双精度浮点数,decimal后的x用于指定有效数值,y用于指定小数位数

日期时间:datetime、date、time,其中datetime的格式为‘%Y-%m-%d %h-%i-%s’,date的格式为‘%Y-%m-%d’,time的格式为‘%h-%i-%s’

1.3.3 SQL字段约束

        字段约束用于限制相应字段所存储的数据,这里主要介绍主键约束、非空约束、唯一约束以及默认约束,外键约束后续会单独介绍。

1.3.3.1 主键约束

        主键约束关键字:primary key,其作用是限制主键所对应的字段中所插入的数据不能为空且不能重复,可以视为同时向该字段添加了唯一约束和非空约束,一个表中只能有一个主键。

        主键的添加一般有以下三种方式:

-- 主键的添加方式一:建表的时候添加主键约束
CREATE TABLE table_name
(
    field_name1 field_type1 PRIMARY KEY,
    field_name2 field_type2 field_constraint
);

-- 主键的添加方式二:建表后使用add关键字添加主键
ALTER TABLE table_name
    ADD PRIMARY KEY(field_name);

-- 主键的添加方式三:建表后使用change关键字添加主键
ALTER TABLE table_name
    CHANGE field_name field_name field_type PRIMARY KEY;

        关于主键的删除需要注意,不能使用直接change关键字删除主键,需要先使用drop关键字删除掉主键中的唯一索引,再使用change关键字删除非空约束。

-- 首先使用drop删除主键,但只是把唯一索引删除,非空约束保留
ALTER TABLE table_name
    DROP PRIMARY KEY;

-- 使用change删除非空约束
ALTER TABLE table_name
    CHANGE field_name field_name field_type;

        主键自增关键字:auto_increment,对于一个主键来说,可以使用auto_increment关键字为其添加自增功能,使得主键的值默认从1开始,每次自动加1,并且在插入数据的时候可以使用null或者0占位表示自动使用自增。

        主键自增的添加一般也有两种方式:

-- 主键自增的添加方式一:建表的时候添加主键自增 
CREATE TABLE table_name
(
    field_name1 field_type1 PRIMARY KEY AUTO_INCREMENT,
    field_name2 field_type2 field_constraint
);

-- 主键的添加方式二:建表后添加主键自增,如果主键不存在可以一同添加
ALTER TABLE table_name
    CHANGE field_name field_name field_type AUTO_INCREMENT;
ALTER TABLE table_name
    CHANGE field_name field_name field_type PRIMARY KEY AUTO_INCREMENT;

        关于带有自增的主键删除需要注意,总共三步操作才能彻底删除带有自增的主键,首先需要使用change关键字删除自增功能,再使用drop关键字删除掉主键中的唯一索引,最后使用change关键字删除非空约束

-- 使用change删除自增效果
ALTER TABLE table_name
    CHANGE field_name field_name field_type;

-- 使用drop删除主键,只是把唯一索引删除,非空约束保留
ALTER TABLE table_name
    DROP PRIMARY KEY;

-- 使用change删除非空约束
ALTER TABLE table_name
    CHANGE field_name field_name field_type;
1.3.3.2 非空约束

        非空约束关键字:not null,其作用是限制添加非空约束后的字段所对应数据不能为null值,一个表中可以有多个非空约束

-- 非空约束的添加方式一:建表的时候添加非空约束
CREATE TABLE table_name
(
    field_name1 field_type1 NOT NULL,
    field_name2 field_type2 field_constraint
);

-- 非空约束的添加方式二:建表后添加非空约束
ALTER TABLE table_name
    CHANGE field_name field_name field_type NOT NULL;

-- 非空约束的删除方式
ALTER TABLE table_name
    CHANGE field_name field_name field_type;

1.3.3.3 唯一约束

        非空约束关键字:unique,其作用是限制添加唯一约束后的字段所对应数据不能重复,一个表中可以有多个唯一约束

-- 唯一约束的添加方式一:建表的时候添加唯一约束
CREATE TABLE table_name
(
    field_name1 field_type1 UNIQUE,
    field_name2 field_type2 field_constraint
);

-- 唯一约束的添加方式二:建表后使用change关键字添加唯一约束
ALTER TABLE table_name
    CHANGE field_name field_name field_type UNIQUE;

-- 唯一约束的添加方式三:建表后使用create关键字添加唯一约束
CREATE UNIQUE INDEX unique_index_name ON table_name(field_name);

-- 唯一约束的删除方式
DROP INDEX unique_index_name/field_name ON TABLE_NAME;

1.3.3.4 默认约束

        非空约束关键字:default,其作用是为添加默认约束后的字段所对应数据提前设置默认值,在插入数据时,如果用户没有指定该字段的值,可以使用提前设置好的默认值,一个表中可以有多个默认约束

-- 默认约束的添加方式一:建表的时候添加默认约束
CREATE TABLE table_name
(
    field_name1 field_type1 DEFAULT default_value,
    field_name2 field_type2 field_constraint
);

-- 默认约束的添加方式二:建表后添加默认约束
ALTER TABLE table_name
    CHANGE field_name field_name field_type DEFAULT default_value;

-- 默认约束的删除方式
ALTER TABLE table_name
    CHANGE field_name field_name field_type;

1.3.3 SQL分类

        SQL语句主要可以分为四个大类,DDL、DML、DQL以及DCL。

        DDL(Data Definition Language)数据定义语言,一般用来定义数据库对象,完成对数据库、表、字段等对象的增删改操作。     
        DML(Data Manipulation Language)数据操作语言,一般用来对数据库中表所记录的数据进行增删改操作。
        DQL(Data Query Language)数据查询语言,一般用来查询数据库中表所记录的数据。
        DCL(Data Control Language)数据控制语言,一般用来定义数据库的访问权限、安全级别以及创建用户等操作。

1.3.3.1 常用DDL
/*
创建数据库, 如果名为database_name的数据库存在则会报错,
加入if not exists则可以解决此问题,如果名为database_name的数据库存在,
执行第二条SQL语句则不会创建新的数据库,CHARSET=utf8用于指定字符集(可省)
*/
CREATE DATABASE database_name;
CREATE DATABASE IF NOT EXISTS database_name CHARSET = utf8;

/*
删除数据库, 如果名为database_name的数据库不存在则会报错,
if exists是用于解决名为database_name的数据库不存在的问题,
如果名为database_name的数据库不存在,执行第二条SQL语句则不会删除任何数据库,
*/
DROP DATABASE database_name;
DROP DATABASE IF EXISTS database_name;

-- 使用/切换数据库
USE database_name;

-- 创建表,field_type用于指定字段类型,不可省略;field_constraint用于添加字段约束,可以省略;
-- if not exists用于解决表已经存在的问题,可以省略 
CREATE TABLE IF NOT EXISTS table_name
(
    field_name1 field_type1 field_constraint1,
    field_name2 field_type2 field_constraint2
);

-- 删除表,if exists关键字用于解决表不存在的问题,可以省略
DROP TABLE IF EXISTS table_name;

-- 修改表名
RENAME TABLE old_table_name TO new_table_name;

-- 添加字段,关键字column可以省略,field_constraint可以省略  
ALTER TABLE table_name
    ADD COLUMN field_name field_type field_constraint;

-- 删除字段,关键字column可以省略 
ALTER TABLE table_name
    DROP COLUMN field_name;

-- change关键字可以修改字段名和字段类型,关键字column可以省略,field_constraint可以省略  
ALTER TABLE table_name
    CHANGE COLUMN old_field_name new_field_name field_type field_constraint;

-- modify关键字只能修改字段类型,关键字column可以省略,field_constraint可以省略   
ALTER TABLE table_name
    MODIFY COLUMN field_name field_type field_constraint;
1.3.3.2 常用DML   
-- 插入数据记录
-- 注意1: 具体值要和前面的字段名以及顺序一一对应上
-- 注意2: 如果要插入的是所有字段,那么字段名可以省略(默认代表所有列都要插入数据)
-- 注意3: 如果要插入多条记录,values后多条数据使用逗号分隔
INSERT INTO table_name (field_name1, field_name2)
VALUES (value1, value2),
       (value3, value4);

-- 修改数据记录,如果没有加条件就是修改对应字段的所有数据
UPDATE table_name
SET field_name = new_value
WHERE conditions;

-- 删除数据记录,如果没有加条件就是删除所有数据
DELETE
FROM table_name
WHERE conditions;

-- 清空所有数据,第一条语句有警告,第二条语句没有警告且table关键字可省略
DELETE
FROM table_name;
TRUNCATE TABLE table_name;

        在清空表中的数据时有两种方式,delete from以及truncate table,那么这两种方式有那些共同点和不同点呢?

     共同点                                不同点
delete from删除表中所有数据主键的自增顺序保留,下次再插入的时候继续自增
truncate table主键的自增顺序重置,下次再插入数据的时候从1重新开始自增
1.3.3.3 常用DQL

        更多基于select的DQL后面会单独介绍,这里介绍其他常用的DQL。

-- 查看所有的数据库名
SHOW DATABASES;

-- 查看当前使用的数据库
SELECT DATABASE();

-- 查看指定库的建库语句
SHOW CREATE DATABASE 数据库名;

-- 查看所有表: 
SHOW TABLES;

-- 查看指定表的建表语句: 
SHOW CREATE TABLE table_name;

-- 查看字段信息 
DESC table_name;

标签:一文,--,name,field,MySQL,table,约束,主键,入门
From: https://blog.csdn.net/2401_86480334/article/details/143866985

相关文章

  • 一文带你从入门到精通——MySQL(二)
    建议先阅读我的上一篇博客,掌握一定的MySQL基础知识后再阅读本文,链接如下:一文带你从入门到精通——MySQL(一)-CSDN博客、目录二、MySQL单表查询2.1基础查询2.2条件查询2.3排序查询2.4聚合查询2.5分组查询2.6分页查询2.7MySQL语句的执行顺序二、MySQL单表查询......
  • edusrc—记录一次某证书站捡漏拿下证书实战,网络安全零基础入门到精通教程!
    一、信息收集测试证书站首先得对他的资产收集一波首先,在icp备案查询网站查询备案的主域名有哪些https://beian.miit.gov.cn/img然后利用子域名收集工具对二级子域名,三级子域名进行收集,扩大资产范围我一般用oneforall这个工具收集资产,挺好用的,这里放上链接https://gi......
  • 基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现一
    一、前言介绍:免费学习:猿来入此1.1项目摘要在线网盘文件分享系统的课题背景主要源于现代社会对数字化信息存储和共享需求的日益增长。随着互联网的普及和技术的快速发展,人们越来越依赖电子设备来存储和传输各种类型的数据文件。然而,传统的本地存储方式存在诸多不便,如空间有限、......
  • 基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现二
    一、前言介绍:免费学习:猿来入此1.1项目摘要在线网盘文件分享系统的课题背景主要源于现代社会对数字化信息存储和共享需求的日益增长。随着互联网的普及和技术的快速发展,人们越来越依赖电子设备来存储和传输各种类型的数据文件。然而,传统的本地存储方式存在诸多不便,如空间有限、......
  • 5分钟,轻松搞定MySQL数据库等保测评
    前言作为数据库运维人员,需要理性看待数据库等保测评相关工作,完全按照测评结果对数据库进行整改,或完全忽略测评结果都是不可取的,过犹不及,物极必反。比如MySQL和Oracle为了防止密码被暴力破解的连接错误密码延时功能,随着连续输错密码次数的增加,连接的延时也会逐渐增加,如果设......
  • 【MySQL】约束
    【MySQL】约束文章目录【MySQL】约束前言一、概述二、约束演示三、外键约束总结前言本篇文章就MySQL约束,讲到约束的概述,约束演示以及外键约束。一、概述概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据库中数据的正确、有效性和完整......
  • Redis入门(二)
    Redis字符串(String)Redis的字符串(String)是最基本的数据类型之一,它可以存储任意类型的字符串数据,包括文本和二进制数据。字符串的最大长度为512MB。Redis提供了丰富的命令来操作字符串,包括设置、获取、递增、递减等操作。基本概念键(Key):字符串的主键。值(Value):与键关联的字......
  • MySQL常用命令
    MySQL#用户管理及授权CREATEUSERluke@localhostIDENTIFIEDBY'linuxprobe';grantallon*.*toluke@localhost;grantselect,update,delete,insertonmysql.usertoluke@localhost;#查询用户权限showgrantsforluke@localhost;#创建DBcreatedatabaselinu......
  • MySQL 逻辑备份与恢复指南
    MySQL逻辑备份与恢复指南引言逻辑备份将数据库数据和结构导出为SQL文件,用于数据迁移或恢复。本文提供常用备份和恢复命令,适用于单表、单数据库、多数据库及所有数据库场景。命令行参数说明<参数>:尖括号内的内容为用户需替换的实际值(例如:主机、端口、用户名等)。>:表示输出重......
  • 【入门】字符串的反码c++
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ //一、分析问题 //已知:一个长度不超过80个字符的字符串。 //未知:字符串的反码。 //关系:如果这是一个小写字符,则它和字符a的距离与它的反码和字符z的距离相同;如果是一个大写字符,则它和字符A的距离与它......