MySQL基础详细笔记

MySQL-基础笔记一

1、MySQL概述

      1、什么是数据库

             数据库是一个存储数据的仓库

      2、都有哪些公司在用数据库

             金融机构、游戏网站、购物网站、论坛网站 ... ...

      3、提供数据库服务的软件

             1、软件分类

                    MySQL、SQL_Server、Oracle、Mariadb、DB2、MongoDB ...

             2、在生产环境中,如何选择使用哪个数据库

                    1、是否开源

                           开源软件:MySQL、Mariadb、MongoDB

                           商业软件:Oracle、DB2、SQL_Server

                    2、是否跨平台

                           不跨平台:SQL_Server

                           跨平台:MySQL、Mariadb、MongoDB、DB2、Oracle

                    3、公司的类型

                           商业软件:政府部门、金融机构

                           开源软件:游戏网站、购物网站、论坛网站... ...

    4、MySQL的特点

             1、关系型数据库

                    1、关系型数据库的特点

                           1、数据是以行和列的形式去存储的

                           2、这一系列的行和列称为表

                           3、表中的每一行叫一条记录

                           4、表中的每一列叫一个字段

                           5、表和表之间的逻辑关联叫关系

                    2、示例

                           1、关系型数据库存储

                                  表1、学生信息表

                                         姓名   年龄   班级

                                         牛郎   25     AID1803

                                         织女   23     AID1801

                                  表2、班级信息表

                                         班级     班主任

                                         AID1803  卢大大

                                         AID1801  孙大大

                           2、非关系型数据库中存储

                                  {"姓名":"牛郎","年龄":25,"班级":"AID1803","班主任":"卢大大"}

                                  {"姓名":"织女","年龄":25,"班级":"AID1803"}

             2、跨平台

                    可以在Unix、Linux、Windows上运行数据库服务

             3、支持多种编程语言

                    Python、java、php ... ...

2、MySQL的安装

      1、Ubuntu安装MySQL服务   RedHat(红帽)、CentOS、Ubuntu

             1、安装服务端

                    sudo apt-get install mysql-server

             2、安装客户端

                    sudo apt-get install mysql-client

      2、Windows安装MySQL服务

             1、下载MySQL安装包(windows)

                    mysql-installer***5.7.***.msi

             2、双击、按照教程安装即可

3、启动和连接MySQL服务

    1、服务端启动

             1、查看MySQL服务状态

                    sudo /etc/init.d/mysql  status

             2、停止、启动、重启MySQL服务

                    sudo /etc/init.d/mysql stop | start | restart

    2、客户端连接

             1、命令格式

                    mysql -h主机地址 -u用户名 -p密码

                    mysql -hlocalhost -uroot -p123456

             2、本地连接可以省略 -h 选项

                    mysql -u用户名 -p密码

                    mysql -uroot -p123456 

4、基本SQL命令

    1、SQL命令的使用规则  ;结尾,不区分大小写,\c终止命令

             1、每条SQL命令必须以 ; 结尾

             2、SQL命令不区分字母大小写

             3、使用 \c 来终止命令的执行 (Linux中 ctrl + c)

2、库的管理  7个命令 

             1、库的基本操作

                    1、查看已有的库

                           show databases;

                    2、创建库(指定默认字符集)

                           create database 库名 default charset=utf8;

                    3、查看创建库的语句

                          show create database 库名;

                    4、查看当前所在库

                           select database();

                    5、切换库

                           use 库名;

                    6、查看库中已有表

                           show tables;

                    7、删除库

                           drop database 库名;

             2、库名的命名规则

                    1、可以使用数字、字母、_,但不能使用纯数字

                    2、库名区分字母大小写

                    3、库名具有唯一性

                    4、不能使用特殊字符和MySQL关键字

             3、练习

                    1、创建库AID1803db,指定字符集为utf8

                           create database AID1803db default charset=utf8;

                    2、切换到该库AID1803db

                           use AID1803db;

                    3、查看当前所在库

                           select database();

                    4、查看库中已有的表

                           show tables;

                    5、查看AID1803db的字符集(查看创建库的语句)

                           show create database AID1803db;

                    6、删除库AID1803db

                           drop database AID1803db;

show databases;

3、表的管理  4个命令:增create  删 drop.. 查show desc
             1、表的基本操作create table lx2(id int) engine=myisam;

                    1、创建表(指定字符集)

                           create table 表名(

                           字段名 数据类型,

                           字段名 数据类型,

                           ... ...

                           );

                    2、查看创建表的语句(字符集)

                           show create table 表名;

                    3、查看表结构

                           desc 表名;

                    4、删除表

                           drop table 表名;

             2、表的命名规则(同库的命名规则)
             3、练习

                    1、创建库 python

                           create database python;

                    2、在库 python 中创建表 py_mysql,指定字符集utf8

                            表中字段有 id int 和 name char(20) 两个字段

                           use python;

                           create table py_mysql(

                           id int,

                           name char(20)

                           )default charset=utf8;

                    3、查看表 py_mysql 的字符集以及存储引擎

                           show create table py_mysql;

                    4、查看 py_mysql 的表结构

                           desc py_mysql;

                    5、删除表 py_mysql

                           drop table py_mysql;

         4、注意

                    1、所有的数据都是以文件的形式存放在数据库目录下

                    2、数据库目录:/var/lib/mysql

5、更改库、表的默认字符集

      1、方法

             通过更改MySQL服务的配置文件来实现

      2、步骤

             1、获取root权限

                    sudo -i

             2、切换到配置文件所在路径

                    cd /etc/mysql/mysql.conf.d

             3、备份

                    cp -p mysqld.cnf mysqld.cnf.bak

                    (-p选项连同原文件权限一起复制)

             4、用vi打开my.cnf

                    vi /etc/my.cnf

                    [mysqld]

                    character_set_server = utf8 保存退出

                    a -> 写入 -> ESC -> shift + : -> wq

             5、重启mysql服务

                    /etc/init.d/mysql restart | reload(重载配置文件)

             6、退出超级用户 exit

             7、登录到mysql验证:mysql -uroot -p123456

                                 create database 库名;

                                         show create database 库名;

6、表记录管理     》增  查 下节讲  删除 修改

      1、在表中插入记录   

             1、insert into 表名 values(值1),(值2),...,(值N);

     

  1. insert into 表名(字段名列表) values(值1),...(值N);
      2、查询表记录 

             1、select * from 表名;

             2、select 字段1,字段名2,...,字段名N from 表名;

       3、select 字段 别名,字段2 别名  from  表名;

   

      3、练习

             1、查看所有的库 : show databases;

             2、创建新库 stu1 : create database stu1;

             3、在库 stu1 中创建表 students ,字段要求如下

                     1、id int

                     2、name char(15)

                     3、age int

                     4、address char(20)

 create table students (id int,name char(15),age int,address char(20));

             4、查看表 students 的表结构: desc students;

             5、在表中插入一条记录(行)

                    insert into students values(1,"Tom",25,"Beijing");

             6、在表中一次性插入2条记录(行)

                    insert into students values(...),(...);

             7、查看所有表记录 : select * from students;

             8、删除表 students : drop table students;

             9、删除库 stu1 : drop database stu1;

