JavaWeb基础—MySQL入门小结

一、数据库概述

  RDBMS:关系型数据库管理系统 == 管理员(manager)+仓库(database)

  常见数据库:  

        Oracal(神喻):甲骨文
      MySQL: 归于甲骨文旗下(高版本系统已经开始收费)
      DB2: IBM旗下
      SQL Server:微软旗下

二、MySQL安装与卸载

  安装MySQL:(安装目录不能有空格或者中文)
        选择几个next后选择custom(自定义),一般安装路径不用自己折腾,就把前面C盘的盘符改成D F等就OK
        安装完后进行配置MySQL(精细配置),没有自动弹出找安装路径的bin目录下的Config开始配置
        先选择开发者(内存占用低)、选择多用途、表空间最好不改,访问上限自定义、后项不变
        然后选择编码(最后一个自定义utf8 没有-)
        密码若出现三个框框,说明之前没有卸载干净!
        最后四个对号才说明通过,否则重新卸载重装 root root
  卸载MySQL:先停止服务(cmd或服务里点击停止)。
        控制面板里添加和卸载程序进行卸载
        再找到安装目录删除整个MySQL文件夹
        再进C盘 C://programFile/MySQL删除数据目录

  再清理注册表,运行regedit,找MACHINE/SYSTEM/CurrentcontrolSet/Services
         找MACHINE/SYSTEM/controlSet001/Services
        找MACHINE/SYSTEM/controlSet002/Services
        找到后找到MySQL,删除整个目录

  MySQL目录:
    Service5.5的bin目录下mysqld 服务里查找有它则正常启动,服务端程序
    mysql 客户端程序(可多开)
    my.ini 配置信息(默认端口3306)
    data目录,数据库的文件信息

  开启net start mysql
  登陆mysql -u -p进行登陆
  退出 exit或者quit

