何小豆儿在此 发表于 2024-12-30 08:22:12

【MySQL基础】数据库与表的根本操作:从创建到管理

写在前面:

先扔个导图
https://i-blog.csdnimg.cn/direct/36ed4bf0f42145a8b43ae6be2fdb343e.png#pic_center
学习MySQL的根本操作,就像是搭建一个井然有序的图书馆。我们需要先创建存放数据的“库”,这就是数据库的创建和管理,通过CREATE DATABASE来新建一个库,并用SHOW DATABASES查看已经存在的库,须要时还能用DROP DATABASE清算不再需要的库。
接下来,在数据库中创建存放具体数据的“架子”,也就是表的创建与管理。用CREATE TABLE新建表布局,比如界说表里有哪些“格子”(字段)来放数据,DROP TABLE用于删除表,ALTER TABLE则可以机动调整表的布局,让数据更符合需求。
为了把每个“格子”计划得恰到利益,我们要了解MySQL支持的数据类型。不同的内容得当不同的数据类型,例如整数用INT、文本用VARCHAR、日期用DATE。公道选择数据类型不仅能提高效率,还能减少空间占用。
末了,主键和外键就像是每本书的ISBN码和分类标签。主键(Primary Key)让每条数据都能被唯一识别,而外键(Foreign Key)让表之间形成关联关系,比如学生和选课数据的匹配。这些约束条件资助我们创建数据的唯一性和同等性,让整个数据库布局更加清晰、公道。
1、数据库的创建和管理

在MySQL里,数据库就像一间房子,里面存放着各种数据表,表里放的则是具体的数据。接下来,我们学习怎样“盖房子”、查看已经盖好的房子,以及“拆掉”不需要的房子!
1. 创建数据库:CREATE DATABASE

我们要“盖”一间新居子(数据库),在MySQL里使用CREATE DATABASE这个命令来实现。
语法:
CREATE DATABASE 数据库名;
举个例子:
假设我们要创建一个叫“my_school”的数据库,用来放学校的各种数据,比如学生信息、课程信息等。命令是如许的:
CREATE DATABASE my_school;
输入这条命令,MySQL就会帮我们创建一个名为my_school的新数据库。创建后,我们就可以在这个数据库里建各种数据表,存放我们想要的内容。
注意事项:



[*] 数据库名字要简洁、好记,可以使用下划线(_)来连接多个单词,比如my_company。
[*] 名字不能重复! 如果数据库里已经有同名的数据库,再次创建时就会报错。
[*] 想制止重复创建?我们可以加个IF NOT EXISTS条件,如许在已经存在时就不会重复创建了:
CREATE DATABASE IF NOT EXISTS my_school;

2. 查看已有数据库:SHOW DATABASES

当我们在MySQL里存了很多数据库后,大概会忘记某些数据库的名字。这时,可以使用SHOW DATABASES命令来看看有哪些“房子”已经盖好。
语法:
SHOW DATABASES;
例子:
直接运行SHOW DATABASES;
,MySQL会返回一个全部数据库的列表,看上去像如许:
+--------------------+
| Database         |
+--------------------+
| information_schema |
| mysql            |
| my_school          |
| test               |
+--------------------+
在结果里,我们就可以找到我们创建的数据库,比如“my_school”。别的,MySQL默认还会有一些系统数据库,比如information_schema和mysql,这些是MySQL系统自己用的,通常不要删除它们。
3. 删除数据库:DROP DATABASE

当一个数据库已经没有用处了,我们可以把这个“房子”拆掉。在MySQL里,用DROP DATABASE命令来删除一个数据库,删除后数据将无法规复,以是要审慎操作。
语法:
DROP DATABASE 数据库名;
举个例子:
假设我们不再需要my_school数据库了,可以如许删除它:
DROP DATABASE my_school;
如许,MySQL会彻底删除my_school数据库以及此中全部的数据表和数据!
要注意:删除的数据库无法规复,因此在执行前,一定要确认!
防止误删

为了防止手误删除已有的数据库,可以加个IF EXISTS,如果数据库不存在就不会报错:
DROP DATABASE IF EXISTS my_school;
4. 总结



[*]用CREATE DATABASE 数据库名;
来创建数据库。
[*]用SHOW DATABASES;
来查看当前全部的数据库。
[*]用DROP DATABASE 数据库名;
来删除不需要的数据库,但要小心,这个操作是不可逆的!
2、表的创建与管理