7、客户端把数据存储到数据库服务器上的过程

      1、连接到数据库服务器 : mysql -uroot -p123456

      2、选择一个库 :use 库名;

      3、创建表或者修改表 :create ...

      4、断开与数据库服务器的连接 :exit | quit | \q

8、名词介绍

      1、DB (database)

             DB就是数据库,存储数据的仓库

      2、DBMS(database management system)

             数据库管理系统

           管理数据库的软件:MySQL、Oracle、MongoDB ... ...

      3、DBS(database system)

             数据库系统

             DBS = DB(存储) + DBMS(数据库软件) + 数据库应用(财务管理系统、人事管理系统) + 用户

9、数据类型

    1、数值类型(有符号signed和无符号unsigned)

   Create table lx(name int(5) zerofill);

             1、整型  int(n)n不影响字节大小 ,tinyint,smallint,bigint,

                    1、int 大整型(4个字节)

                           取值范围:0 ~ 2 ** 32 -1(42亿多)

                    2、tinyint 微小整型(1个字节)

                           1、有符号(signed默认): -128 ~ 127

                           2、无符号(unsigned): 0 ~ 255

                    3、smallint 小整型(2个字节)

                           取值范围:0 ~ 65535

                    4、bigint 极大整型(8个字节)

                           取值范围:0 ~ 2 ** 64 - 1

             2、浮点型   float,double,decimal

                    1、float(4个字节,最多显示7个有效位)

                           1、用法

                                  字段名 float(m,n) m:表示总位数 n:小数位位数

                           示例:

                                  salary float(5,2) 取值范围? -999.99 ~ 999.99

                           2、注意

                                  1、浮点型插入整数时会自动补全小数位位数

                                  2、小数位如果多于指定的位数,会对指定位的下一位进行四舍五入

                                       示例:float(5,2)  -> 23.128 -> 23.13

                    2、double(8个字节,最多显示15个有效位)

                           1、用法

                                  字段名 double(m,n)

                    3、decimal(M+2个字节,最多显示28个有效位)

                           1、用法

                                  decimal(28,5)

    2、字符类型、

        字符类型占用空间大小==M*最大单字符大小

             1、char(定长M)  char(20)

                    1、取值范围:1 ~ 255

                    2、不给定宽度默认为 1

             2、varchar(变长M)

                    1、取值范围:1 ~ 65535

                    2、注意

                           1、varchar没有默认宽度,必须给定一个宽度值

                                  示例:name varchar(20)

             3、char 和 varchar 的特点

                    1、char

                           浪费存储空间,但是性能高

                    2、varchar

                           节省存储空间,但是性能低

             4、练习

                  1、创建表stuinfo,字段要求如下:

                           学号:id 大整型                 id int,

                           姓名:name 变长,宽度为15        name varchar(15),

                           班级:classes 定长,宽度为7      classes char(7),

                           年龄:age 微小整型,要求不能输入负数

                                                age tinyint unsigned,

                           身高:height 浮点型,小数位为2位

                    2、查看表结构 : desc stuinfo

                    3、在表 stuinfo 中插入2条记录(行)

                           insert into stuinfo values

                           (1,"张三丰","AID1803",23,175.00)

                    4、查询所有表记录

                           select * from stuinfo;

                    5、查询所有学生的姓名、年龄和身高

                           select name,age,height from stuinfo;

    3、枚举类型

             1、定义

                    字段值只能在列举的范围内选择

             2、enum(...) 单选(最多有65535个不同的值)

                    字段名 enum(值1,值2,...,值N)

             3、set(...) 多选(最多有64个不同的值)

                    字段名 set(值1,值2,...,值N)

                    插入记录时 "Python,boy,Mysql"

    4、日期时间类型
             1、year :年 YYYY
             2、date :日期 YYYYMMDD
             3、time :时间 HHMMSS
             4、datetime :日期时间 YYYYMMDDHHMMSS
             5、timestamp :日期时间 YYYYMMDDHHMMSS

Create table t(a year,b date,c time,d datetime,e timestamp);

Insert into t values(now(),now(),now(),now(),now());

Select * from t;

Insert into t(a) values(now());

                    create table t6(

                    id int,

                    name varchar(15),

                    age tinyint unsigned,

                    birth_year year,

                    birthday date,

                    class time,

                    meeting datetime,

                    )default charset=utf8;

                    insert into t6 values

                    (1,"武松",40,1979,19790520,090000,20180504000000);

                    select * from t6;

             6、注意

                   1、插入记录时datetime字段不给值默认返回NULL

                    2、插入记录时timestamp字段不给值默认返回系统当前时间

Insert into t7 values(now(),now());

10、表字段的操作  修改 表   alter table 表名

      1、语法:alter table 表名 执行动作;

             1、添加字段  add

                    alter table 表名 add 字段名 数据类型 first;

alter table 表名 add 字段名 数据类型 after 字段名;

             2、删除字段  drop 

                    alter table 表名 drop 字段名;

             3、修改字段数据类型  modify

                    alter table 表名 modify 字段名 新数据类型;

                    # 修改数据类型时会受到表中原有数据的限制

             4、修改字段名   change

                    alter table 表名 change 旧名 新名 数据类型;

             5、修改表名  rename

                    alter table 表名 rename 新表名;

MySQL-基础笔记回顾一

1、MySQL的特点

      1、关系型数据库

      2、跨平台

      3、支持多种编程语言

2、MySQL的启动和连接

      1、服务端启动

             sudo /etc/init.d/mysql start|stop|restart|reload

      2、客户端连接

             mysql -h主机地址 -u用户名 [-P3306] -p密码

      3、注意

             1、MySQL中的数据是以文件的形式存储在数据库目录/var/lib/mysql

             2、关系型数据库的核心内容是 关系 即 二维表

3、库的管理

      1、创建库(指定字符集)

             create database 库名 default charset = utf8;

      2、查看创建库的语句

             show create database 库名;

      3、查看当前所在库

             select database();

      4、切换库

             use 库名;

      5、查看库中已有表

             show tables;

      6、删除库

             drop database 库名;

      7、show  databases

4、表的管理

      1、创建表(指定字符集)

             CREATE TABALE 表名(字段名 数据类型,...)DEFAULT CHARSET = UTF8;

       Create table 表名 as select 字段名 from 表名;结构及数据

       Create table 表名 like 旧表名; 单结构

      2、查看创建表的语句(字符集和存储引擎)

             show create table 表名;

      3、查看表结构

             desc 表名;

      4、删除表

             drop table 表名;