三、SQL入门

  【SQL】结构化查询语言,用来操作服务器的(ISO国际标准化组织,熟悉的8859-1...)
  注释:除了 SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的私有扩展!
  然后各大数据库实现的时候还留了一些"方言"

  语法要求:
    1.单行或者多行,分号结尾
    2.MySQL不区分大小写,但建议大写
  分类
    DDL(****):(Definition)数据库定义语言
      :建、删、改表
    DCL(****):(Control)数据库控制语言
      :定义访问权限和安全级别
    DML(****):(Manipulation)数据库操作语言
      :增删改等对表记录的操作
    DQL(**):(不是标准):(Query)数据库查询语言
      :对记录的查询

  1.DDL:
    一、数据库的操作[]内为可选操作(实际选择时不要打这个方括号[])
    查看所有数据库:SHOW DATABASES
    切换数据库:USE 数据库名称
    创建数据库:CREATE DATABASE 新数据库名 [CHARSET=UTF8]
    删除数据库:DROP DATABASE 将删的数据库

    二、数据类型
    int 整型
    double 浮点型 double(5,2):最多5位,小数点后必须2位
    decimal 浮点型(十进制意思) 对十进制运算精确,和钱相关推荐使用
    char 固定长度字符串 char(255) 数据长度不足指定长度,会自动补足到固定长度
    (无论你多胖,一人一把椅子,就占了一个位置)
    varchar 可变长度字符串 varchar(255) 与上面相对,不会自动不足。
    但需要至少单独花一个字节记录长度
    text(clob) 字符串类型,MySQL的方言,对应标准中的clob
    分为很小、小、中、大类型,可存储超大的字符串
    blob 二进制的大字节
    data 日期类型 yyyy-MM-dd
    time 时间类型 hh:mm:ss
    timestamp 时间戳类型,既有日期,又有时间

    三、对表的操作
    创建表(记得进入数据库USE) CREATE TABLE 表名(
    名称 类型,
    名称 类型,
    ...
    )
    查看表结构 DESC 表名
    删除表 DROP 表名
    修改表 ALTER TABLE 表名 ADD ();其它MODIFY等类同

  

   2.DML:【在数据库中字符串类型甚至时间类型都需要使用‘‘,不使用双引号,字段不要使用,VALUES使用】
    一、增加记录
    INSERT INTO 表名 (列名1,列名2) VALUES(‘值1‘,‘值二‘)
    没有给定的列默认值为NULL
    没有给出列名直接给出VALUES,默认所有列。(不推荐)
    二、修改记录
    UPDATE 表名 SET 列名 = 列值 WHRER 列名= 列值
    UPDATE stu SET sex = ‘female‘ WHERE sname = ‘zhangsan‘ OR ...注意单引号
    BETWEEN ... AND,当然也可以用>= and <=
    IN(‘‘,‘‘)后面跟一集合,满足一即可
    判断为空不能用= 必须用is ,比如age = null;本身就是false,必须用age is null
    若不加条件则为所有
    三、删除记录
    DELETE FROM 表名 WHERE 条件

   3.DCL;一般一个项目创建一个用户
    一、创建用户
    CREATE USER 用户名@IP地址 IDENTIFIED BY ‘密码‘
    登陆需要把上一个退出exit(quit)
    若改成 用户名@‘%‘ 则用户不受IP限制
    二、给用户授权
    GRANT 权限1...权限n(select,delete,update...甚至all等的权限) ON 数据库.* TO 用户名@IP地址
    三、撤销授权
    REVOKE 权限1...权限n(select,delete,update...甚至all等的权限) ON 数据库.* FROM 用户名@IP地址

    四、查看权限
    SHOW GRANTS FOR 用户名@IP地址
    五、删除用户
    DROP USER 用户名@IP地址

   4.DQL:(只做查询的事,不做数据库的改动操作等)
    一、字段控制:SELECT 列 FROM 表 WHERE 条件
    先把三个关键字列出,对应填入列名、表名等
    查询所有列:SELECT * FROM emp;
    查询指定列:SELECT 列1,列2 FROM emp
    完全重复的记录只记录一次,SELECT DISTINCT job FROM emp(查询一列的时候可能用到)
    列运算:原始(+一行对比)SELECT *,sal FROM emp
    工资涨50% SELECT *,sal*1.5 FROM emp;
    由于任意值+NULL都为NULL,使用一个if处理NULL
    SELECT *,sal+ifnull(con,0) FROM emp;若为NULL,当作0处理
    MySQL 不支持+进行字符串的拼接,连接使用CONCAT(name,id)函数
    SELECT CONCAT(name,id) as ‘别名‘ FROM emp;直接空格也表示后面的是别名

    条件查询:注意与或非的选择 AND OR 等 注意中文的和、还有翻译成OR等的,注意斟酌
    SELECT * FROM emp WHERE sal>1000;
    SELECT * FROM emp WHERE con IS NOT NULL  //查询不符合某些结果的直接在WHERE 后面取个反 WHERE NOT ...
    SELECT * FROM emp WHERE job IN(‘‘,‘‘,...);  //查询一列的条件考虑
    模糊查询:关键字 LIKE 注意两个特殊字符_ %
    SELECT * FROM emp WHERE ename LIKE ‘张_‘
    记住下划线,一个下划线表示张后面再加一个字符。张__
    %匹配任意个字符 如查名字末尾带刚的 LIKE ‘%刚‘ 上同理
    灵活使用,如查询2000年入职的员工,模糊查询使用2000-开头的
    SELECT * FROM emp WHERE time LIKE ‘2000-%‘;
    排序:关键字 ORDER BY 排序列 如:ORDER BY sal
    升降序 默认升序
    升序 ORDER BY sal ASC
    降序 ORDER BY sal DESC

    多列排序(首列未出结果)
    SELECT * FROM emp ORDER BY sal ASC,con DESC

    二、聚合函数纵向运算,工资总和等)
    COUNT 计数函数(NULL不计数,*表示不全为NULL的记录值)
    SELECT COUNT(sname) FROM emp;
    SUM 求和函数(NULL当0处理,处理不了的也当0处理)
    SELECT SUM(sal) FROM emp;
    MAX MIN 求最值函数
    AVG 求平均

    三、分组查询 关键字GROUP BY ,一般与聚合函数合起来使用才有意义
    查询的必须是组信息,查询各个部门,每个部门等的联想分组,使用别名
    关键字的先后排序
    SELECT
    FROM
    WHERE 查询数据
    HAVING 筛选数据
    ORDER
    SELECT 分组列,聚合函数 聚合函数 ... FROM emp GROUP BY 分组列
    SELECT job,count(*) 别名 FROM emp GROUP BY job;
    可以在分组前进行一些条件的筛选 WHERE
    求显示工资大于10000的按职业划分的部门的数量
    SELECT job,count(*) FROM emp WHERE sal>10000 GROUP BY job;
    还可以加一些分组后的条件,要求显示工资大于10000的人数不低于2人的部门信息
    SELECT job,count(*) FROM emp WHERE sal>10000 GROUP BY job HAVING COUNT(*)>=2;

    5.limit MySQL的方言(见分页查询)
    LIMIT 限定查询的起始行以及总行数(0起始)
    SELECT * FROM emp LIMIT 5,8 第6行开始查,要8行
    每页8行,第17页
    SELECT * FROM LIMIT (17-1)*8,8

  MySQL编码问题:
    查看编码(DOS下):SHOW VARIABLES LIKE ‘char%‘; 查看以char开头的变量
      要注意的编码:client 客户端 结果集 results
    设置临时编码:SET character_set_client = utf8;
      SET character_set_client = utf8;
      但是每次关完窗口就又回去了
    设置永久编码:配置文件的修改 my.ini
      [client]

      port=3306

      [mysql]

      default-character-set=utf8

      client results connection三个都变了
    修改完后重启完成配置信息的生效

  MySQL的数据备份与恢复:
    数据库->sql语句
    sql->数据库
    核心就是数据库与SQL脚本的互转
    使用命令行:(无需登录,下面已经登陆了) 注意不要加:
    备份:mysqldump -u -p -h 数据库名>生成的SQL脚本路径
    恢复:mysql -u -p -h 数据库名<SQL文件路径
    注意<>的区分,恢复的是数据库的内容,可以新建数据库恢复内容
    也可以使用登陆后的source命令
    source SQL文件路径 如:source c:/1.sql

  约束:(加在列上约束列上的)
    主键约束(唯一标识)
      **唯一**
      **非空**
      **被引用**

    创建主键 CREATE TABLE stu (
      name char(20) PRIMARY KEY,
        ...
    或者
    PRIMARY KEY(name);
    )
    修改主键:ALTER TABLE 表名 ADD PRIMARY KEY(主键);

    删除主键:ALTER TABLE 表名 DROP PRIMARY KEY

    主键自增长:CREATE TABLE 表名(
      id INT PRIMARY KEY AUTO_INCREMENT
      )
    自然主键(身份证号) VS 代理主键(ID) 为了保证逻辑上的正确 不妨使用UUID作为主键

    非空约束
    name INT NOT NULL 非空但是可重复
    唯一约束
    name INT UNIQUE

  概述模型、对象模型、关系模型
    概念模型:在Java中称为实体类
    实体之间存在着关系:
      1对1:不常见,从表的主键即是外键
      1对多:常见 需要建立一张关系表,作为专门存外键的
      多对多
  双向关联

    外键必须引用主键 (另外一张表的主键值)
    外键可以重复
    外键可以为空(刚报名的学生还没班级)
    总之外键需有一个依赖的表,当然这个表可以是本身

    创建外键的语句

     foreign key(o_buyer_id) references s_user(u_id),      #外链到s_user表的u_id字段

    更为规范的推荐写法是给外键起个名字:

    CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid)

  多表查询:

    多表查询字段都应该使用表进行选中 e.ename d.deptno
    多注意别名的选取,注意IFNULL的情况
    条件一定切记去除笛卡尔积

      1.合并结果集(了解)
      2.连接查询
      3.子查询

  1.合并结果集
    要求两表列类型和列数量要一样,即两表结构要相同
    使用关键字UNION ALL 不加ALL完全相同的结果集会被合并
    SELECT * FROM ab;
    UNION ALL
    SELECT * FROM cd;
  2.连接查询
    1.内连接

    方言:SELECT * FROM 表1 别名1,表2,别名2 ,生成笛卡尔积的表(乘积效果的表)
    没用信息太多,叫条件去除 WHERE 别名1.depto=别名2.depto
    记得多表带个前缀
    标准形式【推荐】:SELECT * FROM 表1 别名1 INNER JOIN 表2 别民2 ON 别名1.xx=别名2.xx
    (标准的使用ON,链了一张表马上用ON),基本是见名知意
    自然连接:SELECT * FROM 表1 别名2 NATURAL JOIN 表2 别名2

