学习python少不了和数据库打交道,常见的数据库有:MySQL、SQLite、MongoDB、Redis等,这里主要介绍一下MySQL数据库的基本操作。

数据库听起来感觉好高大上,当你接触之后有种恍然大悟的感觉,不就是把我们的数据存到一个表格中吗。可以简单的这么理解,大家都知道表格都是由表名、表头、数据等几部分组成的,数据库跟这类似,只不过叫法不一样,这里叫数据库名、表名和字段。数据库就简单介绍这么多,说的不一定完全正确,下面就说一下怎么操作数据库。

一、MySQL字段类型

常用的有:数值(int, float)、字符串(varchar, text)、日期(date, datetime)

二、MySQL约束

主键:primary key

外键:foreign key

默认值:default

唯一:unique

非空:not null

三、物理删除和逻辑删除

在使用数据库的时候,一定会遇到删除数据库中的内容,这个时候一定要小心操作,不然就会被老板直接开除,网络上不是有个很火的命令操作叫"程序员如何执行一条命令让老板开除",所以操作数据库时一定要小心谨慎。

说一下什么是物理删除和逻辑删除,物理删除就是把一条数据从数据库中永远删除,就是再也找不到也不能恢复;逻辑删除就是给你设计的表再增加一列(比如:isDelete,设默认值为0),当你想删除数据时将这个字段的值设为1,当你再操作数据时把isDelete值为1的筛选掉就可以了,这样数据也不会丢失。对于重要的数据一定要设置这个字段,对于不重要的数据自己想怎么操作就怎么操作,大不了全部删除再重新建数据库。

四、数据库基本操作(增删改查)

1、创建数据库

create database [if not exists] db_name [character set utf8];

注意:[if not exists]:最好加上,这样可以避免麻烦,每操作一次数据库就多一次风险

[character set utf8]就是设置编码格式,也可以不指定

2、查看数据

show databases;

3、查看数据库创建方式

show create database db_name;

4、修改数据库

alter database db_name [character set xxx];

5、删除数据库

drop database [if exists] db_name;

注意: [if exists]:如果你不确定数据库是否存在最好加上,存在就删除,不存在也不会报错

6、使用数据库

use db_name;

7、查看当前使用数据库

select database();

五、数据库管理

1、通过grant命令,给test数据库,添加用户***,密码123456

grant select,insert,update,delete,create,drop on test to '***'@'localhost' identified by '123456';

2、修改用户密码

grant select,insert,update,delete,create,drop on test to '***'@'localhost' identified by 'asdfasdf';

3、显示用户

select user from mysql.user;

4、删除用户

drop user '***'@'localhost';

六、数据表的基本操作(增删改查)

1、查看数据表

show tables;

2、创建数据表

create table student(

id int primary key auto_increment,

name varchar(20) not null,

age int not null,

gender tinyint(1) default 1,

birthday date,

hobby varchar(20)

);

3、查看数据表结构

desc student;

4、查看创建数据表语句

show create table student;

5、增加数据(列,字段)

alter table student add address varchar(30);

6、增加多个数据

alter table student add address varchar(30),

add age int not null,

add height int not null;

7、修改一列列名

alter table student change address addr varchar(20);

8、修改一列类型

alter table student modify age tinyint default 20;

9、删除一列

alter table student drop height;

10、修改表名

rename table student to stu;

11、修改表所用的字符集

alter table student character set utf8;

12、删除表

drop table student;

create table users(id int not null,

name varchar(10),

age int,

height int

);

13、添加主键

alter table users add primary key (id);

14、删除主键

alter table users drop primary key;

15、添加唯一索引

alter table users add unique (name);

16、添加唯一索引设置索引名

alter table users add unique key user_name(name);

17、添加联合索引

alter table users add unique index name_age(name,age);

18、删除索引

alter table users drop index name;

create table student( id int primary key auto_increment,

name varchar(20),

birthday varchar(20),

age int

);

