mysq内外连接+索引知识点梳理

本篇文章继续给大家带来MySQL的知识点梳理

目录

内连接

外连接

左外连接

右外连接

索引

创建索引的三种方式

主键索引的特点

唯一索引的特点

普通索引的特点

查询索引的三种方式

删除索引的三种方式

索引的创建原则

 MyISAM vs InnoDB

聚簇索引和非聚簇索引


内连接

概念:利用where子句对两种表形成的笛卡儿积进行筛选

基本语法:select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

举例

解释:从表EMP和DEPT查询员工姓名和部门名称,条件是要求EMP表中的部门号和DEPT表中的部门号要相同,并且员工姓名必须是SMITH

外连接

外连接分为左外连接和右外连接

左外连接

前提:联合查询

概念:左侧的表完全显示我们就说是左外连接。

基本语法:select 字段名  from 表名1 left join 表名2 on 连接条件;

右外连接

前提:联合查询

概念:左侧的表完全显示我们就说是左外连接。

基本语法:select 字段 from 表名1 right join 表名2  on 连接条件;

索引

作用:提高查询速度

索引的种类:主键索引、普通索引、唯一索引、全文索引

创建索引的三种方式

第一种:

第二种:

第三种:

由于第一种对于我们而言比较熟悉,因此直接总结第二和第三种

总结:create table 表名(字段 属性,字段 属性)键名(字段名);

alter table 表名 修改的操作(如删除 drop,添加 add)键名 (字段名);

主键索引的特点

1.一个表中,最多有一个主键索引,当然可以使符合主键

2.主键索引的效率高(主键不可重复)

3.创建主键索引的列,它的值不能为null,且不能重复

4.主键索引的列基本上是int

唯一索引的特点

1.一个表中,可以有多个唯一索引

2.查询效率高

3.如果在某一列建立唯一索引,必须保证这列不能有重复数据

4.如果一个唯一索引上指定not null,等价于主键索引

普通索引的特点

1.一个表中可以有多个普通索引,普通索引在实际开发中用的比较多

2.如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引

查询索引的三种方式

第一种:show keys from 表名;

第二种:show index from 表名;

第三种:desc 表名;

删除索引的三种方式

第一种: alter table 表名 drop primary key;//删除主键索引

第二种:alter table 表名 drop index 索引名;

第三种:drop index 索引名 on 表名;

索引的创建原则

1.比较频繁作为查询条件的字段应该创建索引

2.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

3.更新非常频繁的字段不适合作创建索引

4.不会出现在where子句中的字段不该创建索引

总结:

1.频繁作为查询条件的字段(唯一性太差除外)------------可以创建为索引

2.更新频繁的字段、不出现在where子句中的字段----------不能创建索引

 MyISAM vs InnoDB

MyISAM: 索引Page和数据Page分离,也就是叶子节点没有数据,只有对应数据 的地址。

InnoDB: 将索引和数据放在一起的。

聚簇索引和非聚簇索引

非聚簇索引:用户数据与索引数据分离的方案

聚簇索引:用户数据与索引数据在一起索引方案

本篇文章的内容就先到这,下期文章再见。

要基于Tkinter和MySQL开发登录界面系统,您可以按照以下步骤进行操作: 1. 安装MySQL数据库和Python的MySQL驱动程序,比如PyMySQL。 2. 创建MySQL数据库,并在其中创建一个名为“users”的表,用于存储用户的用户名和密码。 3. 使用Tkinter创建登录界面,包括用户名和密码输入框、登录按钮等组件。 4. 在Python中使用PyMySQL连接MySQL数据库,并在登录按钮的事件处理程序中编写代码,向MySQL数据库查询用户输入的用户名和密码。 5. 如果查询结果匹配,则显示“登录成功”消息框,否则显示“登录失败”消息框。 以下是示例代码,可以帮助您开始开发此系统: ```python import pymysql import tkinter as tk from tkinter import messagebox # 连接MySQL数据库 conn = pymysql.connect(host='localhost', user='root', password='', db='test') cursor = conn.cursor() # 创建登录界面 root = tk.Tk() root.title('登录界面') root.geometry('300x200') username_label = tk.Label(root, text='用户名:') username_label.pack() username_entry = tk.Entry(root) username_entry.pack() password_label = tk.Label(root, text='密码:') password_label.pack() password_entry = tk.Entry(root, show='*') password_entry.pack() # 处理登录按钮的事件 def login(): username = username_entry.get() password = password_entry.get() sql = "SELECT * FROM users WHERE username='%s' AND password='%s'" % (username, password) cursor.execute(sql) result = cursor.fetchone() if result: messagebox.showinfo('登录成功', '欢迎您,%s!' % username) else: messagebox.showerror('登录失败', '用户名或密码错误!') # 创建登录按钮 login_button = tk.Button(root, text='登录', command=login) login_button.pack() # 运行主循环 root.mainloop() # 关闭MySQL数据库连接 cursor.close() conn.close() ``` 请注意,此示例代码仅供参考,您需要按照您的实际需求进行修改和优化。同时,为了保护用户隐私和安全,建议您在存储密码时使用加密算法,比如SHA-256。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值