大家也都知道,连接查询会产生无用笛卡尔积,我们通常使用主外键关系等式来去除它。而自然连接无需你去给出主外键等式,它会自动找到这一等式:

l 两张连接的表中名称和类型完成一致的列作为条件

  2.外连接
    左外连接,以左为主,不满足条件时使用NULL补位,当然可以使用IFNULL函数替换NULL值
    SELECT a.aid,IFNULL(c.cid,‘无ID‘) FROM ab a LEFT OUTER JOIN cd c ON a.aid=c.cid;
    SELECT * FROM 表1 别名1 LEFT OUTER JOIN 表2 别名2 ON 别名1.xx = 别名2.xx
    右外连接,右表为主
    右 RIGHT 外OUTER 连接JOIN 条件ON
    全外连接 通过合并结果集,合并左外右外 使用UNION
  3.子查询
    不知道另外一张表的信息,通过子查询解决
    一条SQL语句中有多个SELECT关键字,就是二次查询
    可以出现的位置:FROM 后(查询结果还是一张表) WHRER后
    例:查询工资最高的人的全部信息(依照之前的,又不能在条件中使用聚合函数)
    SELECT * FROM WHERE sal=MAX(sal);错误
    SELECT * FROM emp WHERE sal=(SELECT MAX(sal FROM emp));
    例:大于平均工资的全部员工
    SELECT * FROM emp WHERE sal>(SELECT AVG(sal) FROM emp);

    查询结果是一列多行的结果集时,在查询结果前可以加关键字ALL ANY等

    SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE name=‘张三‘);少见

    单表的多次查询 自连接
    SELECT * FROM emp e1,emp e2 再利用条件去除笛卡尔积

    查询三步走:列(哪些列) 表(哪些表) 条件(什么条件)

