zoukankan      html  css  js  c++  java
  • MySQL基本操作

    一、数据库

    1、MySQL:关系型数据库,即使用二维表格来储存数据。

    2、常见数据库

    • Oracle:甲骨文(占用率最高);
    • DB2:IBM;
    • SQL Servlet:微软;
    • Sybase:赛尔斯;
    • MySQL:甲骨文;

    3、RDBMS(Relational database management system):关系型数据库管理系统。

    二、SQL:

    1、SQL概述:

    • SQL 指结构化查询语言(Structured Query Language)。
    • SQL 使我们有能力访问数据库
    • SQL 是一种 ANSI 的标准计算机语言,SQL99。
    • SQL方言,某种DBMS不只会支持SQL标准,而且还有一些自己独有的语法,称之为方言,例如limit语句只在MySQL中可以使用。

    2、SQL语法

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

    3、SQL语句分类

    ①SQL 中最重要的 DDL ( Data Definition Language 数据定义语言)语句:

    用来定义数据库对象(库、表、列等),创建、删除、修改库、表结构。

    ② SQL 的 DML(Data Manipulation Language 数据操作语言 ) 语言

    用来定义数据库记录(数据),增、删、改表记录;

    ③SQL的DCL(Data Control Language 数据控制语言)语言:用来调用访问权限和安全级别;

    ④SQL的DQL(Data Query Language 数据查询语言)语言:用来查询记录(数据);

    三、DDL语句

    1、数据库

    • 查看所有数据库:SHOW DATABASES;
    • 切换(选择要操作的)数据库:USE 数据库名;
    • 创建数据库:CREATE DATABASE IF NOT EXISTS mydb1 CHARSET=utf8;
      • CREATE DATABASE mydb1 
    • 删除数据库:DROP DATABASE [IF EXISTS] mydb1;
      • DROP DATABASE mydb1;
    • 修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8;

    2、数据类型(列类型)

    • int:整型
    • double:浮点型,例如double(5,2)表示最多5位,其中必须有两位小数,即最大值为999.99;
    • decimal:浮点型,在表单前方面使用该类型,因为不会出现精度缺失问题;
    • char:固定长度字符串类型,如char(255),数据的长度不足指定长度,补足道指定长度。
    • varchar:可变长度字符串类型,varchar(65535),张三
    • text(clob):字符串类型
        • 很小
      • blob:字节类型:
        • 很小
    • date:日期类型,格式为:yyyy-MM-dd;
    • time:时间类型,格式为:hh:mm:ss;
    • timestamp:时间戳类型;

    在数据库中所有的字符串类型,必须使用单引号,不能使用双引号。日期类型也要使用单引号。

    3、表

    • 创建表:

    CREATE TABLE [IF NOT EXISTS] 表名(

       列名  列类型,  

         列名  列类型,

    .......

          列名  列类型

    );

    • 查看当前数据库中所有表名称:SHOW TABLES;
    • 查看指定表的创建语句:SHOW CREATE TABLE 表名;
    • 查看表结构:DESC 名;
    • 删除表:DROP TABLE 表名:
    • 修改表:前缀:ALTER TABLE 表名
      • 修改之添加列:

    ALTER TABLE 表名 ADD (

      列名 列类型,

          列名 列类型,

      .......

      列名 列类型

    );

      • 修改之修改列类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在数据):ALTER TABLE 表名 MODIFY 列名 列类型;
      • 修改之修改列名:ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
      • 修改之删除列:ALTER TABLE 表名 DROP 列名;
      • 修改表名称:ALTET TABLE 原表名 RENAME TO 新表名;

    四、DML语句

    DQL:SELECT * FROM 表名;

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

    1、插入数据

    • INSERT INTO 表名(列名1,列名2,.....)VALUES(列值1,列值2,….);
      • 在表名后给出要插入的列名,其他没有指定的列等同于插入null值,所有插入记录总是插入一行,不可能是半行。
      • 在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应
    • INSERT INTO 表名 VALUES(列值1,列值2)
      •  没有给出要插入的列,那么表示插入所有列。
      •  值的个数必须是该表列的个数。
      •  值的顺序,必须与表创建时给出的列的顺序相同。

    2、修改数据

    • UPDATE 表名 SET 列名1=列值1,列名2=列值2,.... [WHERE 条件]
    • 条件(条件可选的):
      • 条件必须是一个boolean类型的值或表达式:UPDATE t_person SET sex=‘男’,age=age+1 WHERE sid=‘1’;
      • 运算符:=、!=、<>、>、<、>=、<=、BETWEEN.....AND、IN(.....)、IS NULL、NOT、OR、AND
      •  UPDATE stu SET age=36 WHERE name in('zhangsan','lisi'); 
      •   UPDATE stu SET age=10 WHERE age IS NULL; 

    3、删除数据

    • DELETE FROM 表名 WHERE 条件;
    • 如果不加添加则删除整个表。
    • TRUNCATE TABLE 表名:TRUNCATE是DDL语句,它先删除drop该表,再create该表,而且无法撤销。

    五、DCL

    一个项目创建一个用户,一个项目对应的数据库只有一个。

    这个用户只能对这个数据库有权限,其他数据库你就操作不了。

    1、创建用户

    • CREATE USER 用户名@IP地址 IDENTIFIED BY '密码';
      • 用户只能在指定的IP地址上登录。
    mysql> CREATE USER zhangsan@localhost IDENTIFIED BY '123';
    Query OK, 0 rows affected (0.00 sec)
    mysql> QUIT;
    Bye
    $ mysql -u zhangsan@localhost -p
    Enter password:
    ERROR 1045 (28000): Access denied for user 'zhangsan@localhost'@'localhost' (using password: YES)
    $ mysql -u zhangsan -p
    Enter password:
    Welcome to the MySQL monitor. Commands end with ; or g.
    • CREATE USER 用户名@‘%’ IDENTIFIED BY '密码';
      • 用户可以在任意IP地址上登录

    2、给用户授权

    • GRANT 权限1,.....,权限n ON 数据库.* TO 用户名@IP地址;
      • 权限、用户、数据
      • 给用户分派在指定的数据库上的指定的权限
      • 例如:GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
        • 给user1用户分派在mydb1数据库上的create、alter、drop、insert、update、delete、select权限。
    • GRANT ALL ON 数据库.* TO 用户名@IP地址;
      • 给用户分派指定数据库上的所有权限。

    3、撤销授权

    • REVOKE 权限1,....,权限n ON 数据库.* FROM 用户名@IP地址;
      • 撤销指定用户在指定数据库上的指定权限。
      • 例如:REVOKE  CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;
        • 撤销user1用户在mydb1数据库上的create、alter、drop权限

    4、查看权限

    • SHOW GRANTS FOR 用户名@IP地址
      • 查看指定用户的权限

    5、删除用户

    • DROP USER 用户名@IP地址

    六、DQL

    数据查询语言,查询不会修改数据库表记录

    (一)基本查询

    1、字段(列)控制

    1)查询所有列

    SELECT * FROM 表名;

    SELECT * FROM emp;

      -->其中“*”表示查询所有列

    2)查询指定列

    SELECT 列1 [,列2,......,列N] FROM 表名;

    SELECT empno,ename,sal,comm FROM 表名;

    3)完全重复的记录只有一次

      当查询结果中的多行记录一模一样时,只显示一行。一般查询所有列时很少会有这种情况,但只查询一列(或几列)时,这可能性就大。

    SELECT DISTINCT * | 列1 [,列2,.....,列N] FROM 表名;

    SELECT DISTINCT sal FROM emp;

      --->保证查询员工表的工资,如果存在相同的工资只显示一次。

    4)列运算

    ①数量类型的列可以做加、减、乘、除运算

      SELECT sal*1.5 FROM emp;

      SELECT sal+comm FROM emp;

    ②字符串类型可以做连续运算

      SELECT CONCAT('$',sal) FROM emp;

          例如:SELECT CONCAT('我叫',ename,'我的工作是',job) FROM emp;

    ③转换NULL值

      有时需要把NULL转换成其他值,例如com+1000时,如果com列存在NULL值,那么NULL+1000还是NULL,而我们这时希望把NULL当成0来运算。

      SELECT IFNULL(comm,0)+1000 FROM emp;

    ④给列起别名

    你也许已经注意到了,当使用列运算后,查询出的结果集中的列名称很不好看,这时我们需要给列起个别名,这样在结果集中列名就显示别名了。

    SELECT IFNULL(comm,0)+1000 AS 奖金 FROM emp;

      -->其中AS可以省略。

    SELECT CONCAT('我叫',ename,'我的工作是',job) 描述 FROM emp;

    2、条件控制

    1)条件查询

    与前面结束的UPDATE和DELETE语句一样,SELECT语句也可以使用WHERE语句来控制记录。

    • SELECT empno,ename,sal,comm FROM emp WHERE sal >10000 AND comm IS NOT NULL;
    • SELECT empno,ename,sal FROM emp WHERE sal BETWEEN 20000 AND 30000;
    • SELECT empno,ename,job FROM emp WHERE jab IN(‘经理’,‘董事长’);

    2)模糊查询

      当你想查询姓张,并且姓名一共两个字的员工时,这时就可以使用模糊查询

    • SELECT * FROM emp WHERE ename LIKE '张_';

      模糊查询需要使用运算符:LIKE,其中匹配一个任意字符,注意,一个“_”只匹配一个字符而不是多个。

    • SELECT * FROM emp WHERE ename LIKE '___';/*三个下划线,姓名由3个字组成的员工*/
    • SELECT * FROM emp WHERE ename LIKE '张%';/*姓张,名字字数不定*/

      “%”匹配0~N个任意字符

    • SELECT * FROM emp WHERE ename LIKE '%阿%';

      姓名中含“阿”的员工。

    (二)排序

    1)升序

    SELECT * FROM emp ORDER BY sal ASC;

    --->按sal排序,升序

    --->其中ASC是可以省略的

    2)降序

    SELECT * FROM emp ORDER BY sal DESC;

    --->按sal排序,降序

    --->其中DESC是不可以省略的

    3)使用多列作为排序条件

    SELECT * FROM emp ORDER BY sal ASC,  comm DESC;

      --->使用sal升序,如果sal相同,使用comm的降序排列。

    (三)聚合函数

    聚合函数用来做某列的纵向运算。

    1)COUNT

    SELECT COUNT(*) FROM emp;

      --->计算emp表中所有列都不为NULL的记录的行数。

    SELECT COUNT(comm) FROM emp;

      --->计算emp表中comm列不为NULL的记录的行数。

    2)MAX

    SELECT MAX(sal) FROM emp;

      --->查询最高工资

    3)MIN

    SELECT MIN(sal) FROM emp;

      --->查询最低工资

    4)SUM

    SELECT SUM(sal) FROM emp;

      --->查询工资合计

    5)AVG

    SELECT AVG(sal) FROM emp;

      --->查询平均工资

    (四)分组查询

    分组查询是把记录使用某一列进行分组,然后查询组信息。

    例如:查看所有部门的记录数。

    SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;

      --->使用deptno分组,查询部门编号和每个部门的记录数。

    SELECT job, MAX(sal) FROM emp GROUP BY job;

      --->使用job分组,查询每种工作的最高工资。

    组条件

          分组前条件,工资大于15000,以部门分组,查询每组记录数,分组后条件为记录数大于等于2

    SELECT deptno,COUNT(*) FROM emp WHERE sal>15000 GROUP BY deptno HAVING COUNT(*)>=2;

    (五)limit子句(方言)

    LIMIT用来限定查询结果的起始行,以及总行数。

    例如:查询起始行为第5行,一共查询3行记录。

    SELECT * FROM emp LIMIT 4,3;

      --->其中4表示从第5行开始,其中3表示一共查询3行,即第5,6,7行记录。

  • 相关阅读:
    uva10341
    android_定义多个Activity及跳转
    阿里巴巴2014年校园招聘(秋季招聘)在线笔试--測试研发project师
    关于程序猿的几个阶段!
    【Spring】Spring学习笔记-01-入门级实例
    感知器算法(二分类问题)
    Ubuntu14.04下安装ZendStudio10.6.1+SVN出现Failed to load JavaHL Library
    EF架构~关系表插入应该写在事务里,但不应该是分布式事务
    EF架构~在global.asax里写了一个异常跳转,不错!
    EF架构~为导航属性赋值时ToList()的替换方案
  • 原文地址:https://www.cnblogs.com/gdwkong/p/7487227.html
Copyright © 2011-2022 走看看