赞
踩
MySQL 中的表设计是数据库开发的基础。一个好的表设计能够提高数据的存储效率、查询效率和数据完整性,从而确保数据库的可靠性和性能。在进行表设计时,需要注意以下几个方面:
2. 数据增、删、改、查
- 插入数据:INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
- 更新数据:UPDATE table_name SET column_name = new_value WHERE condition;
- 删除数据:DELETE FROM table_name WHERE condition;
- 查询数据:SELECT column1, column2, ... FROM table_name WHERE condition;
3. 数据库索引和优化
- 创建索引:CREATE INDEX index_name ON table_name (column_name);
- 删除索引:DROP INDEX index_name ON table_name;
- EXPLAIN关键字:EXPLAIN SELECT ... 用于分析查询性能,输出查询执行计划。
4. 数据库安全和用户管理
- 创建用户:CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
- 授予权限:GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
- 修改密码:ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
- 删除用户:DROP USER 'username'@'localhost';
5. 应用领域
- Web应用程序:MySQL常用于存储用户信息、网站内容、日志等。
- 企业信息管理:MySQL用于存储企业的客户信息、供应商信息、产品信息等。
- 游戏开发:MySQL用于存储游戏数据、用户信息等。
6.E-R视图
在MySQL中,可以使用CREATE VIEW
语句来创建视图。基本语法格式如下:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW 视图名称 [(属性列)] AS SELECT 字段名称 FROM 表名 [WITH [CASCADED | LOCAL] CHECK OPTION];
可以使用ALTER VIEW
语句来对已有的视图进行修改。语法格式如下:
ALTER VIEW 视图名 [(列名列表)] AS SELECT 语句 [WITH CHECK OPTION]
可以使用DROP VIEW
语句来删除视图。语法格式如下:
DROP VIEW IF EXISTS 视图名 [视图名2…] [RESTRICT | CASCADE];
E-R视图的三要素包括:
1、实体(Entity):实体是指具有独立存在意义的事物或对象,通常对应数据库中的表。在E-R视图中,每个实体都表示一个表,即视图所关联的基本表。CREATE VIEW student_view AS SELECT student_name, student_age FROM student_table;
7.主键外键约束
语法:在MySQL中,可以使用ALTER TABLE语句来添加主键和外键约束。其中,主键用PRIMARY KEY关键字表示,而外键用FOREIGN KEY关键字表示。
概念:主键是指表中某个字段或者多个字段的组合,在表中唯一标识每条记录,并确保每条记录都有主键值。而外键是指表中的一个字段或多个字段,这些字段与另外一个表中的主键产生的关联关系,确保在外键表中不会出现不存在的主键值。
规范:在MySQL中,为了确保数据完整性和一致性,必须遵守以下规范:
8.一、二、三范式的概念
一范式(1NF):满足属性原子性,即每列都是不可再分的,不能存在多个值或者重复数据。适用于大部分数据表格,确保数据的单一性和可维护性。例如,一个订单表格中,如果将商品ID和商品名称合并在同一列中,就违反了1NF。
二范式(2NF):满足所有非主键属性完全依赖于主键,即表中所有非主键字段都必须完整依赖于主键,不能部分依赖于主键。适用于多对一关系的表格,确保数据的唯一性和简洁性。例如,一个学生选课表格中,将学生姓名和课程名称合并在同一列中,就违反了2NF。
三范式(3NF):在满足2NF的基础上,满足所有非主键属性都不依赖于其他非主键属性。适用于多对多关系的表格,确保数据的无冗余性和结构简明性。例如,一个图书馆借书记录表格中,如果包含了读者信息和图书信息,就违反了3NF。
9.冗余
概念:冗余是指在数据库中存储重复或不必要的数据,造成空间浪费和数据不一致等问题。
语法:在MySQL中,冗余可以通过将某个表的某些字段复制到另外一个表格中来实现。例如,将学生的姓名和班级信息存储在选课表格中,虽然方便了表格查询,但却造成了重复和不一致的数据。
运用场景:冗余主要是在一些特定场景下使用,如高并发系统、查询优化等。例如,在高并发系统中,为了提高数据读取速度,可以将部分数据冗余到其他表格中,以减少跨表格的查询次数。但是,应该谨慎使用冗余功能,避免数据不一致性和冗余问题的发生。
10.存储过程语法
- CREATE PROCEDURE procedure_name ([IN | OUT | INOUT] parameter_name data_type [(length)])
- BEGIN
- -- 存储过程的执行体,包括 SQL 语句和流程控制语句等
- END;
其中,procedure_name
为存储过程名称,可以自定义;parameter_name
为存储过程参数名称,可以是 IN
(输入参数)、OUT
(输出参数)或 INOUT
(双向传递参数)中的任何一种;data_type
为数据类型,包括 INT、VARCHAR、DATE 等;length
为可选项,指定数据类型的长度。存储过程的执行体在 BEGIN
和 END
之间,可以包括 SQL 语句和流程控制语句等。
显示存储过程语法:
可以使用以下语句来查看存储过程的定义:
SHOW CREATE PROCEDURE procedure_name;
其中,procedure_name
为要显示的存储过程名称。
调用存储过程语法:
可以使用以下语句来调用存储过程:
CALL procedure_name (param1, param2, ...);
其中,procedure_name
为要调用的存储过程名称,param1
、param2
等为存储过程的参数。
删除存储过程语法:
可以使用以下语句来删除存储过程:
DROP PROCEDURE IF EXISTS procedure_name;
其中,procedure_name
为要删除的存储过程名称。如果要删除的存储过程不存在,则添加 IF EXISTS
关键字可以避免发生错误。
11.函数
函数的概念:
在MySQL数据库中,函数是一种可重用的代码块,用于执行特定的操作或计算,并返回一个值。函数可以被看作是一种特殊的存储过程,它们接受输入参数并返回一个值,而不像存储过程那样在执行期间进行多个操作。
MySQL中的函数有以下几个特点:
1、创建语法如下:
CREATE FUNCTION function_name ([parameter_list]) RETURNS return_type BEGIN -- 函数的执行体,包括 SQL 语句和流程控制语句等 END;
其中,function_name
为要创建的函数名称,parameter_list
为函数参数列表,格式为 parameter_name data_type
,多个参数使用逗号分隔;return_type
为函数返回值类型,包括 INT、VARCHAR、DATE 等。函数的执行体在 BEGIN
和 END
之间,可以包括 SQL 语句和流程控制语句等。
2、调用函数语法如下:
SELECT function_name([arguments]);
其中,function_name
为要调用的函数名称,arguments
为传递给函数的参数。
3、删除函数语法如下:
DROP FUNCTION IF EXISTS function_name;
其中,function_name
为要删除的函数名称。如果要删除的函数不存在,则添加 IF EXISTS
关键字可以避免发生错误。
4、设置触发器的语法
触发器的概念:
MySQL中的触发器(Trigger)是一种与表相关联的特殊类型的存储过程,它在特定的数据库事件(如在表中插入、更新或删除数据时)发生时自动执行。触发器可以用于捕获数据库事件并在事件发生时执行一些自定义的操作。与存储过程不同的是,触发器是隐式触发的,由DBMS自动触发执行。
在MySQL中,一个表可以定义多个触发器,每个触发器处理特定的数据库事件。触发器定义了事件响应时要执行的SQL语句或程序代码。触发器可以在插入、更新、删除表中的数据时自动执行,也可以在指定时间段后执行。
MySQL提供了BEFORE和AFTER关键字,让用户能够根据自己的需要设置触发器的执行时机。如果使用BEFORE关键字,则在触发事件发生之前执行触发器操作;如果使用AFTER关键字,则在触发事件发生之后执行触发器操作。
1.创建语法如下:
CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name FOR EACH ROW BEGIN -- 触发器的执行体,包括 SQL 语句和流程控制语句等 END;
其中,trigger_name
为要创建的触发器名称;{BEFORE | AFTER}
指定触发时机为数据插入、更新或删除前还是后;{INSERT | UPDATE | DELETE}
指定触发器关联的操作类型;table_name
指定触发器所关联的表名;FOR EACH ROW
表示对表中每一行数据进行操作。触发器的执行体在 BEGIN
和 END
之间,可以包括 SQL 语句和流程控制语句等。
2.删除触发器语法如下:
DROP TRIGGER IF EXISTS trigger_name;
其中,trigger_name
为要删除的触发器名称。如果要删除的触发器不存在,则添加 IF EXISTS
关键字可以避免发生错误。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。