您的位置:首页 > 编程语言 > Java开发

JavaWeb——MySQL_总结

2015-09-11 23:35 375 查看

一.mysql:数据库软件

2.1 卸载:

        1.停止服务

          Win+R-->services.msc-->mysql-->右击-->停止服务

        2.卸载 win+r-->appwiz.cpl-->mysql-->右击-->卸载

        3.手动删除目录

         *  找到myql的安装目录”D:\Program Files\MySQL\MySQL Server 5.5” 下的my.ini (mysql的配置文件),

            在在这个文件中 找到datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/",找到datadir对应的

            文件夹(寻找过程中放开隐藏文件属性),将mysql文件夹删除                   

         *  删除mysql的安装目录          

2.2 安装  

         详见安装文档          

2.3访问:

        进入:  Win+R-->cmd-->mysql -u root -p-->root-->enter

        退出:  exit--exit

      2.4 如何修改root密码

          在my.ini的文件做末尾加入  skip-grant-tables

          重启mysql服务,这时的mysql不需要密码即可登录数据库

          然后进入mysql

mysql>use mysql;

mysql>更新 user set password=password('新密码') WHERE User='root';

mysql>flush privileges;

运行之后最后去掉my.ini中的skip-grant-tables,重启mysqld即可。      

      

      2.5  my.ini文件

      2.6 各种错误参考安装报错文档

二.SQL:Structured Query Language  结构化查询语言

  3.1 概念:

  用于操作关系型数据库的一门语言,它定义了一种操作关系型数据库的规范

  3.2 SQL分类

