MySQL数据库基础学习小终结:连接查询、表结构的修改、约束条件、MySQL与python交互

目录

一、连接查询

1、内连接

2、外连接

二、表结构的修改--alter

1、修改表名

 2、修改字段名

 3、修改字段类型--modify

4、添加字段

(1)添加日期字段:datetime

 (2)enum字段

5、删除字段

三、约束条件

1、默认:default

2、非空:not null

3、唯一:unique key

4、主键:primary key 

5、自增长:auto_increment

6、设定初始值

7、外键:foreign key

(1)创建一个A表

(2)创建一个B表 

 (3)外键里能够插入的数据一定是主键里面有的数据

8、删除主外键约束

(1)删除外键约束

(2)删除主键约束

(3)主外键的区别

四、Mysql与python交互

1、数据准备

 2、在py文件中写入代码

3、事务

(1)提交事务:commit()

 (2)手动开启事务:begin 以及 事务回滚:rollback

先分别创建两个表text和text2,并向两个表中写入一些数据

一、连接查询

1、内连接

(1)无条件连接:inner join

  • inner join 中只链接两个表中具有相同字段的行,不相同的字段会被省略
  • text是主表;text2是从表。 

例:select * from text inner join text2; 

  •  主表中的每一条数据都会和从表里面的所有数据匹配

(2)有条件连接:on 条件

  • on 后面是连接条件

例:select * from text inner join text2 on text.id=text2.id;

  •  将两个表中id相同的连接在一起

2、外连接

(1)左连接:left join

  • 以左表为基础,左表内容全部显示,右表没有的以null值显示

例:select * from text left join text2 on text.id=text2.id;

  • 将相同的两表相同的id连接,以左表为基础,左表全部显示,右表中和左表相同的id显示,不相同的id则用null值显示

 ​​​​​

(2)右连接:right join

  • 以右表为基础,右表内容全部显示,左表没有的以null值显示

例:select * from text right join text2 on text.id=text2.id;

  • 将相同的两表相同的id连接,以右表为基础,右表全部显示,左表中和右表相同的id显示,不相同的id则用null值显示。

 

二、表结构的修改--alter

1、修改表名

alter table 原名 rename to 新名;

  • 将text表的名字修改为new_table

 2、修改字段名

alter table 表名 change 原名 新名 类型; 

 注意:类型一定要写,且只能对同一类型进行修改,如果将一个字段类型是int型的修改为char型则会报错。

  • 查看表结构可以看到字段的类型

  • 将score改成math_score

 3、修改字段类型--modify

语法:alter table 表名 modify 字段名 类型;

 

4、添加字段

alter table 表名 add 字段名 类型;

  • (1)添加日期字段:datetime

alter table 表名 add 字段名 datetime;

 

  • 向日期字段中写入信息

  •  通过now()获取当前时间

  •  (2)enum字段

alter table 表名 add 字段名 enum('F', 'M');          (F和M是固定值,自己可以设置)

 

当在类型为enum的字段sex中写入数据时,数据必须是F或M,否则就会报错

5、删除字段

alter table 表名 drop 字段名;

 

三、约束条件

1、默认:default

例:create table 表名(id int default 2);

 演示如下:

  • (1)创建一个名为new_one的表,并设置默认值:default 2

  •  (2)当不写id值时,则默认id值为2

  •  当写入id值时,就会按写入的id值写入

2、非空:not null

例:create table 表名(id int not null); (意思是设置id为非空值,表示写入id时不能为空)

 演示如下:

3、唯一:unique key

例: create table 表名(id int unique key); (表示的意思是id中不能有重复的值,只能由唯一的值)

 演示如下:

  • 创建一个具有唯一性的表

  •  在表中写入两个相同的id值,报错

4、主键:primary key 

  • primary key :非空+唯一,每张表只允许由一个主键

例:create table 表名(id int primary key, name varchar(20));

5、自增长:auto_increment

例:create table 表名(id int auto_increment,name varchar(20), primary key(id));

primary key(id):设置id为主键

演示如下: 

  • (1)创建一个名为four_one的表

  •  向表中写入几个空的数据,id的值会自动从1向上增长

6、设定初始值

例:create table 表名(id int auto_increment, primart key(id))auto_increment=10;

auto_increment=10:id的值从10开始向上增长

 演示如下:

  • (1)创建一个名为one的表

  •   向表中写入几个空的数据,id的值会自动从10向上增长

7、外键:foreign key

假设某一个字段是某个表的外键时,那么该字段必须是主键。

外键的作用:使两张表关联,保证数据的一致性和实现一级联操作。

演示如下:

  • (1)创建一个A表