时间: 2024-11-05 11:48:39

JavaWeb基础—MySQL入门小结的相关文章

JavaWeb基础—JDBC入门

一.什么是JDBC JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成 二.JDBC原理概述 JDBC原理:其实就是一组规范(就是对类的规范,也就是接口),各大数据库厂商对其实现 这些所说的驱动类也就是JDBC的实现 但是官方的实现并不是特别完整(毕竟免费),存在第三方的实现 查看连接的几句代码,似乎并没有什么紧密联系.第一句的Class.forName() 注册驱动 看下面的另外的相同效果的代码 com.mysql.jdbc.Driv

JavaWeb基础—CSS学习小结

重点记忆:四种结合方式 三种基本选择器 1.CSS:层叠样式表 相当于皮肤 提高了可维护性.样式与内容分离(注释格式/* */) 2.CSS与HTML结合的四种方式:内联式.嵌入式.外部式  1.每个标签上都有一个style[属性]来控制 sytle="key:value;key:value" <div style=""> 2.使用style标签:<style type="text/css">div{key:value}&

JavaWeb基础—JS学习小结

JavaScript是一种运行在浏览器中的解释型的编程语言一.简介js:javascript是基于对象[哪些基本对象呢]和和事件驱动[哪些主要事件呢]的语言,应用在客户端(注意与面向对象的区分) js的三大特点: 交互性:信息的动态交互 安全性:不能访问本地磁盘的文件 跨平台性:能支持js的浏览器都能运行 JavaScript 对大小写敏感 与java的区别:(只是长得像而已,雷锋&雷峰塔)  1.不同公司开发的语言,java:Oracl js:网景公司 2.java:面向对象 js:基于对象(

JavaWeb基础—XML学习小结

一.概述 是什么? 指可扩展标记语言 能干什么? 传输和存储数据 怎么干? 需要自行定义标签. XML 独立于硬件.软件以及应用程序二.XML简介:可扩展标记语言,都是标记语言,通过标签来操作 具有拓展性,标签为预定义,用户自定义标签(包括自己定义中文标签) HTML:显示数据. XML: 存储数据.(小型数据库) 两个版本:1.0(主流) 1.1(兼容性差) 用途:1.不同系统之间数据的传输(qq发送数据为例) 2.表示生活中有关系的数据 3.经常用在配置文件三.XML的语法: 1.文档声明

马哥教育第二十三MySQL基础应用入门

1.MySQL基础应用入门                安装mariadb-10.0.19:                      vim /usr/local/mariadb-10.0.19-linux-x86_64/INSTALL-BINARY                                               cd /usr/local                      ln -sv mariadb-10.0.19-linux-x86_64 mysql

SQL 基础使用入门(一): SQL简述及DDL语句

SQL 简述 SQL 是 Structure Query Language(结构化查询语言)的缩写,它是关系模型数据库的一门应用语言.经长期发展,SQL语言标准日趋完善,SQL已然成为一种十分受欢迎的多平台交互底层会话语言. SQL语句主要可以划分为以下三个类别: DDL(Data Definition Language)数据定义语言:用于定义不同的数据段.数据库.表.视图.索引等数据库对象.常用语句关键字主要包括create.drop.alter等. DML(Data Manipulation

21分钟 MySQL 入门教程 &amp;&amp; mysql数据类型

转自:http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#c1 http://www.cnblogs.com/zbseoag/archive/2013/03/19/2970004.html 21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据类型 五.使用MySQL数据库 登录

MySQL入门(三)

写了两篇<MySQL入门>以后我发现,写书的人还是都挺有本事的,起码人家知道怎么编排自己想讲的知识点,我实在是不知道该先说那里后说哪里,那我就想到什么讲什么吧. 一 写SQL 其实我是不想写有关SQL的部分的,因为这个部分其实很简单,基本上大学只要好好听听数据库概论这门课基本上都能写满足功能的SQL,但是后来想想,SQL其实是人和数据库交互的一种接口,不会SQL确实是不可以的,写的不好感觉不出数据库有多么的强大,甚至有可能会让人产生出数据库慢的坏印象. MySQL作为most popular的

MySQL 入门教程

MySQL的相关概念介绍 MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格: 表头(header): 每一列的名称; 列(row): 具有相同数据类型的数据的集合; 行(col): 每一行用来描述某个人/物的具体信息; 值(value): 行的具体信息, 每个值必须与该列的数据类型相同; 键(key):