首页 > 自考资讯 > 高考百科

MySQL:入门指南与深度解析(mysql源码深度解析)

小条 2024-09-30

一、SQL 与 MySQL 的基础认知

SQL是一种结构化查询语言,具有交互性强、用户体验好的特点。充分利用SQL语言的数据库管理系统提高了计算机应用系统的工作质量和效率。它可以在终端中单独使用,也可以作为子语言与其他编程语言配合使用,优化程序的功能,为用户提供更全面的信息。

数据库主要分为关系型数据库和非关系型数据库。关系型数据库主要以二维表的形式存储数据,如MySQL、ORACLE、DB2、Sqlserver、SQLite等。 SQL是所有关系数据库管理系统都必须遵循的规范,其分类包括DDL(数据定义语言)、DML(数据操作语言)、DQL(数据查询语言)、DCL(数据控制语言)等。 DDL 用于使用诸如create、modify 和delete 等关键字来定义数据库对象。 DML 用于使用插入、删除和更新等关键字更新数据库表中的记录。通过key查询数据库表中的记录。包括诸如select、from 和where 等单词。 DCL 用于定义数据库权限和安全级别。

MySQL是最流行的关系数据库管理系统之一,必须遵循SQL规范。 SQL规范类似于普通话,所有数据库厂商都遵循ISO标准,MySQL特定的关键字类似于方言。 MySQL 6 现已可供购买,本课程使用社区的开源免费版本。

二、MySQL 的连接与数据类型

6cc23265b46a4519ba6cd12a2cec1e2d~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728314839&x-signature=b2k6nOQttspy202dDJTmlK8ZIvM%3D

(一)MySQL 连接方式

登录方法: 方法一:mysql -u 用户名-p 密码。方法二:点击mysql -u用户名-p,回车,输入密码。方法三:mysql -h 主机IP地址-u 用户名-p 按回车键,输入密码。使用MySQL.sock 进行本地登录(例如mysql -S /mysqldata/3309/socket/mysql.sock -u root -p)。使用mysql_config_editor 工具加密用于登录MySQL 服务的凭据并将其存储在.mylogin.cnf 文件中,提供最安全的无密码登录。编辑.my.cnf 文件以启用无密码登录。但是,请确保用户可读该文件,以避免暴露以明文形式存储的密码。编辑/etc/my.cnf 文件以启用无密码登录。然而,这种方法的最大问题是密码以所有用户可见的明文形式存储在配置文件中。这是极其不安全的。不推荐。如何退出: 方法一:退出。方法二:退出。方法三:\q.连接指定主机:在命令行终端中,使用命令mysql -h 主机名-u 用户名-p 连接MySQL 中的指定主机。连接成功后,当不再需要连接时,可以使用exit退出MySQL命令行工具。

(二)MySQL 数据类型

Integer:int,默认长度为11位。例如,它存储整数类型的数据,例如用户号码。 float:float:Python的默认浮点类型。可用于存储包括小数点在内的数值数据。 double:Java 的默认浮点类型。适合存储精度要求较高的浮点数。小数(x,y):x为有效位数,默认为10,y为小数位数,默认为0。这提供了更精确的十进制存储。日期和时间:日期:存储年、月、日,例如用户的出生日期。 datetime:存储用于记录特定时间点的年、月、日、时、分、秒。 timestamp:从1970 年1 月1 日至今的时间戳,单位为秒/毫秒。可用于记录事件发生的时间。字符串类型: char():定长字符数据。适合定长字符串存储。 Varchar(可变长度)在Python 中相当于字符串,在存储可变长度字符串方面提供了更大的灵活性。

(三)MySQL 常用编码

gbk:属于中文编码,主要用于解决汉字编码问题。 UTF-8:国际编码。它可以解决不同国家的字符编码问题,广泛应用于多语言环境下的数据存储。 SQL 代码文件通常以.sql 结尾。

三、MySQL 的核心操作

153b72fbf24043d1af56cab54bc47a98~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728314839&x-signature=UZS8wmeMKSFbPN3MEDmRDy08G4Y%3D

(一)数据库操作