5、表记录的管理

      1、插入记录

             insert into 表名 values(),(),...;

             insert into 表名(字段名列表) values(),(),...;

      2、查询表记录

             select * from 表名;

             select 字段名1,字段名2,... from 表名;

      Select 字段名 as 别名 from 表名;

6、表字段管理

      1、添加(add)

             alter table 表名 add 字段名 数据类型;

             alter table 表名 add 字段名 数据类型 first;

             alter table 表名 add 字段名 数据类型 after 字段名;

      2、修改(modify)

             alter table 表名 modify 字段名 新数据类型;

      3、删除(drop)

             alter table 表名 drop 字段名;

      4、字段名重命名(change)

             alter table 表名 change 旧字段名 新字段名 数据类型;

      5、表的重命名(rename)

             alter table 表名 rename 新表名;

7、如何更改默认字符集

      1、步骤

             1、sudo -i

             2、cd /etc/mysql/mysql.conf.d/

             3、cp -p mysqld.cnf mysqld.cnf.bak

             4、vi mysqld.cnf

                    [mysqld]

                    character_set_server = utf8

             5、/etc/init.d/mysql restart | reload

补充、客户端把数据存储到数据库服务器上的过程

      1、连接到数据库

      2、选择库

      3、创建/修改表

      4、断开连接

9、名词

      DB  DBMS(MySQL、Oracle...) DBS(数据库系统)

10、数据类型

      1、数值类型

             1、整型

                    1、int(4个字节)

                    2、tinyint(1个字节) 有符号、无符号unsigned

             2、浮点型

                    1、float(4个字节,最多显示7个有效位)

                    2、double(8个字节,最多显示15个有效位)

                    3、decimal(M+2个字节,最多显示28个有效位)

      2、字符类型

             1、char(定长,浪费存储空间,但是性能高)

             2、varchar(变长,节省存储空间,但是性能低)

      3、枚举类型

             1、enum(最多有65535个不同值)

             2、set(最多有64个不同值)

                    ## 在插入记录时 "值1,值2,..."

      4、日期时间类型

             1、year

             2、date

             3、time

             4、datetime # 不给值默认返回NULL

             5、timestamp # 不给值默认返回系统当前时间

*******************************************

MySQL-基础笔记二

1、字符类型的宽度和数值类型的宽度的区别

      1、数值类型的宽度仅仅为显示宽度,只用于select查询显示,和占用的存储空间大小无关,可用zerofill查看效果

      2、字符类型的宽度超过则无法存储

2、where条件子句 (配合查询、修改、删除操作)

      1、语法格式

             select * from 表名 where 条件;

  Select name from wenchen where country=”shuguo” or gender=”nan”;

3、表记录管理   删除 修改

    1、删除表记录  delete  from  表名 where 条件;

             1、delete from 表名 where 条件;

             2、注意

                    delete语句后如果不加where条件子句,会将表中所有记录全部删除

    2、更新表记录  update  表名 set 字段名1=值1,字段名2=值2,... where 条件;

             1、update 表名 set 字段名1=值1,字段名2=值2,... where 条件;

             2、注意

                    update语句后如果不加where条件子句会将表中所有记录全部更改

      3、练习

       1、查找所有蜀国人的信息

       2、查找女英雄信息,只显示姓名、性别和国家

       3、把曹操的国籍改为蜀国

       4、把魏延的性别改为女,国籍改为 泰国

       5、把id为2的记录的姓名改为 司马懿,性别改为 男,国家改为 魏国

       6、删除所有的泰国人

       7、删除所有的英雄记录

4、运算符操作

    1、数值比较&字符比较 

             1、数值比较运算符:=、!=、>、>=、<、<=

             2、字符比较运算符:=、!=

             3、练习

                    1、找出攻击力高于150的英雄的名字和攻击力值

Select name,gongji from 表  where gongji>150;

  1. 找出防御力不等于100的英雄信息

   Select * from 表 where DEF!=100;

    2、逻辑比较  and  or

             1、运算符:

                    and (两个或者多个条件同时满足)

                    or  (两个或者多个条件有一个满足就可以)

             2、练习

                    1、找出攻击值大于200的蜀国英雄的名字和攻击值

    Select name,ATK from 表 where ATK>200 and country=’shu’;

  1. 查找蜀国和魏国的英雄信息

        Select * from 表 where country=’shu’ or country=’wei’;

  1. 将吴国英雄中攻击值为110的英雄的攻击值设置为100,防御值设置为60

        Update 表 set ATK=100,DEF=60 where ATK=100 and county=’wu’;

    3、范围内比较  between,  in,  not in

             1、运算符

                    between and、 in 、not in

             2、语法

                    between 值1 and 值2

                    in(值1,值2,...,值N)

                    not in(值1,值2,...,值N)

             3、练习

                    1、查找攻击值在100-200之间的蜀国英雄信息

      Select * from wujiang where 100<ATK<200 and country=shu;

Select * from wujiang where country=shu and ATK between 100 and 200;

  1. 找到蜀国和吴国以外国家的女英雄信息

         Select * from wujiang where Loyal>80 and country not in(shuguo,wuguo);

    4、匹配空、非空  is null,  is not null

             1、空 :is null

             2、非空 :is not null

             3、示例

                    1、查找姓名为NULL的蜀国女英雄信息  name is null

      Select * from wujiang where name is null;

  1. 查找姓名为""的英雄的id、姓名和国家  name =””

          Select * from wujiang where name=””;

             4、注意

                    1、null :空值,必须用 is 或者 is not 去匹配

                    2、""   :空字符串,用 = 或者 != 去匹配

    5、模糊比较

             1、where 字段名 like 表达式;

             2、表达式

                    1、_ : 匹配单个字符

                    2、% : 匹配0到多个字符

             3、示例

                    1、select name from sanguo where name like "_%_";

                           # 匹配名字中至少有两个字的英雄

                    2、select name from sanguo where name like "%";

                           # NULL不会被统计

                    3、select name from sanguo where name like "___";

                           # 匹配名字为三个字的英雄

                    4、select name from sanguo where name like "赵%";

                           # 匹配姓赵的英雄

    6、正则匹配查询 regexp

             1、where 字段名 regexp "正则表达式";

             2、正则表达式符号

                    ^ : 以...开头

                    $ : 以...结尾

                    . : 匹配任意字符(1到多个) 除了 换行符

                    [...]: 包含...内容  在正则里表示匹配1个

                                  [0-9]:匹配带数字的

                                  [a-z]:匹配带小写字母的

                                  [A-Z]

                    * : 星号前面的字符出现0个或者多次 "^赵.*"

             3、示例

                    1、select name from sanguo where name regexp "[0-9]"; # 匹配名字中带数字的

                    2、select name from sanguo where name regexp "^[0-9]"; # 匹配名字中以数字开头的记录

                    3、select name from sanguo where name regexp "[0-9]$"; # 匹配名字中以数字结尾的记录

                    4、select name from sanguo where name regexp "^司.*懿$"; # 匹配以 司 开头,以 懿 结尾的记录

                    5、select name from sanguo where name regexp "^...$"; # ... ... ...

