【MySQL】4天学完你就很牛了(Day1)

博客主页:小蜗
系列专栏:MySQL
参考教程:黑马/菜鸟
关注博主,后期持续更新系列文章
如果有错误请大家批评指出,我会及时修改
感谢大家点赞收藏⭐评论✍


在这里插入图片描述


【MySQL】4天学完你就很牛了(Day1)_第1张图片


1.MySQL介绍

MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现属于Oracle公司。它使用关系型模型存储数据,支持SQL(结构化查询语言),适用于各种规模的应用,从小型个人网站到大型企业级应用。MySQL的主要特点包括:

  • 开源免费:降低了使用成本,适合初创企业和个人开发者。
  • 跨平台支持:能够在多种操作系统上运行,如Windows、Linux、Unix和macOS等。
  • 性能高效:支持高并发查询和更新,满足大数据量和高并发场景的需求。
  • 可扩展性强:支持分库分表、垂直扩展和水平扩展,满足不同规模的数据量和并发量的需求。
  • 安全性高:提供强大的安全功能和权限控制机制,保护敏感数据的安全。

2.SQL 语言

SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准编程语言。它被广泛应用于各种数据库系统,如MySQL、Oracle、SQL Server等。

SQL 语言主要分为:

  • DQL:数据查询语言,用于对数据进行查询,如 select;
  • DDL:数据定义语言,进行数据库、表的管理等,如create、drop;
  • DML:数据操作语言,对数据进行增、删、改,如:insert,update,delete;
  • TPL:事务处理语言,对事务进行处理,包括 begin transaction,commit,rollback;

3.SQL 语言基础

SQL 语言中的注释

  • 单行注释:
    格式:-- 注释内容

select * – 简单的查询语句
注意:–与注释文字之间用空格分隔;

  • 多行注释
    格式:/注释内容/

/*这是是一个
多行注释的例子
*/

  • 在 Navicat 中按 ctrl+/ 快速注释选中的 SQL 代码
  • 在 Navicat 中按 ctr+shiftl+/ 选中 SQL 代码取消注释

MySQL 常用数据类型

MySQL 常用的数据类型包括:

一、数值类型

  1. 整数类型
    • TINYINT:占用1个字节,取值范围为 - 128到127(有符号)或0到255(无符号)。
    • SMALLINT:2个字节,有符号的取值范围是 - 32768到32767,无符号是0到65535。
    • MEDIUMINT:3个字节,有符号范围 - 8388608到8388607,无符号0到16777215。
    • INT(INTEGER):4个字节,是最常用的整数类型,有符号范围 - 2147483648到2147483647,无符号0到4294967295。
    • BIGINT:8个字节,能存储非常大的整数,有符号范围 - 9223372036854775808到9223372036854775807,无符号0到18446744073709551615。
  2. 小数类型
    • DECIMAL(精确小数类型)
      • 例如DECIMAL(5,2),表示总共5位数字,其中2位是小数部分。适用于对精度要求较高的金融计算等场景。
    • FLOAT(单精度浮点数):占用4个字节,能提供大约7位有效数字。
    • DOUBLE(双精度浮点数):8个字节,大约15位有效数字。

二、字符串类型

  1. CHAR
    • 固定长度的字符串类型。例如CHAR(10),如果插入的数据不足10个字符,会用空格填充。适合存储固定长度的数据,如身份证号等。
  2. VARCHAR
    • 可变长度的字符串类型。只占用实际需要的空间加上1或2个字节的长度标识。例如VARCHAR(10),插入5个字符就只占用5 + 1(或2)个字节。常用于存储用户名、密码等长度不固定的数据。
  3. TEXT
    • 用于存储较长的文本数据,如文章内容等。有TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT之分,区别在于最大可存储的字节数不同。

三、日期和时间类型

  1. DATE:只存储日期,格式为’YYYY - MM - DD’。
  2. TIME:只存储时间,格式为’HH:MM:SS’。
  3. DATETIME:同时存储日期和时间,格式为’YYYY - MM - DD HH:MM:SS’。
  4. TIMESTAMP:与DATETIME类似,但它是从1970年1月1日00:00:00 UTC开始到指定时间的秒数,并且会根据服务器时区自动转换。

四、枚举和集合类型

  1. ENUM
    • 枚举类型,用于定义一个列只能取预定义的一组值中的一个。例如定义性别列:ENUM(‘男’,‘女’)。
  2. SET
    • 集合类型,允许列取预定义的一组值中的多个值。例如定义兴趣爱好列:SET(‘阅读’,‘运动’,‘音乐’)。

