Mysql一

来源:互联网 发布:线切割hl绘图编程软件 编辑:程序博客网 时间:2024/06/07 07:02

SQL:结构化查询语言(Structured Query Language)。

  • SQL的作用:通过SQL来操作数据库。
  • SQL方言: 某种DBMS不只会支持SQL标准,而且还会有一些自己独有的语法,这就称之为方言!例如limit语句只在MySQL中可以使用

SQL语法

  • SQL语句可以在单行或多行书写,以分号结尾
  • 可使用空格和缩进来增强语句的可读性
  • MySQL不区别大小写,建议使用大写

SQL语句分类

  1. DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
    创建、删除、修改:库、表结构!!!
  2. DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
    增、删、改:表记录
  3. DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
  4. DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
    ddl:数据库或表的结构操作
    dml:对表的记录进行更新(增、删、改)
    dql:对表的记录的查询
    dcl:对用户的创建,及授权

数据库管理系统(DBMS)

  • 什么是DBMS:数据的仓库
    • 方便查询
    • 可存储的数据量大
    • 保证数据的完整、一致
    • 安全可靠
  • 常见DBMS:Orcale、MySQL、SQL Server、DB2、Sybase
  • DBMS = 管理程序 + 多个数据库(DB)

  • 应用程序与DBMS:应用程序使得DBMS来存储数据!

DDL


  • 数据库
    查看所有数据库:SHOW DATABASES
    切换(选择要操作的)数据库:USE 数据库名
    创建数据库:CREATE DATABASE databaseName
    删除数据库:DROP DATABASE dbName
  • 数据类型:
    • int:整型
    • double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,(不包含小数点)
    • decimal:浮点型,在表单钱方面使用该类型,因为不会出现精度缺失问题;
    • char:固定长度字符串类型; char(255),数据的长度不足指定长度,补足到指定长度!
    • varchar:可变长度字符串类型;
    • text(clob):字符串类型;
    • blob:字节类型;
    • date:日期类型,格式为:yyyy-MM-dd;
    • time:时间类型,格式为:hh:mm:ss
    • timestamp:时间戳类型;

表的操作
CREATE TABLE 表名
列名 列类型,
列名 列类型,