create table A(id int primary key, name varchar(20));

 

  • (2)创建一个B表 

create table B(B_id int primary key, age int, foreign key(B_id) references A(id));

foreign key(B_id):B_id是外键,有外键的是从表

references 表名(字段名):关联的是表名和字段

  •  (3)外键里能够插入的数据一定是主键里面有的数据

 添加字段:先操作主表,再去从表添加

删除数据:先删除从表,再去主表删除

8、删除主外键约束

(1)删除外键约束

先获取外键名再去删除外键约束

  • 查看表创建语句

show create table 表名;

  • 找到键名后,删除外键约束

alter table 表名 drop foreign key 外键名;

 

(2)删除主键约束

alter table 表名 A drop primary key;

 如果A表还跟其他表有关联,要先删除从表的外键,再删除主表的主键。

(3)主外键的区别

主键:唯一标识,不能有重复,不能为空。

外键:是另一个表的主键。

四、Mysql与python交互

需要下载的模块:pip install pymysql

1、数据准备

创建一个名为First的数据库,并在其中创建一个名为students的表,然后向表中写入一些数据。

 2、在py文件中写入代码

import pymysql
# 连接数据库
db_config = {
    "host":'localhost', # 本地用户
    'port':3306, # 规定是3306
    'user':'root',
    'password':'', # 登录mysql的密码
    'db':'First' # 使用First数据库
}

# 建立连接的对象
conn = pymysql.connect(**db_config)

# 建立游标对象
cur = conn.cursor()

# 执行sql语句
sql = cur.execute('select * from students')
print(sql) # 打印接受到的数据个数
print(cur.fetchall())

# 关闭游标
cur.close()
# 关闭连接
conn.close()

以上代码的运行结果:

3、事务

事物的特性:原子性,一致性,隔离性,持久性

(1)提交事务:commit()

提交事务——直正插入和修改数据,如果没有提交事务,插入和修改的数据只是临时保存,并不能存到数据库中。 

演示未提交事务时出现的情况:

向数据库中写入信息

写入信息后在数据库中查看

演示提交事务时的情况

 

附上源码:

import pymysql
# 连接数据库
db_config = {
    "host":'localhost', # 本地用户
    'port':3306, # 规定是3306
    'user':'root',
    'password':'', # 登录mysql的密码
    'db':'First' # 使用First数据库
}

# 建立连接的对象
conn = pymysql.connect(**db_config)

# 建立游标对象
cur = conn.cursor()

# 执行sql语句
sql = cur.execute('insert into students(name,age) values("孙大圣",500)')
# 提交事务
conn.commit()
# 关闭游标
cur.close()
# 关闭连接
conn.close()

 (2)手动开启事务:begin 以及 事务回滚:rollback

事务回滚:返回上一步对数据进行的增、删、改等操作

演示如下:

  • (1)查询看事务是否开启

show variables like 'autocommit';

 ON:表示事务是关闭状态,每次执行增删改查都会自动提交所操作的语句。

  • (2)查看数据

 

  • (3)开启事务

  • (4)插入数据并查看

  • (5)回滚数据,再次查看数据

注意!!!一次手动开启事务,只能用一次回滚,第二次回滚无效

为了解决每次使用begin的麻烦,可以输入以下命令

开启事务:set autocommit=off;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
修改MySQL结构,可以使用ALTER TABLE语句。根据引用和引用,以下是几个常用的修改结构语句: 1. 删除字段:使用ALTER TABLE语句的DROP COLUMN子句来删除字段。例如,要删除名为"名"的中的"字段名"字段,可以使用以下语句: ALTER TABLE 名 DROP COLUMN 字段名; 如果要批量删除多个字段,可以使用逗号分隔每个字段名,如下所示: ALTER TABLE 名 DROP COLUMN 字段名1, DROP COLUMN 字段名2; 2. 增加字段:使用ALTER TABLE语句的ADD子句来增加字段。例如,要向名为"名"的中添加名为"字段名"和类型为"字段类型(长度)"的字段,可以使用以下语句: ALTER TABLE 名 ADD 字段名 字段类型(长度); 如果要批量添加多个字段,可以在ADD子句中使用括号,并使用逗号分隔每个字段的名称和类型,如下所示: ALTER TABLE 名 ADD (字段名1 字段类型(长度), 字段名2 字段类型(长度), ...); 请根据具体情况和需要使用适当的语句来修改MySQL结构。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [常用mysql数据库配置文件](https://download.csdn.net/download/zslsh44/88278582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [mysql语句:结构修改](https://blog.csdn.net/weixin_49349322/article/details/108871914)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值