表、字段、记录

  • 表(table):
    表(table),数据库中存储数据的基本单位,表是一个由行和列组成的二维表格结构。
  • 字段(field):
    表中的列,在数据库中,叫做字段(field)。
  • 记录(record):
    表中的一行,在数据库中,叫做记录(record)。

CREATE TABLE 创建表

  • 语法

create table 表名(
字段名 数据类型,
字段名 数据类型
… );

例 1:创建表 g,字段要求:name(姓名),数据类型:varchar(字符串),长度为
9

create table g(
name varchar(9)
);

例 2:创建表 h,字段要求:
name(姓名),数据类型为 varchar(字符串),长度为 10;

height(身高),数据类型为 decimal(小数),一共 5 位, 其中 3 位整数,2 位
小数。

create table h(
name varchar(10),
height decimal(5,2)
);

INSERT 添加数据

  • 添加一条记录

SQL 语句中,字符串用单引号’’或者双引号””引起来,数字可以省略引号。

格式一:所有字段设置值,值的顺序与表中字段的顺序对应

insert into 表名 values (…);

例 1:表 c 插入一条记录,设置所有字段的信息

insert into c values (0,‘蜗牛’,23);

格式二:部分字段设置值,值的顺序与给出的字段顺序对应

insert into 表名 (字段 1,…) values (值 1,…);

例 2:表 c 插入一条记录,只设置 id 和姓名 name

insert into c (id,name) values (1,‘大蜗牛’);

  • 添加多条记录

格式一:写多条 insert 语句,语句之间用英文分号隔开

例 3:表 c 插入三条记录,写三条 insert 语句, 语句之间用分号隔开

insert into c (id,name,age) values (2,‘秦蜗蜗’,23);
insert into c (id,name,age) values (3,‘汉蜗蜗’,26);
insert into c values (4,‘唐蜗蜗’,23);

格式二:写一条 insert 语句,添加多条记录,数据之间用英文逗号隔开

insert into 表名 values (…),(…)… ;

例 4:表 c 插入多条记录,用一条 insert 语句, 数据之间用逗号隔开

insert into c values (5,‘宋蜗蜗’,23),(6,‘蜗子’,23);

格式三:写一条 insert 语句,设置指定字段值

insert into 表名(字段 1,…) values (值 1,…),(值 1,…)… ;

例 5:表 c 插入多条记录,用一条 insert 语句, 只设置姓名和年龄

insert into c (name, age) values (‘刘蜗’,26),(‘张蜗’, 35);

SELECT 简单查询

  • 查询所有字段

select * from 表名

例 1:查询表 c 所有数据

select * from c

  • 查询指定字段

select 字段 1,字段 2,… from 表名

例 2:查询表 c 的姓名(name 字段)和年龄(age 字段)

select name,age from c;

UPDATE 修改数据

  • 语法

update 表名 set 字段 1=值 1,字段 2=值 2… where 条件;

例 1:修改表 h,所有人的年龄(age 字段)改为 80

update h set age=80;

DELETE 删除表中的记录

  • 语法

delete from 表名 where 条件;

例 2:删除表 g 的所有记录

delete from g;

TRUNCATE 删除表中的记录

  • 语法:(删除表的所有数据,保留表结构)

truncate table 表名;

例:删除表 c 的所有数据

truncate table c;

DELETE 和 TRUNCATE 的区别

DELETETRUNCATE 都是 SQL 中用于删除数据的语句,但它们之间有一些重要的区别:

  1. 操作方式

    • DELETE:通过特定条件来删除表中的数据。你可以使用 WHERE 子句来指定删除哪些行,如果没有 WHERE 子句,则会删除表中的所有行。
    • TRUNCATE:用于快速删除表中的所有数据,它不接受 WHERE 子句,因此会删除表中的每一行。
  2. 速度和资源消耗

    • TRUNCATE 通常比 DELETE 更快,因为它不会记录每行的删除操作,而是直接释放表的存储空间。这使得 TRUNCATE 在删除大量数据时更加高效。
    • 相比之下,DELETE 会记录每一行的删除操作,这可能会消耗更多的日志空间和处理时间,特别是在处理大量数据时。
  3. 事务安全性

    • DELETE 是一个可回滚的操作,这意味着如果在事务中执行了 DELETE,但随后事务被回滚,那么删除的数据将会恢复。
    • TRUNCATE 在某些数据库系统中(如 MySQL 的 InnoDB 存储引擎)不是可回滚的,一旦执行,数据就无法恢复。然而,在其他数据库系统或存储引擎中,TRUNCATE 可能会有不同的事务行为。
  4. 触发器和约束

    • 当使用 DELETE 删除数据时,如果表上有触发器或外键约束,它们将会被触发或检查。
    • 使用 TRUNCATE 时,通常会忽略触发器和外键约束(但这取决于具体的数据库系统和配置)。因此,TRUNCATE 可能会导致违反外键约束的错误,或者不会触发与删除操作相关的触发器。
  5. 权限要求

    • 在某些数据库系统中,执行 TRUNCATE 可能需要更高的权限,因为它可以快速删除大量数据并释放存储空间。

