• 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))

  • 相关阅读:
    最全!即学即会 Serverless Devs 基础入门(上)
    一站式智能运维解决方案,企业系统的隐形守护者
    Serverless JOB | 传统任务新变革
    好的 MySQL 兼容性可以做到什么程度? PolarDBX 如何做生态兼容
    Apsara Stack 技术百科 | 如何「场景化」的企业上云
    事务、全局索引、透明分布式,再见,分区健!
    IT人才能嗑到的这对CP,甜!
    腾讯云:最简单CentOS7下安装GUI图形界面(最新)
    Navicat连接不上Mysql 8问题解决方案
    【JS】验证表单是否空白验证
  • 原文地址:https://www.cnblogs.com/zy6103/p/7088622.html
Copyright © 2020-2023  润新知