zip函数(将多个可迭代对象解耦)
a = [1,3,5,7,9]
b = [2,4,6,8,10]
c = [11,12,13,14]
for itemA,itemB,itemC in zip(a,b,c):
print(itemA,itemB,itemC)
#打印结果:
1,2,11
3,4,12
5,6,13
7,8,14
数据库
排名 | 名称 | 类型 | 主导公司 |
1 | Oracle | Relational DBMS | Oracle |
2 | MySQL | Relational DBMS | Oracle |
3 | Microsoft SQL Server | Relational DBMS | Microsoft |
4 | MongoDB | Document store | MongoDB |
MySQL是开源、免费的关系型数据库**
SQL语句分为三类:
- DDL:数据定义语言
1)数据库相关
*创建数据库
**create** database if not exists 数据库名
*删除数据库
**drop** database 数据库名
*查看数据库
**show** databases;
*定义数据库的字符集
**create** database if not exists 数据库名 default charset=utf8
*进入到某个数据库
**use** 数据库名
2)表相关
*创建表
**create** table if not exists 表明(
字段1 字段类型(字段的长度) 字段属性 字段约束,
字段2 字段类型(字段的长度) 字段属性 字段约束,
......);
*查看表结构
**desc** 表名
*查看数据表
**show** tables;
*删除表
**drop** table if not exists 表明
*修改表名
alter table 旧表名 **rename as** 新表名
*修改字段名
alter table 表名 **change** 旧字段名 新字段名 字段类型及属性
*修改字段类型
alter table 表名 **modify** 字段名 字段类型属性
*添加字段
alter table 表名 **add** 字段名 字段类型及属性
*删除字段
alter table 表名 **drop** 字段名
数据表字段的约束类型
主键:`primary key`
唯一:`unique`
自增长:`auto_increment`
外键:`foreign key`
`添加主键约束`
create table if not exists `表名`(
字段1 类型(长度) primary key)
`添加唯一约束`
create table if not exists `表名`(
字段1 类型(长度) unique)
`添加自增长约束`
create table if not exists `表名`(
字段1 类型(长度) auto_increment)
`添加外键约束`
1)建表时添加
CREATE TABLE `表名` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, PRIMARY KEY (`id`), CONSTRAINT `FK_ID` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2)建表之后添加
alter table 从表 add constraint FK_ID foreign key(从表某字段) references 主表(主表某字段)
3)注意事项
1.主表中的字段只能有主键约束时才能添加外键
2.需要添加外键约束的表的类型必须是InnoDB
*指定表的类型
create table if not exists 表名(
字段1 字段类型(字段的长度) 字段属性 字段约束,
字段2 字段类型(字段的长度) 字段属性 字段约束,
......)engine=InnoDB/MyISAM
*字段注释和字段默认值
create table if not exists 表名(
字段1 类型(长度)字段属性 字段约束 comment "注释" default 默认值
- DML:数据管理语言
*添加数据
1)指定字段名
**insert into** 表名(字段1,字段2,...)values(值1,值2,...)
2)不指定字段名
**insert into** 表名 values(值1,值2,...) #values中给定数据的个数必须与字段数相同
3)同时添加多条数据
insert into 表名 values(值1,值2,...),(值1,值2,...)...
*删除数据
1)条件删除
delete from 表名where condition
2)删除所有数据
delete from 表名
truncate [table] 表名
**区别**:delete删除数据后索引不会重置
truncate会将索引重置
*更新数据
1)根据条件更新部分数据
update 表名 set 字段1=values1,字段2=values2,...where condition
2)更新所有数据
update 表名 set 字段1=values1,字段2=values2,...
*查询数据
01)无条件查询
001->查询表中所有数据
select * from 表名 # *代表所有字段
002->查询指定的字段
select 字段1,字段2,字段3,... from 表名
02) 条件查询
001->语法
select * from 表名 where condition
002->查询条件
(1)between...and... 查询字段在某一区间内的所有记录
(2)is null 查询字段值为null的所有记录
(3)is not null 查询字段值不为null的所有记录
(4)like 模糊匹配,查询字段中出现给定字符的所有记录
(5)in 查询字段的值在某个集合内的所有记录("张三",“李四”)
(6)条件1 and 条件2... 查询同时满足条件1,条件2,...所有记录数
(7)条件1 or 条件2... 查询满足条件1至条件n中某一个条件的所有记录
(8)not 条件1 查询不符合条件1所有记录
(9)条件1 xor 条件2 查询不同时满足条件1和条件2的所有记录
(10)算术运算符
< > = >= <= (!= <>)
003->分组查询
select 字段1,字段2,... from 表名 group by 字段x
按照字段x对查询到的数据进行分组
eg: select c_id,c_name,c_madein from commodity **group by** c_madein
将查询到的商品按产地进行分组
004->分页查询(每页显示记录数pageNum)
select * from commodity **limit** (page-1)*pageNum,pageNum
005->排序
select * from commodity **order by** c_inprice asc/desc
对查询到的结果按照进价进行升序/降序排列
006->子查询:已知数码产品的商品分类的ct_id=0,根据该条件从商品表中查询出所有的数码产品
select * from commodity where c_type=(
select ct_id from commoditytype where ct_name="数码产品")
007->链表查询
表a数据
id name
1 a
2 aa
4 aaaa
表b数据
id name
1 b
2 bb
3 bbb
001->左链表查询
select * from a left join b on a.id=b.id
结果:
id name id name
1 a 1 b
2 aa 2 bb
4 aaaa
002->内链表查询
select * from a inner join b on a.id=b.id
结果:
id name id name
1 a 1 b
2 aa 2 bb
003->右链表查询
select * from a right join b on a.id=b.id
id name id name
1 a 1 b
2 aa 2 bb
3 bbb
004->全链接(若a有m行数据,b有n行数据,则结果有m*n行数据)
select * from a inner/full join
- 函数
001->求和函数:sum()
select sum(c_num) as "所有商品库存" from commodity
查询所有商品进货量的总和
002->求平均:avg()
select avg(c_inprice) as "进价均值" from commodity
查询所有商品进价的均值
003->count()
1.查询表中所有记录数
select count(*) from 表名
2.查询某个字段不为null值的所有记录数
select count(c_num) as "进货量不为null的商品种类数" from 表名
3.max()/min()
select max(字段名) from 表名
3.DCL:数据管理语言
Python+MySQL
- pymysql的安装
pip install pymysql - 使用pymysql链接mysql数据库
导入模块
import pymysql
链接数据库
connect = pymysql.connect(host=”“,user=”“,password=”“,db=”“,charset=”“)
cursor = connect.cursor() - 执行和提交sql语句
sql = “Insert into tableName values(‘%s’,’%d’)”
cursor.execute(sql%(value1,value2))
connect.commit() - 处理结果集
01->获取结果集中所有数据
all=cursor.fetchall()
02->获取结果集中一条数据
one=cursor.fetchone()
03->获取结果集中多条数据
many=cursor.fetchmany(size=?) - 如何获取表头
field=cursor.description - 关闭链接
cursor.close()
connect.close() - 用python+mysql实现分页查询