• mysql数据库基础


    一、数据库

    1、  数据库(database简称 DB):存储数据的仓库

    2、  大型数据库:Oracle(商业)、 DB2

    3、  中型数据库:MySQL、SQLServer(T-SQL)

    4、  小型数据库:Access

    5、  MySQL:开源(免费),其它的数据库属于商业(付费)

    6、  SQL:结构化查询语言

    7、  图形用户界面工具(GUI工具)

    SQLyog, Navicat

    二、基本命令

    1、  进入mysql客户端

    mysql   -uroot  -p123456(最后一个字符串组合:-p密码)

    2、  在linux中重启mysql

    service  mysqld   restart

    进入到mysql客户端,mysql的命令:

    3、  查看mysql中有哪些数据库

    show  databases;(分号为英文状态)

    4、  从mysql客户端退出到linux中

    quit

    5、  在mysql中清屏

    Ctrl + l

    6、  选择数据库

    use 数据库名;

    7、  查看当前数据库中包含的所有的表名

    show  tables; 

    查看指定数据库中包含的表名

    show  tables  from  数据库名

    8、  创建数据库

    create  database  数据库名;

    9、  删除数据库

    drop  database  数据库名;

    三、创建表

    1、  创建表(表名最好是英文)

    create  table  表的名字

    列名1  数据类型,

    列名2  数据类型,

    列名3  数据类型,

    ……

    列名n  数据类型 (最后一行没有逗号)

    );(分号在linux中必须有,在SQLyog中可有可无)

    2、  数据类型

    (1)       整形(整数):int

    (2)       小数

    浮点数(保存的是近似值):double

    定点数(保存的是精确值):decimal(数字的个数,小数的个数)例5.32则(3,2)

    (3)       字符串(字母,汉子,数字)

    固定长度:char(长度)   默认长度是1

    可变长度:varchar(长度)    默认长度是1

    (4)       日期

    日期(年月日):date

    日期时间(年月日小时分钟秒):datetime

    3、  注释:解释程序

    (1)- -单行注释

    (2)/*多行注释*/

    4、字符集

        支持中文的字符集

        gbk:中文简体,繁体

        gb2312:中文简体

        utf8(有的是utf-8):包括全世界所有的语言

        (2)修改表的字符集

         create   table  表名

        (

           ……

    )charset=utf8;

    (3)修改数据库的字符集(数据库中所有的表默认都是utf8)

        create  database  数据库名   character set=utf8;

    5、删除表

    drop  table  表名

    6、查看表结构

        desc  表名;

    8、  查看建表的语句

    show  create  tabe  表名;

    9、  查看创建数据库的语句

    show  create  database  数据库名;

    四、插入数据

    1、insert   into   表名(列名1,列名2,……) values(值1,值2,……);

    列名与值的顺序,数量,数据类型必须完全匹配

    数字(整数,小数)不需要使用单引号,字符串和日期及其日期时间类型必须使用单引号。

    2、当向表中所有列插入数据时,可以省略(列名,……)

    Insert  into 表名  values(值1,值2,……);

    值的顺序与表中列的顺序一致

    4、  通过一个语句向表中插入多行记录(数据)

    insert  into  表名(列名1、列名2、……)values(值1,值2,……),

                                                (值1,值2,……),

                                                (值1,值2,……),

                                                  ……;

    五、创建表设置复杂选项

    1、列名中不允许有空值

    create  table 表名

    列名  数据类型  not  null,

    ……

    );

    空值:null

    空字符串:’’(当数据类型为整形时,为0)

    2、主键约束

    (1)主键:用来唯一的标识表中的每一行记录

    (2)特点:不能为空值(null),不能重复

    (3)创建表时设置主键

        create  table  表名

       (

    列名  数据类型  primary   key,

    …………

    );

    (4)一个表最多只能有一个主键

    3、自增列

    (1)自增列必须有主键约束或唯一约束

    (2)自增列默认是从1开始每次自增1的数字

    (3)设置自增列

    (4)一个表只能有一个自增列

    create  table  表名

    列名  数据类型  primary  key   auto­­­_increment,

    ……

    );

    Day02  MySQL

    一、修改表结构(只有添加和删除列有column)

    1、  向表中添加一个新列

    alter  table  表名  add   column  列名  数据类型;(数据类型后还可加非空、主键等)

    2、  修改表中列的数据类型

    alter  tabe  表名  modify   列名  数据类型;

    3、  修改表中列的列名和数据类型

    alter  table  表名   change   原列名   新列名   数据类型;

    4、  删除表中的列

    alter  table  表名   drop  column  列名;

    5、  向已有表中添加主键

    alter  table  表名  add  primary  key(列名);

    6、  删除主键

    alter  table   表名  drop   primary  key;

    练习

          -- 在已有主键的基础上添加自增

    ALTER TABLE s2 MODIFY id INT  AUTO_INCREMENT;

    INSERT INTO s2 VALUES(NULL,2,'白','男');

    -- 添加自增列(没有主键的基础上)

    ALTER TABLE s2 ADD COLUMN id1 INT PRIMARY KEY AUTO_INCREMENT;

    -- 下面 删除不了自增列的主键

    ALTER TABLE s2 DROP PRIMARY KEY;

    -- 删除自增

    ALTER TABLE s2 MODIFY id INT;

    -- 没有自增表示自增删除

    INSERT INTO s2 VALUES('',3,'白','男');

    -- 删除主键

    ALTER TABLE s2 DROP PRIMARY KEY;

    二、约束(对表中数据的限制)

    1、  主键约束:唯一标识表中每一行数据,限制数据不能重复,不能为空

    2、  外键约束:限制两个表中主键列与外键列中数据的对应关系。外键列中的数据必须存在于主键列中,外键列中的数据可以重复。主键列中数据的修改和删除都会影响到外键列中的数据。

    3、  唯一约束:限制数据不能重复,可以有空值(只能有一个空值)

    4、  创建表时创建外键约束

    create  table  主键表名

                         主键列  数据类型  primary  key,

                         ……

    )engine=innodb;

     create  table  外键表名

                    外建表的主键列  数据类型  primary  key,

                    ……

                    外键表所关联的主键表的列   数据类型,

                    foreign  key(外键表所关联的主键表的列)  references   主键表表名(主键表中的主键列名)

    )engine=innodb;

    5、  使用外键约束时,表的存储引擎必须是INNODB。

    6、  在已有表中新增外键约束

    alter  table  外建表的表名  add  foreign  key(外键列名) references  主键表表名(主键表中的主键列名);

    7、  从已有的表中删除外键约束

    alter  table   外键表表名  drop  foreign  key  外键约束名;(外键约束名是创建外键约束时默认创建的一个名称)

    三、删除表中的数据。

    1、  删除表中所有的数据

    delete  from   表名

    2、  删除满足条件的一行数据

    delete  from  表名  where   条件;

    delete  from  student  where  id=10;

    delete  from  student  where  id<5;

    四、修改表中的数据

    1、  修改某列所有的数据

    update  表名  set   列名=新值;

    2、  修改多个列中所有的数据

    update   表名  set  列名1=新值,列名2=新值,……;

    3、  修改满足条件的列中的数据

    update  表名  set   列名1=新值1,列名2=新值2,…… where  条件;

    4、  某一列所有内容值加1;

    update  表名  set   列名=列名+1;

    五、查询数据

    1、  查询表中所有的数据

    select  *  from  表名;

    2、  查询部分列的数据

    select  列名1,列名2,…… from  表名;

    3、  查询满足条件的语句

    select  ……  from  ……  where   条件;

    4、  运算符

    (1)       算数运算符:+、-、*、/。

    (2)       比较运算符:=、>、<、!=不等于、>=、<=。

    (3)       逻辑运算符

    逻辑与(并且的两个条件都成立):and

    条件1  and  条件2

    逻辑或(两个条件只要有一个条件成立):or

    条件1  或  条件2

    逻辑非:not

    MySQL  day03

    二、简单查询(关于where条件的查询)

    1、去除重复值

     select  distinct  列名  from  表名   where   条件;

    2、挑选出在……之间的数据   between …… and

     select 列名1、列名2……   from  表名 where  列名  between  起始值  and  终止值;

    select 列名1、列名2……  from  表名  where  列名>=起始值  and  列名<=终止值;

    3.列名等于括号内任意一个值时:in ;(not  in  不等于其中任意一个值时)

    select  ……  from …… where 列名 in(值1,值2……);

    select  ……  from …… where 列名 =值1  or 列名=值2……;

    4、查询空值

       select …… from …… where 列名 is  null;(空格中是null)

    select …… from …… where 列名 like ‘’;(空格中是空的字符串)

    查询不是空值

     select …… from …… where 列名 is  not  null;

    select …… from …… where 列名 not  like ‘’;(空格中是空的字符串)

    5、如果列是空值,将其作为指定的数值进行运算:

    update  表名  set   列名=列名+1

    ifnull(列名,指定代替null运算的数值)

    update  表名  set   列名=ifnull(列名,指定代替null运算的数值)+1;

    6、模糊查询:like

    通配符

    (1)任意一个字符:  _

    (2)任意的0到多个字符:  %

    select …… from …… where 列名  like  ‘……’;(注意写like不必写等号)

    姓名以a结尾:

    select …… from …… where 列名  like  ‘%a’;

    姓名第二位是a:

    select …… from …… where 列名  like  ‘_a%’;

    四、限制查询 limit

    1、limit  n :显示前n行

    2、limit  m,n:跳过m行,显示n行

    select …… from …… where 条件  limit ……;

    练习:

    -- 员工表中前三行

    SELECT * FROM 职工 LIMIT 3;

    -- 员工表中9到12行

    SELECT * FROM 职工 LIMIT 8,4;

    -- 男员工的前5人

    SELECT * FROM 职工 WHERE 性别='男' LIMIT 5;

    五、排序 order  by

    1、升序

         select …… from…… where…… order  by   列名 asc;(asc可有可无)

    2、降序

    select …… from …… where …… order  by  列名  desc;

    3、如果按照多个列来排序 order  by  列名1,列名2,  那么先按照第一个列排序,当第一个列相同时再按照第二个列排序。

    六、聚合函数

       1、最大值:max(列名)

       2、最小值:min(列名)

       3、和:sum(列名)

       4、平均值:avg(列名)

       5、统计个数:count(列名)或count(*)

          (1)count(列名):不统计列中空值的个数

          (2)count(*):统计列中所有值的个数包括空值

    七、查询结果显示的列名重命名

        select  列名  as   显示的名字,……   from 表名;(as可以省略)

    八、分组查询group  by

        select  ……  from  …… where …… group  by 列名……  limit ……; 

    day 04  mysql

    一、分组条件:having

    1、 select ……

    form……

    where 不包含聚合函数的条件

    group  by 列名

    having  包含有聚合函数的条件

    order  by……

    limit ……

    二、子查询(嵌套查询)

    1、在一条查询语句中还有另一条查询语句。

    select …… from……

    where ……

    (select …… from …… where ……);

    2、 如果子查询结果多于1个,外层查询的条件中不能直接使用=,!=,>,<,>=,<=,而是需要使用>all ,  <all,  in,  not  in,

    3、 all

    (1)>all相当于 >max(列名)

    (2)<all相当于 <min(列名)

    4、any

      (1)=any相当于in

      (2)>any相当于>min(列名)

      (3)<any相当于<max(列名)

    三、多表连接查询

    1、交叉联接:两个表中的任意两个数据组合成一行构成的结果集。

    2、内联接:两个表中满足联接条件的数据

      (1)select …… from 表1、表2  where 联接条件

          联接条件一般的格式:主键表表名.主键列名=外键表名.外键列名

      (2)内连接的关键字(inner可以省略):inner   join

           select …… form …… 表1  inner  join  表2  on  联接条件;

    (3)表名起别名:如果表名重新命名,在查询语句中必须使用表的别名,而不能再使用表原来的名字。在查询语句中如果两个表的列名相同,那么必须写成:表名或表的别名.列名

    给表名起别名:表名 as 别名(as可以省略)

    4、 外联接:

    (1)    左外联接 left   join

    select …… from  左表  left  join  右表  on  联接条件;

    左表中所有的数据,右表中只显示满足联接条件的数据

    (2)    右外联接 right  join

    select …… from  左表  reight  join  右表  on  联接条件;

    右表中所有的数据,左表中只显示满足联接条件的数据

    四、备份和还原

    1、备份(linux系统中操作)

    mysqldump  -u 用户名  -p密码  数据库名>文件名.sql

    2、还原(linux系统中操作)

    mysql  -u用户名  -p密码  数据库名<文件名.sql

    3、mysql命令还原(mysql系统中操作)

    (1)    登陆 mysql:mysql  -uroot  -p密码

    (2)    选择数据库:use  数据库名

    (3)    执行sql文件:source  文件名.sql 

    -- 列出员工数超过三人的部门号和员工数

    SELECT 所在部门,COUNT(*) FROM 职工 GROUP BY 所在部门 HAVING COUNT(*)>3;

    -- 统计人数超过2个人的市

    SELECT COUNT(*),籍贯 FROM 职工 GROUP BY 籍贯 HAVING COUNT(籍贯)>2;

    -- 每种类型的图书的最低价格,最低价格大于50

    SELECT book_name,MIN(sale_price) FROM mybook

    GROUP BY book_type HAVING MIN(sale_price)>50;

    -- 除了小说的每种类型的图书的平均数量,平均数量小于500,只显示前三行

    SELECT book_type,AVG(book_nums)  FROM mybook

    WHERE book_type!='小说' GROUP BY book_type

    HAVING AVG(book_nums)<500 LIMIT 3;

    -- 价格大于40的每种类型图书的价格和

    SELECT book_type,SUM(sale_price) FROM mybook

    WHERE sale_price>40 GROUP BY book_type;

     

    -- 子查询(嵌套查询)

    -- 查询与西游记是同一类型的图书

    SELECT * FROM mybook

    WHERE book_type=(SELECT book_type FROM mybook WHERE book_name='西游记');

    -- 查询与中国通史是同一类型的图书,并且不显示中国通史

    SELECT * FROM mybook

    WHERE book_name!='中国通史'

    AND book_type=(SELECT book_type FROM mybook WHERE book_name='中国通史');

     

     

    -- 查询比白夜行价格低的图书

    SELECT * FROM mybook WHERE sale_price<

    (SELECT sale_price FROM mybook WHERE book_name='白夜行');

    -- 查询比小说类图书价格高的

    SELECT * FROM mybook WHERE sale_price>ALL

    (SELECT sale_price FROM mybook WHERE book_type='小说');

    -- 查询比计算机类图书价格低的且数量比文学类高的

    SELECT * FROM mybook WHERE sale_price<ALL

    (SELECT sale_price FROM mybook WHERE book_type='计算机')

    AND

    book_nums>ALL

    (SELECT book_nums FROM mybook WHERE book_type='文学');

    -- 查询价格小于50的同类型的图书

    SELECT * FROM mybook WHERE book_type IN

    (SELECT book_type FROM mybook WHERE sale_price<50);

     

     

    -- 基本工资比员工编号小于10的任意员工工资低的

    SELECT * FROM 工资 WHERE 基本工资<ANY

    (SELECT 基本工资 FROM 工资 WHERE 职工号<10 );

    --

    SELECT * FROM 工资 WHERE 基本工资<

    (SELECT MAX(基本工资) FROM 工资 WHERE 职工号<10 );

     

    -- 查询部门名称,员工姓名(两种写法)

    SELECT 部门名,姓名 FROM 部门,职工 WHERE 部门.部门号=职工.所在部门;

    SELECT 部门名,姓名 FROM 职工 INNER JOIN 部门  ON 部门.部门号=职工.所在部门;

    -- 查询部门名称,员工姓名,基本工资(两种写法)

    SELECT 部门名,姓名,基本工资 FROM 部门,工资,职工

    WHERE 部门.部门号=职工.所在部门

    AND 工资.职工号=职工.职工号;

    --

    SELECT  部门名,姓名,基本工资 FROM 职工

    INNER JOIN 部门 ON 职工.所在部门=部门.部门号

    INNER JOIN 工资 ON 职工.职工号=工资.职工号;

     

    -- 左外联接

    -- 显示所有的员工姓名,及员工对应的基本工资

    SELECT 姓名,基本工资 FROM 职工

    LEFT JOIN  工资 ON 工资.职工号=职工.职工号;

     

    -- 右表联接

    SELECT 姓名,基本工资 FROM 工资

    LEFT JOIN  职工 ON 工资.职工号=职工.职工号;

     

  • 相关阅读:
    nginx下pagespeed使用详解
    letsencrypt证书-使用certbot申请wildcard证书
    letsencrypt证书-管理工具certbot
    tcpdump使用
    elasticsearch增删改查操作
    elasticsearch安装中文分词器
    dragstart drag dragend dragenter dragover dragleave drop
    js如何准确获取当前页面url网址信息
    /touch滑屏事件
    监听 手机back键和顶部的回退
  • 原文地址:https://www.cnblogs.com/schblog/p/11110916.html
Copyright © 2020-2023  润新知