乌市泽哥 发表于 2024-10-20 07:35:08

【MySQL 保姆级教学】表结构的操作(4)

1. 定义和语法

在数据库中,表是用于存储和组织数据的基本结构。表由行(记录)和列(字段)组成,每一行代表一个数据记录,每一列代表一个特定的数据属性。表的定义包罗表的名称、列的定义、数据范例、约束和其他属性。
表的定义要素:


[*]表名:表的唯一标识符,用于在数据库中引用该表。
[*]列名:表中每一列的名称,用于标识该列存储的数据。
[*]数据范例:每列的数据范例,定义了该列可以存储的数据种类。
[*]约束:用于确保数据的完整性和一致性,常见的约束包罗主键、外键、唯一性、非空等。
[*]索引:用于加速数据检索的特殊数据结构。
[*]其他属性:如默认值、注释等。
语法:
   CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
说明:
table: 表示列名。
datatype :表示列的范例。
character set :字符集,如果没有指定字符集,则以所在数据库的字符集为准。
collate: 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。
2. 创建表 CREATE

2.1 创建表的本质

创建一个study表
下令:create table study ( score int);
这个下令中,study是表名,score是列名,int是范例。
https://i-blog.csdnimg.cn/direct/b2a636dbcdbe43d1b1c06f8364a2efbd.png
那么,创建表的本质是什么呢?
我是在Linux中,打开存储数据库test的目次:
下令:ls /var/lib/mysql/test
https://i-blog.csdnimg.cn/direct/fc00ccd9d9534ed3b53c3a0e19b7e9bb.png
同砚们可以看到,有两个文件名和我创建的表名一样,所以,创建表的本质就是创建一个文件。
说明:
差别的存储引擎,创建表的文件不一样。
study 表存储引擎是 Innodb ,在数据目中有二个差别的文件,分别是:
study..frm:表的结构信息。
study.ibd:表的数据和索引。
2.2 表的存储引擎

Innodb 存储引擎:


[*].frm 文件:是 Form 文件的缩写,用于存储表的元数据(即表结构信息)。每个表都有一个对应的 .frm 文件,无论使用哪种存储引擎。
[*].ibd 文件:是 InnoDB Data 文件的缩写,用于存储 InnoDB 存储引擎表的数据和索引。每个使用 InnoDB 存储引擎的表都有一个对应的 .ibd 文件。
MyISAM 存储引擎:


[*].frm 文件:存储了表的结构信息,包罗列的名称、数据范例、索引定义、约束等。这些信息用于描述表的元数据。
[*].MYD 文件:存储了表的实际数据行。数据按照行的次序存储,每行数据按照列的定义举行分列。
[*].MYI 文件:
存储了表的索引信息。索引用于加速数据的检索,包罗主键索引、唯一索引和普通索引。
2.3 表的字符集和校验规则

表的时间,有字符集和校验集的设置:

[*] 字符集:定义了数据库中可以存储的字符及其编码方式。字符集决定了每个字符在盘算机中如何表示,即每个字符占用多少字节以及具体的二进制编码。
[*] 校验集:定义了字符会集的字符如何举行比较和排序。同一个字符集可以有差别的校验集,差别的校验集决定了字符的大小写敏感性、重音敏感性等。
数字存储的时会使用字符集,数据查找或者匹配,这样会举行数据比较,想要举行比较就需要先读取出来,读取使用校验集,支持数据库举行比较使用的校验集,本质也是一种读取数据库中数据的编码格式
举个简单的例子,如果你存储数据使用浮点范例,而取数据用字符串范例,这样取出来的数据肯定会乱套的。
总之,数据库无论对数据做任何操作,都必须保证操作和编码必须是一致的。
当创建数据库时不设置字符集和校验集,会默认使用mysql配置的字符集和校验集
示例:
创建一个表,同时设置字符集和校验集。
下令:
   create table study(
id int primary key,
name varchar(10),
score int
) charset utf8 collate utf8_general_ci;
同砚们想更加深入的相识字符集和校验集,请看 数据库的操作(第三章)
2.4 创建表实例


[*] 创建一个study表
下令:create table study ( score int);
这个下令中,study是表名,score是列名,int是范例。
[*] 创建一个表,每列加上注释
下令:
       create table test(
id int comment ‘学号’,
name varchar(8) comment ‘姓名’,
score int comment ‘分数’);
    https://i-blog.csdnimg.cn/direct/91897ec29b0d4ea19f4dda609a784a63.png
[*] 创建一个表,id 设置为主键,同时设置字符集和校验集。
下令:
       create table study(
id int primary key,
name varchar(10),
score int
) charset utf8 collate utf8_general_ci;
    https://i-blog.csdnimg.cn/direct/4b0b5b02ebce4e77b9f4b8c714bbb1b0.png