在数据库中,数据是按“表”来存放的,每个表像是一张电子表格,有列(字段)和行(数据条目)。比如学生信息表里大概有“学号”、“姓名”、“年事”等列。本日我们来学习怎样用MySQL创建这些表、修改表布局,以及删除不需要的表。
1. 创建数据表:CREATE TABLE

创建表时,我们需要指定表的名字和它的布局,包摆列的名字、类型,以及大概的限制条件(比如主键)。
语法:
CREATE TABLE 表名 (
    列名1 数据类型 [约束条件],
    列名2 数据类型 [约束条件],
    ...
);
举个例子:
假设我们要建一个叫“students”的表,用来记录学生信息,包罗学号、姓名、年事和班级。可以如许写:
CREATE TABLE students (
    student_id INT PRIMARY KEY,       -- 学号,主键
    name VARCHAR(50) NOT NULL,      -- 姓名,不能为空
    age INT,                        -- 年龄
    class VARCHAR(10)               -- 班级
);
解释一下:


[*]students是表的名字。
[*]student_id是学号,用INT表示整数,并设为主键(PRIMARY KEY),如许学号在表里不会重复。
[*]name是姓名,VARCHAR(50)表示最长50个字符,并且NOT NULL代表这个字段不能为空。
[*]age和class分别表示年事和班级,直接用INT和VARCHAR(10)来表示。
2. 查看表布局:DESCRIBE 表名

创建好表后,我们可以用DESCRIBE命令看看表的布局,确保它和我们预想的一样。
例子:
DESCRIBE students;
执行后会看到表的布局,每一列的名字、数据类型和约束条件都列出来:
+-------------+-------------+------+-----+---------+-------+
| Field       | Type      | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| student_id| int         | NO   | PRI | NULL    |       |
| name      | varchar(50) | NO   |   | NULL    |       |
| age         | int         | YES|   | NULL    |       |
| class       | varchar(10) | YES|   | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
3. 删除数据表:DROP TABLE

如果我们不再需要某个表了,可以用DROP TABLE命令来删除这个表,注意这会连同表里的全部数据一并删除,无法规复。
语法:
DROP TABLE 表名;
举个例子:
假设我们不再需要“students”表了,可以如许删除:
DROP TABLE students;
MySQL会删除students表以及它存放的全部数据,以是这个操作要慎重。
小贴士:如果不确定表是否存在,可以加上IF EXISTS,制止报错:
DROP TABLE IF EXISTS students;
4. 修改表布局:ALTER TABLE

偶然我们大概需要调整表的布局,比如加列、删列或修改某列的数据类型,这时就用ALTER TABLE命令。
4.1 添加新列

假设students表里我们还想加一列“邮箱地址”,可以如许做:
ALTER TABLE students
ADD email VARCHAR(100);
如许students表里就多了一列email,可以用来存每位学生的邮箱地址。
4.2 删除列

假如我们不再需要class(班级)这列了,可以用下面的命令来删除它:
ALTER TABLE students
DROP COLUMN class;
注意:删除列后全部数据都会一并消散,操作前要确认。
4.3 修改列的数据类型

如果我们发现age这列使用INT类型不太合适,想改成TINYINT(占用更少存储空间),可以如许写:
ALTER TABLE students
MODIFY age TINYINT;
如许age列的数据类型就从INT改成了TINYINT,在节省存储的同时,更符合年事数据的大小范围。
4.4 重命名列

假如我们想把“student_id”重命名为“id”,可以用下面的语法:
ALTER TABLE students
CHANGE student_id id INT;
这里不仅重命名了,还得重新指定数据类型(INT)。
5. 总结



[*]创建表:用CREATE TABLE 表名命令,界说每一列的布局和约束。
[*]删除表:用DROP TABLE 表名命令删除整个表和表中的数据。
[*]修改表:用ALTER TABLE命令添加、删除或修改列。
3、数据类型

在MySQL中,我们的表就像装东西的“架子”,每一列(字段)都是用来装特定类型的数据。以是,选择正确的数据类型非常紧张,不仅关系到存储效率,还影响查询速度!下面我们一起来认识MySQL中常用的数据类型,并了解它们的“性格特点”,好让每个字段都挑到合适的“衣服”。
一、数字类型

数字类型专门用来存放整数、浮点数或定点数,不同场景用不同类型:

