MYSQL

这篇博客介绍了MySQL数据库的基本操作,包括创建数据库、使用数据库以及如何通过pymysql在Python中操作MySQL。详细讲解了四种事务及其并发问题,如脏读、不可重复读和幻读,并阐述了MySQL的事务隔离级别。此外,对比了DELETE、TRUNCATE和DROP命令的区别。最后补充了DDL、DML、DQL和DCL的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1, create database

create database&table

CREATE DATABASE 'databasename';
CREATE TABLE tablename(idx INT(11) NOT NULL AUTOINCREMENT,name VARCHAR(256)  NOT ALL)ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

命令中的一些具体解释:
MYSQL数据类型
Step2:

CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];

表定义选项的格式为:

<列名1> <类型1> [,…] <列名n> <类型n>

字段的约束:NULL 和 NOT NULL 修饰符,是否为空
AUTO_INCREMENT修饰符只适用于INT字段,mysql自动生成加1

>primary key ('colname')

primary key的两个作用:
1,约束作用,constraint,规范一个存贮主键,和唯一性
2,建立一个主键索引
primary key可以说是特殊的unique key,unique key一个表中可以有多个,primary只能是一个

索引与key:索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)

表选项:

>ENGINE=InnoDB

InoDB:提供了事务控制能力,确保一组命令全部被执行成功,或当一个命令出现错误时命令全部返回.支持COMMMIT,ROLLBACK
myisam:读取速度非常快,且不占用大量内存和存储资源.不支持事务处理,不能容错,硬盘崩溃,数据文件无法恢复.

>AUTO_INCREMENT=37

自增的初始值

>COLLATE=utf8_bin

**utf8_bin:**将字符串中的每一个字符用二进制数据存储,区分大小写。
**utf8_genera_ci:**不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
**utf8_general_cs:**区分大小写,cs为case sensitive的缩写,即大小写敏感。

2,use database

mysql -uyourdatabasename -pyourpassword
mysql> show databases;
mysql> use databasename;
mysql> show tables;
#查看表内容
mysql> select * from tablename;
#更新表里的内容 WHERE后面跟的是条件
mysql> update databasename set colname=value  WHERE conditon;
#查看表的属性
DESCRIBE EMPLOYEE

3,how to use pymysql python

import pymysql
import sys


#数据库基本信息
config = {
          'host':'localhost',
          'port':3306,
          'user':'xue',
          'passwd':'123',
          'db':'thai_sql',
          }

def create_db():
    try:
        # 打开数据库连接
        conn = pymysql.connect(**config)

        # 使用 cursor() 方法创建一个游标对象 cursor
        cursor = conn.cursor()

        # 使用 execute() 方法执行 SQL,如果表存在则删除
        cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

        # 使用预处理语句创建表
        sql = """CREATE TABLE EMPLOYEE (
                 FIRST_NAME  CHAR(20) NOT NULL,
                 LAST_NAME  CHAR(20),
                 AGE INT,
                 SEX CHAR(1),
                 INCOME FLOAT,
                 PRIMARY KEY (FIRST_NAME)
                 )"""
        cursor.execute(sql)
        # 关闭游标
        cursor.close()
        conn.close()
        print("创建成功")
    except Exception :print("创建失败")


def insert_db(sql):
    conn = pymysql.connect(**config)

    cursor = conn.cursor()

    cursor.execute("SELECT VERSION()")

    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()
    print("Database version : %s " % data)

    try:
        cursor.execute(sql)
        conn.commit()
        print('Ok',cursor.fetchall())
    except:
        print('Error')
        conn.rollback()

    cursor.close()
    conn.close()

#insert_db('insert into EMPLOYEE(FIRST_NAME,lAST_NAME,AGE,SEX,INCOME) VALUES(\'TUO\',\'XUE\',27,\'m\',180.0)')

#选取表中INCOME大于10的内容
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > %s" % (10)

#选取表中所有内容
sql ='SELECT * FROM EMPLOYEE'

#插入数据
sql ='INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME) VALUES(\'MING\',\'XIAO\',18,\'M\',250)'

print(insert_db(sql))

4, 4种事务

4中事务

4.1事务的并发问题

1、脏读: 事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

2、不可重复读: 事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

3、幻读: 系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

小结: 不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

4.2 MySQL事务隔离级别

事务隔离级别脏读不可重复读幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

5 mysql中delete,turncate,drop的区别

 delete可以撤回的删除

用法:

delete from table_name

delete from table_name where ...

说明:

1),DML语言,每删除一行,都在事务日志中记录.产生rollback.事务提交之后才生效;大面积删除会很慢

2),删除表中数据而不删除结构,同时也不释放空间

 truncate永久删除

truncate table table_name

1),只能操作表,将表中数据全部删除

2),DDL语言,操作即可生成,自动提交,不产生rollback,不能回滚

3)删除内容,释放空间,但不删除结构

&emsp:drop永久全部删除

drop table table_name

1),删除过后依赖于此表的存储过程/函数将保留,变为invalid状态

2),DDL,立即执行,执行速度最快

3),删除内容,释放空间,删除结构,一级被依赖的约束(constrain),trigger(触发器),index(索引)


6.补充知识

6.1(DDL,DML,DQL,DCL的区别)

DDL(Data Definition Language):

 数据定义语言,操作对象及对象本身,对象包含(库,表,视图对象)

包含的操作语句:

create

drop

alter

truncate


DML(Data Manipulation Language)

 数据操控语言,用于操作数据库对象中包含的数据

包含的操作语句:

insert

delete

update:UPDATE tablename SET colname=value;


DQL(Data Query Language)

 数据查询语言

包含的操作语句:

select


DCL(Data Control Language)

 数据控制语言

包含的操作语句:

greate:分配权限给用户

revoke:取消某用户的权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值