zoukankan      html  css  js  c++  java
  • MySql学习

    1. 数据库入门

    1.1 引入

    数据保存在内存:

     优点: 存取速度快

     缺点: 数据不能永远保存!!!

    数据保存在文件:

    优点: 数据永远保存!!!

    缺点:

    1)速度比内存操作慢,频繁的IO操作。

    2)查询数据不方便

    数据保存在软件:

    1)数据永远保存!!!

    2)速度比较快

    3)查询和管理数据方便

    数据库软件可以实现以上的功能!!!

    1.2 市面常见数据库软件

    SQL Server: 微软的产品。与net平台兼容比较好!!!收费的。

    Oracle:甲骨文公司的产品。 与java平台兼容性最好!!!收费的。

    收购Sun公司: java

    收购mysql: mysql 数据库软件

    中大型企业(中大型应用)

    mysql: 开源产品。免费的。与java平台兼容性最好!!

    中小企业(中小应用)

    前面: 学习mysql

    后面: 学习oracle

    mysql学习大纲:

    1)学习如何安装和基本使用

    2)如何管理数据库

    3)如何管理表

    4)如何管理数据

    5)如何查询数据

    2.MySQL数据库

    2.1 安装和基本使用

    1)下载安装包。mysql-5.5.40-win32.ms

    2)如果之前安装过mysql,要先安装文档步骤卸载mysql

    3)安装安装文档安装mysql数据库软件。

    4)打开cmd命令行:

    输入: mysql -u root -p 回车

    输入:root

    看到:

    Welcome to the MySQL monitor.  Commands end with ; or g.

    Your MySQL connection id is 2

    Server version: 5.5.40 MySQL Community Server (GPL)

    Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql>

    2.2 mysql的结构

    先有数据库 -> 再有表  ->再有数据

    通过sql语句mysql数据库进行管理。

    3. 管理数据库

    3.1 查看所有数据库

    mysql> show databases;   --分号结束。sql语句就会发送给mysql服务器端执行

    +--------------------+

    | Database           |

    +--------------------+

    | information_schema |      --mysql元数据数据库。

    | mysql              |    --mysql配置数据库。其中user表用于管理mysql用户和密码、权限信息。

    | performance_schema |     --mysql性能监控信息数据库。

    | test               |     --测试数据库。

    +--------------------+ 

    4 rows in set (0.00 sec)

    mysql>

    3.2 创建数据库

    1)创建数据库,并制定默认字符集

    mysql> create database day16

        -> default character set utf8;

    Query OK, 1 row affected (0.00 sec)

    查看数据库的状态(默认字符串):

    show create database day16;

    3.3 删除数据库

    mysql> drop database day15;

    Query OK, 0 rows affected (0.00 sec)

    3.4 修改数据库

    修改数据库默认字符集

    mysql> alter database day15 default character set gbk;

    Query OK, 1 row affected (0.00 sec)

    4 管理表(首先介绍SQLyog客户端,在这个客户端演示以上操作)

    4.1 查询所有表

    mysql> use day15;   --选择数据库

    mysql> show tables;  --查看数据库中的所有表

    4.2 创建表

    需求:创建学生表,字段(id,name,age)

    mysql> create table student(

        -> id int,    -字段:字段名称  字段类型

        -> name varchar(20),

        -> age int

        -> );

    查看一个表结构:

    desc student;  以表格格式返回

    4.3 删除表

    mysql> drop table student;

    Query OK, 0 rows affected (0.01 sec)

    4.4 修改表

    1)添加字段

    mysql> alter table student add column gender varchar(2);

    Query OK, 0 rows affected (0.04 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> alter table student add a int,add b int; 多个操作

    2)修改字段类型

    mysql> alter table student modify column remark varchar(100);

    Query OK, 0 rows affected (0.03 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    3)修改字段名称

    mysql> alter table student change column remark remark2 varchar(100)

    Query OK, 0 rows affected (0.05 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    4)删除字段

    mysql> alter table student drop column a,drop column b;

    Query OK, 0 rows affected (0.04 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    5)修改表名

    mysql> alter table student rename to student2;

    Query OK, 0 rows affected (0.01 sec)

    5 管理数据

    -- *************** 一、 数据增删修改操作 ********************---------

    -- 1.1 查看表的数据

    SELECT * FROM student;

    -- 1.2 插入数据

    -- 插入所有列(所有列的值都要按顺序依次插入)

    INSERT INTO student VALUES(1,'eric',20,'广州人','');

    INSERT INTO student VALUES(2,'rose',25,'佛山人','');

    --- 字段的数据一定要和值的数量要一致

    INSERT INTO student VALUES(2,20);

    -- 插入部分列(列的数据和值的顺序和数量一定保持一致!)

    INSERT INTO student(id,NAME,age,remark2) VALUES(3,'jacky',27,'佛山人');

    -- 1.3 修改数据

    -- 修改所有(用的很少)需求:将所有学生性别改为男

    UPDATE student SET gender='';

    -- 修改某个某些条件的数据(用的较多)需求:将id2的学生性别改为女

    UPDATE student SET gender='' WHERE id=2;

    -- 修改多个列(SET 列名=,列名=...)需求:修改id2的学生姓名和年龄

    UPDATE student SET age=28,remark2='韶关人' WHERE id=2;

    -- 1.3 删除数据(delete from

    -- 1) 全表数据删除 需求:删除全表的数据

    DELETE FROM student;

    -- 2)按条件删除数据 删除id2的学生

    DELETE FROM student WHERE id=2;

    -- 3)truncate table也可以删除全表数据

    TRUNCATE TABLE student;

    -- 注意:delete from truncate table 的区别?

    --  1delete from删除全部,也可以按条件删除,但是truncate table只能全表删除,不能按条件删除

    --  2delete from删除的数据可以回滚,truncate table删除的数据不能回滚。

    --  3delete from不可以把自增长约束(auto_increment)重置,truncate table可以把自增长约束(auto_increment)重置

    -- truncate table student where id=1; 错误的语法

    6 查询数据(重点的重点)

    6.1 查询所有列

    -- 2.1 查询所有列

    SELECT * FROM student;

    6.2 查询指定列

    -- 2.2 查询指定列(多个列之间以逗号分隔)

    SELECT NAME,gender FROM student;

    6.3 查询时指定别名

    -- 2.3 查询时给列指定别名(AS)

    SELECT NAME AS '姓名',gender AS '性别' FROM student;

    -- AS可以省略

    SELECT NAME '姓名',gender '性别' FROM student;

    6.4 合并列查询

    -- 2.5 合并列查询

    -- 添加servet,jsp成绩列

    ALTER TABLE student ADD servlet INT,ADD jsp INT;

    SELECT * FROM student;

    UPDATE student SET servlet=86,jsp=75 WHERE id=1;

    UPDATE student SET servlet=90,jsp=65 WHERE id=2;

    UPDATE student SET servlet=78,jsp=50 WHERE id=3;

    UPDATE student SET servlet=85,jsp=80 WHERE id=4;

    -- 需求: 查询每个学生的servletjsp的总成绩

    -- 注意: 必须是数值类型

    SELECT NAME '姓名',(servlet+jsp) '总成绩'  FROM student;

    -- 注意,和数值以外合并没有意义

    SELECT NAME '姓名',(gender+jsp)  FROM student;

    6.5 查询时添加常量列

    -- 2.4 查询时添加常量列

    -- 需要: 在查询学生表时都带上一个班级列,内容为"java就业班"

    SELECT NAME '姓名',gender '性别',age '年龄','java就业班' AS '班级' FROM student;

    6.6 查询去除重复数据

    -- 2.6 查询去除重复数据

    -- 需求: 统计学生都来自于哪里

    SELECT DISTINCT remark2 FROM student;

    -- 这种语法也可以

    SELECT DISTINCT(remark2) FROM student;

    6.7 条件查询

    -- 2.7 条件查询(where)

    SELECT * FROM student;

    -- 1) 逻辑条件: and   or

    -- 需求: 查询id值为3,且性别为男的学生(交集:两个条件同时满足)

    SELECT * FROM student WHERE id=3 AND gender='';

    -- 需求:查询id3,或性别为男的学生(并集: 两个条件其中一个满足)

    SELECT * FROM student WHERE id=3 OR gender='';

    -- 2)比较条件: >  <  >=  <=  = between and

    -- 需求: 查询servlet分数大于80分的学生

    SELECT * FROM student WHERE servlet>80;

    -- 需求:查询jsp分数小于或等于80分的学生

    SELECT * FROM student WHERE jsp<=80;

    SELECT * FROM student WHERE jsp<80 OR jsp=80;

    -- 需求: 查询servlet成绩大于等于80,且小于等于88的学生

    SELECT * FROM student WHERE servlet>=80 AND servlet<=88;

    -- 等价于上面

    SELECT * FROM student WHERE servlet BETWEEN 80 AND 88; -- (包前包后)

    -- 需求:查询年龄不等于30岁的学生

    SELECT * FROM student WHERE age<>30;

    -- 3)判空条件:  =''  is null  <>''  is not null

    UPDATE student SET remark2="" WHERE id=1;

    UPDATE student SET remark2=NULL WHERE id=4;

    -- 需求: 查询remark字段为空的学生(包含null,也包含字符串)

    -- null 和 空字符串的区别:

    -- null: 没有数据。 判断nullis null,判断不为nullis not null

    -- 空字符: 有数据,数据就是空字符串。判断空字符: =''; 判断不为空字符串: <>''

    SELECT * FROM student WHERE remark2 IS NULL;

    SELECT * FROM student WHERE remark2='';

    SELECT * FROM student WHERE remark2 IS NULL OR remark2='';

    -- 需求:查询remark字段不为空的学生(空串或者null都被视为空)

    SELECT * FROM student WHERE remark2 IS NOT NULL AND remark2<>'';

    -- 4) 模糊条件: like

    -- like后面跟上符号

    -- %: 表示任意多个字符(0-多个)

    -- _: 表示一个字符

    -- 需求: 查询姓张的学生

    SELECT * FROM student WHERE NAME LIKE '%';

    -- 需求: 查询姓名中包含''字的学生

    SELECT * FROM student WHERE NAME LIKE '%%';

    -- 需求: 查询姓张,且姓名只有两个字的学生

    SELECT * FROM student WHERE NAME LIKE '__';

    6.8 聚合查询

    -- 2.8 聚合查询

    SELECT * FROM student;

    DELETE FROM student WHERE id=5;

    -- 需求: 查询所有学生servlet的总分 (SUM: 求和函数)

    SELECT SUM(servlet) FROM student;

    -- 需求: 查询所有学生servlet的平均分(AVG; 平均函数)

    SELECT AVG(servlet) FROM student;

    -- 需求:查询最高的servlet分数(MAX:最大值函数)

    SELECT MAX(servlet) FROM student;

    -- 需求:查询最低的servlet分数(MIN:最小值函数)

    SELECT MIN(servlet) FROM student;

    -- 需求: 一共几个学生(COUNT: 统计数量函数)

    SELECT COUNT(*) FROM student;

    SELECT COUNT(id) FROM student; -- 效率会比count(*)效率稍高

    -- 注意: 聚合函数,会排除null值的数据

    SELECT COUNT(remark2) FROM student;

    6.9 分组查询

    -- 2.11 分组查询

    -- 需求: 查询男女的数量各自多少

    -- 预期结果:

    -- 男   3

    -- 女   2

    -- 1) 对性别进行分组(group by2)在分组基础上进行聚合函数总计

    SELECT gender,COUNT(*) '人数' FROM student GROUP BY gender;

    6.10 分组筛选

    -- 2.12 分组筛选(group by + having(条件))

    -- 需求: 查询人数大于2的性别

    -- 1)分组   2)统计 3)条件

    SELECT gender,COUNT(*) '人数' FROM student GROUP BY gender HAVING COUNT(*)>2;

    6.11 分页查询(limit)

    -- limit 起始行数,查询的行数

    -- 起始行数从0开始

    SELECT * FROM student;

    -- 需求:学生共20条数据,每页显示5条,共4

    -- 看第3(1115)的学生数据sqlselect * from student limit 10,5;

    -- 看第4(1620)的学生数据sql: select * from student limit 15,5;

     -- 知道: 当前页码,每页显示条数

    -- 结论分页查询当前页数据的sqlselect * from student limit (当前页码-1)*每页显示条数,每页显示条数;

    -- 需求: 查询第1,2条数据

    SELECT * FROM student LIMIT 0,2;

    -- 需求: 查询第3,4条数据

    SELECT * FROM student LIMIT 2,2;

    -- 需求:查询第5,6条数据

    SELECT * FROM student LIMIT 4,2;

     6.12 查询后排序(order by

    -- desc: 降序。数值从大到小,字母z-a

    -- asc: 升序。数值从小到大,字母a-z

    -- 默认情况下,按照插入的顺序排序

    SELECT * FROM student;

    -- 需求:按照id的升序排序

    SELECT * FROM student ORDER BY id ASC;

    -- 需求: 按照servlet成绩降序排序

    SELECT * FROM student ORDER BY servlet DESC;

    -- 多个排序条件的情况:先按照前面的条件排序,当出现重复记录,再按照后面的条件排序

    -- 需求: 按照age升序,按照servlet成绩升序排序

    SELECT * FROM student ORDER BY age ASC,servlet ASC;

     四、字段类型

    -- char(20) vs varchar(20)

    -- char(20): 固定长度的字符串。不管实际存储的数据的大小,一定占用20个字符空间

    -- varchar(20): 可变长度的字符串。占用的空间大小就是实际存储的数据大小。

    -- int vs int(4)

    -- int: 默认最多11位,长度根据实际存储的数值的长度

    -- int(4): 固定的数值长度

  • 相关阅读:
    [SQL] 外卖系统数据库设计
    [PHP] 遗传算法求函数最大值一般实现
    PHP CURL根据详细地址获取腾讯地图经纬度
    PHP 递归读取无限级分类
    PHP 仿网易云的评论盖楼
    JavaScript清除空格、换行,把双引号转换成单引号
    百度地图小Demo---获取当前地址以及拖拽显示地址
    基于Modbus的C#串口调试开发
    二叉树的中序遍历
    二叉树的前序遍历
  • 原文地址:https://www.cnblogs.com/shaofanglazi/p/6934845.html
Copyright © 2011-2022 走看看