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行记录。

posted @ 2017-09-06 22:03  gdwkong  阅读(531)  评论(0编辑  收藏  举报