5、SQL查询

    1、总结(执行顺序)

             3、select ... 聚合函数 from 表名

             1、where ...

             2、group by ...

             4、having ...

             5、order by ...

             6、limit ...

    2、order by   排序的asc 升序

             1、作用:给查询的结果进行排序

             2、语法格式:order by 字段名 排序方式;

             3、排序方式

                    1、ASC(默认) : 升序

                    2、DESC : 降序

             4、示例

                    1、将英雄按防御值从低到高排序

                           select * from sanguo order by fangyu asc;

                    2、将蜀国英雄按攻击值从高到低排序

                           select * from sanguo where country = "蜀国"  order by gongji desc;

                    3、将魏蜀两国的男英雄中名字为三个字的英雄按防御值升序排列

                   

    3、limit(永远放在SQL语句的最后写)

             1、作用:限制显示查询记录的个数

             2、用法

                    1、limit n :-->显示n条记录

                    2、limit m,n :-->从第(m+1)条开始,显示n条记录

                            limit 4,5 :显示 第5名-第9名

                            ## m的值是从0开始计数的    

      Insert into wujiang(Loyal) values(‘99’); 

             3、示例

                    1、查找防御值倒数第2名到倒数第4名的蜀国英雄记录

                    select * from sanguo where country="蜀国"  order by fangyu asc limit 1,3;

                    2、查找忠诚前3名且名字不为空值的蜀国英雄的姓名、攻击值和国家

                           select name,gongji,country from sanguo where name is not null and country="蜀国"  order by gongji desc limit 3;

    4、聚合函数  5个avg ,sum,max,min,count

             1、分类

                    1、avg(字段名) : 求字段的平均值

                    2、sum(字段名) : 求和

                    3、max(字段名) : 求最大值

                    4、min(字段名) : 求最小值

                    5、count(字段名):统计该字段记录的个数

             2、示例、

                    1、攻击力最强值是多少

                           select max(gongji) as best from sanguo;

                    2、统计一下id,name两个字段分别有多少条记录

                           select count(id),count(name) from sanguo;

                           # 空值NULL不会被统计,空字符串""会被统计

                    3、统计蜀国英雄中攻击值大于200的英雄的数量

                           select count(*) from sanguo where country="蜀国" and gongji>200;

    5、group by(先分组,再聚合)

             1、作用 :给查询的结果进行分组

             2、示例

                    1、统计sanguo表中有哪些国家

                           select country from sanguo group by country;

                    2、计算所有国家的平均攻击力

                           select country,avg(gongji) from sanguo group by country;

                           执行过程:

                                1、先分组(此时未去重) group by country

                2、再聚合(求每组的平均攻击值)

                3、去重

                    3、查找所有国家中 英雄数量最多的 前2名 的国家名称及英雄数量

                           select country,count(*) as numbers from sanguo group by country order by numbers desc limit 2;

             3、注意

                    1、group by之后的字段名必须要为select之后的字段名

                    2、如果select之后的字段没有在group by语句之后,

则必须要对该字段进行聚合处理(聚合函数)

    6、having  对分组group by 后的进一步处理

             1、作用 :对查询的结果进行进一步筛选

             2、示例

                    1、找出平均攻击力大于105的国家的前2名,显示国家名称和平均攻击力

                           select country,avg(gongji) as pjgj from sanguo group by country having pjgj > 105 order by pjgj desc limit 2;

             3、注意

                    1、having语句通常与group by语句联合使用,用来过滤由group by语句返回的记录集

                    2、having语句的存在弥补了where条件子句不能与聚合函数联合使用的不足, where操作的是表中实际存在的字段,  having操作的是聚合函数生成的显示列

    7、distinct

             1、作用:不显示字段的重复值

             2、示例

     1、sanguo表中一共有哪些个国家

  

     2、计算蜀国一共有多少个英雄

     

             3、注意

                    1、distinct处理的是distinct和from之间的所有字段,所有字段的值必须完全相同才可以去重

                    2、distinct不能对任何字段做聚合处理

    8、查询表记录时可以做数学运算

             1、运算符

                    + - * / %

             2、示例

                    1、查询时显示所有英雄的攻击力 * 10

                           select name,gongji*10,country from sanguo;

6、约束

    1、作用

             1、为了保证数据的完整性、一致性、有效性,可以限制无效的数据插入到数据表中

    2、约束分类

             1、默认约束(default)

                    1、作用

                           在插入记录时,如果不给该字段赋值,则使用默认值

                    2、格式

                           字段名 数据类型 default 默认值,

    Create table tt(id int,name char(20) default “aa”);

    Insert into tt(name) values(“bb”);

             2、非空约束

                    1、作用

                           不允许该字段的值有空值NULL记录

                    2、格式

                           字段名 数据类型 not null,

7、索引

    1、定义

             对数据库中表的一列或者多列的值进行排序的一种结构(MySQL中索引用Btree方式)  分支树

    2、索引的优点

             可以加快数据的检索速度

    3、索引的缺点   1、维护 /2、占用空间

             1、当对表中的数据进行增加、修改、删除的时候,索引需要动态维护,降低了数据的维护速度

             2、索引需要占用物理存储空间(数据库目录/var/lib/mysql)

    4、索引示例

             1、运行 insert_.py 文件,插入100万条记录

             2、开启性能分析

                    show variables like "%pro%";

                    set profiling = 1;

             3、执行查询语句

                    select name from t1 where name="lucy99999";

             4、查看性能分析结果

                    show profiles;

             5、在name字段创建索引

                    create index name on t1(name);

             6、执行查询语句

                    select name from t1 where name="lucy99999";

             8、查看性能分析结果

                    show profiles;

             9、关闭性能分析

                    set profiling = 0;

MySQL-基础笔记二 回顾

1、表记录的管理

       1、删除表记录

              1、delete from 表名 where 条件;

                     ## 不加where条件全部删除

       2、更新表记录

              1、update 表名 set 字段名=值1,... where 条件;

                     ## 不加where条件表中所有记录全部更改

