mysql数据库笔记

0. 软件项目开发流程(软件过程/软件生命周期(3期8阶段)):

                软件定义期:

                        (1)可行性研究阶段:技术,软硬件,人力,时间,资金,法律政策,回报率等各方面是否可行。——《软件可行性研究报告》

                        (2)需求分析阶段:功能点(主要,次要),非功能性(安精确度,可靠性,可维护性等)需要。——《软件需求规约》

                软件开发期:

                        (3)概要设计阶段:子系统,模块,模块间接口,数据结构,软硬件/网络的选择等。——《概要设计说明书》

                        (4)详细设计阶段:设计出每个模块中需要的对象,函数,详细的数据处理流程。——《详细设计说明书》

                        (5)软件开发阶段:UI/UE设计师(设计产品的效果),前端工程师(将设计转换成代码),后台工程师。

                        (6)软件测试阶段:——《软件测试报告》

                软件维护期:

                        (7)软件的部署(Deploy)阶段:软件的开发环境->生成环境。

                        (8)软件的维护(保质期)阶段:纠错和改进。(软件工程国际标准文档)各类文档的模板。

1.服务器的分类:

               (1)硬件服务器:工作站,大,中,小,超级服务器。

               (2)软件服务器:即服务器应用程序,包括DNS服务器(把域名解析为计算机的IP地址),web服务器(提供Web页面服务),数据库服务器(提供数据的永久储存和高效查询),FTP服务器(文件上传和下载服务),SMTP/POP3服务器(邮寄收发服务),SSH服务器(远程登录服务),Samba服务器(文件和打印机共享服务)等。

2.项目中储存数据的方式:

                     (1)内存:速度快,但容量有限,非永久存储。

                     (2)自定义结构的文件:使用简单直接,但不便于查大量数据。

                     (3)Excel/Access等格式化文件:使用广泛,灵活性不足。

                     (4)专用文件服务器:网络存储/云存储,可靠性高,操作复杂。

                     (5)数据库服务器:存储效率高,尤其适合海量存储,操作复杂。

3.数据库概述:Data base(数据库);永久储存项目中的海量数据。

4.数据库的发展4个历程:

                       (1)网状数据库:20世纪60年代初

                       (2)层次型数据库:20世纪60年代末

                       (3)关系型数据库(RDBMS):现在主流,20世纪70年代至今

                       (4)非关系型数库(NoSQL):现在新型未来趋势,21世纪至今,

5.RDBMS系统的组成: 大多采用c/s(客户端服务器)或者b/s(浏览器服务器)形式。

      (1)DB服务器端:永久储存/管理数据

      (2)DB客户端:向服务器端发起增删改查指令。

       常见的RDBMS六种:

                          (1)SQlite:微型数据库,常用移动设备,几十KB。

                          (2)MySQL:开源中小学数据库,可用于各种操作系统,最流行的开源RDBMS,也是Web应用方面是最好的RDBMS应用软件之一。

                          (3)PostgreSQL:开源中小型数据库。

                          (4)SQL server:Microsoft开发的中型数据库,只用于Windows系统。

                          (5)Oracle:中大型数据,可用于各种操作系统。

                          (6)DB2:IBM开发的中大型数据库,常与IBM服务器搭配。

6. mysql服务器的安装:基于XAMPP软件。

         步骤:(1)下载XAMPP软件,默认安装在C盘路径。

                    (2)删除c:/xampp/htdocs目录下所有文件,将data.sql数据库文件放在该目录下。

                    (3)启动XAMPP的mysql程序,默认是8080端口。

7. SQL语言:结构化查询语言,ANSI/ISO推出的行业标准语言,用于操作关系型数据中的数据,当前主流的数据库都支持该语言。分类SQL-87,SQL-92,SQL-99等几个版本。

       7.1 SQL语言的语法:

                       (1)SQL语句必需以“;”结尾。

                       (2)SQL不区分字母大小写。

                       (3)SQL脚本(新建文本文档右键Editplus打开编写)中可以使用单行注释“#---”或者多行注释“/*----*\”。

                       (4)一条SQL语句科院编写在多行中。

                       (5)SQL代码可以换行。

      7.2 常用SQL语句: 

            CREATE DATABASE boke(库名) CHARSET=UTF8; 创建一个新的数据。(SQL中符号“-”为减号.)(大写部分必需大写)。

            DROP DATABASE IF EXISTS  boke(库名);              丢弃指定的数据库(如果存在的话)。

            USE boke(库名)进入数据库。

            CREATE TABLE b_user(表名) (列名1,列名2,----,列名n);创建一个新的表(含列)

            INSERT  INTO b_user(表名) VALUES(值1,值2,---,值n); 插入一行数据 

            SELECT * FROM b_user(表名)查询出表中所有数据行。

            DELETE FROM b_user(表名);  删除所有的记录行。

            DELETE FROM b_user(表名) WHERE 列名=‘值’;  删除满足条件的记录。

            UPDATE  b_user(表名) SET 列名=‘值’,列名=‘值’,---,列名=‘值’; 修改所有记录行

            UPDATE  b_user(表名) SET 列名=‘值’,列名=‘值’,---,列名=‘值’ WHERE 列=‘值’;删除某列满足条件的记录。

            ALTER table b_user(表名)   modify age(列名) String(类型)  not NULL(约束);

