黑色星期五之夜加菲猫模组(fnf加菲猫)
96.39M · 2025-10-19
大家好,我是大头,98年,职高毕业,做过上市公司架构师,做过大厂资深开发,管理过10人团队,我是如何做到的呢?
这离不开持续学习的能力,而其中最重要的当然是数据库技术了!
对于所有开发来说,都离不开数据库,因为所有的数据都是要存储的。
基础篇的内容大致如下图所示。
介绍完概念以后,我们可以来看看SQL语句了。SQL语句通常由三类组成。
数据定义 DDL
DCL(Data Control Language)语句用于控制对数据库的访问权限,包括用户权限的授予和撤销。DCL语句主要涉及用户和角色的权限管理,确保数据库的安全性和数据的完整性。
语法
GRANT privilege_type ON object_name TO user_or_role;
示例:授予用户zhangsan对employees表的SELECT和INSERT权限
GRANT SELECT, INSERT ON employees TO 'zhangsan'@'localhost';
语法如下:
REVOKE privilege_type ON object_name FROM user_or_role;
示例:撤销用户zhangsan对employees表的INSERT权限
REVOKE INSERT ON employees FROM 'zhangsan'@'localhost';
语法如下:
SET PASSWORD FOR user = 'new_password';
示例:设置用户zhangsan的新密码为new_password。
SET PASSWORD FOR 'zhangsan'@'localhost' = 'new_password';
语法:
SHOW GRANTS FOR user;
示例如下:查看用户zhangsan的权限
SHOW GRANTS FOR 'zhangsan'@'localhost';
DCL主要是对于权限的控制,希望大家可以自己创建一个数据库a,在创建一个用户a,授予a用户a数据库的权限。进行练习。
DDL(Data Definition Language,数据定义语言)是SQL语言的一部分,用于定义和修改数据库的结构。DDL语句主要涉及数据库、表、索引、视图等的创建、修改和删除操作。这些语句直接影响数据库的结构,但不会直接操作数据本身。
使用 CREATE DATABASE
语句,IF NOT EXISTS
代表没有这个数据库,才会进行创建。如果已经有了,则不会再创建了。
CHARACTER SET
是设置字符集,推荐设置为utf8mb4字符集,COLLATE
则使用默认的就可以了。
这里说一下utf8
和utf8mb4
这两个字符集的区别。
CREATE {DATABASE} [IF NOT EXISTS] db_name
[DEFAULT] CHARACTER SET[=]charset_name
| [DEFAULT] COLLATE[=]collation_name
创建一个测试数据库
create database test;
使用show databases
命令可以查看所有的数据库。也包括一些MySQL自带的数据库。这些数据库存储了MySQL的元数据,具体的等到原理篇会讲到。
SHOW {DATABASES}
[LIKE pattern | WHERE expr]
使用use
指令数据库名称可以选择数据库,或者说进入数据库。只有先进入一个数据库,才能操作这个数据库里面的数据表等等。
除此之外,也可以在操作数据表的前面加上数据库名称,但是那样比较麻烦。
use db_name
使用ALTER DATABASE
指令可以修改数据库。
ALTER DATABASE db_name
DEFAULT CHARACTER SET gb2312
DEFAULT COLLATE gb2312_chinese_ci;
当这个数据库不再使用的时候,可以通过DROP DATABSE
指令来删除掉这个数据库。
IF EXISTS
代表存在则删除,不存在就不会删除。和创建的时候那个指令正好相反。都是可选指令。
DROP {DATABASE} [IF EXISTS] db_name;
数据表被定义为字段的集合
按 行
和列
的格式存储
每一行代表一条记录
每一列代表记录中一个字段的取值
使用create table
指令可以创建数据表,后面跟的是表名称和字段。
temporary
表示临时表,临时表存放在内存中。
字段类型常用的如下:
DEFAULT CURRENT_TIMESTAMP
作为默认值,还可以使用ON UPDATE CURRENT_TIMESTAMP
来实现自动更新。float
和double
来存储小数。create [temporary] table [if not exists] tbl_name
(
字段名1 数据类型 [列完整性约束条件] [默认值]
)
对于创建的表结构不满意,可以通过ALTER TABLE
指令来修改表结构。
ALTER TABLE table_name
下面介绍一些子句,配合alter table命令来执行。
当一个表不再使用的时候,也可以使用drop table
将它删除。
drop [temporary] table [if exists]
可以通过SHOW CREATE TABLE
来查看表结构。
SHOW CREATE TABLE tablename;
索引是提高数据文件访问效率的有效方法,比如MySQL中的B+树索引、hash索引、全文索引等。
缺点
关于索引的具体讲解将放在原理篇讲解,这里以介绍DDL语句为主,有个概念就可以了。
想要创建一个索引可以使用create index
命令,unique
表示创建唯一索引。
index_col_name
表示要将索引创建在哪个字段上面,也可以是多个字段。
create [unique] index index_name
on table_name(index_col_name)
示例,在user表上的email
字段上创建一个索引,索引名称是email_idx
。
create index email_idx
on user(email);
当索引不再使用的时候,可以删除索引,使用命令drop index
可以删除索引。
drop [unique] index index_name
on table_name
示例:删除刚才建立的email_idx
索引。
drop index email_idx
on user;
什么是视图
视图的优点
想要创建视图,可以使用create view
指令。
or replace
防止报错,存在替换,不存在创建。
with check option
增删改查的时候检查视图条件。
select_statement
是一段select查询语句。视图的本质就是这一段select查询语句。
create [OR REPLACE] view view_name [(col_list)]
as select_statement
[with check option]
示例:创建一个zhangsan
用户的登录记录的视图。
create view zhangsan
as select * from login_log where user = ‘zhangsan’
想要修改视图,可以使用alter view
指令。
修改视图其实就是修改这个查询语句。当然了,也可以修改其他的属性等。
alter view view_name [(col_list)]
as select_statement
[with check option]
当视图不需要了,可以使用drop view
指令删除视图。
DROP VIEW [IF EXISTS] view_name
示例:删除刚才创建的视图zhangsan
DROP view zhangsan
和上面说的查看表的定义一样,也可以查看视图的定义。
show create view view_name
存储过程
是一组为了完成某项特定功能的 SQL语句集
代码
它可以由声明式的sql语句和过程式sql语句组成DELIMITER $$
是用户定义的MYSQL 结束符
参数:in|out|inout 参数名 参数类型
DELIMITER $$
create procedure sp_name(参数)
BEGIN
body //存储过程代码
END $$
示例:查询员工表的名称、部门和薪资。
DELIMITER //
CREATE PROCEDURE get_employee_details(IN emp_id INT)
BEGIN
SELECT name, department, salary
FROM employees
WHERE id = emp_id;
END //
DELIMITER ;
调用需要使用call
指令来调用。
call sp_name(参数)
示例:调用刚才的存储过程。
call get_employee_details(1);
如果存储过程不再需要了,则可以通过drop procedure
指令来删除它。
drop procedure sp_name
示例:删除刚才的存储过程。
drop procedure get_employee_details;
存储函数由SQL语句和过程式语句组成。
使用 create function
指令可以创建一个存储函数。
create function sp_name(参数)
returns type
routine_body //主体
示例:给定id号返回性别。
use test; //进入数据库test
delimiter $$ //声明结束符号
create function fn_search(cid int) //创建函数fn search,参数为cid,int类型
returns char(20) //声明返回值类型char20
deterministic
begin //开始
declare sex char(20) //声明一个变量sex 类型char20
select cust_sex into sex from customers where id = cid; //select语句,把查询出来的cust_sex字段内容放入变量sex中
if sex is null then //if判断,如果sex变量是null,则返回'没有该客户'
return(select '没有该客户');
else //如果sex变量不是null
if sex = 'F' then //则判断是F的话,返回'女'
return(select '女');
else // 不然的话就返回'男'
return(select '男');
end if;
end if;
end $$
使用 select 调用存储函数。
select sp_name(参数);
示例:调用刚才的存储函数。
select fn_search(1)$$
当存储函数不再使用的时候,可以使用drop function
将它删除。
drop function fun_name
示例:删除刚才的存储函数。
drop function fn_search
96.39M · 2025-10-19
279.09M · 2025-10-19
123.02M · 2025-10-19