Python/MySQL(二、表操作以及连接)
Python/MySQL(二、表操作以及连接)
mysql表操作: 主键:一个表只能有一个主键。主键可以由多列组成。 外键 :可以进行联合外键,操作。
mysql> create table yuan(id int auto_increment,yuangongname int,bumen_id int, primary key(id,yuangongname))engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.43 sec)
查看表创建的类型:
show create table 表名;
mysql> show create table class;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| class | CREATE TABLE `class` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`caption` char(10) DEFAULT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
show create table 表名 \G;
mysql> show create table class\G;
*************************** 1. row ***************************
Table: class
Create Table: CREATE TABLE `class` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`caption` char(10) DEFAULT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
1 row in set (0.00 sec) ERROR:
No query specified
alter table 表名 auto_increment=20; 设置自增的起始位。
mysql> alter table class auto_increment=20;
Query OK, 0 rows affected (0.11 sec)
步长:
基于会话级别:
show session variables like 'auto_inc%'; 查看会话的步长 mysql> show session variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
2 rows in set, 1 warning (0.00 sec)
set session auto_increment_increment=2; 设置会话步长
mysql> set session auto_increment_increment=2;
Query OK, 0 rows affected (0.00 sec) set session auto_incrment_offset=10; mysql> set session auto_increment_offset=10;
Query OK, 0 rows affected (0.00 sec)
基于全局级别:
show global variables like ' auto_inc%'; 查看全局步长
show global variables like ' auto_inc%'; 查看全局步长 mysql> show global variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
2 rows in set, 1 warning (0.00 sec)
set global auto_increment_increment=2; 设置全局步长
mysql> set global auto_increment_increment=2;
Query OK, 0 rows affected (0.02 sec) set global auto_incrment_offset=10; mysql> set global auto_increment_increment=1;
Query OK, 0 rows affected (0.00 sec)
数据库中自增的共有(二种)
1.自增步长; 2.自增主键;
唯一索引:
unique 唯一索引名称(列名,列名) 唯一:约束不能重复(可以为空),加速查找 主键:约束 不能重复且不能为空
创建唯一索引:
mysql> create table biao(id int auto_increment primary key,name char(10),unique s_t(id))engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.82 sec)
外键的扩展:
一对多:例如,一个公司有很多员工但是部门只有固定的4个
创建一个部门表;
mysql> create table bumen(id int auto_increment primary key,bumenname char(10))engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.55 sec) mysql> show tables;
+--------------+
| Tables_in_b2 |
+--------------+
| b1 |
| biao |
| bumen |
| class |
| course |
| score |
| student |
| teacher |
+--------------+
8 rows in set (0.00 sec)
创建员工表:
mysql> create table yuangong(id int auto_increment primary key,yuangongname char(10))engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.62 sec) mysql> show tables;
+--------------+
| Tables_in_b2 |
+--------------+
| b1 |
| biao |
| bumen |
| class |
| course |
| score |
| student |
| teacher |
| yuangong |
+--------------+
9 rows in set (0.00 sec) 为员工表添加信息:
mysql> insert into yuangong(yuangongname) values('张三');
Query OK, 1 row affected (0.11 sec) mysql> insert into yuangong(yuangongname) values('张si'),('张ts'),('张li');
Query OK, 3 rows affected (0.06 sec)
Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from yuangong;
+----+--------------+
| id | yuangongname |
+----+--------------+
| 1 | 张三 |
| 2 | 张si |
| 3 | 张ts |
| 4 | 张li |
+----+--------------+
4 rows in set (0.00 sec) 为部门表添加信息:
mysql> insert into bumen(bumenname) values('IT'),('BT'),('kT'),('XT');
Query OK, 4 rows affected (0.05 sec)
Records: 4 Duplicates: 0 Warnings: 0 mysql> select * from bumen;
+----+-----------+
| id | bumenname |
+----+-----------+
| 1 | IT |
| 2 | BT |
| 3 | kT |
| 4 | XT |
+----+-----------+
4 rows in set (0.00 sec)
一对一:
例如公司有多个员工,公司分配邮箱,每个员工只能有一个邮箱不能重复有多,就是一对一的
多对多:
例如,相亲记录表(用户表 1,用户表 2 )俩个表的内容可以进行多次匹配 就实现多对多效果;
SQL语句数据行操作补充;
增
insert into biao(name,age) values('alex',18);
insert into biao(name,age) values('alex',18),('egon',10);
insert into biao(name,age) select name,age from biao2;
删:
delete from biao;
delete from tb12 where id !=2
delete from tb12 where id =2
delete from tb12 where id > 2
delete from tb12 where id >=2
delete from tb12 where id >=2 or name='alex'
改:
update biao set name='alex' where id>2 and name='egon'
update biao set name='alex',age=19 where id>2 and name='egon';
查:
select * from biao:
select name from biao;
select id,name from biao where id>22 or name='alex';
select * from tb12 where id in (select id from tb11)
select * from tb12 where id between 5 and 12; (闭区间包含自己本身)
通配符:
select * from biao where name like 'a%' (查看以a开头的任意内容)
select * from biao where name like 'a_' (查看以a开头的下一个内容)
select * from biao where name like '%a%' (查看包含a的内容)
select * from biao where naem like '%a' (查看以a结尾的内容)
分页:
select * from biao limit 10; (查看10的内容从0开始排列))
select * from biao limit 1,10;(查看从1开始后面的10个内容)
select * from biao limeit 10 offset 20;(查看从20开始后面的10个人内容)
排序:
select *from biao order by id desc (从大到小的排序)
select *from biao order by id asc (从小到大的排序)
查看后10条数据:
select *from biao order by id desc limit 10; (把表的内容进行反转 ,然后再获取10条数据)
分组:(count . max . min . sum . avg)
select count(id),min(id),max(id),part_id from mysql> select count(cid) from class group by cid;
+------------+
| count(cid) |
+------------+
| 1 |
| 1 |
| 1 |
+------------+
3 rows in set (0.04 sec) mysql> select caption from class group by caption;
+----------+
| caption |
+----------+
| 一年三班 |
| 三年一班 |
| 三年二班 |
+----------+
3 rows in set (0.04 sec) mysql> select sid,class_id from student group by sid,class_id;
+-----+----------+
| sid | class_id |
+-----+----------+
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
+-----+----------+
3 rows in set (0.04 sec) mysql> select sid from student group by sid having max(sid)>1;
+-----+
| sid |
+-----+
| 2 |
| 3 |
+-----+
2 rows in set (0.09 sec) **** 如果对于聚合函数结果进行二次筛选时?必须使用having ****
select count(id),part_id from userinfo5 group by part_id having count(id) > 1; select count(id),part_id from userinfo5 where id > 0 group by part_id having count(id) > 1;
连表操作 (left join 表名 on 有相关关系的进行连接,并设置是否相等,如果不设置就是(的卡尔基效果,表的行数相乘))
mysql> select * from teacher join course on course.tearch_id=teacher.tid;
+-----+-------+-----+-------+-----------+
| tid | tname | cid | cname | tearch_id |
+-----+-------+-----+-------+-----------+
| 1 | 波多 | 1 | 生物 | 1 |
| 1 | 波多 | 2 | 体育 | 1 |
| 2 | 苍空 | 3 | 物理 | 2 |
+-----+-------+-----+-------+-----------+
3 rows in set (0.03 sec)
mysql> select * from teacher right join course on course.tearch_id=teacher.tid;
+------+-------+-----+-------+-----------+
| tid | tname | cid | cname | tearch_id |
+------+-------+-----+-------+-----------+
| 1 | 波多 | 1 | 生物 | 1 |
| 1 | 波多 | 2 | 体育 | 1 |
| 2 | 苍空 | 3 | 物理 | 2 |
+------+-------+-----+-------+-----------+
3 rows in set (0.00 sec)
靠左连接 (left join 表名 on 有相关关系的进行连接)
mysql> select * from teacher left join course on course.tearch_id=teacher.tid;
+-----+-------+------+-------+-----------+
| tid | tname | cid | cname | tearch_id |
+-----+-------+------+-------+-----------+
| 1 | 波多 | 1 | 生物 | 1 |
| 1 | 波多 | 2 | 体育 | 1 |
| 2 | 苍空 | 3 | 物理 | 2 |
| 3 | 饭岛 | NULL | NULL | NULL |
+-----+-------+------+-------+-----------+
4 rows in set (0.00 sec)
靠右连接:(right join 表名 on 有相关关系的进行连接)
mysql> select * from teacher right join course on course.tearch_id=teacher.tid;
+------+-------+-----+-------+-----------+
| tid | tname | cid | cname | tearch_id |
+------+-------+-----+-------+-----------+
| 1 | 波多 | 1 | 生物 | 1 |
| 1 | 波多 | 2 | 体育 | 1 |
| 2 | 苍空 | 3 | 物理 | 2 |
+------+-------+-----+-------+-----------+
3 rows in set (0.00 sec) mysql>
不显示NULL(空)行(inner)
mysql> select * from teacher inner join course on course.tearch_id=teacher.tid;
+-----+-------+-----+-------+-----------+
| tid | tname | cid | cname | tearch_id |
+-----+-------+-----+-------+-----------+
| 1 | 波多 | 1 | 生物 | 1 |
| 1 | 波多 | 2 | 体育 | 1 |
| 2 | 苍空 | 3 | 物理 | 2 |
+-----+-------+-----+-------+-----------+
3 rows in set (0.00 sec)
筛选条件:
这些条件可以在对表进行操作时代入
in 在
not in 不在
and 和
or 或
= 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
between and 在什么之间 和 .....
Python/MySQL(二、表操作以及连接)的更多相关文章
- {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作
MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf ...
- 数据库 MySQL 之 表操作、存储引擎
数据库 MySQL 之 表操作.存储引擎 浏览目录 创建(复制) 删除 修改 查询 存储引擎介绍 一.创建(复制) 1.语法: 1 2 3 4 5 CREATE TABLE 表名( 字段名1 ...
- mysql连表操作是先连表还是先查询条件
mysql连表操作是先连表还是先查询条件 一.总结 一句话总结: 连表操作时:先根据查询条件和查询字段确定驱动表,确定驱动表之后就可以开始连表操作了,然后再在缓存结果中根据查询条件找符合条件的数据 1 ...
- MySQL 数据表操作
MySQL 数据表操作 创建MySQL数据表需要以下信息: -表名: -表字段名: -定义每个表字段: 一.创建数据表 1)mysql> create table table_name (c ...
- Python MySQL 创建表
章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...
- python之excel表操作
python对excel表操作主要用到三个库,xlrd,xlwt,xlutils,分别用于excel表读,写,修改操作,以下将一个简单介绍 一.生成excel表:xlwt类 新建excel表,并写入数 ...
- Database学习 - mysql 数据库 表操作
mysql 数据库 表操作 创建数据表 基本语法格式: 创建数据表: create table 表名( 字段名 datatype 约束, 字段名 datatype 约束, ...... ) 修改表名 ...
- mysql 数据表操作 目录
mysql 数据表操作 存储引擎介绍 mysql 使用存储引擎 mysql 数据表的增删改查 mysql 数据类型 mysql 约束条件
- Mysql 库表操作初识
Mysql 库表操作初识 终端登录mysql 这里只演示win下, cmd 终端. 至于怎么在win下, linux, mac安装, 感觉这是一个入门级的百度搜索问题, 安装都搞不定, 确实有点尴尬, ...
随机推荐
- push_back和emplace_back的区别
emplace_back能就地通过参数构造对象,不需要拷贝或者移动内存,相比push_back能更好地避免内存的拷贝与移动,使容器插入元素的性能得到进一步提升.在大多数情况下应该优先使用emplace ...
- EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)
前言 终于踏出第一步探索EF Core原理和本质,过程虽然比较漫长且枯燥乏味还得反复论证,其中滋味自知,EF Core的强大想必不用我再过多废话,有时候我们是否思考过背后到底做了些什么,到底怎么实现的 ...
- Vue:渲染、指令、事件、组件、Props、Slots
如果要我用一句话描述使用 Vue 的经历,我可能会说“它如此合乎常理”或者“它提供给我需要的工具,而且没有妨碍我的工作”.每当学习 Vue 的时候,我都很高兴,因为很有意义,而且很优雅. 以上是我对 ...
- 【数据库】数据库的锁机制,MySQL中的行级锁,表级锁,页级锁
转载:http://www.hollischuang.com/archives/914 数据库的读现象浅析中介绍过,在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数 ...
- Angular开发实践(五):深入解析变化监测
什么是变化监测 在使用 Angular 进行开发中,我们常用到 Angular 中的绑定--模型到视图的输入绑定.视图到模型的输出绑定以及视图与模型的双向绑定.而这些绑定的值之所以能在视图与模型之间保 ...
- 【眼见为实】自己动手实践理解REPEATABLE READ && Next-Key Lock
首先设置数据库隔离级别为可重复读(REPEATABLE READ): set global transaction isolation level REPEATABLE READ ; set sess ...
- Redis这些知识点,是必须知道的!
Redis是一个开源(BSD许可)的内存数据结构存储,可作为数据库,缓存和消息队列.相比Memcached它支持更多的数据结构,如string(字符串),hash(哈希),list(链表),set(集 ...
- linux --> Linux 的启动流程
Linux 的启动流程 操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但一旦进入操作系统,程序员几乎可以定制所有 ...
- Myeclipse快速补充返回值快捷键
比如 image.getGraphics(); 按ALT+Shift+L键,弹出一个确认变量名称框,确认之后会补全语句Graphics graphics = image.getGraphics();
- 将 Shiro 作为应用的权限基础 四:shiro的配置说明
Apache Shiro的配置主要分为四部分: SecurityManager的配置 URL过滤器的配置 静态用户配置 静态角色配置 其中,由于用户.角色一般由后台进行操作的动态数据,比如通过@Req ...