zoukankan      html  css  js  c++  java
  • MYSQL基础知识总结

    Mysql概述

    MySql是一种关系型数据库

    连接到mysql数据库:mysql -u root -p

    什么是SQL:结构化的查询语句

    SQL分类:

      DDL:数据定义语言

       * create,alter,drop...

      DML:数据操纵语言

        * update,insert,delete

      DCL:数据控制语言

        * grant,if..

      DQL:数据查询语言

        * select

    数据库增删查改

    创建数据库:语法:create database 数据库 [character 字符集 collate 校对规则]

    查看数据库:

      查看所有数据库:show databases;

      查看某个数据库:show create database 数据库名;

    修改数据库:语法:alter database 数据库名 character 字符集 collate 校对规则

    删除数据库:语法:drop database 数据库名;

    切换数据库:use 数据库名;

    查看当前使用数据库:select database();

    数据库表操作

    创建表语法:

      create table 表名 (

          字段名 类型(长度) 约束,

          字段名 类型(长度) 约束,

          字段名 类型(长度) 约束

      );

    数据类型:

     Java类型:             MySQL:

      byte/short/int/long   tinyint/smallint/int/bigint

      String                char/varchar

                                * 区别?char是固定长度的字符串,varchar可变长度的字符串.

                                * char(8) 和 varchar(8)

                                    * 如果插入一个字符串hello 插入到char 那么 插入hello   .插入到varchar中 插入hello

     float                  float

     double                 double

     boolean            bit

     Date                   date/time/datetime/timestamp

                            * datetime和timestamp都是既有日期又有时间的日期类型

                                * 区别? datetime需要使用外部传入的日期.如果没传这个值就是Null. timestamp会使用系统当前的时间作为这个值的默认值.

     文本文件                Text

     二级制文件               BLOB

    ***** Oralce使用CLOB/BLOB

    ***** MYSQL中除了字符串类型需要设置长度其他的类型都有默认长度******

    • 约束:

    单表约束:

    * 主键约束:primary key (默认就是唯一非空的)

    * 唯一约束:unique

    * 非空约束:not null

     

    • 创建一个表:
    • ***** 创建表之前先选择数据库:use 某个数据库;

    create table employee(

        eid int primary key auto_increment,

        ename varchar(20) not null,

        email varchar(30) unique,

        birthday date,

        job varchar(20),

        resume text

    );

    【表的查看】

    • 查看数据库中有哪些表:

    * show tables;

    • 查看表结构:

    * desc 表名;

    【表的删除】

    • 表的删除:

     drop table 表名;

    【表的修改】

    • 修改表添加列:

    * alter table 表名 add 列名 类型(长度) 约束;

        * alter table employee add image varchar(50);

    • 修改表删除列:

    * alter table 表名 drop 列名;

        * alter table employee drop job;

    • 修改表的列的类型长度及约束:

    * alter table 表名 modify 列名 类型(长度) 约束;

        * alter table employee modify image varchar(80) not null;

    • 修改表的列名

    * alter table 表名 change 旧列名 新列名 类型(长度) 约束;

        * alter table employee change image eimage varchar(60);

    • 修改表名

    * rename table 旧表名 to 新表名;

        * rename table employee to user;

    • 修改表的字符集:

    * alter table 表名character set 字符集;

        * alter table user character set gbk;

    *******使用SQL操作数据库中的表的记录(对表的记录的CRUD的操作)******

    【插入记录】

    • 语法

    * insert into 表名 (列名,列名,...) values (值1,值2,...);     ---插入指定列的值

    * insert into 表名 values (值1,值2,...);                    ---插入所有列的值

     

    • 注意事项:

    列名的个数与值的个数对应.

    列的类型与值的类型对应.位置也要对应.

    列的类型如果是字符串或者日期,写值的时候使用单引号将值引起来.

    插入的值的最大长度不能超过列的最大长度.

    【修改记录】

    • 语法:

    * update 表 set 列名=值,列名=值 [where 条件];

    • 注意事项:

    列名和值类型也要一致.

    值不能超过列的最大长度.

    值是字符串或日期,需要使用单引号.

    • 练习:

    修改employee表中所有记录的job为WORKER

        * update employee set job='WORKER';

    修改employee表将name为aaa的邮箱改为aaa@163.com

        * update employee set email = 'aaa@163.com' where ename = 'aaa';

    修改employee表将name为bbb的邮箱改为bbb@163.com同时修改jobHR

        * update employee set email = 'bbb@163.com' , job='HR' where ename='bbb';

    【删除记录】

    • 语法:

    * delete from 表 [where 条件];

    • 注意事项:

    删除表中的一行记录,不能删除某列值

    如果没有条件删除表中的所有列.

    • 练习:

    删除id为8的记录:

        * delete from employee where eid = 8;

    删除所有记录:

        * delete from employee;

    • 删除表中的所有记录truncate table 表名  和 delete from 表  区别?

    区别:

        * truncate table 删除表的记录:将整个表删除掉,重新创建一个新的表.truncate属于DDL.

        * delete from 删除表的记录:一条一条进行删除. delete属于DML

            * 事务管理 只能作用在DML语句上.如果再一个事务中使用delete删除所有记录,可以找回.

    【基本查询】

    • 查询语句:

    * select [distinct] *|列名 from 表 [where 条件];

    【条件查询】

    • where语句后面可以加:

    条件的关键字:

    = , > , >= , <, <= , <>

    like中可以使用占位符: _ 和 %  :下划线匹配一个字符, %:可以匹配任意多个字符.

    【排序查询】

    `order by 对数据进行排序.默认升序. (asc升序,desc降序)

    【聚合函数】

    `sum()   求和

    `count()  统计

    `max()  最大值

    `min()  最小值

    `avg() 平均数

    【分组】

      group by

    * 交叉连接

        * select * from A,B;   --- 获得的是两个表的笛卡尔积.

    * 内连接: inner join -- inner 可以省略

        * 显式内连接:select * from A inner join B on 条件;

        * 隐式内连接:select * from A,B where 条件;

    外连接:outer join -- outer 可以省略

        * 左外连接:left outer join  -- select * from A left outer join B on 条件;

        * 右外连接:right outer join -- select * from A right outer join B on 条件;

    多表查询的子查询

    • 一个SQL语句查询的过程中需要依赖另一个查询语句.

    SELECT * FROM customer c,orders o WHERE c.cid = o.cid AND  c.cid IN (SELECT cid FROM orders WHERE addr LIKE '海淀%');

  • 相关阅读:
    MySQL注入总结
    使用JavaScript扫描端口
    dvwa+xampp搭建显示乱码的问题:解决办法
    精读《12 个评估 JS 库你需要关心的事》
    TinyMCE上传图片word
    xhEditor上传图片word
    JAVA大文件(100G以上)的上传下载实现技术
    JAVA大文件(1G以上)的上传下载实现技术
    java 支持 超大上G,多附件上传问题
    java 支持 超大上G,多附件上传方法
  • 原文地址:https://www.cnblogs.com/yanglang/p/6797008.html
Copyright © 2011-2022 走看看