列名 列类型
);

  • 查看当前数据库中所有表名称:SHOW TABLES;
  • 查看表结构:DESC 表名;
  • 删除表:DROP TABLE 表名;
  • 修改表:前缀:ALTER TABLE 表名
    • 修改列类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在数据)
      • ALTER TABLE 表名 MODIFY 列名 列类型;
    • 修改列名
      • ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
    • 删除列
      • ALTER TABLE 表名 DROP 列名;
    • 修改表名称
      • ALTER TABLE 原表名 RENAME TO 新表名;
    • 添加列
      • alter table 表名
        add (
        列名 列类型,
        列名 列类型,

        列名 列类型
        )

    DML(数据操作语言,它是对表记录的操作(增、删、改))

    • 插入数据
      • INSERT INTO 表名(列名1,列名2, …) VALUES(列值1, 列值2, …);
        在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应;
        没有给出要插入的列,那么表示插入所有列的 值的顺序,必须与表创建时给出的列的顺序相同。
    • 修改数据
      UPDATE 表名 SET 列名1=列值1, 列名2=列值2, …WHERE 条件(条件可选的):
      运算符:=、!=、<>、>、<、>=、<=、BETWEEN…AND、IN(…)、IS NULL、NOT、OR、AND
      注意:NULL之前应该是 IS 并不是=

    • 删除数据
      DELETE FROM 表名 [WHERE 条件];
      在数据库中所有的字符串类型,必须使用单引,不能使用双引!
      日期类型也要使用单引!

    DCL

    创建用户:
    CREATE USER 用户名@IP地址 IDENTIFIED BY ‘密码’;
    用户只能在指定的IP地址上登录
    CREATE USER 用户名@’%’ IDENTIFIED BY ‘密码’;
    用户可以在任意IP地址上登录
    给用户授权
    GRANT 权限1, … , 权限n ON 数据库.* TO 用户名@IP地址

    例如 GRANT ALTER,DROP,INSER,SELECT ON dbName.* TO user1@localhost;

    • GRANT ALL ON 数据库.* TO 用户名@IP地址;
      给用户分派指定数据库上的所有权限

    撤销授权
    REVOKE 权限1, … , 权限n ON 数据库.* FROM 用户名@IP地址;
    例如 REVOKE CREATE,ALTER ON dbName.* FROM
    user1@localhost;
    查看权限
    SHOW GRANTS FOR 用户名@IP地址
    删除用户
    DROP USER 用户名@IP地址
    注意:一个项目创建一个用户!一个项目对应的数据库只有一个;这个用户只能对这个数据库有权限,其他数据库你就操作不了了!

    DQL 数据查询语言( 查询不会修改数据库表记录!)


    • 基本查询
      • 字段(列)控制
        查询所有列: SELECT * FROM 表名;
        查询指定列: SELECT 列1 , 列2, … FROM 表名;
      • 去重复查询(重复仅记录一次)
        SELECT DISTINCT 列1 , 列2, … 列N FROM 表名;
      • 列运算( 数量类型的列可以做加、减、乘、除运算)
        SELECT sal*1.5 FROM emp
        转换NULL值
        有时需要把NULL转换成其它值,例如com+1000时,如果com列存在NULL值,那么NULL+1000还是NULL,而我们这时希望把NULL当前0来运算
        SELECT IFNULL(comm, 0)+1000 AS 奖金 FROM emp;
        其中AS可以省略
      • 条件控制
        条件查询
        SELECT语句也可以使用WHERE子句来控制记录。
        SELECT empno,ename,sal,comm FROM emp WHERE sal > 10000 AND comm IS NOT NULL
        模糊查询
        当你想查询姓张,并且姓名一共两个字的员工时,这时就可以使用模糊查询
        SELECT * FROM table1 WHERE ename LIKE ‘张_’
        模糊查询需要使用运算符:LIKE,其中_匹配一个任意字符,注意,只匹配一个字符而不是多个.
        // 姓名由3个字组成的员工*/。
        SELECT * FROM emp WHERE ename LIKE ‘_‘;

    其中%匹配0~N个任意字符
    SELECT * FROM emp WHERE ename LIKE ‘%阿%’;
    姓名以阿开头和结尾的员工也都会查询到

    • 排序(ORDER BY)
      • 升序
        SELECT * FROM emp ORDER BY sal ASC;
        按sal排序,升序. 其中ASC是可以省略的
      • 降序
        SELECT * FROM emp ORDER BY comm DESC;
        按comm排序,降序, 其中DESC不能省略
      • 使用多列作为排序条件
        SELECT * FROM emp ORDER BY sal ASC, comm DESC;
        使用sal升序排,如果sal相同时,使用comm的降序排
    • 聚合函数( 聚合函数用来做某列的纵向运算。)

      • COUNT
        SELECT COUNT(*) FROM emp;
        计算emp表中所有列都不为NULL的记录的行数
        SELECT COUNT(comm) FROM emp;
        云计算emp表中comm列不为NULL的记录的行数
      • MAX
        SELECT MAX(sal) FROM emp;
        查询最高工资
      • MIN
        SELECT MIN(sal) FROM emp;
        查询最低工资
      • SUM
        SELECT SUM(sal) FROM emp;
        查询工资合
      • AVG
        SELECT AVG(sal) FROM emp;
        查询平均工资
    • 分组查询( GROUND BY)
      分组查询是把记录使用某一列进行分组,然后查询组信息。
      例如:查看所有部门的记录数。
      SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;
      –> 使用deptno分组,查询部门编号和每个部门的记录数
      组条件( HAVING表示筛选之后再次筛选)
      以部门分组,查询每组记录数。条件为记录数大于3
      SELECT deptno, COUNT() FROM emp GROUP BY deptno HAVING COUNT() > 3;

    • limit子句(方言)
      LIMIT用来限定查询结果的起始行,以及总行数。
      例如:查询起始行为第5行,一共查询3行记录
      SELECT * FROM emp LIMIT 4, 3;
      其中4表示从第5行开始,其中3表示一共查询3行。即第5、6、7行记录。

    1 0