Mysql允许创建多个数据库
    使用SHOW databases命令可以查看有
    使用CREATE DATABASE <databaseName>命令可以创建数据库
    使用USE <databaseName>命令进入到数据库里。
    使用DROP DATABASE <databaseName>删除数据库


    基本查询语法
    MySQL使用关键字SELECT来进行查询,SELECT语句的基本语法格式如下。

    • SELECT 查询内容——查询所有字段 SELECT FROM 表名,通配符表示所有字段。
    • FROM 表名——指定是从哪张表中查询。
    • WHERE 表达式——在MySQL的表查询时,往往并不是需要将所有内容全部查出,而是根据实际需求,查询所需数据
    • GROUP BY 字段名——分组进行查询,GROUP BY 把符合条件的同一类分在一组, 一般GROUP BY是和聚合函数配合使用的,如按男生分组查询、按女生分组查询。
    • _HAVING 表达式——_HAVING关键字都用于设置条件表达式对查询结果进行过滤,区别是HAVING后面可以跟聚合函数,而WHERE不能,通常HAVING关键字都与GROUP BY一起使用,表示对分组后的数据进行过滤。
    • ORDEY BY 字段名——按某个字段进行排序,如淘宝宝贝可以按销量排序、按好评数排序、按价格排序等。
    • LIMIT 记录数——查询的条数,可以限制每次查询多少条数据,进行分页查询。

    注释:
    constraint 外键代号foreign key (表内字段号) references 主表名(关联字段名) on delete cascade

    1. 查看数据表结构:desc

    命令行:desc **tb_name**; ps:常用于验证建表结果


    强大的表操作:
    MySQL表操作是使用频率最高的操作。用户可以创建数据库表,查看数据库表,向数据库表里插入数据、更新数据、删除数据等,同时可以修改表结构、复制表、使用临时表。
    在MySQL里,插入使用INSERT关键字、查询使用SELECT关键字、修改使用UPDATE关键字、删除使用DELETE关键字。
    SQL语句格式:
    在数据库上执行的大部分工作都由 SQL 语句完成。SQL 对大小写不敏感。
    image.png
    插入(insert)
    将一条数据插入到数据库里,可以使用如下命令。
    INSERT INTO 表名(字段名,字段名) VALUES(值,值);
    ps:(值要一 一对应)
    或者可以不指明表的字段,但是值按字段的顺序插入:
    INSERT INTO 表名 VALUES(值,值);( 默认按顺序)
    查询(select)
    查询数据,可以使用如下命令。
    SELECT FROM 表名;(代表所有)
    或者查询指定字段,可以使用如下命令。
    SELECT id FROM 表名;
    使用WHERE条件语句按条件查询,把某一列或者几列作为查询条件,可以使用如下命令。
    SELECT * FROM 表名 WHERE id=10;
    SELECT * FROM 表名 WHERE id=10 and name='小明';
    修改记录(updata)(alter)
    在MySQL里修改使用关键字UPDATE,命令如下所示。
    UPDATE 表名 SET 字段=值,字段=值 WHERE 条件
    UPDATE user SET name=’小明’,sex=’男’ WHERE id = 4;
    也可以使用ALTER关键字
    ALTER TABLE 表名 <新列名><数据类型>
    修改数据表类型:
    alter table <tb_name> modify <column_name> definition
    修改数据库默认字符集(为utf8):
    alter database <db_name> default character set <utf8>;
    增加数据列:
    alter table <tb_name> add <column_name> definition first [after <column_name>];
    ps:first为最左添加,after则为在某一列之后添加,前后两个column_name不同需要注意。
    删除主键约束:
    alter table <tb_name> drop primary key;
    删除记录
    在MySQL中删除列和数据可以使用DELETE关键字,命令如下所示。
    DELETE FROM 表名 WHERE 条件
    e.g.DELETE FROM user WHERE id=4;
    删除所有行:
    truncate table **<tb_name>**;
    ps:delete 不带where子句是删除表内所有数据行。 truncate 操作后,自增字段重新计算,delete则不会。
    删除表可用DROP关键字,命令如下:
    DROP TABLE **<tb_name>** ;
    对查询结果排序(ORDEY BY)
    在MySQL数据库中,使用ORDEY BY进行排序,使用关键字ASC进行升序排序(ascend),使用关键字DESC进行降序排序(descend),同时可以按一个字段或者多个字段进行排序。如果按多个字段进行排序,先进行第一个字段的排序,然后在结果集里面再进行第二个字段的排序。
    (1)ORDEY BY [column] ASC:按某一字段进行升序排序,ASC可以省略不写。
    SELECT * FROM user ORDEY BY id ASC;SELECT * FROM user ORDEY BY id;
    (2)ORDEY BY column DESC:按某一字段进行降序排序,DESC不可以省略不写。
    SELECT * FROM user ORDEY BY id DESC;
    (3)ORDEY BY column1,column2 DESC:按多个字段进行降序排序。
    SELECT * FROM user ORDEY BY sex,age DESC;
    对查询结果分组(GROUP BY)
    GROUP BY对查询结果分组是将查询结果按照1个或多个字段进行分组,字段值相同的为一组,GROUP BY可以用于单个字段和多个字段。
    SELECT * FROM user GROUP BY sex;
    group_concat(字段名)可以作为一个输出字段来使用,表示分组之后,根据分组结果,使用group_concat( )来放置每一组的某字段的值的集合。
    SELECT sex,group_concat(name) FROM user GROUP BY sex;
    设置分组条件(HAVING)
    HAVING 是用来设置分组条件的条件表达式,用来在分组查询后指定一些条件来输出查询结果,WHERE语句在聚合前先筛选记录,也就是说作用在GROUP BY和HAVING子句前,而 HAVING子句在聚合后对组记录进行筛选,HAVING只能用于GROUP BY。
    SELECT sex,group_concat (name) FROM user GROUP BY sex HAVING count(sex)>2
    限制查询数量(LIMIT)
    LIMIT用于限制查询的数量,常用于分页语句。LIMIT 子句可以被用于强制SELECT语句返回指定的记录数。LIMIT 接受一个或两个数字参数,参数必须是一个整数常量。
    (1)如果只给定一个参数,则它表示返回最大的记录行数目。
    #检索前6行记录
    SELECT * FROM user LIMIT 6;
    (2)如果给定两个参数,则第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目,初始记录行的偏移量是0(而不是1)。
    #从第3条数据开始,检索出5条数据
    SELECT * FROM user LIMIT 2,5;
    条件查询过滤
    条件查询过滤关键字为AND、OR、IN、NOT IN、IS NULL、IS NOT NULL、BETWEEN AND。按关键字可以进行条件查询过滤。
    (1)AND(与)。用AND进行查询的时候,查询出来的数据要求条件都得满足。
    SELECT * FROM user WHERE age = 20 and name='kevin';
    (2)OR(或)。用OR进行查询的时候,查询出来的数据只要求满足任意一个条件就可以查询出来。
    SELECT * FROM user WHERE age = 20 or name='kevin';
    (3)IN(在范围内)。用IN进行查询的时候,查询出来的数据在这个范围内。
    SELECT * FROM user WHERE id in (3,5,7);
    (4)NOT IN(不在范围内)。用NOT IN进行查询的时候,查询出来的数据不在这个范围内。
    SELECT * FROM user WHERE id not in(3,5,7);
    (5)IS(为空)。用IS NULL进行查询的时候,用来查询某字段为空时用is null,而不能使用”=null”,因为MySQL中的null不等于任何其他值,也不等于另外一个null,优化器会把”=null”的查询过滤掉而不返回任何数据;查询某字段为非空时使用is not null。
    SELECT * FROM user WHERE name is null;
    SELECT * FROM user WHERE name is not null;
    (6)BETWEEN AND(在……区间):用BETWEEN AND进行查询的时候,查询出来的数据在这个区间。
    SELECT * FROM user WHERE age between 10 and 20;

    select * from orders where orderno BETWEEN 22456 and 24562; #闭区间

    select * from orders where orderno >=22456 and orderno <=24562;

    (×) select from orders where 22456<=orderno<=24562;
    数据查询—聚集函数
    Count(
    ) 计算元组个数,包括null
    Count([distinct|all]<表达式>) 计算元组个数,包括null
    Sum([distinct|all]<表达式>) 计算表达式和,不包括null
    Avg([distinct|all]<表达式>) 计算机表达式平均值,不包括null
    Max([distinct|all]<表达式>) 计算最大值,不包括null
    Min([distinct|all]<表达式>) 计算最小值,不包括null
    字符匹配——模糊查询过滤
    模糊查询过滤使用关键字LIKE进行查询。
    通配符:% 百分号代表任意长度的字符串 下划线代表任意单个字符
    (1)LIKE ‘张%’:使用LIKE查询该字段以“张”开头的数据。
    SELECT * FROM user where name like '张%';
    (2)LIKE ‘ %明’:使用LIKE查询该字段以“明”结尾的数据。
    SELECT * FROM user where name like '%明';
    (3)LIKE ‘ %明%’:使用LIKE查询该字段包含“明”的数据。
    SELECT * FROM user where name like '%明%';
    (3)LIKE ‘
    明%’:使用LIKE查询该字段第二个字为“明”的数据。
    SELECT * FROM user where name like _'明%';
    当原本的被查询字符中含有% 或 ,就需要使用Escape‘<换码字符>’来对通配符进行转义
    `SELECT * FROM user where name like ‘DB\
    %i__’escape’\’;(代表\为转移字符,后面的字符全为普通字符)<br />**字段控制查询过滤 **<br />字段控制查询过滤可以使用DISTINCT去除重复过滤,使用AS设置别名。<br />(1)DISTINCT:去除重复的列值。<br />SELECT distinct age FROM user;<br />(2)AS:可以设置列的别名,也可以省略AS来设置关键字。<br />SELECT name as 姓名 FROM user;<br />或者<br />SELECT name 姓名 FROM user;<br />select distinct name (as) 姓名 FROM user;<br />**正则表达式查询过滤 **<br />正则表达式用来匹配文本中的特殊字符串或字符集合。将正则表达式与一个文本串进行比较,查询出满足正则表达式的数据。所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式;MySQL用WHERE子句对正则表达式提供了初步的支持,使用REGEXP关键字指定正则表达式的字符匹配模式,允许指定用正则表达式过滤SELECT检索出的数据。<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/26899631/1649055496745-fb0adcd2-a1e5-44fd-a394-b05091455d83.png#clientId=uf0be423c-bac8-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=ue3e9584e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=501&originWidth=1083&originalType=url&ratio=1&rotation=0&showTitle=false&size=249566&status=done&style=none&taskId=u465fe089-0ad4-47c4-b7b7-e84f177a242&title=)<br />SELECT name FROM person_tbl WHERE name REGEXP ‘^st’; <br />SELECT name FROM person_tbl WHERE name REGEXP ‘ok$’<br />SELECT name FROM person_tbl WHERE name REGEXP ‘mar’;<br />SELECT name FROM person_tbl WHERE name REGEXP ‘^st|ok$’;<br />**联合查询 **<br />联合查询是将多次查询结果合并起来进行拼接,其字段不会增加,要求两次查询的列数必须一致,列的类型可以不一样<br />多次SQL语句取出的列名可以不一致,此时以第一个SQL语句的列名为准;<br />使用关键字UNION进行联合查询,会去掉重复的行,<br />使用关键字UNION all进行联合查询,不会去掉重复的行;<br />ORDEY BY不能直接使用,需要对查询语句使用括号才行;<br />要ORDER BY生效,就必须搭配LIMIT,LIMIT使用限定的最大数即可,推荐放到所有子句之后,即对最终合并的结果来排序或筛选。<br />SELECT column_name FROM table1<br />UNION (all)<br />SELECT column_name FROM table2 <br />联合查询经常用于查询同一个表,但是需求不同, 如查询学生信息、男生身高升序、女生身高降序;进行多表查询,多个表的结构是完全一样的,保存的数据(结构)也是一样的。<br />**UNION**<br />UNION 命令只会选取不同的值。<br />SELECT E_Name FROM Employees_China UNION ALL SELECT E_Name FROM Employees_USA <br />导出某个数据库:<br />mysqldump -u root -p dbName > sqlFilePath<br />导出多个数据库:<br />mysqldump -u root -p –add-drop-database –databases dbName1 dbName2… > sqlFilePath -add-drop-database : 该选项表示在创建数据库的时候先执行删除数据库操作 <br />–database : 该选项后面跟着要导出的多个数据库,以空格分隔<br />导出某个数据库的某个表:<br />mysqldump -u root -p dbName tableName > sqlFilePath<br />只导出数据库结构,不带数据:<br />mysqldump -u root -p -d dbName > sqlFilePath`
    -d : 只备份结构,不备份数据。也可以使用”–no-data”代替”-d”,效果一样。