python学习之-- Mysql 基础知识

数据库介绍及MYSQL基础操作了解

关系型数据库(RDBMS)
是按照数据结构来组织,存储和管理数据的仓库。
特点:
1:数据以表格的形式出现
2:每行为各种记录名称
3:每列为记录名称所对应的数据域
4:许多的行和列组成一张表单
5:若干的表单组成database
包括:oracle,mysql,sqlserver,db2,postgresql,sqlite,access
RDBMS 术语:
数据库:一些关联表的集合
数据表:表是数据库的矩阵,一个数据库中的表看起来像一个简单的电子表格
列:包含了相同的数据
行:是一组相关的数据
冗余:存储2倍数据,冗余可以使系统速度更快
主键:唯一的,一个数据表中只能包含一个主键,可以用主键来查询数据
外键:用于关联2个表
复合键:(组合键)将多个列作为一个索引键,一般用于复合索引
索引:使用索引可快速访问数据库表中的特定信息,索引是对数据库表中一列或多列的值进行排序的一种结构,类似书目录
参照完整性:要求关系中不允许引用不存在的实体。

Mysql 数据库
是关系型数据库管理系统,在web应用方面mysql是最好的RDBMS应用软件之一。
安装就不介绍了。请自行上网查询。

Mysql 数据类型
支持多种类型,大致分三类:数值,日期/时间,字符串 类型
数值类型:常用的是int类型4字节

类型

大小

范围(有符号)

范围(无符号)

用途

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的值

小数值

日期类型:表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

类型

大小
(
字节)

范围

格式

用途

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

混合日期和时间值,时间戳

  

字符串类型:常用的是char,varchar,text

类型

大小

用途

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类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

sql常用操作语句:

show databases; 查看数据库
use 数据库名; 选择进入数据库
show tables; 显示所有表
desc 表名: 显示表结构信息
show user显示了表字段信息,其中显示了2个标识有主键的host,user字段,这里这个双字段主键就叫做复合键。
mysql创建root密码: mysqladmin -u root password 'new passord'
查询表所有数据:select * from 表名G; G为可选参数,
创建数据库:create database dbname charset utf8;
注意:默认创建的数据库字符集是latin1,不支持中文
show create database dbname 可以查看创建的库信息
创建账号并授权操作此数据库:grant All on dbname.* to 'jack'@'%' identified by 'password';
显示账号权限命令:show grants for jack;
show columns from user == desc user

创建表:
语法:create table table_name (column_name,column_type);
create table student(
stu_id int not null auto_increment, # 整型列,不允许为空,且可以自增
name char(32) not null, # 32字节 不允许为空
age int not null,
register_data date not null,
primary key (stu_id) ); # 设置stu_id为主键,主键默认是唯一的。
表中插入数据: insert to table_name (field1,field2,...fieldn) values (value1,value2,...valuen);
insert into student (name,age,register_data) values('jack',23,'2016-06-27');

查询表语法:
select column_name,column_name from table_name [where clause] [offset n] [limit n]
查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
SELECT 命令可以读取一条或者多条记录。
你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
你可以使用 WHERE 语句来包含任何条件。
你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0(就是第一行开始)。
你可以使用 LIMIT 属性来设定返回的记录数。
如:
select * from student LIMIT 3 OFFSET 2;
select * from student where id > 3 and age < 30;
select * from student where register_data like '2017-06-2%';

修改语法:update table_name set field1=new_value1,field2=new_value2 [where clause]
如:update student set name='coco',age=40 where id=4;

删除语法:DELETE FROM table_name [WHERE Clause]
如:delete from student where name='coco';

排序:SELECT field1, field2,...fieldN table_name1, table_name2... ORDER BY field1, [field2...] [ASC [DESC]]
使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
如:SELECT * from student ORDER BY id desc;
分组统计:
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
如:select name,count(*) from student GROUP BY name; 统计每个名称各出现次数
select name,count(*) from student GROUP BY name with rollup; # with rollup 可以显示统计总数