数据库的英文单词是database。

创建数据库:创建数据库【如果不存在】库名【DEFAULT CHARACTER SET utf8】;例如,如果库已经存在,再次创建就会报错。您还可以使用诸如create dataset test1; 之类的方法来解决此问题。编码(例如,创建数据库test3 CHARACTER SET utf8;)。删除数据库:在MySQL 中,有多种方法可以通过删除数据库名称来删除数据库。这将直接删除表信息,但如果删除用户表,则将无法检索数据。您可以使用删除表用户。 truncate(表)删除表数据,而不是表结构。这是第二快的,不能与where 一起使用。例如,要删除用户表,请使用truncate table user。 delete from 是删除表中的数据。删除表中的结构是最慢的,但可以与删除指定行等操作结合使用。对于user表,可以使用delete from user删除user_id=1的用户表中的指定记录。三种方法的区别如下:相似之处在于,truncate 和delete 不使用where 子句,而drop 则删除表中的数据。 drop和truncate都是执行后自动提交的DDL语句(数据定义语言)。不同之处在于语句的类型不同。区别在于delete语句是数据库操作语言(DML),而truncate和drop是数据库定义语言(DDL)。删除表结构时,truncate 和delete 只会删除数据,不会删除表结构。 truncate 删除后重建索引(插入新数据后ID从0开始记住)。另一方面,删除不会删除索引(不会删除新数据)。 (即使删除数据索引后,插入的数据仍在继续增长),drop 语句删除表。从安全角度来看,该结构包括依赖约束、触发器、索引等,drop和truncate不记录MySQL日志。删除后无法回滚。删除操作会记录在MySQL日志中,并且可以回滚。从返回值来看,delete操作后返回delete,truncate返回0或-1。 -1 成功,-1 失败)。总结一下,如果要删除表结构使用drop,如果要保留表结构并删除所有记录使用truncate,如果要保留表结构并删除部分记录使用delete use。切换数据库:使用数据库名称。例如,使用测试1。显示所有数据库:显示数据库。显示指定库的数据库创建语句(show createdatabase 库名称;例如,show createdatabase test1;)。检查当前使用的数据库:selectdatabase();

(二)表的基本操作

0da74f643ea04978847379c3ceff8045~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728314839&x-signature=ONXtTl%2Fj9Qdr6kLWmqQWQjpASK8%3D 与表相关的英文单词是table。

创建表:create table 表名(字段名字段类型[constraint],字段名字段类型[constraint],); create 不存在的话可以使用,比如table if not isnssstudent2(id int, name varchar(100),age int); 避免已经存在的错误。删除表:MySQL 中有多种删除表的方法,与数据库删除类似,删除表有三种方式:删除表、截断表和删除。具体差异请参见数据库删除说明。例如删除表Student2;更改表名称。将表的旧表名更改为新表名。例如,将表Student 重命名为Stu1。显示所有表:显示表;显示指定表的结构。可以使用DESCRIBE、DESC、EXPLAIN、SHOW COLUMNS FROM 或SHOW FIELDS FROM 表名等语句,并且具有相同的效果。例如,desc Stu1;直接使用数据库中的表。语法为数据库名.表名。更改表:创建表后,如果对表的结构不满意,可以使用ALTER TABLE语句更改原始表的结构,例如添加或删除列或更改原始列类型。例如重命名列和表。具体语法为ALTER TABLE table_name [更改选项]。 { ADD COLUMN 列名类型CHANGE COLUMN 新列名ALTER COLUMN 列名| DROP DEFAULT } | MODIFY COLUMN 列名| 新表名| ,要更改表名,请使用ALTER TABLE 旧表名RENAME [TO] 新表名。要更改表的字符集,请使用ALTER TABLE table_name [DEFAULT] CHARACTER SET character set_name [DEFAULT]。 COLLATE 排序规则名称。要更改字段名称,请使用ALTER TABLE 表名。更改使用旧字段名称、新字段名称和新数据类型。要更改字段的数据类型,请使用ALTER TABLE 表名、MODIFY COLUMN 列名、新数据类型。 要删除字段,可以使用ALTER TABLE table_name DROP COLUMN column_name。操作MySQL表是数据库管理中非常重要的一部分,熟悉这些操作将有助于您更好地管理和维护数据库。

