在学习 MySQL 过程中,我积累了一些经验和心得,包括编程思路、技巧运用等方面,现在分享给大家。
理解数据库基本原理
在学习任何数据库系统之前,首先需要理解数据库的基本原理。这包括:
- 数据模型:掌握关系型数据库中的数据组织方式,如表、行、列等。
- 关键概念:理解主键、外键、索引等重要概念的含义和作用。
当然了,我们在学习数据库的过程中肯定要学习数据类型,下面是一些常见的数据类型:
整数类型:
int
:标准的整数类型,通常有4字节(32位),可以存储很广范围的整数。tinyint
:非常小的整数,通常有1字节(8位),用于存储范围很小的整数值,比如状态标志(0或1)。smallint
:小整数,通常有2字节(16位),用于存储较小的整数值。mediumint
:中整数,通常有3字节(24位),用于存储中等大小的整数值。bigint
:大整数,通常有8字节(64位),用于存储非常大的整数值。
整数类型的修饰符:
unsigned
:表示该整数类型只能存储非负数(正数或零)。zerofill
:表示数字位数不足时,会用0来填充至指定长度。通常与unsigned
一起使用。
浮点类型和定点小数类型:
float
:单精度浮点数,通常有4字节,用于存储带有小数部分的数值,但精度较低。double
:双精度浮点数,通常有8字节,用于存储带有小数部分的数值,精度比float
高。decimal
:定点小数类型,用于存储精确的小数,例如货币。可以指定小数点前后的位数。numeric
:与decimal
类似,用于存储精确的数值,也可以指定小数点前后的位数。fixed
:是decimal
的同义词,用于存储精确的小数。
字符类型:
char
:定长字符类型,用于存储固定长度的字符串。当实际数据长度小于定义的长度时,会使用空格填充。varchar
:可变长字符类型,用于存储可变长度的字符串。实际存储时,只会占用实际数据长度的空间。
二进制类型和特殊类型:
binary
:定长二进制类型,用于存储二进制数据,类似于char
,但存储的是二进制字符串。enum
:枚举类型,用于存储预定义的值列表中的一个值。set
:集合类型,用于存储预定义的值列表中的一个或多个值(多选)。bit
:位字段类型,用于存储位值,通常用于存储布尔值或位掩码。
数据库设计与规范化
良好的数据库设计是保证数据库高效运行的关键。在数据库设计领域,范式是指一套规则,用来指导如何设计一个好的数据库结构,以避免数据冗余和操作异常,下面是第一到第三范式的解释
一范式(1NF)
第一范式是最基本的规范化形式,其主要要求是表中的每个字段都必须只包含原子值,即每个字段都不能再分解成更小的单位。实现第一范式的表格应该确保:
- 每一列都是不可再分的最小数据单位。
- 表中的每一行都要有唯一性,通常通过引入一个唯一的标识符,即主键,来实现。
第二范式(2NF)
在满足第一范式的基础上,第二范式进一步要求表中的所有非主键列都必须完全依赖于整个主键(对于复合主键,意味着不能只依赖于主键的一部分)。这主要是为了解决部分依赖问题,即某些属性仅依赖于主键的一部分而不是整个主键。实现第二范式需要:
- 如果主键是复合的,那么表中的每个非主键属性必须依赖于整个复合主键。
- 分解表格以确保每个非主键属性仅依赖于主键。
第三范式(3NF)
第三范式在第二范式的基础上更进一步,要求非主键列必须直接依赖于主键,而不是通过另一个非主键列依赖于主键(解决传递依赖问题)。换句话说,非主键列不能依赖于其他非主键列。要达到第三范式,需要:
- 消除表中所有的传递依赖,即非主键属性不应依赖于其他非主键属性。
- 进一步分解表格以确保每个非主键属性只直接依赖于主键。
遵循这些范式可以大大提高数据库的结构清晰度、减少数据冗余和提高数据完整性。
数据库操作:
1、创建数据库:
CREATE DATABASE 数据库名;
2、查看所有数据库:
show databases;
3、选择数据库:
USE database 数据库名;
4、删除数据库:
DROP DATABASE 数据库名;
数据表操作:
1、创建数据表:
举例:
USE school;
CREATE TABLE student(
id int not null,
name VARCHAR(10) not null,
age int not null,
telnum int ,
addres VARCHAR(50)
);
2、查看数据库的所有数据表:
SHOW TABLWS;
3、查看数据表结构:
DESC 数据表名;
4、修改数据表(添加新列):
ALTER TABLE 数据表名
ADD column_name datatype;
5、删除数据表:
DROP TABLE 数据表名;
6、插入数据:
举例插入一条图书信息:
INSERT INTO tbl_bookinfo
VALUES ('24-1', '24', '手搓原子弹', '张三', CURDATE(), '第一版', 130000, 650, '出版社', 'T');
7、查询数据:
SELECT * FROM 数据表名;
8、更新数据:
举例我们想要更新一个特定员工的薪水。假设我们知道员工的ID是10,我们想要将他的薪水增加1000。
UPDATE employees
SET salary = salary + 1000
WHERE id = 10;
9、删除数据:
举例我们想要删除ID为10的员工记录,那我们就可以这样写:
DELETE FROM employees
WHERE id = 10;
大家在学习数据库的过程中肯定少不了约束,约束是用来确保数据库表中数据的准确性和可靠性的规则
我们常见的数据库约束有下面几种:
1.主键约束(PRIMARY KEY):
主键是表中的一个列或列的组合,其值能唯一标识表中的每一行。这个约束保证列中的值是唯一的,并且不允许为空。
2.外键约束(FOREIGN KEY):
外键用于表之间的链接,它是一个表中的列,该列的值必须在另一个表的主键中有对应值。这种约束用于维护跨表的数据完整性。
3. 唯一约束(UNIQUE):
唯一约束确保一列或列组合中的所有值都是唯一的。这与主键类似,但允许有空值。
4.检查约束(CHECK):
检查约束用于确保列中的值满足指定的条件。例如,可以确保一个数值列中的值不低于零,或者一个字符串列只包含特定的字符。
5.非空约束(NOT NULL):
这个约束确保列中的值不能为 NULL,即每一行在该列中必须有值。
6.默认值约束(DEFAULT):
默认值约束为列定义一个默认值。如果在插入行时没有为该列提供值,将自动填充默认值。
数据库函数
我们在学习数据库的过程中肯定是少不了函数的学习,下面是一些常用函数的举例:
1. 字符串函数
处理和操作字符串数据。例如,CONCAT()
用于连接两个或多个字符串,LENGTH()
返回字符串的长度,而 UPPER()
将字符串转换为大写。
2. 数值函数
用于进行数学计算。例如,ABS()
返回一个数的绝对值,ROUND()
用于四舍五入数值到指定的小数位数。
3. 日期和时间函数
处理日期和时间数据。例如,NOW()
返回当前的日期和时间,DATEDIFF()
计算两个日期之间的天数。
4. 聚合函数
在多行数据上执行操作并返回单一结果。例如,SUM()
用于计算列的总和,AVG()
计算平均值,COUNT()
返回行数。
5. 控制流函数
用于执行逻辑判断和选择不同的代码路径。例如,IF()
提供了如果条件为真则执行的结果,CASE
用于更复杂的条件判断。
安全管理与备份
数据库安全和备份是数据库管理的重要组成部分。
- 用户权限管理:为用户分配适当的权限,限制其对数据库的访问和操作。
- 定期备份:定期备份数据库,防止数据丢失和灾难恢复。
结语
MySQL 是一门强大而灵活的数据库系统,掌握它不仅可以提高我们的技术水平,还可以为我们的职业发展打下良好的基础。在学习 MySQL 的过程中,不仅要注重理论知识的学习,还要注重实践经验的积累,通过不断地学习和实践,不断地提高自己的数据库技能水平。希望以上心得能够对正在学习 MySQL 的朋友们有所帮助。