设为首页 收藏本站
查看: 1406|回复: 0

[经验分享] python学习之数据库操作

[复制链接]

尚未签到

发表于 2018-8-14 08:29:46 | 显示全部楼层 |阅读模式
一、数据库基本操作  
数据库操作:
  
查看存储引擎: show engines;
  
查看数据库: show databases; 或者show create database oldboy\G
  
创建数据库: create database oldboy default
  
删除数据库: drop database oldboy;
  
进入数据库:  use oldboy;
  

  
数据表操作:
  
创建数据表:
  
create table tb_emp1 (
  
    -> id int(11),
  
    -> name varchar(25),
  
    -> deptId int(11),
  
    -> salary float
  
    -> )engine=innodb default charset=utf8;
  

  
primary key:
  
create table tb_emp2 (
  
    -> id int(11) primary key,
  
    -> name varchar(25),
  
    -> deptId int(11),
  
    -> salary float
  
    -> )engine=innodb default charset=utf8;
  

  
多个primary key:
  
create table tb_emp3 ( id int(11), name varchar(25), deptId int(11), salary float,
  
primary key(name, deptId) )engine=innodb default charset=utf8;
  

  
外键约束foreign key:
  
主表:
  
create table tb_dept1 (
  
    -> id int(11) primary key,
  
    -> name varchar(22) not null,
  
    -> location varchar(50)
  
    -> )engine=innodb default charset=utf8;
  

  
从表:
  
create table tb_emp5 (
  
    -> id int(11) primary key,
  
    -> name varchar(25),
  
    -> deptId int(11),
  
    -> salary float,
  
    -> constraint fk_emp_dept1 foreign key(deptId) references tb_dept1(id)
  
    -> )engine=innodb default charset=utf8;
  

  
非空约束not null:
  
create table tb_emp6 (
  
    -> id int(11) primary key,
  
    -> name varchar(25) not null,    #非空
  
    -> deptId int(11),
  
    -> salary float,
  
    -> constraint fk_emp_dept2 foreign key(deptId) references tb_dept1(id)
  
    -> )engine=innodb default charset=utf8;
  

  
唯一性约束unique,要求该列唯一,允许为空,但只能有一个值为空:
  
create table tb_dept2 (
  
    -> id int(11) primary key,
  
    -> name varchar(22) unique,
  
    -> location varchar(50)
  
    -> )engine=innodb default charset=utf8;
  

  
默认值default:
  
create table tb_emp7 (
  
    -> id int(11) primary key,
  
    -> name varchar(25) not null,
  
    -> deptId int(11) default 1111,
  
    -> salary float,
  
    -> constraint fk_emp_dept3 foreign key(deptId) references tb_dept1(id)
  
    -> )engine=innodb default charset=utf8;
  

  
自增主键auto_increment:
  
create table tb_emp8 (
  
    -> id int(11) primary key auto_increment,
  
    -> name varchar(25) not null,
  
    -> deptId int(11),
  
    -> salary float,
  
    -> constraint fk_emp_dept5 foreign key(deptId) references tb_dept1(id)
  
    -> )engine=innodb default charset=utf8;
  

  
插入tb_emp8三条数据:
  
insert into tb_emp8(name,salary) values('Lucy', 1000),('lura', 1200),('Kevin',1500);
  
id自增
  

  
查看表结构: desc tb_emp8; 或者show create table tb_emp8\G
  

  

  
修改数据表alter
  
修改表名: alter table tb_dept2 rename tb_deptment3;
  
修改字段类型: alter table tb_dept1 modify name varchar(30);
  
修改字段名: alter table tb_dept1 change location loc varchar(50);
  
添加字段: alter table tb_dept1 add managerId int(10);
  
添加有约束条件的字段: alter table tb_dept1 add column1 varchar(12) not null;
  
在某个位置添加字段: alter table tb_dept1 add column2 int(11) first;
  
在某个字段后面添加新字段: alter table tb_dept1 add column3 int(11) after name;
  
删除字段: alter table tb_dept1 drop column2;
  
修改表的存储引擎: alter table tb_deptment3 engine=MyISAM;
  
删除外键约束: alter table tb_emp9 drop foreign key fk_emp_dept;
  

  
删除数据表: drop table if exists tb_dept2;
  
删除外键关联的主表,需要首先取消外键关联,否则删除主表失败
  

  

  
数据类型
  
整形: TINYINT 1个字节  2**8 - 1=255个值
  
整形: smallint 2个字节
  
整形: int 4个字节
  
整形: bigint 8个字节
  

  
浮点数
  
单精度: float 4个字节
  
双精度: double 8个字节
  
decimal: 不固定,一般用于财务系统
  

  
日期时间类型
  
year: 1个字节,格式 YYYY
  