2、运算符

       1、数值比较&字符比较

              1、数值比较:=  !=  >  >=  <  <=

              2、字符比较:=  !=

       2、逻辑比较

              and   or

       3、范围内比较

              1、between  值1  and  值2

              2、in(值1,值2,...)

              3、not in(值1,值2,...)

       4、匹配空、非空

              is null

              is not null

              null:空值,必须用 is 或者 is not 去匹配

              ""  :空字符串,用 = 或者 != 去匹配

       5、模糊比较

              _ : 匹配单个字符

              % : 匹配0到多个字符

       6、正则匹配

              1、select ... where 字段名 regexp "正则表达式";

              2、正则表达式符号

                     "" : 包含""中的所有内容

                                    regexp "abc" 匹配包含 abc 的记录

                     [] : 包含其中任意一个字符就可以

                                    regexp "[abc]" 包含a、b、c中的任意一个或多个

                     ^  : ^a 表示以a开头

                     $  : a$ 表是以a结尾

                     .  : 表示任意一个字符

                     *  : 匹配 0个或者多个前面的实例

                                    "x*" :匹配任意数量的 x 字符

                                    "司马*" :匹配 司+(0个或者多个 马)

                     mysql 5.7.21版本中,正则表达式中 . 匹配的是字节

                     mysql 8.0...版本中,正则表达式中 . 匹配的是字符

                     5.7  ^...$  "aaa" "貂"  "666"

                     8.0  ^...$  "司马懿"  "aaa"

3、SQL查询  结构化查询语言  structured  query  language

       1、order by

              1、order by 字段名 ASC/DESC

       2、limit

              1、永远放在SQL命令的最后一个写

              limit m

              limit m,n

       3、聚合函数

              avg(...) sum(...) max(...) min(...)

              count(字段名) ## 字段值NULL不会被统计

       4、group by(分组)

              1、注意

                     1、group by后的字段名必须为select后的字段名

                     2、如果select后的字段名在group by之后没有,则必须要对该字段进行聚合处理

       5、having(对查询结果进一步筛选)

              1、注意

                     1、having与group by语句联合使用,用来过滤由group by语句返回的记录集

                     2、where只能操作表中实际存在的字段,having则可以操作聚合函数生成的显示列

       6、distinct(不显示字段的重复值)

       7、查询表记录时做数学运算

       8、总结

              3、select ...聚合函数 from ...

              1、where ...

              2、group by ...

              4、having ...

              5、order by ...

              6、limit ...

4、索引

       1、BTree

       2、优点:可以加快数据的检索速度

       3、缺点:

              1、需要动态维护,降低了数据的维护速度

              2、索引占用物理空间

       4、索引性能分析

              1、开启性能分析:set profiling = 1

              2、执行SQL命令:

              3、查看性能分析结果:show profiles;

              4、创建索引字段:create index 索引名 on 表名(字段名);

              5、执行SQL命令:

              6、查看性能分析结果:show profiles;

MySQL-基础笔记三

1、索引分类  普通/唯一/主键/外键索引   4种方式

      1、普通索引

      2、唯一索引

      3、主键索引

      4、外键索引

2、普通索引(index) 

    1、使用规则

              1、一个表中可以有多个index字段

              2、字段的值可以有重复,也可以为NULL值

              3、把经常做查询条件的字段设置为index字段

              4、index字段的key标志为: MUL

    2、创建 方法1:index() /方法2:create index 索引名 on 表名(字段名1,字段名2,...);

              1、创建表时创建index

           create table t1(

           id int,

           name char(20),

           Index 索引名 (id),

           Index 索引名 (name));

       2、在已有表中添加索引字段

           1、语法格式

              create index 索引名 on 表名(字段名1,字段名2,...);

              # 索引名一般和字段名一样

    3、查看  1方法:desc 表名;/2方法: show index from 表名\G;

              1、desc 表名;  ->查看KEY标志为 MUL

              2、show index from 表名\G;

    4、删除  drop  index  索引名  on  表名;

              drop index 索引名 on 表名;

              注意:

                     删除普通索引只能一个一个删除

3、唯一索引(unique)

    1、使用规则         条件:值不重复

              1、一个表中可以有多个 unique 字段

              2、unique字段的值不允许重复,可以为空值NULL

              3、unique的KEY标志是 UNI

    2、创建(基本等同index创建)

              1、创建表时创建

                     unique(字段名),

                     unique(字段名)

              2、已有表中创建

                     create unique index 索引名 on 表名(字段名);  不同

              3、查看、删除唯一索引

                     desc 表名;

                     show index from 表名;

                     drop index 索引名 on 表名;

4、主键索引(primary key) && 自增长属性(auto_increment)

    1、使用规则

              1、一个表中只能有一个主键字段

              2、对应字段的值不允许重复 且 不能为空值NULL

              3、主键字段的KEY标志为 PRI

              4、把表中能够唯一标识一条记录的字段设置为主键,通常把表中记录编号的字段设置为主键

    2、创建主键(PRI)
             1、创建表时创建   2种

                    1、字段名 数据类型 primary key auto_increment,

   Create table t(id int primary key auto_increment, name char(10));

   Insert into t(name) value(“a”),(“b”);

                    2、

                               id int  auto_increment,

                               ... ...,                               # 设置自增长起始值

                               primary key(id))auto_increment=10000;

             2、删除主键  2步骤

                     1、先删除自增长属性(modify)

                           1.alter table 表名 modify id int;

                     2、删除主键

                           2.alter table 表名 drop primary key;

             3、在已有表中添加主键

                    alter table 表名 add primary key(字段名);

5、外键

    1、定义

              让当前表字段的值在另一个表的范围内选择

    2、语法格式  针对于从表

              create table t(

        字段名 数据类型 约束,

        ...,

foreign key(参考字段名)

              references 被参考表名(被参考字段名)

              on delete 级联动作

              on update 级联动作);

    3、案例

              表1、缴费信息表(财务)

                     学号  姓名    班级   缴费金额

                            1   唐伯虎  AID01   28000

                            2   点秋香  AID01   20000

             

              表2、学生信息表(班主任)

                     学号  姓名   缴费金额

                       1   唐伯虎  28000

                       2   点秋香  20000

             1、创建缴费信息表

                     create table jftab(

                     id int primary key,

                     name char(15),

                     class char(5),

                     money int

                     )default charset=utf8;

                     insert into jftab values

                     (1,"唐伯虎","AID01",28000),

                     (2,"点秋香","AID01",20000),

                     (3,"祝枝山","AID01",22000);

             2、创建学生信息表(从表)

                    create table bjtab(

                    stu_id int,

                    name char(15),

                    money int,

                    foreign key(stu_id) references jftab(id)

                    on delete cascade

                    on update cascade

                    );

    4、级联动作    4个值

              1、cascade :数据级联更新

                     当主表删除记录 或者 更新被参考字段的值时,从表会级联更新

              2、restrict 默认

                     1、当删除主表记录时,如果从表中有相关联记录则不允许主表删除

                     2、更新同理

              3、set null

                     1、当主表删除记录时,从表中相关联记录的参考字段值自动设置为NULL

                     2、更新同理

              4、no action

                     on delete no action on update no action

                     同 restrict,都是立即检查外键限制                    

    5、删除外键   alter table 表名 drop foreign key 外键名;

              alter table 表名 drop foreign key 外键名;

              1、外键名的查看方式

                     show create table 表名;

    6、已有表中添加外键  类似于创建外键

              ## 会受到表中原有数据的限制

              alter table 表名 add foreign key(参考字段名)

              references 被参考表名(被参考字段名)

              on delete 级联动作

              on update 级联动作;

    7、外键使用规则  1.类型一致2.一般参考主键

              1、两张表被参考字段和参考字段数据类型要一致

              2、被参考字段必须是 key 的一种,通常是 primary key