[*] 整数类型

[*]TINYINT:存放范围为-128到127的整数,得当小范围的数字,比如“评分品级”或“年事”。
[*]SMALLINT:存放范围为-32,768到32,767,得当不太大的数值,比如“库存数量”。
[*]MEDIUMINT:存放范围为-8,388,608到8,388,607,可以用来存稍大一点的数据,比如“ID编号”。
[*]INT:存放范围为-2,147,483,648到2,147,483,647,常用类型,得当大多数的整数场景。
[*]BIGINT:存放范围非常大(正负数范围为约±9亿亿),得当极大数值,比如“银行账户的余额”。
小贴士:用整数时尽量选小一点的类型,减少存储空间,比如TINYINT比INT更省空间。

[*] 浮点数类型

[*]FLOAT:得当存储带小数的数据,精度一般。可用于表示一般的分数、比例等。
[*]DOUBLE:精度比FLOAT高,可以表示非常精确的小数(约15位有效数字)。用于科学盘算、需要高精度的场景。
[*]DECIMAL:定点数,精度和小数位数是固定的,特殊得当钱币和金融数据。
注意:如果要处理金额或财务数据,保举用DECIMAL,如答应以制止精度问题。

二、字符串类型

字符串类型用来存储文本数据,从单个字符到段落都可以。

[*] CHAR(n):固定长度的字符串,n为最大长度。如果设置CHAR(5),那么每个值都会占用5个字符的空间,不足的地方用空格填充。得当固定长度的内容,比如“状态代码”。
[*] VARCHAR(n):可变长度字符串,得当一般的文本数据,比如“姓名”和“地址”,可以设置最大长度n。不像CHAR,VARCHAR只占用实际存储的字符数。
[*] TEXT:大段文本数据类型,得当描述性内容,比如“文章内容”或“品评”。它可以存储64KB的数据。
[*] MEDIUMTEXT和LONGTEXT:分别可以存放16MB和4GB的数据,非常得当超长文本,比如“产物描述”或“日志”。
小贴士:尽量用合适长度的字符串类型,过长的数据会影响性能,CHAR和VARCHAR要特殊注意设定公道的最大长度。
三、日期和时间类型

日期和时间类型用来存放与时间相关的数据,MySQL提供了不同精度的日期时间类型。

[*] DATE:用于存储日期,格式为YYYY-MM-DD,比如2024-10-26。得当仅需日期的场景,如“出生日期”。
[*] TIME:用于存储时间,格式为HH:MM:SS,比如14:30:00。得当只记录时间的场景,如“电影时长”。
[*] DATETIME:存储日期和时间,格式为YYYY-MM-DD HH:MM:SS,得当存储具体事件发生的时间点,比如“订单创建时间”。
[*] TIMESTAMP:和DATETIME类似,但带偶然区转换功能,自动记录UTC时间。特殊得当记录“末了更新时间”。
[*] YEAR:存储年份,格式为YYYY,比如2024,得当只需要年份的场景,如“入学年份”。
小贴士:TIMESTAMP非常得当自动记录数据更新时间,但有2038年限制(超出将无法使用)。若数据需要恒久保存,DATETIME更合适。
四、摆列与聚集类型

偶然我们有固定的几个选项,比如性别(男、女),用摆列或聚集会非常方便。

[*] ENUM:用于指定一组固定的字符串选项,比如性别字段只答应'男'或'女'。界说语法为ENUM('男', '女')。
[*] SET:答应存储多个选项的组合,比如爱好字段可以选择多个爱好:SET('阅读', '活动', '旅行')。
小贴士:ENUM得当单选选项,SET得当多选选项,特殊得当数据有固定取值的环境。
五、二进制类型

存储二进制数据,如图片或文件内容,可以选择Blob类型。

[*] TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB:分别对应不同大小的二进制数据存储,得当存储图片、文件等数据,LONGBLOB最大可存4GB。
小贴士:如果表里的二进制数据多且较大,大概会影响性能,建议只存放关键数据,把文件链接存在外部存储更合适。
数据类型选择小总结