19、插入一条数据

insert into student(name,birthday,age) values('学生1','2001-1-1',11);

20、插入多条数据

insert into student(name,birthday,age) values('学生2','2001-1-2',11),

('学生3','2001-1-3',11),

('学生4','2001-1-4',11);

21、修改数据

update student set birthday='2001-1-10' where id=1;

22、数据表中的数据可以直接运算

update student set age = age + 5;

23、删除数据

delete from student where id = 1;

注意:删除数据时一定要加条件限制,不然整张数据表都被删除了

24、删除表中的所有数据

delete from student;

七、查询数据

create table grade( id int primary key auto_increment,

name varchar(20),

js double,

java double,

python double );

insert into grade (name,js,java,python) values ('Tom',68,89,87),('Jim',70,91,92),('Jake',71,73,74),('Mike',80,84,85),('Jame',85,88,83);

1、select查询

查询所有数据: select * from grade;

查询姓名和js成绩: select name,js from grade;

过滤表中重复数据: select distinct js from grade;

给所有js成绩+5,并使用as别名: select name,js+5 as 'js成绩' from grade;

2、where过滤查询

查询姓名XX的学生信息: select * from grade where name='Tom';

查询总分大于250分的所有学生: select name,js+java+python as '总成绩' from grade where js+java+python>250;

查询js分数和java分数大于90的学生: select * from grade where js>90 and java>90;

查询java分数80~90的学生: select * from grade where java between 80 and 90;

查询java分数在80或90的学生: select * from grade where java in (80,90);

/* 模糊查询,%表示多个字符,_表示一个字符 */

查询姓名j开头的学生: select * from grade where name like 'j%';

八、order by 排序

/* asc:升序,默认值 desc:降序 */

根据js分数升序排序: select * from grade order by js;

更加总分数从高到低排序:select name,(ifnull(js,0)+ifnull(java,0)+ifnull(python,0)) as '总分数' from grade order by '总分数' desc;

九、group by分组查询

create table product_tab( id int primary key auto_increment,

product_name varchar(20),

price float(6,2),

product_date date,

class varchar(20) );

insert into product_tab (product_name,price,product_date,class) values ('苹果',10,'20180812','水果'),

('香蕉',20,'20180826','水果'),

("水壶",120,'20170612',"电器"),

("被罩",70,'20170612',"家具"),

("音响",420,'20171012',"电器"),

("电视",2000,'20170912',"电器"),

("床单",55,'20171112',"家具"),

("草莓",34,'20170512',"水果");

按位置分组: select * from product_tab group by 5;

按产品类别分类并显示平均价格: select class,avg(price) from product_tab group by class;

按产品分类显示每一种商品价格总和超过200的商品: select class,sum(price) from product_tab group by class having sum(price)>200;

分组显示所有产品:group_concat select id,group_concat(product_name) from product_tab group by class;

十、where和having之间的区别

首先,明确一点就是能使用where的地方都能使用having;where只能用于分组之前数据的筛选;having只能用于分组之后数据的筛选,

而且having中可以使用聚合函数。

十一、聚合函数

COUNT(列名):统计行的个数

统计学生个数: select count(id) from grade;

SUM(列名):统计总量

统计所有js总成绩: select sum(js) as 'js总成绩' from grade;

AVG(列名):平均数

统计所有js平均分: select avg(js) as 'js平均分' from grade;

MAX,MIN (最高,最低)

select max(js) as 'js最高分' from grade;

select min(js) as 'js最低分' from grade;

十二、SQL语句执行顺序

from----where----select----group by----having----order by

十三、limit和正则表达式

limit

查询前3条数据: select * from grade limit 3;

跳过1条,查询3条数据: select * from grade limit 1,3;

正则表达式

查询j开头的学生: select * from grade where name regexp '^j';

查询名字中m出现2次的学生: select * from grade where name regexp 'm{2}';

十四、多表操作

1、外键约束