6、数据导入

    1、作用:把文件系统的内容导入到数据库中
    2、语法

              load data infile "文件名"

              into table 表名

              fields terminated by "分隔符"

              lines terminated by "\n"

    3、示例

              把 /etc/passwd 文件中的内容导入到db2库下的userinfo表

              tarena :  x  :  1000 : 1000 :

              用户名  密码    UID号  GID号

              tarena,,, : /home/tarena : /bin/bash

              用户描述    用户主目录     登录权限

                                         /bin/false

                                                                                                          /usr/sbin/nologin

    4、操作步骤

              1、在数据库中创建对应的表

                     create table userinfo(

                     username char(20),

                     password char(1),

                     uid int,

                     gid int,

                     comment varchar(50),

                     homedir varchar(50),

                     shell varchar(50)

                     );

              2、将要导入的文件拷贝到数据库的默认搜索路径中

                     1、查看数据库的默认搜索路径

                            show variables like "secure_file_priv";

                            /var/lib/mysql-files

                     2、Linux命令行输入:

                            sudo cp /etc/passwd  /var/lib/mysql-files/

              3、执行数据导入语句

                     load data infile "/var/lib/mysql-files/passwd"

                     into table userinfo

                     fields terminated by ":"

                     lines terminated by "\n";

    5、练习:将AID1709.csv文件导入到数据库中

              # csv文件单元格之间以 , 分隔

      

              /var/lib/mysql-files/AID1709.csv

              ls -l AID1709.csv

              rw-------

              chmod 666 AID1709.csv

              1、在数据库中创建对应的表

                     id  姓名  成绩  手机号  班级

                     create table scoretab(

                     id int,

                     name varchar(20),

                     score float(5,2),

                     phone char(11),

                     class char(7)

                     )default charset=utf8;

              2、把导入的文件复制到数据库的默认搜索路径中

                     cp   源文件   目标路径

                     cp  /home/tarena/AID1709.csv  /var/lib/mysql-flies/

                     ######## 用 TAB 键 补齐路径 #######

              3、执行数据导入语句

                     load data infile "/var/lib/mysql-files/AID1709.csv"

                     into table scoretab

                     fields terminated by ","

                     lines terminated by "\n";

                     # 修改文件权限 chmod 666 AID1709.csv

7、数据导出

    1、作用

              将数据库表中的记录保存到系统文件里

    2、语法格式

              select ... from 表名

              into outfile "文件名"

              fields terminated by "分隔符"

              lines terminated by "\n";

    3、把userinfo表中的username、password和uid导出到文件user.txt

              select username,password,uid from userinfo

              into outfile "/var/lib/mysql-files/user.txt"

              fields terminated by ","

              lines terminated by "\n";

              查看文档

              1、sudo -i

              2、cd /var/lib/mysql-files/

              3、cat user.txt

    4、注意

              1、导出的内容由SQL查询语句决定

              2、执行导出命令时路径必须指定对应的数据库搜索路径

8、表的复制

    1、语法格式 

              create table 表名 select 查询命令;

    2、示例

              1、复制userinfo表中的全部记录,userinfo2

                     create table userinfo2 select * from userinfo;

              2、复制userinfo表中username,password,uid三个字段的第2-10条记录,userinfo3

                     create table userinfo3 select username,password,uid from userinfo limit 1,9;

    3、复制表结构

              create table 表名 select 查询命令 where false;

    4、注意

              复制表的时候不会把原有表的 key 属性复制过来

9、嵌套查询(子查询)

    1、定义  把内层的查询结果作为外层的查询条件

              把内层的 查询结果 作为外层 的查询条件

    2、示例

              1、把uid的值小于 uid 平均值的用户名和uid号显示出来

                     select username,uid from userinfo

                     where uid < (select avg(uid) from userinfo);

10、连接查询

    1、内连接    inner join 表2 on 条件
             1、定义

                     从表中删除与其他被连接的表中没有匹配到的行

             2、语法格式

                     select 字段名列表 from 表1

                     inner join 表2 on 条件 inner join 表3 on 条件;

     Select t1.name from t1 inner join t2 on t1.id=t2.id;

             3、示例

                     1、显示省市的详细信息

                            select sheng.s_name,city.c_name from sheng

                            inner join city on sheng.s_id=city.cfather_id;

                     2、显示省市县详细信息

                            select sheng.s_name,city.c_name,xian.x_name from sheng

                            inner join city on sheng.s_id=city.cfather_id

                            inner join xian on city.c_id=xian.xfather_id;       

    2、外连接
             1、左连接

                     1、定义

                            以左表为主显示查询结果

                     2、语法格式

                            select 字段名列表 from 表1

                            left join 表2 on 条件;

                     3、示例

                            1、以省表为主显示省市详细信息

                                   select sheng.s_name,city.c_name from sheng

                                   left join city on sheng.s_id=city.cfather_id;

                            2、显示 省市区 详细信息,要求县全部显示

                                   select sheng.s_name,city.c_name,xian.x_name from sheng

                                   left join city  on sheng.s_id=city.cfather_id

                                   right join xian on city.c_id=xian.xfather_id;

                            3、显示 省市区 详细信息,要求 市 全部显示

                                   select sheng.s_name,city.c_name,xian.x_name from sheng

                                   right join city on sheng.s_id=city.cfather_id

                                   left join xian on city.c_id=xian.xfather_id;

                            #### 结果集 ####

             2、右连接

                     用法同左连接,以右表为主显示查询结果

11、多表查询

       1、select 字段名列表 from 表名列表;  # 笛卡尔积

       2、select 字段名列表 from 表名列表 where 条件;

          等同于 内连接 inner join

MySQL-基础笔记三 回顾