总之,DELETETRUNCATE 在删除数据时具有不同的特点和用途。在选择使用哪个语句时,应根据具体需求和数据库系统的特性进行权衡。如果你需要删除特定条件的数据并保留事务安全性,那么 DELETE 是更好的选择。如果你需要快速删除表中的所有数据,并且不关心事务回滚或触发器等问题,那么 TRUNCATE 可能更合适。

DROP TABLE 删除表

语法 :

drop table 表名;

drop table if exists 表名;

例 1:删除表 a

drop table a;

drop table if exists a;

字段的约束

一、常用约束介绍

  • 主键(primary key):值不能重复,auto_increment 代表值自动增长;
  • 非空(not null):此字段不允许填写空值;
  • 惟一(unique):此字段的值不允许重复;
  • 默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准。

二、创建带约束字段的语法格式

create table 表名(
字段名 数据类型 约束,
字段名 数据类型 约束
… );

三、主键与自增长

  • 带有 primary key(主键)的字段,值不能重复;
  • auto_increment 为自增长;

create table 表名(
字段名 数据类型 primary key auto_increment,
字段名 数据类型 约束
… );

例 1:创建表 d,字段要求如下:
id : 数 据 类 型 为 int unsigned( 无 符 号 整 数 ) ) ,primary key(主键),auto_increment(自增长);name 姓名:数据类型为 varchar(字符串)长度为 10;
age 年龄:数据类型为 int(整数);

create table d(
id int unsigned primary key auto_increment,
name varchar(10),
age int
);

  • 主键并且自增长字段的表,insert 语句插入数据,如果不指定 id 字段,id 字 段的值会自动增长

例 2:不指定 id 字段值,系统自动填写, 且自增长

insert into d (name, age) values (‘慈蜗’,65);
insert into d (name, age) values (‘光蜗’,30);
insert into d (name, age) values (‘溥蜗’,12);

  • 如果插入数据时, 插入所有字段,但又没写自增长字段的值,insert 语句会出 错
    例 3:所有字段都插入,但没写自增长字段值, 该语句会出现错误

insert into d values (‘乾蜗’,60);

  • 解决方案

使用占位符,通常使⽤0 或者 null (空)来占位。

例 4:用 0 或者 null 来占位,实现自增长字段的插入

insert into d (id, name, age) values (null,‘康蜗’,41);
insert into d (id, name, age) values (0,‘蜗蜗’,66);

四、非空

  • 带有 not null(非空)的字段,值不能为空;

create table 表名(
字段名 数据类型 not null,
… );

例 1:创建表 e,字段要求如下:
id:数据类型为 int unsigned (无符号整数);
name 姓名:数据类型为 varchar(字符串)长度为 10,not null(非空),
age 年龄:数据类型为 int(整数);

create table e(
id int unsigned,
name varchar(10) not null,
age int
);

  • 非空字段表,insert 插入数据一定要指定字段值,不然插入会失败

insert 插入数据,没有指定 name 的值会失败,因为 name 字段 not null(非空)

五、唯一

  • 惟一(unique):此字段的值不允许重复;

create table 表名(
字段名 数据类型 unique,
… );

例 1:创建表 f,字段要求如下:
id:数据类型为 int (整数);name 姓名:数据类型为 varchar(字符串)长度为 10,unique(唯一);age 年龄:数据类型为 int(整数);

create table f(
id int,
name varchar(10) unique,
age int
);
如果插入的记录中 name 值重复, 会插入失败

六、默认值

默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准;

create table 表名(
字段名 数据类型 default 值,
… );

例 1:创建表 g,字段要求如下:
id:数据类型为 int (整数);name 姓名:数据类型为 varchar(字符串)长度为 10;
age 年龄:数据类型为 int(整数),default(默认值)30;

create table g(
id int,
name varchar(10),
age int default 30
);
age 字段的默认值为 30,如果 insert 没有指定 age 的值,默认 age 为 30,insert 指定了 age 的值 50,最终写入表中是数据为 50


【MySQL】4天学完你就很牛了(Day1)_第2张图片

你可能感兴趣的:(#,MySQL,mysql,数据库)