MySQL

2023-10-26

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命令的使用规则
        1、每条SQL命令必须以 ; 结尾
        2、SQL命令不区分字母大小写
        3、使用 \c 来终止命令的执行 (Linux中 ctrl + c)
    2、库的管理
        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;
    3、表的管理
        1、表的基本操作
            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打开mysqld.cnf
            vi mysqld.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);
        2、insert into 表名(字段名列表) values(值1),...(值N);
    2、查询表记录
        1、select * from 表名;
        2、select 字段1,字段名2,...,字段名N 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)
        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)
        1、整型
            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、浮点型
            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、字符类型
        1、char(定长)
            1、取值范围:1 ~ 255
            2、不给定宽度默认为 1
        2、varchar(变长)
            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位 heigit float(5,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 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字段不给值默认返回系统当前时间
10、表字段的操作
    1、语法:alter table 表名 执行动作;
        1、添加字段
            alter table 表名 add 字段名 数据类型 first | after 字段名;
        2、删除字段
            alter table 表名 drop 字段名;
        3、修改字段数据类型
            alter table 表名 modify 字段名 新数据类型;
            # 修改数据类型时会受到表中原有数据的限制
        4、修改字段名
            alter table 表名 change 旧名 新名 数据类型;
        5、修改表名
            alter table 表名 rename 新表名;


11、字符类型的宽度和数值类型的宽度的区别
    1、数值类型的宽度仅仅为显示宽度,只用于select查询显示,和占用的存储空间大小无关,可用zerofill查看效果
    2、字符类型的宽度超过则无法存储
12、where条件子句(配合查询、修改、删除操作)
    1、语法格式
        select * from 表名 where 条件;
13、表记录管理
    1、删除表记录
        1、delete from 表名 where 条件;
        2、注意
            delete语句后如果不佳where条件子句,会将表中所有记录全部删除
    2、更新表记录
        1、update 表名 set 字段名1=值1,字段名2=值2,... where 条件;
        2、注意
            update语句后如果不加where条件子句会将表中所有记录全部更改
    3、练习
        1、查找所有蜀国人的信息
        2、查找女英雄信息,只显示姓名、性别和国家
        3、把曹操的国籍改为蜀国
        4、把魏延的性别改为女,国籍改为 泰国
        5、把id为2的记录的姓名改为 司马懿,性别改为 男,国家改为 魏国
        6、删除所有的泰国人
        7、删除所有的英雄记录
14、运算符操作
    1、数值比较&字符比较
        1、数值比较运算符:=、!=、>、>=、<、<=
        2、字符比较运算符:=、!=
        3、练习
            1、找出攻击力高于150的英雄的名字和攻击力值
            2、找出防御力不等于100的英雄信息
    2、逻辑比较
        1、运算符:
            and (两个或者多个条件同时满足)
            or  (两个或者多个条件有一个满足就可以)
        2、练习
            1、找出攻击值大于200的蜀国英雄的名字和攻击值
            2、查找蜀国和魏国的英雄信息
            3、将吴国英雄中攻击值为110的英雄的攻击值设置为100,防御值设置为60
    3、范围内比较
        1、运算符
            between and、 in 、not in
        2、语法
            between 值1 and 值2
            in(值1,值2,...,值N)
            not in(值1,值2,...,值N)
        3、练习
            1、查找攻击值在100-200之间的蜀国英雄信息
            2、找到蜀国和吴国以外国家的女英雄信息
    4、匹配空、非空
        1、空 :is null
        2、非空 :is not null
        3、示例
            1、查找姓名为NULL的蜀国女英雄信息
            2、查找姓名为""的英雄的id、姓名和国家
        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、正则表达式符号
            ^ : 以...开头
            $ : 以...结尾
            . : 匹配任意一个字符
            []: 包含...内容  
                    [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 "^...$"; # ... ... ...
15、SQL查询
    1、总结(执行顺序)
        3、select ... 聚合函数 from 表名
        1、where ...
        2、group by ...
        4、having ...
        5、order by ...
        6、limit ...
    2、order by
        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、将魏蜀两国的男英雄中名字为三个字的英雄按防御值升序排列
                select * from sanguo where country in("魏国","蜀国") and sex="男" and name like "___" order by fangyu asc;
    3、limit(永远放在SQL语句的最后写)
        1、作用:限制显示查询记录的个数
        2、用法
            1、limit n :-->显示n条记录
            2、limit m,n :-->从第(m+1)条开始,显示n条记录
                 limit 4,5 :显示 第5名-第9名
                 ## m的值是从0开始计数的
        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、聚合函数
        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
        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表中一共有哪些个国家
                select distinct country from sanguo;
            2、计算蜀国一共有多少个英雄
                select count(distinct name) from sanguo where country = "蜀国";
        3、注意
            1、distinct处理的是distinct和from之间的所有字段,所有字段的值必须完全相同才可以去重
            2、distinct不能对任何字段做聚合处理
    8、查询表记录时可以做数学运算
        1、运算符
            + - * / %
        2、示例
            1、查询时显示所有英雄的攻击力 * 10
                select name,gongji*10,country from sanguo;
16、约束
    1、作用
        1、为了保证数据的完整性、一致性、有效性,可以限制无效的数据插入到数据表中
    2、约束分类
        1、默认约束(default)
            1、作用
                在插入记录时,如果不给该字段赋值,则使用默认值
            2、格式
                字段名 数据类型 default 默认值,
        2、非空约束
            1、作用
                不允许该字段的值有空值NULL记录
            2、格式
                字段名 数据类型 not null,
17、索引
    1、定义
        对数据库中表的一列或者多列的值进行排序的一种结构(MySQL中索引用Btree方式)
    2、索引的优点
        可以加快数据的检索速度
    3、索引的缺点
        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;

        
18、索引分类
    1、普通索引
    2、唯一索引
    3、主键索引
    4、外键索引
19、普通索引(index)
    1、使用规则
        1、一个表中可以有多个index字段
        2、字段的值可以有重复,也可以为NULL值
        3、经常把做查询条件的字段设置为index字段
        4、index字段的key标志为: MUL
    2、创建
        1、创建表时创建index
            create table t1(
            ... ...,
            ... ...,
            index(id),
            index(name));
        2、在已有表中添加索引字段
            1、语法格式
                create index 索引名 on 表名(字段名);
                # 索引名一般和字段名一样
    3、查看
        1、desc 表名;  ->查看KEY标志为 MUL
        2、show index from 表名\G;
    4、删除
        drop index 索引名 on 表名;
        注意:
            删除普通索引只能一个一个删除
20、唯一索引(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、创建表时创建
            1、字段名 数据类型 primary key auto_increment,
            2、
                id int auto_increment,
                ... ...,                # 设置自增长起始值
                primary key(id))auto_increment=10000;
        2、删除主键
            1、先删除自增长属性(modify)
                alter table 表名 modify id int;
            2、删除主键
                alter table 表名 drop primary key;
        3、在已有表中添加主键
            alter table 表名 add primary key(字段名);
5、外键
    1、定义
        让当前表字段的值在另一个表的范围内选择
    2、语法格式
        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、级联动作
        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 外键名;
        1、外键名的查看方式
            show create table 表名;
    6、已有表中添加外键
        ## 会受到表中原有数据的限制
        alter table 表名 add foreign key(参考字段名)
        references 被参考表名(被参考字段名)
        on delete 级联动作
        on update 级联动作;
    7、外键使用规则
        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、练习:将SAD1709.csv文件导入到数据库中
        # csv文件单元格之间以 , 分隔
    
        /var/lib/mysql-files/AID1709.csv
        ls -l SAD1709.csv
        rw-------
        chmod 666 SAD1709.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、内连接
        1、定义
            从表中删除与其他被连接的表中没有匹配到的行
        2、语法格式
            select 字段名列表 from 表1
            inner join 表2 on 条件 inner join 表3 on 条件;
        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

 

 


            

 

 

 

 

 

 

 

 

 


            

 

        
    
        

 

 

 

 

                

                

 


                

            
        

                

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


    

 

 

    
    
    

 

            
            

            


            

        
        
        

                

                

        
        

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 的相关文章

随机推荐

  • 多线程进阶学习10------AQS详解

    AbstractQueuedSynchronizer 来自于JDK1 5 位于JUC包 由并发编程大师Doug Lea编写 字面翻译就是 抽象队列同步器 简称为AQS AQS作为一个抽象类 是构建JUC包中的锁 比如ReentrantLoc
  • Netty工作原理最详细分析

    NIO通讯服务端步骤 1 创建ServerSocketChannel 为它配置非阻塞模式 2 绑定监听 配置TCP参数 录入backlog大小等 3 创建一个独立的IO线程 用于轮询多路复用器Selector 4 创建Selector 将之
  • 面试嵌入式工程师过程中的常见问题和回答

    1 请介绍一下你的嵌入式系统开发经验 an 首先 回答此类问题时应该尽可能地详细和具体 可以从以下方面介绍自己的嵌入式系统开发经验 1 开发环境和工具 介绍自己使用过哪些开发环境和工具 例如Keil IAR Eclipse等 可以说明自己对
  • Java之变量、标识符、保留字、变量

    文章目录 1 关键字与保留字 2 标识符 2 1 什么是标识符 Identifier 2 2 定义合法标识符规则 重要 2 3 Java 中的名称命名规范 3 变量 3 1 变量的声明与使用 3 2 基本数据类型 3 2 1 整数类型 by
  • Java---TCP通信

    目录 1 TCP通信 快速入门 编写客户端代码 步骤 客户端发送消息 总结 需求 服务端实现步骤 总结 2 TCP通信 多发多收消息 案例 使用TCP通信实现 多发多收消息 总结 3 TCP通信 同时接受多个客户端消息 重点 总结 4 TC
  • 简单解析transformer代码

    详解transformer代码 文章目录 详解transformer代码 1 代码下载 2 prepro py 2 1 首先进行语料预处理阶段 2 2 生成预处理过后的对应数据集 2 3 sentencepiece处理 3 data loa
  • 028-从零搭建微服务-搜索服务(二)

    写在最前 如果这个项目让你有所收获 记得 Star 关注哦 这对我是非常不错的鼓励与支持 源码地址 后端 https gitee com csps mingyue 源码地址 前端 https gitee com csps mingyue u
  • FISCO BCOS节点扩容和使用console进行群组扩容

    一 安装并启动FISCO BCOS 搭建单机单群组4节点的教程查看 https blog csdn net yueyue763184 article details 128924144 spm 1001 2014 3001 5501 二 下
  • 最小优先级队列 — 使用最小堆实现

    最小优先级支持的操作 1 INSERT S x 将元素x插入队列S 2 MINIMUM S 返回S中最小的元素 3 EXTRACT MIN S 去掉并返回S中最小的元素 4 DECREASE KEY S x key 将下标为x的元素值降低为
  • 获得代理ippython_python爬虫之抓取代理服务器IP

    前言 使用爬虫爬取网站的信息常常会遇到的问题是 你的爬虫行为被对方识别了 对方把你的IP屏蔽了 返回不了正常的数据给你 那么这时候就需要使用代理服务器IP来伪装你的请求了 免费代理服务器网站有 下面我们以西刺免费代理IP为例子看看是如何获取
  • ArcGISMapsSDK for UnrealEngine_AQ

    ArcGISMapsSDK for UnrealEngine AQ Prepare 1 ArcGIS Maps SDK for game engines 2 ArcGIS Maps SDK for Unreal Engine Beta 2
  • jQuery 的 DOM 操作- 中

    文章目录 jQuery 的 DOM 操作 中 复制节点 复制节点介绍 复制节点 应用实例 替换节点 替换节点介绍 替换节点 应用实例 属性操作 样式操作 样式操作介绍 应用实例 jQuery 的 DOM 操作 中 注意本篇和jQuery 的
  • 【java】常用到的一些获取文件内容的方法

    一 前奏准备 获取文件名 根据文件名获取路径 文件路径名 String path public String getPath return path 根据路径获取文件名 return 文件名字符串 public String fileNam
  • Cocos 2dx iOS 平台初始化,OpenGL 初始化,分辨率设置

    Cocos 2dx iOS 平台初始化 OpenGL 初始化 分辨率设置 1 Main m int retVal UIApplicationMain argc argv nil AppController AppController mm
  • 判断操作系统和浏览器类型(苹果还是安卓,微信还是QQ)

    一 获取操作系统类型 function getOS var userAgent navigator in window userAgent in navigator navigator userAgent toLowerCase var v
  • FPGA时序约束学习笔记——IO约束(转)

    一 参考模型 图源来自 抢先版 小梅哥FPGA时序约束从遥望到领悟 二 参数分析 T 0 gt 3 Tclk1 T 3 gt 4 Tco T 4 gt 5 T 5 gt 6 Tdata T 4 gt 5 Tdata Init T 5 gt
  • 渗透测试流程

    文章目录 前言 一 渗透测试流程 二 流程步骤 1 明确目标 2 信息收集 3 漏洞探测 4 漏洞验证 5 提权所需 6 信息分析 7 信息整理 8 形成报告 总结 前言 渗透测试 出于保护信息系统的目的 更全面地找出测试对象的安全隐患 入
  • python数据库连接

    python数据库连接 import os import time import pymysql import sys class Myclass object def init self try self db pymysql conne
  • Springboot整合Activiti详解

    文章目录 版本依赖 配置文件 需要注意的问题 画流程图 activiti服务类进行编写 流程部署 流程定义 启动流程 流程实例 测试流程 启动流程 完成任务 受理任务 版本依赖 开发工具 IDEA SpringBoot 2 4 5 这里我试
  • MySQL

    1 MySQL概述 1 什么是数据库 数据库是一个存储数据的仓库 2 都有哪些公司在用数据库 金融机构 游戏网站 购物网站 论坛网站 3 提供数据库服务的软件 1 软件分类 MySQL SQL Server Oracle Mariadb D