1、索引

       1、普通索引 index

       2、唯一索引(UNI,字段值不允许重复,但可以为NULL)

              1、创建

                     1、字段名 数据类型 unique

                     2、unique(字段名),

                        unique(字段名)...

                     3、create unique index 索引名 on 表名(字段名);

              2、删除(只能一个一个删)

                     show index from 表名;

                     drop index 索引名 on 表名;

       3、主键索引&自增长属性(PRI,字段值不允许重复且不能为NULL)

              1、注意:一个表中只能有一个字段为主键字段

              2、创建

                     1、id int primary key auto_increment,

                     2、primary key(字段名)

                     3、alter table 表名 add primary key(字段名)

              3、删除

                     1、先删除自增长属性

                            alter table 表名 modify 字段名 数据类型;

                     2、删除主键

                            alter table 表名 drop primary key;

              4、已有表添加自增长属性

                     alter table 表名 modify 字段名 数据类型 auto_increment;

       4、外键索引

              1、作用:让当前表字段值在另一个表字段的范围内去选择

              2、创建

                     1、foreign key(参考字段名)

                        references 被参考表名(被参考字段名)

                             on delete 级联动作

                             on update 级联动作

                     2、alter table 表名 add foreign key(...)...

                            ## 会受到表中原有数据的限制 ##

              3、级联动作

                     1、cascade

                     2、restrict(默认)

                     3、set null

                     4、no action

              4、使用规则

                     1、两张表被参考字段和参考字段数据类型要一致

                     2、被参考字段必须是 主键

              5、删除外键

                     1、查看外键名

                            show create table 表名;

                     2、删除外键

                            alter table 表名 drop foreign key 外键名;

2、数据导入

       1、load data infile "/var/lib/mysql-files/文件名"

          into table 表名

               fields terminated by "分隔符"

               lines terminated by "\n"

       2、步骤

              1、在数据库中创建对应的表

              2、查看数据库的搜索路径

                     show variables like "secure_file_priv";

              3、将文件拷贝到搜索路径中

                     sudo cp 文件 /var/lib/mysql-files/

              4、执行数据导入语句

3、数据导出

       1、select ... from 表名

          into outfile "/var/lib/mysql-files/文件名"

               fields terminated by "分隔符"

               lines terminated by "\n";

       2、注意

              1、导出内容完全由select查询语句决定

              2、路径必须指定数据库搜索路径

4、表复制

       1、create table 表名 select 查询语句 [where false];

       2、复制表不会把原表的 key 属性复制过来

5、嵌套查询(子查询)

6、多表查询

       1、笛卡尔积

              select 字段名列表 from 表名列表;

       2、加 where 条件 == inner join

7、连接查询

       1、內连接(只显示匹配到的记录)

       2、外连接

              1、左连接(以左表为主去显示查询结果)

              2、右连接

       3、select 字段名列表 from 表1 left join 表2 on 条件;

MySQL-基础笔记四 笔记

1、MySQL用户账户管理

    1、开启MySQL远程连接

              1、获取root权限

                     sudo -i

              2、cd到配置文件所在路径

                     cd /etc/

              3、vi my.cnf

                     #bind-address = 127.0.0.1

                     浏览模式 -> a(插入模式)

                     -> esc(浏览模式) ->

                     shift + :(命令行模式) ->

                     :wq(保存并退出)

              4、重启mysql服务

                     /etc/init.d/mysql restart

    2、添加授权用户

              1、使用root用户连接到服务器

                     mysql -uroot -p123456

              2、添加新的授权用户

                     create user "用户名"@"IP地址" identified by "密码";

                     create user "tiger"@"%" identified by "123456";

                     IP地址的表示方式:

                            1、% 表示用户可以从任何地址连接到服务器

                            2、localhost 用户只能从本地连接

                            3、指定一个IP 表示用户只能从此IP连接到服务器

    3、给用户授权

              grant 权限列表 on 库.表.字段 to "用户名"@"IP地址" with grant option;

              grant all privileges on *.* to "tiger"@"%" with grant option;

              权限列表:select,update,delete,insert,alter,drop,create,...

              库.表: *.* 表示所有库的所有表

              ### 写入到 库mysql下的user表, user、host两个字段

    4、练习

              添加一个授权用户 monkey ,所有人都可以连接,只对 db1库有查询权限

              1、添加授权用户 monkey

                     create user "monkey"@"%" identifited by "123456";

              2、给 monkey 用户授权

                  grant select on db1.* to "monkey"@"%" with grant option;

              3、验证:mysql -hIP地址 -umonkey -p

    5、删除授权用户

              drop user "用户名"@"IP地址";

              drop user "tiger"@"%";

      修改密码

ALTER USER 'jeffrey'@'localhost’ IDENTIFIED BY 'mypass’;

ALTER USER USER() IDENTIFIED BY 'mypass';