/* 一个班级对应多个学生,一个学生只能对应一个班级 */

主表:创建班级表 create table class( id int primary key auto_increment, name varchar(20), stu_nums int );

子表:创建学生表 create table student( id int primary key auto_increment, name varchar(20), class_id int, foreign key(class_id) references class(id) );

注意:作为外键一定要和关联主键的数据类型保持一致

插入数据: insert into class (name,stu_nums) values ('班级一',10),('班级二',12),('班级三',13),('班级四',14),('班级五',15);

insert into student (name,class_id) values ('Tom',1),('Jim',1),('Jake',2),('Mike',3),('Jane',4);

增加外键: alter table student add constraint student_fk_class foreign key(class_id) references class(id);

删除外键: alter table student drop foreign key student_ibfk_1;

2、INNODB支持的on语句

外键约束对子表的含义:如果在父表中找不到候选键,则不允许在子表进行insert/update

外键约束对父表的含义:在父表上进行update/delete以更新或删除在子表中的一条或多条对应数据,

父表的行为取决于:在定义子表的外键指定的on update/on delete语句

ON DELETE CASCADE 级联删除:父表记录被删除,子表对应的记录自动被删除

foreign key(class_id) references class(id) on delete cascade;

ON DELETE SET NULL 置空:父表update/delete记录时,子表设为null

foreign key(class_id) references class(id) on set null;

RESTRICT:拒绝对父表进行删除操作

NO ACTION:在mysql中同RESTRICT,如果子表中有匹配的记录,则不允许对父表对应候选键

3、多表查询

/* 创建2张表:员工表和部门表 并插入相关数据 */

create table employee( emp_id int primary key auto_increment, emp_name varchar(20), age int, dept_id int );

create table department( dept_id int primary key auto_increment, dept_name varchar(100) );

insert into employee(emp_name,age,dept_id) values ('A',19,200), ('B',26,201), ('C',30,201), ('D',24,202), ('E',20,200), ('F',38,204);

insert into department values (200,'人事部'), (201,'技术部'), (202,'销售部'), (203,'财政部');

笛卡尔积查询:查询结果是m*n

select * from employee,department;

内连接:查询两张表中都有的关联数据

select * from employee,department where employee.dept_id=department.dept_ id;

外连接:

左外连接:在内连接的基础上增加左边有右边没有的结果

select * from employee left join department on employee.dept_id=departmen t.dept_id;

右外连接:在内连接的基础上增加右边有左边没有的结果

select * from employee right join department on employee.dept_id=departme nt.dept_id;

4、多条件查询

查询员工大于25岁的信息:

select employee.emp_name,department.dept_name

-> from employee,department

-> where employee.dept_id=department.dept_id and age>25;

以内连接方式查询employee和department表,并以age字段升序显示:

select employee.emp_id,employee.emp_name,employee.age,department.dept_name

-> from employee,department

-> where employee.dept_id=department.dept_id

-> order by age asc;

子查询:查询employee表,dept_id在department表中的所有信息

select * from employee where dept_id in (select dept_id from department);

子查询:

select * from employee  where dept_id in (select dept_id from department where age>25);

使用EXISTS关键字

EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。

而是返回一个真假值。Ture或False

当返回Ture时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询

select * from employee where EXISTS (SELECT dept_name from department where dept_id=205);

select * from employee where EXISTS (SELECT dept_name from department where dept_id=203);