3. 检察表结构 DESC

3.1 作用


[*]相识表的定义


[*]列信息:检察表中的全部列及其数据范例、长度、是否答应为空等。
[*]约束信息:检察表中的主键、外键、唯一性约束、检查约束等。
[*]索引信息:检察表中的索引,包罗主键索引、唯一索引、普通索引等。

[*]确保数据模型的正确性


[*]验证列定义:确保表中的列定义符合业务需求,没有遗漏或多余列。
[*]验证约束:确保表中的约束(如主键、外键、唯一性约束)正确无误,以保证数据的完整性和一致性。

[*]优化查询性能


[*]索引分析:相识表中的索引情况,帮助你优化查询性能。索引可以明显提高查询速率,但过多的索引会增长写操作的开销。
[*]数据范例选择:确保选择了符合的数据范例,以优化存储和查询性能。

[*]举行数据迁移和备份


[*]备份和规复:在备份和规复表时,相识表结构可以帮助你确保备份文件的完整性和正确性。
[*]数据迁移:在将数据从一个数据库迁移到另一个数据库时,相识表结构可以确保数据的一致性和兼容性。

[*]调试和问题排查


[*]调试查询:在调试复杂的查询时,相识表结构可以帮助你更好地理解查询的执行计划和性能瓶颈。
[*]问题排查:在遇到数据问题时,检察表结构可以帮助你快速定位问题所在。
3.2 示例

语法:desc 表名;
示例:
下令:desc test;
https://i-blog.csdnimg.cn/direct/83c095b62e454d27b824610a7667aadd.png字段其实就是表
4. 修改表结构 ALTER

4.1 添加列 ADD

语法:
   ALTER TABLE table_name
ADD column_name datatype ;
示例:

[*] 在表中添加一个 sex 的字段
下令:
       ALTER TABLE table_name
ADD column_name datatype ;
    https://i-blog.csdnimg.cn/direct/d360c38754194d8c8778058e18e4130b.png
[*] 添加一个 age 的字段,在name 的后面
下令:
       alter table test
add age int comment ‘年龄’ after name;
    https://i-blog.csdnimg.cn/direct/11c72cb762324c0fb2fd01e51c45967c.png
4.2 修改列 MODIFY

语法:
   ALTER TABLE table_name
MODIFY column_name new_datatype ;
注意:modify 是把原来的字段属性覆盖,而不是想改什么属性就只改变什么属性。在修改表的时间需要检察创建表show create table 表名;
示例:

[*] 检察创建表
下令:show create table test ;
https://i-blog.csdnimg.cn/direct/055c7439293e40d68709d429ffa53358.png
我们可以看到表的具体结构,方便对表的举行修改。
[*] 修改表的 age ,字段范例改为 tiny,放在 name 后
下令:
       alter table test
modify age tinyint comment ‘年龄’ after name;
    https://i-blog.csdnimg.cn/direct/2732a99c7036448da3d15e029a6ecfa7.png
4.3 删除列 DROP

语法:
   ALTER TABLE table_name
DROP COLUMN column_name;
注意:删除字段一定要小心,删除字段及其对应的列数据都没了
示例:

[*]删除表的 score 列(省略 column)
下令:alter table test drop score;
https://i-blog.csdnimg.cn/direct/f34e9f0f3b514bbbab199e338589d42d.png
[*]删除表的 sex 列(省略 column)
下令:alter table test drop column sex;
4.4 更改列名 CHANGE

语法:
   ALTER TABLE table_name
CHANGE old_column_name new_column_name new_datatype ;
注意:change 是把原来的字段属性覆盖,而不是想改什么属性就只改变什么属性。在修改表的时间需要检察创建表show create table 表名;
示例:

[*] 检察创建表
下令:show create table test ;
https://i-blog.csdnimg.cn/direct/055c7439293e40d68709d429ffa53358.png
[*] 更改列name 名字
下令:
       alter table test
change name student varchar(8) comment ‘姓名’;
    https://i-blog.csdnimg.cn/direct/1bfeb45218eb4517a98c592403a30ac9.png
5. 修改表名 RENAME

语法:
ALTER TABLE old_table_name RENAME TO new_table_name;
示例:

[*] 修改表名
下令:alter tablee test rename to study;
[*] 修改表名,不使用 to
下令:alter table test rename study;
6. 删除表 DROP

语法:
DROP TABLE tbl_name [, tbl_name] ...
示例:
下令:drop table test;

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【MySQL 保姆级教学】表结构的操作(4)