SET PASSWORD FOR 'jeffrey'@'localhost'= PASSWORD('mypass’);

SET PASSWORD = PASSWORD('mypass');

2、数据备份(mysqldump,在Linux终端中操作)

    1、命令格式

              mysqldump -uroot -p 源库名 > 路径/xxx.sql

    2、示例

              1、备份db2库

                     mysqldump -uroot -p db2 > /home/tarena/db2.sql

    3、源库名的表示方式

              --all-databases 备份所有库

              库名            备份单个库

              -B 库1 库2 ...  备份多个库

              库名 表1 表2 ...备份指定库的指定表

    4、练习

              1、备份所有库 all_mysql.sql,放到用户主目录下的 mydata 目录中

                   mysqldump -uroot -p --all-databases > ~/mydata/all_mysql.sql

              2、备份 db2 库中的sheng、city、xian三张表 db2scx.sql

                     mysqldump -uroot -p db2 sheng city xian > ~/mydata/db2scx.sql

              3、备份 MOSHOU 和 db2 库,MSdb2.sql

                     mysqldump -uroot -p -B MOSHOU db2 > ~/mydata/MSdb2.sql

3、数据恢复

    1、命令格式

              mysql -u用户名 -p 目标库名 < 路径/xxx.sql

    2、示例

              1、先备份库

                     mysqldump -uroot -p db2 > db2.sql

              2、删除库

                     drop database db2;

              3、先创建空库

                     create database db2 default charset=utf8;

              4、恢复命令

                     mysql -uroot -p db2 < db2.sql

    3、备份分为 完全备份 和 增量备份

               完全备份:mysqldump

               增量备份:binlog日志、xbackup工具

    4、从所有库的备份文件中恢复某一个库(--one-database)

              mysql -u用户名 -p --one-database 目标库名 < all_mysql.sql

              示例:

                     mysql -uroot -p --one-database db2 < all_mysql.sql

              注意:

                     1、恢复库时库中新增的表不会删除

                     2、恢复时必须先创建空库

4、事务和事务回滚

    1、定义

              一件事从开始发生到结束的整个过程

    2、作用

              确保数据的一致性

    3、事务和事务回滚的应用
             1、mysql中默认sql语句会自动commit到数据库

                     show variables like "autocommit";

             2、事务应用

                     1、开启事务

                            mysql> start transaction;

                            mysql> ... SQL命令

                            ## 此时autocommit被禁用,SQL命令不会对数据库中数据做修改

                     2、终止事务

                            mysql> commit;

                            或者

                            mysql> rollback;

                     `3、注意

                            1、事务回滚rollback只针对于对表记录的操作,增、删、改,对创建库、创建表的操作无效

             3、案例

                     1、背景

                            你:建行卡

                            你朋友:工商卡

                            你在建行的自动提款机给你朋友工商卡转5000元

                     2、过程

                            1、转账中...

                                   1、先到建行的数据库把你的余额 -5000

                                   2、再到工行的数据库把你朋友的余额 +5000

                                   3、commit; 转账成功

                                           rollback; 回滚,转账失败

                            2、过程

                                   表1、CCB

                                          create table CCB(

                                          name varchar(20),

                                          money int

                                          );

                                          insert into CCB values("Zhuanqian",10000);

                                   表2、ICBC

                                          create table ICBC(

                                          name varchar(20),

                                          money int

                                          );

                                          insert into ICBC values("Shouqian",4000);

                                   开始转账

                                          mysql>start transaction;

                                          mysql>update CCB set money=5000 where name="Zhuanqian";

                                          mysql>update ICBC set money= 断电了,宕机了..;

                                          mysql>rollback;

5、存储引擎

    1、定义

              是用来处理表的处理器

    2、存储引擎基本操作

              1、查看已有表的存储引擎

                     show create table 表名;  # engine=...

              2、创建表时指定存储引擎

                    create table 表名(...)engine=myisam;

              3、查看所有的存储引擎

                     mysql> show engines;

    3、工作中使用的存储引擎

              innodb  myisam

    4、常用存储引擎特点
             1、innodb特点

                     1、共享表空间

                            表名.frm      表结构

                            表名.ibd       表记录&索引信息

                     2、支持行级锁

             2、myisam特点

                     1、独享表空间

                            表名.frm 表结构

                            表名.myd 表记录

                            表名.myi 索引信息

                     2、支持表级锁

    5、锁

              1、加锁的目的

                     解决客户端并发访问的冲突问题

              2、锁类型

                     读锁(select)共享锁

                            加读锁之后不能更改表中内容,但可以进行查询

                     写锁(insert,update,delete)互斥锁、排他锁

              3、锁粒度

                     表级锁

                     行级锁

                     ####操作完成后会自动释放锁

    6、如何决定使用哪种存储引擎

              1、执行查询操作多的表使用myisam存储引擎(使用innodb浪费资源)

              2、执行写操作比较多的表使用innodb存储引擎

    7、如何更改表的默认存储引擎

              1、sudo -i

              2、cd /etc/mysql/mysql.conf.d/

              3、vi mysqld.cnf

                 [mysqld]

                      defalut-storage-engine = myisam

              4、/etc/init.d/mysql restart

    8、memory存储引擎

              memory: 表记录存储在内存中

                     表名.frm 表结构

                     ## 服务重启之后表结构在,表记录都消失

6、MySQL调优

    1、选择合适的存储引擎

              1、经常用来读的表使用myisam存储引擎

              2、其余的表都用innodb存储引擎

    2、SQL语句调优(尽量避免全表扫描)
             1、在select where order by常涉及到的字段上建立索引
             2、where子句中不使用 !=,否则将放弃使用索引进行全表扫描
             3、尽量避免用NULL值判断,否则会全表扫描

                     示例:

                            select id from t1 where number is null;

                     优化:

                            在number字段设置默认值0

             4、尽量避免 or 来连接条件,导致全表扫描

                     示例(优化前):

                            select id from t1 where id=10 or id=20;

                     优化后:

                            select id from t1 where id=10

                            union all

                            select id from t1 where id=20;

             5、模糊查询尽量避免使用前置 %,导致全表扫描

                     select id from t1 where name like "a%";

             6、尽量避免 in 和 not in,导致全表扫描

                     select id from t1 where id in(1,2,3);

                     select id from t1 where id between 1 and 3;

             7、尽量避免使用 select * ...,要用具体的字段列表代替 *,不要返回用不到的任何字段

7、Python数据库编程

          1、python数据库接口(Python DB-API)

              1、为开发人员提供的数据库应用编程接口

          2、支持的数据库服务软件

                     mysql、Oracle、SQL_Server、mongodb...

          3、python提供的操作mysql模块

                    python3: pymysql

                     python2: MySQLdb

          4、pymsql模块使用流程   调用pymysql
                    1、建立数据库连接  db =
                    2、创建游标对象  cursor = db.cursor()
                    3、使用游标对象的方法操作数据库 
                    4、提交commit   db.commit()
                    5、关闭游标对象   cursor.close()
                    6、关闭数据库连接   db.close()
          5、建立数据库连接

                     1、语法格式

                            对象名 = pymysql.connect("主机地址","用户名","密码","库名",charset="utf8")

                     2、connect连接对象支持的方法

                            1、cursor() 创建一个游标对象   db.cursor()

                            2、commit() 提交到数据库执行(表记录增删改)

                            3、rollback() 回滚

                            4、close() 关闭数据库连接

                     3、游标对象支持的方法

                            1、execute("SQL命令") 执行SQL命令

                            2、fetchone() 取得结果集的第一条记录   含有记录的元组

                            3、fetchmany(n) 取得结果集的 n 条记录  ((),())

                            4、fetchall() 取得结果集的所有记录

                            5、close() 关闭游标对象

import pymysql

db = pymysql.connect("localhost","root","123456",

                     "db2",charset="utf8")

cur = db.cursor()

sql_select = "select * from city;"

cur.execute(sql_select)

data = cur.fetchone()

print("fetchone的结果为",data)#得到一个数据元组

data2 = cur.fetchmany(2)

print("fetchmany(2)的结果如下:") #得到一个余下两项数据元组的元组   元组套元组

for i in data2:

    print(i)

data3 = cur.fetchall()

print("fetchall()的结果如下:") #得到一个剩余的数据元组

for i in data3:

    print(i)

db.commit()

cur.close()

db.close()

8、Mysql workbench(图形化界面管理工具)

9、ER模型&ER图

       1、定义

              ER模型即 实体 - 关系 模型

              ER图即 实体关系图

       2、三个概念

              1、实体

              2、属性

              3、关系

                     1、定义 :实体之间的关系

                     2、分类

                            一对一关系(1:1) : 班级和班长

                          一对多关系(1:n) : 公司和职工、班级和学生

                            多对多关系(m:n) : 学生和课程

              4、ER图的绘制

                     1、矩形框代表实体,菱形框代表关系,椭圆形代表属性

                    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue0523

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值