修改表名或字段名:alter
语法:
如下:
alter table student drop register_date; #从student表删除register_date字段
alter table student add phone int(11) not null; #添加phone字段
alter TABLE student add sex enum('M','F'); # 添加枚举类型字段
枚举字段:就是插入的数据类型必须指定为设置的类型,否则无法插入(此字段不允许为空)。
alter table student modify sex enum("F","M") not null; 修改字段属性
alter table student change sex gender char(32) not null; 修改字段名
设置默认值:指定字段J为not null且默认值为100
alter table student modify j begint not null default 100;

外键关联
创建一个新表:
create table study_record(
id int auto_increment,
day int not null,
status char(32) not null,
stu_id int not null,
PRIMARY KEY (`id`),
KEY `fk_student_key` (`stu_id`),
CONSTRAINT `fk_student_key` FOREIGN KEY (`stu_id`) REFERENCES `student` (`id`) )# 建立stu_id外键关联到student的id列
插入数据:
insert into study_record(day,status,stu_id) values (2,'no',2);
注意:这里插入数据时看stu_id在对应的关联表里的id数据是否存在,存在才可以插入。
删除数据:
delete from study_record where id = 3 # 发现是可以删除关联表里数据的
delete from student where id=1 # 发现被关联表无法删除已关联的数据

mysql NULL 值处理
当where字句提供的查询条件字段为NULL时,该命令可能就无法正常工作了,遇到这情况,mysql提供了三大运算符。
IS NULL:当列的值是NULL,此运算符返回true
IS NOT NULL:当列的值不为NULL,运算符返回true
<=>:当比较的2个值为NULL时返回true
关于NULL的条件比较运算是比较特殊,不能使用 =NULL 或 !=NULL 在列中查找NULL值。
所以:mysql中处理NULL 要使用 IS NULL 和 IS NOT NULL运算符。

mysql 连接查询(就是通过关联从A表查B表或者从B表查A表)
分:left join,right join,inner join,full join
注:mysql不直接支持full join ,写法看下面
举例分析:
创建2个表先:
create table a (a int not null);
create table b (b int not null);
insert into a (a) values (1);
insert into a (a) values (2);
insert into a (a) values (3);
insert into a (a) values (4);
insert into a (b) values (3);
insert into a (b) values (4);
insert into a (b) values (5);
insert into a (b) values (6);
求2个表的交集
select * from a inner join b on a.a = b.b; # a表a字段和b表b字段进行提取交集数据
求2个表的差集
select * from a left join b on a.a = b.b; 正向的
select * from a right join b on a.a = b.b; 反向的
求2个表的并集
select * from a left b on a.a = b.b union select * from a right join on a.a = b.b

mysql 事务
注:只有innodb引擎才支持事务,mysql默认启动就是innodb模式
mysql事务主要用于处理操作量大,复杂度高的数据。
事务必须满足4个条件(ACID):Atomicity(原子性),Consistency(稳定性),Isolation(隔离性),Durability(可靠性)
1:原子性:一组事务,要么成功,要么撤回
2:稳定性:由于外键约束导致数据无法删除,则立即撤回。
3:隔离性:事务独立运行
4:可靠性:当软,硬件崩溃后,Innodb数据表驱动利用日志文件进行重构修改,可靠高速不可兼得。
举例:开启一个事务
begin; # 开始一个事务
insert into a (a) values(55);
查看如果插入数据有问题则输入:rollback进行回滚,没问题就commit提交

索引:
一个数据表里可以有多个索引。关注哪个字段可以为字段增加索引。
查看表的索引:show index from table_name;
注意;一个表里的主键自动就是索引
增加索引: create index index_name on student(name(32)); 注不要超过字段的长度。
删除索引:drop index index_name on student;
唯一索引:一般主键就是。create unique index index_name on student(name(32))

原文地址:https://www.cnblogs.com/zy6103/p/7088622.html