time: 3个字节,格式 HH:MM:SS
  
date: 3个字节,格式 YYYY-MM-DD
  
datetime: 8个字节,格式 YYYY-MM-DD HH:MM:SS
  
timestamp: 4个字节,格式YYYY-MM-DD HH:MM:SS
  

  
字符串类型
  
char(n): 固定长度字符串    #浪费内存,但查询速度快
  
varchar(n): 非固定长度字符串    #节省内存,但查询速度慢
  
text: 存放文本
  
longtext: 存放大数据文本
  

  

  
between .. and .. 关键字使用
  
select 4 between 4 and 6, 4 between 4 and 6, 12 between 9 and 10;
  

  
in, not in 关键字使用
  
select 2 in(1,3,5,'thks'), 'thks' in(1,3,5,'thks');
  

  
like用来匹配字符串
  
'%': 匹配任何数目的字符
  
'_': 只能匹配一个字符
  

  
select查询数据
  
create table fruits (
  
    -> f_id char(10) not null,
  
    -> s_id int not null,
  
    -> f_name char(255) not null,
  
    -> f_price decimal(8,2) not null,
  
    -> primary key(f_id)
  
    -> ) engine    -> ) engine=innodb =utf8;
  

  
插入字段:
  
insert into fruits(f_id,s_id,f_name,f_price) values
  
    -> ('a1',101,'apple',5.2),
  
    -> ('b1',102,'blackberry',10.2),
  
    -> ('bs1',102,'orange',11.2),
  
    -> ('bs2',105,'melon',8.2),
  
    -> ('t1',102,'banana',10.3),
  
    -> ('t2',102,'grape',5.3),
  
    -> ('o2',103,'coconut',9.2),
  
    -> ('c0',101,'cherry',3.2),
  
    -> ('a2',103,'apricot',2.2),
  
    -> ('l2',104,'lemon',6.4),
  
    -> ('b2',104,'lemon',7.6),
  
    -> ('m1',106,'mango',15.6),
  
    -> ('m2',105,'xbabay',2.6),
  
    -> ('t4',107,'xbababa',3.6),
  
    -> ('m3',105,'xxtt',11.6),
  
    -> ('b5',107,'xxxx',3.6);
  

  
单表查询:
  
查询表: select f_id,f_name from fruits;
  
查询条件where:
  
select f_id,f_name from fruits where f_price=10.2;    #等号 =
  
select * from fruits where f_price < 10;        #小于
  
select * from fruits where s_id in(101,102) order by f_name (desc);    #in关键字,按f_name排序,desc降序,asc升序
  
select * from fruits where f_price between 2.00 and 10.20;    #between and
  
select * from fruits where f_name like 'b%';    #like关键字匹配, %匹配任何多个字符
  
select * from fruits where f_name like '_____y';    #_匹配任意一个字符
  
select * from fruits where s_id='101' and f_price >=5;    #and多条件匹配
  
select * from fruits where s_id='101' or s_id=102;    #or多条件匹配
  

  
order by查询结果排序
  
select * from fruits order by f_name;
  
select * from fruits order by f_price desc;    #desc倒叙排列
  

  
group by分组
  
select s_id,count(*) as Total from fruits group by s_id; #根据s_id分组,s_id相同的数量
  
select s_id,count(*) as Total from fruits group by s_id having count(f_name) > 1;    #having后面加上查询条件
  

  
limit限制查询的数量
  
select * from fruits limit 4;    #查询四条
  
select * from fruits limit 4,3;    #索引为4,从第五条开始返回3条
  

  
inner join 内连接,返回两表中都有的记录
  
create table suppliers (
  
    -> s_id int(11) not null auto_increment primary key,
  
    -> s_name char(50) not null,
  
    -> s_city char(50),
  
    -> s_zip char(10),
  
    -> s_call char(50) not null
  
    -> )engine=innodb default charset=utf8;
  

  
以下操作是fruits和suppliers关联
  
select suppliers.s_id, s_name, f_name, f_price from fruits inner join suppliers on
  
    -> fruits.s_id = suppliers.s_id;    #on后面是条件查询,
  

  
left join    返回包括左表中的所有记录和右表连接字段的所有记录
  
select s_name,f_price from fruits left join suppliers on fruits.s_id = suppliers.s_id;
  

  
子查询:
  
select s_id, f_name from fruits where s_id=(select s1.s_id from suppliers as s1 where s1.s_city='Tianjin');
  

  

  
union合并查询结果并去重
  
union all合并查询不去重
  
select s_id ,f_name,f_price from fruits where f_price < 9.0 union all select s_id,f_name,f_price from fruits where s_id in(101,103);

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551406-1-1.html 上篇帖子: python smtp发送邮件 下篇帖子: python之列表、元组操作方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表