Python 10 MySQL数据库(一)
内容概要:
1.数据库介绍
2.mysql数据库安装使用
3.mysql数据类型
4.mysql命令语句
5.事务
6.一对多、多对多
7.其他
一、数据库介绍
什么是数据库?
数据库(Database)就是按照数据结构来组织、存储和管理数据的仓库。由于数据保存在文件中访问速度较慢,所以一般使用数据库存储数据。
数据库的分类?
数据库分为关系数据库和非关系型数据库。关系型数据库(RDMS relationship databse management system)通过外键建立两张表之间的关系。
Mysql数据库
mysql是现在最流行的关系型数据库,他是开源的,支持大型的数据库,使用标准的SQL语句。
二、Mysql数据库安装
三、Mysql数据类型
Mysql中定义数据字段的类型对数据库的优化非常重要。
Mysql支持多种类型,大致可以分为三类:数值、字符串和日期/时间类型。
数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 字节 | (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。CHAR是定长,如果数据长度不够则会自动补充空格;VARCHAR只是规定了最大长度。
日期/时间类型
类型 | 大小 (字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
四、Mysql基础语法
管理Mysql的命令:
- use 数据库名; #进入某个数据库,之后的操作只对这个数据库生效
- show databases; #展示所有数据库
- show tables; #展示当前数据库的所有表
- show columns from 表名; #显示表的属性,如主键信息、是否为NULL,默认值等
- desc 表名
- show index from 表名; #显示表的详细索引信息
- create database 库名; #创建数据库
- drop database 库名; #删除数据库
表操作命令:
Mysql创建数据表
1 #创建表 2 create table table_name(column name, column type) 3 4 #创建一张学生表 5 create table students( 6 'sid' INT AUTO_INCREMENT PRIMARY KEY, 7 'name' VARCHAR(50) NOT NULL, 8 'age' INT NOT NULL, 9 )engine=InnorDB DEFAULT charset=utf8 10 11 #查看表信息 12 desc student;
增删改查DML:
1 增 语法: 2 INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 3 INSERT INTO table_name VALUES(xxx,xxx,xxx),(xxx,xxx,xxx);
4 4 查 语法: 5 SELECT column_name,column_name FROM table_name [WHERE Clause] [OFFSET M ][LIMIT N] 6 7 改 语法: 8 UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause] 9 10 删 语法: 11 DELETE FROM table_name where stu_id=5;
12 DELETE FROM table_name # 清空整张表
alter命令
# 修改表结构 1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 数据类型 [完整性约束条件…]; 3. 删除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
create table t(id int unique,name char(10) not null); #去掉null约束 alter table t modify name char(10) null; # 添加null约束 alter table t modify name char(10) not null;
create table t(id int unique,name char(10) not null); # 去掉unique约束 alter table t drop index id; # 添加unique约束 alter table t modify id int unique; alter table t add index unique id
# 添加外键 alert table table_name add foreign key(column_name) references table_name(column_name); # 删除外键 alter table book drop foreign key fk_id;
排序
select * from student order by age; #默认升序 select * from student order by age asc; #升序 select * from student order by age desc; #降序
like模糊查询
select * from student where name like '%abc'; #表示查询以abc结尾的数据 select * from student where name like '_abc_'; #表示查询中间有abc的数据
where用于分组前的条件筛选
#1:单条件查询 SELECT emp_name FROM employee WHERE post='sale'; #2:多条件查询 SELECT emp_name,salary FROM employee WHERE post='teacher' AND salary>10000; #3:关键字BETWEEN AND SELECT emp_name,salary FROM employee WHERE salary BETWEEN 10000 AND 20000; SELECT emp_name,salary FROM employee WHERE salary NOT BETWEEN 10000 AND 20000; #4:关键字IS NULL(判断某个字段是否为NULL不能用等号,需要用IS) SELECT emp_name,post_comment FROM employee WHERE post_comment IS NULL; SELECT emp_name,post_comment FROM employee WHERE post_comment IS NOT NULL; SELECT emp_name,post_comment FROM employee WHERE post_comment=''; 注意''是空字符串,不是null ps: 执行 update employee set post_comment='' where id=2; 再用上条查看,就会有结果了 #5:关键字IN集合查询 SELECT emp_name,salary FROM employee WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ; SELECT emp_name,salary FROM employee WHERE salary IN (3000,3500,4000,9000) ; SELECT emp_name,salary FROM employee WHERE salary NOT IN (3000,3500,4000,9000) ; #6:关键字LIKE模糊查询 通配符’%’ SELECT * FROM employee WHERE emp_name LIKE 'eg%'; 通配符’_’ SELECT * FROM employee WHERE emp_name LIKE 'al__';
聚合&分组 group by
having用于分组后的条件筛选
limit n; 表示查询前n行数据
distinct 去重
五、数据完整性约束
not null,unique,primary key,foregin key
六、事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务.
只有使用InnorDB引擎时才支持事务,事务可以维持数据库的完整性,保证一批语句要么全部执行,要么全部不执行。
1 begin; #开始一个事务 2 insert into students (name) values(1); 3 commit; #如果没出错则commit提交 4 rollback; #如果出错就回滚,这样相当于没有执行过命令
七、外键和多对多关系
创建外键关系:
1 create table classroom( 2 'cid' INT AUTO_INCREMENT PRIMARY KEY 3 ); 4 5 create table student( 6 'name' VARCHAR(24) NOT NULL, 7 'class_id' INT NOT NULL, 8 foreign key(class_id) references classroom(id) 9 );
如果在创建表时没有创建外键,也可以通过alert建立联系:
1 alert table student add foreign key(class_id) references classroom(id);
删除外键:
1 alert table student drop foreign key class_id;
多对多可以通过创建第三张表,分别创建两张表的外键来实现。