数据库介绍及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))

python学习之-- Mysql 基础知识的更多相关文章

  1. 数据库学习笔记 - MySQL基础知识

    一.数据库基础知识 1.1 Whats's 数据库 数据库(Database,DB):将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合.如:大型-银行存储的信息,小型-电话簿. 数据 ...

  2. Python学习之并发基础知识

    8 并发编程 8.1 基础知识 8.1.1 操作系统的定义 操作系统是存在于硬件与软件之间,管理.协调.调度软件与硬件的交互. 资源管理解决物理资源数量不足和合理分配资源这两个问题, 通俗来说,操作系 ...

  3. Python学习第二节——基础知识

    # !/usr/bin/edv python    脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它.# -*- coding:UTF-8 -*-    标明编码注释 ...

  4. Python学习笔记——1——基础知识

    1.1.变量和算法 python语言很类似人类语言,变量不需要定义类型.比如: 整型 字符串类型 数组 Java int a=12 String s="test" String[] ...

  5. (一)Python 学习第一天--基础知识,列表

    1. .pyc文件 .pyc文件:在python3中,当模块运行时会自动生成在_pycache_文件夹中,其中c为compiled的缩写. Python是一门现编译后解释的语言,在运行时首先寻找.py ...

  6. python学习笔记(一)-基础知识

    O.解释型语言和编译型语言 编译型语言就是先把写好的程序翻译成计算机语言然后执行,就是所谓的一次编译到处运行,比如c.c++就是编译型语言,这样的语言特点是运行速度快,但是需要事先把程序编译好才可以. ...

  7. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  8. Python学习课程零基础学Python

    python学习课程,零基础Python初学者应该怎么去学习Python语言编程?python学习路线这里了解一下吧.想python学习课程?学习路线网免费下载海量python教程,上班族也能在家自学 ...

  9. MySQL 基础知识梳理

    MySQL 的安装方式有多种,但是对于不同场景,会有最适合该场景的 MySQL 安装方式,下面就介绍一下 MySQL 常见的安装方法,包括 rpm 安装,yum 安装,通用二进制安装以及源码编译安装, ...

随机推荐

  1. mongoDB学习初步总结

    What? 最受欢迎的非关系型数据库之一.面向文档的数据库,在存储乎数据方面与关系型数据库有着本质的区别. Why? 简单易用 对多变的业务需求,适应性强于SQL型DB 性能 复制 索引 分片 丰富的 ...

  2. Ubuntu系统下配置PHP支持SQLServer 2005

    最近在做一个项目,该项目的数据库是微软公司的的SQLserver ,数据库安装在另一台windows服务器上,而项目却部署在ubuntu server上.那么这样就会涉及到项目在linux上如何链接S ...

  3. Hadoop分布式集群安装

        环境准备     操作系统使用ubuntu-16.04.2 64位 JDK使用jdk1.8 Hadoop使用Hadoop 2.8版本     镜像下载  操作系统     操作系统使用ubun ...

  4. nodejs,python,sublime和Eclipse的包管理器

    Python的包管理器叫pip. 首先安装Python运行环境Python 3.7.0:https://www.python.org/downloads/release/python-370/ Pyt ...

  5. pylint安装失败的解决方法

    原文链接http://www.cnblogs.com/Loonger/p/7815335.html 使用命令pip3 install pylint安装pylint是出现错误.查了一圈也找不到答案.仔细 ...

  6. toplink

    TopLink,是位居第一的Java对象关系可持续性体系结构,原署WebGain公司的产品,后被Oracle收购,并重新包装为Oracle AS TopLink.TOPLink为在关系数据库表中存储 ...

  7. faster rcnn训练过程讲解

    http://blog.csdn.net/u014696921/article/details/60321425

  8. win10 配置系统默认utf-8编码

    win10 配置系统默认utf-8编码 系统  win10 配置系统默认utf-8编码 Windows系统默认字符编码为gbk编码,开发项目编码一般为UTF-8,在我们执行程序及进行程序编码过程中编码 ...

  9. github下拉刷新与上拉加载地址

    https://github.com/chrisbanes/Android-PullToRefresh

  10. MySQL 优化 之 Copying to tmp table on disk

    项目中遇到了慢查询问题 Sql语句 SELECT sum(price) AS price, `member_id` FROM `crm_upload` GROUP BY member_id ORDER ...