数据库介绍及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. LR 两种录制:html与url

    一直在使用LR,对于Html_based script和Url-based script 两种录制方式之间,要如何选择,仍是一知半解.最近测试时遇到同样的业务功能,两种录制方式的脚本,单次执行时间差别 ...

  2. 嵌入式ARM开发板学习方法步骤

    嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有linux,android. 平台:Cortex-A9开发板 嵌入式技术学习如何入手,从何学起呢, 以下内容简单介绍嵌入式开发的学习步骤及如 ...

  3. PHP02 PHPStrom2018.X与WAMPServer3.0.6的集成

    脚本运行环境设置:设置PHPStorm中的脚本在PHP解析器上运行 1.进入Filie>>>setting>>languages and FrameWorks 选择php ...

  4. mybatis-5 手写代理

    @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Select { public St ...

  5. L2-2 社交集群 (25 分)(一个写挫的并查集)

    题目: 思路: 就是一个并查集的裸题,不过在数据查找方面可能不好处理,暴力完全可以解决这个问题啊!! #include <bits/stdc++.h> #include <cstdi ...

  6. bzoj4951 [Wf2017]Money for Nothing

    题目描述 题解: 答案显然是$max((q-p)*(e-d))$ 依然先贪心. 对于工厂,我们倾向于$pi<pj,di<dj$的; 对于买家,我们倾向于$qi>qj,ei>ej ...

  7. thinkphp5实现文件上传

    原理:通过form表单的enctype = "multipart / form-data"属性将文件临时放在htdocs文件夹的tmp目录下,再通过后台的程序将文件保存在自己设定的 ...

  8. java线程总结--synchronized关键字,原理以及相关的锁

    在多线程编程中,synchronized关键字非常常见,当我们需要进行“同步”操作时,我们很多时候需要该该关键字对代码块或者方法进行锁定.被synchronized锁定的代码块,只能同时有一条线程访问 ...

  9. 剑指Offer(书):实现单例模式

    题目:设计一个类,我们只能生成该类的一个实例. 生成一个单例模式,有下列几种常用解法. 1.双重检查锁. 当运行在多线程环境中,此方法可以正常实现单例模式. public class Singleto ...

  10. LeetCode(52) N-Queens II

    题目 Follow up for N-Queens problem. Now, instead outputting board configurations, return the total nu ...