[*]数值:尽量选择得当数据范围的类型,不要一上来就选BIGINT或DOUBLE。
[*]字符串:CHAR和VARCHAR区别在于存储长度是否固定,TEXT用于较长的文本。
[*]时间:DATE用于单独日期,DATETIME、TIMESTAMP用于带时间的日期,TIMESTAMP还能自动记录更新。
[*]摆列:ENUM得当选项少且固定的单选项,SET得当多选。
通过选择合适的数据类型,我们不仅能优化存储,还能加速查询速度,提升数据库整体性能!
4、主键和外键

在数据库的世界里,主键(Primary Key)和外键(Foreign Key)就像一个人的身份证和亲属关系。主键资助每一行数据都有唯一“身份”,外键则资助我们创建起表与表之间的“亲戚”关系。掌握这两者的界说和作用后,不仅能提高数据的完整性,还能让查询更高效!
1. 主键(Primary Key):唯一标识每一行数据

主键的作用是确保表中每一行数据的唯一性,就像身份证一样,主键不能重复,也不能为空。如许我们可以快速锁定唯逐一条数据,不会出现混淆。
主键的特点:



[*]唯一性:每个主键的值都要独一无二。
[*]非空:主键字段不能有空值,如许才能确保每条数据都能被唯一识别。
[*]表的主键只能有一个,可以是单个字段,也可以是多个字段组合。
界说主键

在创建表时,我们可以通过PRIMARY KEY关键字来界说主键:
例子:
假设我们有一个学生表students,想让每个学生都拥有独一无二的学号student_id作为主键:
CREATE TABLE students (
    student_id INT PRIMARY KEY,   -- 学号,主键
    name VARCHAR(50),             -- 姓名
    age INT                     -- 年龄
);
这里,student_id就是主键,如许即使有重名的学生,我们也能通过学号正确找到唯一的学生记录。
复合主键

如果一个字段不够区分数据,也可以用多个字段组合成主键,这叫复合主键。
例子:
比如在“学生选课”表enrollments里,大概用“学号”和“课程编号”组合来唯一标识一个选课记录:
CREATE TABLE enrollments (
    student_id INT,
    course_id INT,
    PRIMARY KEY (student_id, course_id)
);
这里,student_id和course_id组合成主键,确保一个学生在同一课程只能选一次。
2. 外键(Foreign Key):创建表与表之间的关联

外键可以理解为一张表里某个字段“引用”了另一张表的主键,目的是创建起表与表之间的关联关系,确保数据的完整性。比如,学生选课表里就会引用学生表的主键,确保选课记录是符合逻辑的。
外键的作用



[*]保证数据的引用完整性:外键确保表与表之间的“关系”是正确的。比如,不能有一个选课记录对应的学生在学生表里不存在。
[*]自动级联更新或删除:可以设置级联操作,当父表中的主键被删除或修改时,子表中的对应记录也自动更新或删除。
界说外键

在创建表时,用FOREIGN KEY来界说外键,并用REFERENCES指定要引用的表和字段。
例子:
假设我们有一个学生选课表enrollments,它里头的student_id应该来自学生表的students表中。我们可以如许设置外键:
CREATE TABLE enrollments (
    enrollment_id INT PRIMARY KEY, -- 选课记录ID
    student_id INT,                -- 学生ID
    course_id INT,               -- 课程ID
    FOREIGN KEY (student_id) REFERENCES students(student_id)
);
这里,student_id是enrollments表的外键,它引用了students表里的student_id。如许,如果学生表没有这个student_id,就不能插入对应的选课记录。
级联操作(CASCADE)

外键还可以设置“级联更新”和“级联删除”:


[*]ON DELETE CASCADE:当父表数据被删除时,自动删除全部关联的子表数据。
[*]ON UPDATE CASCADE:当父表的主键被修改时,自动更新子表中的外键值。
例子:
给enrollments表设置级联删除,当students表中的学生被删除时,自动删除该学生的全部选课记录:
CREATE TABLE enrollments (
    enrollment_id INT PRIMARY KEY,
    student_id INT,
    course_id INT,
    FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE
);
如许,当students表里的某个学生记录被删除,enrollments表中该学生的选课记录也会自动删除,保持数据同等性。
3. 总结



[*]主键:唯一标识表中每一行数据,不能重复或为空。可以用单个字段或多个字段组合。
[*]外键:用于创建表之间的关联,确保数据的引用完整性,可以设置级联操作。
用好主键和外键,不仅让数据库的布局更清晰,还能保障数据的正确性和完整性!
5 举个栗子