mysql使用数据库_MySQL数据库的常用操作相关推荐

  1. mysql 创建相同数据库_mysql数据库找出相同数据MySQL常用操作

    一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建-> Path=";pathmysqlbin;"其中path为MySQL ...

  2. mysql全表重命名备份_Mysql数据库和表的常用操作以及数据备份恢复

    数据库 查看所有数据库 show databases; 使用数据库 use 数据库名; 查看当前使用的数据库 select database(); 创建数据库 create database 数据库名 ...

  3. mysql设备台账_mysql数据库操作语句大全.pdf

    mysql数据库操作语句大全.pdf mysql数据库操作语句大全(常用操作指令)一 . 常用mysql命令行命令1.启动MYSQL服务 netstartmysql停止MYSQL服务 stat na| ...

  4. 我的世界使用mysql数据库_mysql数据库常用命令笔记

    连接数据库:mysql -h localhost -u root -p 000000 退出:exit;    \q;    quit; SET foreign_key_checks = 0; 禁用外键 ...

  5. mysql删除原则_MySQL数据库的增删选查

    数据库是专门存储数据对象的容器,这里的数据对象包括表.视图.触发器.存储过程等,其中表是最基本的数据对象. 创建数据库 在 MySQL 数据库中存储数据对象之前,先要创建好数据库. 语法: creat ...

  6. mysql备库命令_mysql数据库备份命令

    备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 备份MySQL数据库 ...

  7. 数据库 mysql详解_MySQL数据库详解

    一.数据库概述 1.数据库与文件系统文件系统对比. 数据冗余和不一致性 数据访问 数据格式相对独立 数据完整性和原子性 数据的并发访问 数据的安全性问题 2.数据库概念 1.DBMS:数据库管理系统 ...

  8. mysql 苏勇_MySQL数据库基础学习笔记(整理自苏勇老师的MySQL基础课程视频)

    一.mysql安装及基本配置 1.安装 Mysql官网:www.mysql.com 开源版本(MySQL Community Server) --安装系统自带版本(如果需要更高版本可到官网下载) # ...

  9. mysql source 数据库_MySQL 数据库 source 命令详解及实例

    MySQL 数据库 source 命令详解及实例 MySQL 数据库 source 命令,该命令是数据库导入命令.source 命令的用法非常简单,首先你需要进入 MySQL 数据库的命令行管理界面, ...

  10. 如何用mysql创建股票数据库_mysql数据库创建表

    Mysql错误代码大全 1016错误:文件无法打开,使用后台修复或者使用phpmyadmin进行修复. 1044错误:数据库用户权限不足,请联系空间商解决 1045错误:数据库服务器/数据库用户名/数 ...

最新文章

  1. 【CF应用开发大赛】微博社交简历
  2. 计算机网络:第一章 概述
  3. EasyUI Window学习总结
  4. android10 内部存储,Android的内部存储和外部存储
  5. P4331 [BalticOI 2004]Sequence 数字序列(左偏树)
  6. 家庭用计算机怎样选择设置网络位置,win7系统怎么选择网络位置
  7. Windows 10 开启 Num Lock
  8. 没有wan接口_“伪千兆”路由器,快回家看看你家中招了没有?
  9. 11gpath失败 oracle_[转载]安装Oracle11gR2先决条件检查失败的详细解决处理过程
  10. ITIL 4学习和实践导读
  11. Xshell 颜色配置
  12. Unity导出exe时遇到的两个问题
  13. 什么镜头最适合拍风景_外出旅游,用什么镜头拍风光照比较好?
  14. docker学习1--docker基础学习
  15. mysql辅助索引非叶子节点_Mysql的聚集索引与辅助索引
  16. springboot+cas单点登录
  17. 怎么看SaaS企业中的收入留存率?
  18. IoU(Intersection over Union)
  19. 蓝魔法师(树形dp)
  20. 专题研究 - 汽车车内声品质评价研究 (一)

热门文章

  1. 1-Alternative Boot Flows
  2. ARMV8-aarch64的寄存器介绍(二)
  3. 2022-03-22
  4. ICS汇编学习笔记——操作数寻址方式
  5. Django简介Django 各个环境下的安装
  6. 【网络安全】Penelope:一款功能强大的Shell处理工具
  7. 【网络安全】如何使用PacketSifter从pcap中筛选出有用的信息
  8. 160个Crackme024之Opcode加密
  9. Acwing第 14 场周赛【完结】
  10. BeanUtils工具的使用