8. Mysql中的列类型:SQL标准只定义了少量的几种数据类型,不同数据都进行了扩展,Mysql是最丰富的。

Mysql中的列类型分三组;

                      1bit

                      8bit/1byte(翻译:字节)

                      16bit/2byte

                      32bit/4byte

       (1).数字类型:

                    tinyint——微整数,占1字节,-128~127

                    Smallint——小整数,2字节-32768~32767

                    Int——整数4字节-2147483648~2147483647

                    Bigint——大整数8字节

                        Float——单精度浮点型小数,4个字节运算时可能产生精度丢失

                        Double——双精度浮点型小数,占8个字节,运算(即把小数点移动在后面乘以10的几次方,E表示10的次方时可能产生精度丢失。

                        Decimal(M,D)——定点小数,不会四舍五入精度丢失。M表示总的有效位数,D表示小数点后面的有效位数。如¥9999.00的价格商品 写成decimal(7,2)

                         enum("男","女","保密")——括号内的值,选其一。

            (2)日起时间类型:

                DATE日期如’yyyy-mm-dd’

                TIME时间(,分,秒);如hh:mm:ss’

                DATETIME:日期时间类型;如’yyyy-mm-dd hh:mm:ss’

            (3)字符串类型;

                           CHAR(M):定长字符串,必需固定长度为M(M为0~255)不够需要空字符\0的长度舍去一\0\0\0,操作速度快,如手机号,身份证号。

                           VARCHAR(M):变长字符串,可能更节约空间(M为不超过65535),如简介,地址。如果刚好长度则不用添加‘\0’,如果位数不够需要填‘\0表示字符串结束,位数太长就删除到刚好的位数长度,不用添加\0如果一列中数值长度差不多用CHAR(M),如果长度区别很大用VARCHAR(M).

                           TEXT(M):变长字符串,M不能超过2G,如小

 

9.SQL标准定义了如下的列约束:

    (1)主键约束——PRIMARY KEY(翻译:主键)。如eid  INT  PRIMARY  KEY; 。     声明为主键的列不能为出现NULL,也不能重复出现并且默认按主键列上的值从小到大排列一个表最多只能一个主键列。

小知识:数据库中的NULL

  1. NULL:空,表示一种“暂时未定值”,“不存在的值”的含义。NULL是数据库关键字,不允许用引号。主键(PRIMARY KEY)列中不能有NULL。主键=唯一+非空+排序=UNIQUE +NOT NULL+ 排序。唯一且非空——UNIQWE NOT NULL。 #dname VARCHAR(12) UNIQUE NOT NULL;系统关键词大写,不加‘’号。

   (2)唯一约束——UNIQUE(翻译:唯一约束)。 如 #dname VARCHAR(50) UNIQUE; 声明唯一约束列上不能出现重复值,可以出现多个NULL。

   (3)非空约束——NOT NULL#dname VARCHAR(20) NOT NULL; 声明为非空的列不能出现NULL,但可以出现重复值

   (4)检查约束——CHECK,检查约束可以限制列上出现的值范围。# age TINYINT CHECK (age>=18 and age<=60)       注意:当前MySQ不支持检查约束,即能正确识别但是不会读取。

   (5)默认值约束——DEFQULT。   #sex CHAR(1) DEFQUIT  ‘;声明了默认值得列,没有指定具体的值,就会自动采取默认的值。应用默认值的2种方法:

                                         a.如INSERT INTO emp VALUES(----,DEFQULT,,);

                      b.如INSERT INTO emp values(10);其他都采用默认值

   (6)外键约束——FOREIGN KEY 。声明外键盘的列,出现的值必需在另一个表的主键上出现过。编写模式如下;

 如deptId TINYINT;   #此处数据参考另一个表主键出现的值,并且字符类型必需一致,然后换行写外键约束:FOREIGN KEY (deptId)  REFERENCES dept (did);

 

10.SQL数据库的查询:

    10.1简单 查询:

              (1)简单查询——查询特定的列 : SELECT * FROM 表名 WHERE 列=值;

                             示例:查询出员工的姓名,工资,生日 :SELECT ename,salary,birthday FROM emp;

              (2)简单查询——查询所有列 :SELECT * FROM 表名;

                            示例:查询员工的所有列 :SELECT * FROM emp;

              (3)简单查询——为列取别名:SELECT 列名 AS 别名 FROM 表名; 

                            示例:查询员工的编号,姓名,查询结果中列名用中文显示:

                                        SELECT eid AS 编号,ename AS '姓 名' FROM emp; 

              (4)简单查询——执行列上的算术运算 :SELECT 列名[+-*/]12 FROM emp;                             

                            示例:查询所有员工姓名,月薪,年薪: SELECT salary*12 FROM emp;

         (5)简单查询——仅显示不同的值,重复值仅显示一次:

                            示例:查询出部门有员工,仅显示部门的编号即可。

                                        SELECT DISTINCT deptId  FROM emp;

              (6)简单查询——查询结果集的排序:                              

                            示例:查询出所有员工的姓名和工资,并按工资从小到大排序。

                                           SELECT ename,salary FROM emp ORDER BY salary ASC;      # ORDER BY salary;安装工资排序默认从小到大。ORDER BY 列名1,列名2-----可以接多个序列。DESC降序,ASC升序。

        (7)简单查询——查询结果集的筛选(过滤):

                           示例:查询出编号为757员工的所有数据

                                      SELECT * FROM emp WHERE eid=757;      #SQL中没有==或者===,判断等号用=即可。

        (8)简单查询——分页查询——面试题重点:存在很多页数,分页查询所必须的SQL语句没有官方标准,不同数据库实现方式不同。Mysql中分页查询语法;

SELECT-----

FROM---

WHERE-----

ORDER BY----     #SELECT, FROM, WHERE, ORDER BY的先后顺序固定。         

      LIMIT start,count----      #LIMIT必须在整个SELECT语句的最后面,start表示从哪行开始记录读取,count表示每页的最大行数,且默认从0开始识别每一行。如:LIMIT 0,5  表示从默认的第0行开始,每5行形成一页。#0/1/2/3/4                

          (9)简单查询——逻辑查询:and,or,not。其中()可以调整优先级。

                               SELECT * FROM emp WHERE not age>15 and gender="女" or (height<153)  ;   

          (10)简单查询——模糊查询:link,rlink(正则)。

                          示例:查询姓名中以‘小’开头的。

                                SELECT * FROM emp WHERE name link "小%";  #“%”替换一个或者多个,“_”替换一个。                       

                          示例:查询有2个字。

                                SELECT * FROM emp WHERE name link "__";  #有几个"_"表示查询有几个字的,"__%"表示查询至少2个字的名。                          

                          示例:rlink正则。以周开头。

                                SELECT * FROM emp WHERE name rlink "^周.*";  #"^周.*"表示以周开头,"^周.*伦$"表示以周开头,以伦结尾。

            (11)简单查询——范围查询:not in(不在非连续范围内),in(在非连续范围内),beetween...and...(在连续范围内) ,not beetween...and...(不在连续范围内)。

                               SELECT * FROM emp WHERE age not in (10,20,30)  ; #查询年龄不为20,30,40的结果。  

                               SELECT * FROM emp WHERE not  age  beetween 18 and 24 ; #查询年龄不为/为18~24之间的结果。      

            (12)简单查询——空判断:is null, is not null 。                

                                      SELECT * FROM emp WHERE age is null;

             (13)简单查询——聚合函数:count(某参数总数),max/min(最大最小值),sum(求和),avg(平均数),round(四合五入) 。                

                                      SELECT count (*) as 女性人数 FROM emp where gender="女";  

                                      SELECT max/min/sum/avg(age) FROM emp ;  #avg(age)=sum(age)/count(*);

                                      SELECT  round(avg(age),1) FROM emp ;    #平均年龄,保留1位,四舍五入。

 

    10.2 复杂 查询:

         (1)复杂查询——子查询(Child Query):在一条增删改查语句中,存在另一个子查询语句。

                  示例:查询出市场部所有员工信息(#表dept和表emp的连接点在于表emp员工的部门编号与表dept中的市场部对应的部门编号相关)。

                           SELECT * FROM emp WHERE deptId=( SELECT did  FROM dept WHERE dname='市场部');

         (2)复杂查询——分组查询/聚合查询:  GROUP BY,与聚合函数一起使用。          

            示例:查询所有部门编号以及对应的人数——必需先分局部门编号分组,在每个组内在计数。

                      SELECT deptId,COUNT(eid) FROM emp GROUP BY deptId;    #表示按照deptId分组并搜索分组后每个组deptId中eid的个数。

                            SELECT gender,COUNT(*) FROM emp where gender="男" GROUP BY gender;  

                            SELECT gender,group_concat(name,age) FROM emp GROUP BY gender;   

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_42231156/article/details/83047151
今日推荐