假设我们要创建一个小型“学生管理系统”,包含学生的根本信息、选课信息等。这是一个绝佳的例子,能让我们了解数据库和表的创建管理,掌握数据类型的选择,还能了解主键和外键的用法。接下来我们就一步步地创建数据库、表,挑选合适的数据类型,设置主键和外键。
1. 数据库的创建和管理

起首,我们需要一个数据库来存放全部的表和数据。在MySQL中,创建数据库就像在电脑上新建一个文件夹,用来存放我们全部的“文件”。
-- 创建一个叫“student_management”的数据库CREATE DATABASE student_management;-- 表现全部数据库,确认我们的数据库创建成功SHOW DATABASES;
-- 如果哪天我们不需要这个数据库了,可以删除它DROP DATABASE student_management; 如许我们就创建了一个叫student_management的数据库,并可以用它来存放全部学生管理相关的数据。
2. 表的创建与管理

接下来,在student_management数据库里创建几个表,比如students(学生根本信息)和courses(课程信息)。表就像Excel里的工作表,不同表用来放不同类型的数据。
-- 选择要操作的数据库
USE student_management;

-- 创建学生信息表
CREATE TABLE students (
    student_id INT PRIMARY KEY,      -- 学生ID,主键,独一无二
    name VARCHAR(50),                -- 学生姓名,最多50字符
    age TINYINT,                     -- 年龄,范围足够小,用TINYINT
    enrollment_date DATE             -- 入学日期,使用DATE类型
);

-- 创建课程表
CREATE TABLE courses (
    course_id INT PRIMARY KEY,       -- 课程ID,主键
    course_name VARCHAR(100)         -- 课程名称
);


[*]这里我们使用了CREATE TABLE创建表,并为每个字段指定了合适的数据类型。
[*]student_id和course_id作为主键,确保每条记录都能被唯一识别。
[*]name和course_name选用VARCHAR,是因为这些字段长度不固定,VARCHAR会根据内容长度动态分配空间。
3. 数据类型的选择

给每个字段选择合适的数据类型非常紧张。看一下我们在上面选择的数据类型:


[*]INT:得当数字,但范围较大。student_id和course_id需要保持唯一性,用INT既通用也方便。
[*]TINYINT:得当小范围整数,比如学生的年事,因为年事通常小于128。
[*]VARCHAR(50):得当不定长的文本。学生姓名长度不固定,但设置成50足够大且节省空间。
[*]DATE:专门用来存日期,得当入学日期等字段。
这些类型让我们既节省了存储空间,又能保证数据的正确性。
4. 主键和外键的设置

现在,我们还可以扩展,假如有一张enrollments表记录学生选修的课程信息。这张表需要一个主键,同时,还需要能链接到students和courses表,以确保每条选课记录都是有效的。
-- 创建学生选课表
CREATE TABLE enrollments (
    enrollment_id INT PRIMARY KEY,   -- 选课记录ID,主键
    student_id INT,                  -- 学生ID,外键,链接到students表
    course_id INT,                     -- 课程ID,外键,链接到courses表
    enrollment_date DATE,            -- 选课日期
    FOREIGN KEY (student_id) REFERENCES students(student_id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id)
);


[*]enrollment_id是enrollments表的主键,保证每条选课记录都是唯一的。
[*]student_id和course_id是外键,分别引用students和courses表,确保选课记录里的学生和课程必须是有效的。
5. 一个例子分析它们怎样协作

(提前用一下插入语句,要不然没法写了~)
举个例子,假设某学生“张三”入学了,他的学生ID是1,课程表里有一个“数据库基础”的课程,课程ID是101。我们现在把这些数据加进来:
-- 向students表插入一条学生记录
INSERT INTO students (student_id, name, age, enrollment_date)
VALUES (1, '张三', 20, '2024-10-26');

-- 向courses表插入一条课程记录
INSERT INTO courses (course_id, course_name)
VALUES (101, '数据库基础');

-- 在enrollments表中插入张三的选课记录
INSERT INTO enrollments (enrollment_id, student_id, course_id, enrollment_date)
VALUES (1, 1, 101, '2024-10-27');
因为enrollments表的student_id和course_id字段分别引用了students和courses表,以是只有当students和courses表里有匹配的student_id和course_id时,选课记录才会插入成功。这种外键约束能确保全部数据之间的关系是符合逻辑的。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【MySQL基础】数据库与表的根本操作:从创建到管理