四、MySQL 的进阶应用

1. 创建带有外键的表

要创建带有外键的表,可以使用以下语法:创建表child_table (id INT NOT NULL,parent_id INT, name VARCHAR(255),FOREIGN KEY (parent_id) REFERENCESparent_table (id) );例如,要创建部门表和课程表,请编写:deptnames varchar(20),credits int,外键(deptnames)参考部门(dept_name));在实际应用中,如果要删除部门表和课程表,需要先删除课程表,然后再删除部门表。

2. 外键的作用

外键在MySQL 中发挥着重要作用。主要包括以下几点:

维护数据的一致性和完整性:确保子表中的数据与父表中的相关数据相对应,防止无效数据。例如,在订单和产品表中,订单表中的产品ID 外键引用产品表中的产品ID 主键。当产品表中的一条记录被删除时,外键约束确保该操作先于订单表中的所有记录执行,从而防止数据不一致。强制数据级联:可以设置外键规则自动级联操作。当您删除或更新表的主键记录时,您还可以操作与子表关联的数据。例如,如果设置ON DELETE CASCADE和ON UPDATE CASCADE,则当父表中的数据被删除或更新时,子表中的相关数据也会自动删除或更新。优化查询性能:通过使用外键索引,MySQL可以优化表之间的查询性能。索引允许您快速查找子表中引用特定主键记录的记录,从而减少扫描大量数据的需要。

3. 数据库设计的重要性

良好的数据库设计可以显着提高应用程序性能、可维护性和可扩展性。设计数据库时,必须考虑数据一致性、完整性、可用性和可扩展性等因素。例如,可以使用数据库规范化来减少数据冗余并提高数据完整性,或者将易失性和非易失性数据部分分开以提高读写性能。

4. 设置自增键初始值

MySQL 允许您使用ALTER TABLE 语句设置自动增量键的初始值。例如,alter table test AUTO_INCREMENT=1000; 将表test 的自动增量键的初始值设置为1000。如果要将自增主键重置为零,请使用truncate table 表名方法或使用dbcc checkident('table_name', reseed, new_reseed_value) 将当前值设置为new_reseed_value。

5. 使用 pymysql 进行 Python 与 MySQL 交互

Python 可以使用pymysql 库与MySQL 数据库交互。安装pymysql 库后,您可以使用以下代码连接到MySQL 数据库。

导入pymysql

#打开数据库连接

db=pymysql.connect(主机='localhost',端口=3306,用户='root',密码='',数据库='test')

您可以使用以下代码来创建表、插入数据、查询数据、更新数据和删除数据。

#创建表

光标=db.cursor()

Cursor.execute('如果用户存在则删除表')

sql='创建表用户(id INT(11) NOT NULL AUTO_INCRMENT,名称VARCHAR(20) NOT NULL,电子邮件VARCHAR(30) NOT NULL,密码VARCHAR(30) NOT NULL,主键(id))'

光标.执行(SQL)

#插入数据

sql='将用户(姓名、电子邮件、密码)插入值(%s、%s、%s)'

值=[('Alice', 'alice@email.com', '123456'), ('鲍勃', 'bob@email.com', '789012'), ('查理', 'charlie@email.com ' ','345678')]

游标.executemany(sql, 值)

db.commit()

# 查询数据

sql='从用户中选择*'

光标.执行(SQL)

结果=游标.fetchall()

结果行:

id=行[0]

名称=行[1]

电子邮件=行[2]

密码=行[3]

print('{} - {} - {} - {}'.format(id、姓名、电子邮件地址、密码))

# 更新数据

sql='更新用户SET 密码=%s WHERE 名称=%s'

值=('abcdef', '爱丽丝')

游标.执行(SQL,值)

db.commit()

# 删除数据

sql='电子邮件=从用户%s 中删除'

值=('bob@email.com',)

游标.执行(SQL,值)

db.commit()

#关闭数据库连接

db.close()

版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。

猜你喜欢