人生苦短,我用Python--一个*农业大学计算机本科生的Python学习之路-数据库(第一天)
数据库基本介绍
- 数据库
- RDBMS
- SQL
- MySQL
1.数据库
数据库就是一种特殊的文件,其中存储着需要的数据:
-
数据库核心元素
1.数据行(记录)
2.数据表(数据行的集合)
3.数据列(字段)
4.数据库(数据表的集合)
2.RDBMS
Relational Database Management System
所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
查看最全数据库排行榜:https://db-engines.com/en/ranking
-
数据库的主要产品:
1.oracle:在以前的大型项目中使用,比如,银行,电信等项目
2.mysql:web时代使用最广泛的关系型数据库
3.sql server:在微软的项目中使用
4.sqlite:轻量级数据库,主要应用在移动平台
3.SQL
Structured Query Language
SQL是结构化查询语言,是一种用来操作RDBMS的数据库语言,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 oracle,sql server,mysql,sqlite 等等所有的关系型的数据库
-
数据库的主要产品:
1.DQL:数据查询语言,用于对数据进行查询,如select
2.DML:数据操作语言,对数据进行增加、修改、删除,如insert、udpate、delete3.TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback
4.DCL:数据控制语言,进行授权与权限回收,如grant、revoke
5.DDL:数据定义语言,进行数据库、表的管理等,如create、drop
6.CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor
4.MYSQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于Oracle旗下产品
-
MYSQL数据库的特点:
1.使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性
2.支持多种操作系统,如Linux、Windows、AIX、FreeBSD、HP-UX、MacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris等3.为多种编程语言提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等
4.支持多线程,充分利用CPU资源
5.优化的SQL查询算法,有效地提高查询速度
6.提供多语言支持,常见的编码如GB2312、BIG5、UTF8
7.提供TCP/IP、ODBC和JDBC等多种数据库连接途径
8.提供用于管理、检查、优化数据库操作的管理工具
9.大型的数据库。可以处理拥有上千万条记录的大型数据库
10.支持多种存储引擎
11.MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库
12.MySQL使用标准的SQL数据语言形式
13.Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统
14.在线DDL更改功能
15.复制全局事务标识
16.复制无崩溃从机
17.复制多线程从机
MYSQL查询
1.查询
数据库操作
--连接数据库
mysql -uroot -p
mysql -uroot -pmysql
--退出数据库
exit/quit/Ctrl+d
--显示数据库版本
select version();
--显示时间
select now();
--查看所有的数据库
show databases;
--创建数据库
create database python04;
create database python04new charset=utf8;
--查看创建数据库的语句
show create database python04;
所以通常使用 create database python04new charset=utf8; 命令
--删除数据库
drop database python04;
drop database python04new;
--查看当前使用的数据库
select database();
--使用数据库
use python01;
--使用数据库
use python03;
--查看当前数据库中所有的表
show tables;
数据表操作
– 创建表
– auto_increment 表示自动增长
– not null 表示不能为空
– primary key 表示主键
– default 默认值
– create table 数据表名字 (字段 类型 约束[, 字段 类型 约束]);
– 创建classes表 (id, name)
-- 创建一个名为 python03 的数据库
create database python03 charset=utf8;
--查看当前数据库中所有的表
show databases;
-- 数据库创建好了之后 我们得使用数据库
use python03;
-- 创建数据表
create table student(id int, name varchar(30));
create table classes(id int primary key not null auto_increment, name varchar(30));
-- 下面是最简单的数据表的创建
desc student;
desc classes;
--练习
--创建student表(id, name, age, height, weight, gender, class_id)
create table student2(
id int unsigned not null auto_increment primary key,
name varchar(30),
age tinyint unsigned default 0,
height decimal(5, 2),
weight decimal(7, 2),
gender enum("男", "女", "中性", "保密") default "保密",
class_id int unsigned
);
-- 给表中插入数据
insert into student2 values (0, "小艾", 25, 1.72, 64, "男", 1);
-- 查看插入的数据
select * from student2;
修改表-添加字段
-- alter table 表明 add 列名 类型
alter table student2 add birthday datetime;
--修改表-修改字段:不重命名阪
alter table student2 modify birthday date;
--修改表-修改字段:重命名版
alter table student2 change birthday birth date default "2000-01-01";
-修改表-删除字段
--alter table 表名 drop 列名
alter table student2 drop weight;
--删除表
-- drop database 数据库名;
-- drop table 数据表;
drop table student2;
增删改查
-- 增加
-- 全裂插入
-- insert [into] 表明 values(...)
-- 主键字段 可以用 0 null default 来占位
-- 向classes 表中插入一个班级
insert into classes values(0, "大神班");
-- 向student 表中插入一个学生信息
insert into student2 values(0, "xiaoai", "1999-11-11", 19, 1.88, 2);
insert into student2 values(null, "xiaoai", "1999-11-11", 19, 1.88, 2);
insert into student2 values(default, "xiaoai", "1999-11-11", 19, 1.88, 2);
-- 失败
insert into student2 values(default, "xiaoai", "中性","1999-11-11", 19, 1.88, 2);
-- 枚举中 的 小标从1开始 1---"男" 2--->"女"
insert into student2 values(default, "小力", 20, 1, 1, "1999-11-11");
-- 部分插入
-- insert into 表名(列1,...) values(值1,...)
insert into student2 (name, gender) values ("小巧", 2);
insert into student2 (name, gender) values ("小巧", 2), ("貂蝉", 3), ("吕布", 4);
-- 修改
-- update 表名 set 列1=值1, 列2=值2, ... where 条件;
update student2 set gender=1; --全部修改
update student2 set gender=1 where name="小巧"; --只要name是小巧的全部修改
update student2 set gender=1 where id=3; --只要id为3的 进行修改
update student2 set age=22, gender=1 where id=3; --只要id为3 进行修改
-- 查询基本使用
-- 查询所有列
-- select * from 表名;
select * from student2;
-- 条件查询
select * feom student2 where name="小巧"; -- 查询name为小巧的所有信息
select * feom student2 where id>3; -- 查询用户id小于3的所有用户信息
-- 查询指定列
--select 列1,列2 .....from 表名;
select name, id from student2;
-- 可以使用as为列或表指定别名
-- select 字段[as 别名], 字段[as 别名] from 数据表 where ...;
select name as 姓名, gender as 性别 from student2;
-- 字段的序列
select gender as 性别, name as 姓名 from student2;
select id as ***, gender as 性别, name as 姓名 from student2;
-- 删除
-- 物理删除
-- delete from 表名 where 条件
delete from student2; -- 整个数据表里的所有数据全部删除
delete from student2 where name ="小巧";
-- 逻辑删除
-- 用一个字段来表示 这条信息是否已经不能在使用了
-- 给 student2 表添加一个 is_delete 字段 bit 类型
alter table student2 add is_delete bit default 0;
update student2 set is_delete-1 where id= 0;