DDL(*)(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;

DML(***)(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);

DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;

DQL(*****)(Data Query Language):数据查询语言,用来查询记录(数据)。

    

3.3  DDL:操作数据库和数据表,表中的列

3.3.1 操作数据库

 c: create 创建  

* create database 数据库名称;

r: read   查询

* show databases; //查询所有的数据库名称

* show create database 数据库名称;//查询创建的数据库的详细信息

u: update 修改

* 修改数据库的编码

alter database 数据库名称 character set 字符集名称;//修改数据库编码

d: delete 删除

*  drop database 数据库名称;//删除数据库

3.3.2 操作表:

    3.3.2.1  C:创建表

 * 数据类型:

     int:整型

  double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;

  char:固定长度字符串类型;  char(5)  "aa"

  varchar:可变长度字符串类型; varchar(5)  "aa"

  text:字符串类型;

  blob:字节类型;

  date:日期类型,格式为:yyyy-MM-dd;

  time:时间类型,格式为:hh:mm:ss

  timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 

 * 创建表语法:

 create table 表名(

列名1 数据类型,

        列名2 数据类型,

列名3 数据类型,

...

  );

create table stu(

id int,

name varchar(20),

age int,

gender varchar(6)

);

  

      * 每一个字段需要使用逗号(,)隔开。 最后一个字段后 不能加 逗号(,)

      * 要想创建表,需要进入数据库  use 数据库名称;

      * 向仓库的表中插入数据

   insert into stu values(2,'mary','male',18,'AA is a good student!','1990-02-23 12:34:44');

insert into stu values(3,'lucy','male',18,'BB is a good student!','1990-02-23 12:34:44');

insert into stu values(4,'lily','female',18,'CC is a good student!','1990-02-23 12:34:44');

insert into stu values(5,'smith','male',18,'DD is a good student!','1990-02-23 12:34:44');

insert into stu values(6,'piter','female',18,'EE is a good student!','1990-02-23 12:34:44');

insert into stu values(7,'jack','female',18,'FF is a good student!','1990-02-23 12:34:44');

* 中文插入乱码的解决方案,执行以下命令

set character_set_client=gbk;

set character_set_results=gbk;

            * 查看stu表中的所有数据

           select * from stu;

 * 完整性约束:保证数据的正确性和完整性

             • 非空约束:not null

             • 唯一约束:unique

             • 主键约束:primary key  非空且唯一。一张表只能有一个主键

             • 主键自增长:auto_increment  应该给值null

             • 外键约束:foreign key  

                 • 外键关联的必须是另一张表的主键

                 • 外键和主键之间数据类型必须一致

       * 表与表的关系:

* 一对一:如果是一对一的关系,外键在两张表加上都可

* 一对多(多对一):一对多或多对一,外键应该添加在多的一方

* 多对多:多对多的关系,需要使用中间表来关联两张表。中间表的两个字段都是外键

Eg: Create table test(id int ,name varchar(30), FOREIGN KEY (id) REFERENCES tb_tea(id) );

      3.3.2.2. R:查询表

         * show tables; //查询该库下的所有表名

         * desc 表名; // 查询表的详细信息

      3.3.2.3.:U修改:

        * 修改表中的列(字段):

1. 添加列:给stu表添加classname列:

ALTER TABLE stu ADD (classname varchar(100));

2. 修改列类型:修改stu表的gender列类型为CHAR(2):

ALTER TABLE stu MODIFY gender CHAR(2);

3. 修改列名:修改stu表的gender列名为sex:

ALTER TABLE stu change gender sex CHAR(2);

4.删除列:删除stu表的classname列:

ALTER TABLE stu DROP classname;

        * 修改表的名称

alter table stu rename student;

     3.3.2.4.: D:删除表

         * drop table 表名;//删除表 表没有了,表上的数据自然也没有了

3.4  DML: 操作表中的数据  (增、删、改)

       3.4.1 查询: 

            select * from stu;

 3.4.2 增:添加数据

           向表中插入一行数据(所有列上的数据都插入) 

  insert into stu values(7,'jack','female',18,'FF is a good student!','1990-02-23 12:34:44');

向表中插入一行数据(部分列上的数据都插入) 

  insert into stu(stuNum,stuName,stuSex,stuAge) values(7,'jack','female',18);

一次插入多行数据

insert into stu values

(2,'mary','male',18,'AA is a good student!','1990-02-23 12:34:44'),

(3,'lucy','male',18,'BB is a good student!','1990-02-23 12:34:44'),

(4,'lily','female',18,'CC is a good student!','1990-02-23 12:34:44'),

(5,'smith','male',18,'DD is a good student!','1990-02-23 12:34:44'),

(6,'piter','female',18,'EE is a good student!','1990-02-23 12:34:44'),

(7,'jack','female',18,'FF is a good student!','1990-02-23 12:34:44'); 

 3.4.3 删除数据

删除部分数据

   delete from stu where stuNum>=6;

   delete
4000
from tbName [where 条件];

删除全部数据

       delete from stu; //删除表中的全部数据

       truncate stu;   //截断表中的数据  效率高

 3.4.4 改:修改表中的数据

* update 表名 set 字段名称1=值1, 字段名称2=值2... [where 条件];

* update stu set stuAge=20;  //更新所有人的年纪为20

* update stu set stuAge=20 where stuNum=5; //更新学号为5的学生的年龄

* update stu set stuName='jack' ,stuSex='female', stuAge=19 , stuSelf='jack is a good student' where stuNum=5;

    修改学号为5的学生的姓名为jack,性别为female,年龄为19,自我简介为”jack is a good student” 

3.5  DQL:查询表中的数据

   3.5.1 语法:

         select 字段名1 ,字段名2,..... From 表名 where [条件];  

   3.5.2 条件查询:

  =、!=、<>、<、<=、>、>=;

  BETWEEN…AND;

  IN(set);

  IS NULL;

  AND;

  OR;

  NOT;

      导入初始化语句 Init_Stu.sql 

-- select 字段名1,字段名2 .... FROM tableName where [条件];

-- 查询所有的学生信息    查询所有列

SELECT * FROM stu;   -- 效率比较低

SELECT stuId,stuNum,stuName,stuSex,stuAge,stuQQ,stuAddr,stuSkillScore,stuQualityScore FROM stu;  --相对上条语句效率高

-- 查询所有的学生的学号和姓名    查询部分列

SELECT stuNum,stuName FROM stu;

-- 查询所有男生的信息            1个限制条件

SELECT stuId,stuNum,stuName,stuSex,stuAge,stuQQ,stuAddr,stuSkillScore,stuQualityScore FROM stu WHERE stuSex='男';

-- 查询所有19岁男生的学号和姓名     2个限制条件   = and

SELECT stuNum,stuName FROM stu WHERE stuSex='男' AND stuAge=19;

-- 查询所有大于19岁男生的全部信息    2个限制条件  > && 

SELECT * FROM stu WHERE stuAge>19 AND stuSex='男';

-- 查询所有大于20岁或小于19岁同学的学号和姓名    or

SELECT stuNum,stuName FROM stu WHERE stuAge>20 OR stuAge<19;

-- 查询所有大于等于18岁同时小于等于21岁同学的学号和姓名  >=  <=    between and

SELECT stuNum,stuName FROM stu WHERE stuAge>=18 AND stuAge<=21;

SELECT stuNum,stuName FROM stu WHERE stuAge BETWEEN 18 AND 21;

-- 查询所有18岁的男生的全部信息或者年龄小于22岁的女生的全部信息    ||  ()

SELECT * FROM stu WHERE (stuAge=18 AND stuSex='男'  ) OR ( stuAge < 22 AND stuSex='女' )  ;

-- 查询不是19岁学生的信息 !

SELECT * FROM stu WHERE stuAge !=19;

-- 查询18岁,20岁,22岁的所有男同学的姓名和性别   in

SELECT stuName,stuSex FROM stu WHERE stuSex='男' AND (stuAge =18 OR stuAge = 20  OR stuAge =22);

SELECT stuName,stuSex FROM stu WHERE stuSex='男' AND stuAge IN(18,20,22);

-- 查询家乡不明确的学生的信息

--  select * from stu where stuAddr = null; -- 包含null值的查询,我们不用=

  SELECT * FROM stu WHERE stuAddr IS NULL; 

  3.5.3  模糊查询:

* like    

      * 通配符:

_:任意单个字符

%:任意多个字符

-- 查询姓"张"的学生的所有信息

SELECT  * FROM stu WHERE stuName LIKE '张%';

-- 查询所有河北的学生

SELECT  * FROM stu WHERE stuAddr LIKE '河北%';

-- 查询名字中包含a字符的学生的所有信息

SELECT  * FROM stu WHERE stuName LIKE '%a%';

-- 查询QQ号码中包含5的所有学生的姓名和性别

SELECT stuName,stuSex FROM stu WHERE stuQQ LIKE '%5%';

-- 查询姓名2个字符,结尾为"明"的学生的所有信息

SELECT * FROM stu WHERE stuName LIKE '_明';

  3.5.4字段控制

*  null参与的运算,结果还为空

* 使用ifnull解决

ifnull(字段名称,0):判断字段是否为null 如果为null 就替换为0

* 别名: as(也可以不用,使用空格)

* 去除重复记录:DISTINCT

  -- 查询所有学生的学号,姓名,性别,年龄,技能分,综合素质分,总成绩

  SELECT stuNum,stuName,stuSex,stuAge,stuSkillScore,stuQualityScore,(stuSkillScore + IFNULL(stuQualityScore,0))  FROM stu;

  -- 查询所有学生的学号,姓名,性别,年龄 要求显示结果集中的列名为中文  列的别名

  SELECT stuNum AS 学号,stuName 姓名,stuSex 性别,stuAge 年龄,stuSkillScore 技能分,stuQualityScore 综合素质分,(stuSkillScore + IFNULL(stuQualityScore,0)) 总成绩 FROM stu;

  -- 查询所有学生的家乡分布,去除多余选项

  SELECT DISTINCT stuAddr FROM stu;

    -- 查询所有学生的学号,姓名,性别,年龄,技能分,综合素质分,总成绩 表的别名

  SELECT s.stuNum,s.stuName,s.stuSex,s.stuAge,stuSkillScore,stuQualityScore,(stuSkillScore + IFNULL(stuQualityScore,0))  FROM stu s;

   

  3.5.5 排序:

* order by 字段名称 排序方式

* 排序方式:

* asc :默认值,升序

* desc:降序

* 聚合函数

聚合函数是用来做纵向运算的函数:

COUNT():统计指定列不为NULL的记录行数;

MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

     -- 查询学生的全部信息,以技能分降序排列    单条件排序

SELECT * FROM stu ORDER BY  stuSkillScore DESC;

-- 查询学生的全部信息,以技能分降序排列,技能分相同的条件下,以综合素质分降序排序   多条件排序

SELECT * FROM stu ORDER BY  stuSkillScore DESC ,stuQualityScore DESC ;

-- 查询学生的人数 

SELECT COUNT(*) FROM stu;       -- 效率低

SELECT COUNT(stuId) FROM stu;   -- 效率高

-- 查询学生的平均年龄,最大年龄,最小年龄

SELECT AVG(stuAge) 平均年龄 ,MAX(stuAge)  最大年龄 ,MIN(stuAge) 最小年龄 FROM stu;

 

 3.5.6 分组查询

  * group by 字段

* 注意:在查询的字段中,建议只写分组字段和聚合函数

  * 分组之后的条件筛选:having

        * where 和 having 区别?

      where 在分组前对数据进行过滤

having 在分组后进行过滤

-- 查看男生和女生的人数                  单条件分组

SELECT stuSex,COUNT(*) FROM stu GROUP BY stuSex

-- 查看不同年龄段男生和女生的人数        多条件分组

SELECT stuAge , stuSex,COUNT(stuId) FROM stu GROUP BY stuAge , stuSex;

-- 查看2015JavaEE学科男生和女生的人数   条件过滤之后再进行分组

SELECT stuSex,COUNT(stuId) FROM stu WHERE stuNum LIKE '2015JavaEE%' GROUP BY stuSex; 

-- 学习人数大于3个学员集中在哪些年龄    分组之后进行过滤

SELECT stuAge,COUNT(stuId) AS num FROM stu GROUP BY stuAge HAVING num>3;

 3.5.7. 时间日期函数

     * 获得当前日期+时间(date + time)函数:now()

* MySQL 获得当前时间戳函数:current_timestamp()

    * 获取指定时间的年份,月份 year() month() 

3.5.8 union all

 3.5.7多表查询

* 笛卡尔积:

DROP TABLE xx;

DROP TABLE yy;

CREATE TABLE XX(  aa INT,  bb  INT);

CREATE TABLE YY(  cc INT,  dd  INT );

INSERT INTO XX VALUE(1,1),(2,2);

INSERT INTO YY VALUE(3,3),(4,4);

SELECT * FROM XX;

SELECT * FROM YY;

SELECT * FROM xx,yy; --SQL 92语法

SELECT * FROM xx JOIN yy; --SQL 99语法

* 内连接:等值连接 = 

DELETE FROM xx;

DELETE FROM yy;

INSERT INTO XX VALUE(1,1),(2,2);

INSERT INTO yy VALUE(1,1),(3,3);

SELECT * FROM xx JOIN yy ON xx.aa=yy.cc;

* 外连接

                * 左外连接

                * 右外连接

SELECT * FROM XX LEFT JOIN YY ON xx.aa=yy.cc;

SELECT * FROM XX RIGHT JOIN YY ON xx.aa=yy.cc;

     * 自连接

                查询员工的姓名,职务以及上司的姓名.

SELECT e1.empName,e1.empSelf,e2.empName FROM emp e1 JOIN emp e2 ON e1.bossId=e2.empNum;

 

总结:我们开发的时候一般能够按照需求正确的建立好各种表即可,更改表结构的几率不是很多.重点是对数据的操作.

     所以咱们今天的重点就是: 

       * 创建仓库                                              

       * 创建表(正确的使用各种约束,正确的创建具有关联关系的表)  

       * 表中数据增删改查操作                                  

       * 多表查询是今天的重难点                                
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 java web MySQL