目录
(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;
2548

被折叠的 条评论
为什么被折叠?



