DDL

查看所有数据库:show databases 切换:USE 数据库名 创建数据库:CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARSET=UTF8]; 中括号表示可选内容,可以是语句更加细腻,但是写语句的时候不能把中括号写上去 删除数据库:DROP DATABASE [IF EXISTS] 数据库名 修改数据库编码:ALTER DATABASE 数据库名 CHARACTER SET UTF8

  1. 创建表:
CREATE [IF NOT EXISTS] 表名(
列名 列类型,
列名 列类型,
…
列名 列类型
);
  1. 查看当前数据库的所有表的名称:SHOW DATABASES;
  2. 查看指定的表的创建语句:SHOW CREATE TABLE 表名;
  3. 查看表结构:DESC 表名;
  4. 删除表:DROP TABLE 表名;
  5. 修改表(前缀:ALTER ATABLE 表名;)
    添加列:
ALTER TABLE 表名 ADD(
列名 列类型,
…
列名 列类型
);

修改列类型:

ALTER TABLE 表名 MODIFY 列名 列类型;

修改列名:

ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;

删除列:

ALTER TABLE 表名 DROP 列名;

修改表名:

ALTER TABLE 表名 RENAME 表名 TO 新表名

DML

插入数据:

sql INSERT INTO 表名(列名1,列名2,…) VALUES(列值1,列值2,…);

·在表名后给出要插入的列名,其他没有指定的列直接用null表示 ·在VALUES后面给出的列值,顺序必须与前面的列值相同

sql INSERT INTO 表名 VALUES(列值1,列值2,…);

·如果使用这样的格式,那么后面列值的个数一定要等于,表的字段的个数 修改数据:

修改数据

sql UPDATE 表名 SET 列名1=列值1,列名2=列值2…. 如果直接使用上述的SQL语句那么就会出现更改这个数据表中的所有语句,因为没有添加限定语句。

sql UPDATE 表名 SET 列名1=列值1,列名2=列值2…. WHERE 条件

条件必须是一个布尔的值或者表达式,运算符包括:
=,!=,<>,>,<,>=,<=,BETWEEN…AND,IN(…),IS NULL,NOT,OR,AND

重要运算符的实例: BETWEEN…AND:

sql UPDATE 表名 SET age=12 WHERE age BETWEEN 20 AND 40;

IN(…):其实这就表示一个集合,只要满足集合中的某一个值的要求即可

sql UPDATE 表名 SET age=12 WHERE name IN('ZHANGSAN','LISI');

NOT:

sql UPDATE 表名 SET age=12 WHERE NOT age BETWEEN 20 AND 40;

删除数据:

sql DELETE FROM 表名 WHERE 条件

TRUNCATE TABLE 表名:TRUNCATE是DDL语句,他是先删除drop该表,然后在创建create该表,而且是无法回滚!!!

DCL

用户授权规则:

  1. 一个项目创建一个用户,一个项目对应的数据库只有一个!
  2. 这个用户只能对这个数据进行操作,而不能对其他的数据库进行操作。

创建用户:

sql CREATE USER 用户名@IP地址 IDENTIFIED BY '密码';

这样就表示用户只能在指定的IP上登入

sql CREATE USER 用户名@'%' IDENTIFIED BY '密码';

用户可以在任意IP地址上登入

用户授权:

sql ·GRANT 权限1,…,权限n ON 数据库名.* TO 用户名@IP地址

  1. 权限,用户,数据库
  2. 给用户分配在指定的数据库上的指定的权限例如: GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE, ON 数据库名.* TO user@localhost;
    给用户user分配在数据库上的CREATE ALTER DROP INSERT UPDATE DELETE SELECET 的权限

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

撤销权限:

·REVOKE 权限1,…,权限2 ON 数据库.* FROM 用户名@IP地址; 撤销指定用户在指定数据库上的指定权限
例如:REVOKE CREATE,ALTER,DROP, ON 数据库名 FROM 用户名@IP地址 撤销用户在数据库中的 CREATE
ALTER DROP 的权限

查看权限:

sql SHOW GRANTS FOR 用户名@IP地址

查看指定用户权限

删除用户:

sql DROP USER 用户名@IP地址

实际操作: 没有授权的指定数据库的用户,是看不到指定数据库的,只有超级用户分配权限后才能查看的到。

DQL

基础查询:

字段(列)控制
1.查询所有列:SELECT * FROM 表名: 2.查询指定列:SELECT 列名1,列名2,… FROM 表名

3.完全重复的记录只显示一个,重复的就不多次出现了

SELECT DISTINCT * FROM 表名

4.列运算:
1)数量类型的列可以进行加减乘除运算,例如:
SELECT 列名*10 FROM 表名;//这样就会得到10倍的指定列值,当然这个列的值要是整数型。
SELECT 列名+10 FROM 表名; //这样就会得到每个列值加10,其他类型都当做0来对待,任何类型和NUL相加,都是NULL,但是可以使用 ifnull(列名,值),即如果为NULL那么就是变成指定值

2)字符串类型可以做连续运算
不能对字符串直接进行操作,因为mysql会把他们当做0来操作,但是可以使用CONCAT(列名1,列名2),使用这个函数来连接,例如:

SELECT CONCAT(列名1,'分隔符',列名2) FROM 表名

3)转换NULL值:使用ifnull()函数。
4)给列起别名:

SELECT 列名1 AS 别名1,列名2 AS 别名2 FROM 表名

但是要注意,有时候AS可以省略。

条件控制:
  1. 条件查询:就是使用WHERE 关键字 来限定范围,例如:
SELECT 列名 FROM 表名 WHERE 条件
  1. 模糊查询:就是使用LIKE 关键字 再加上一些特殊符号,例如:
    SELECT name FROM stu WHERE name LIKE 章_;//就是表示查询stu这张表中所有以两个字,并且姓章的人的姓名(因为就一个下划线)。
    下划线’_‘表示任意一个字符
    百分号’%'表示任意数量,任意字符
排序
  1. 升序,例如:
    SELECT * FROM 表名 ORDER BY 列名 ASC;//那么就会以升序的方式列出所有记录,其中的ASC可以省略。
  2. 降序,例如:
    SELECT * FROM 表名 ORDER BY 列名 DESC;//那么就会以降序的方式列出所有记录。
  3. 使用多列作为排序条件(若排序列相同,那么引用第二列进行排序)
    SELECT * FROM 表名 ORDER BY 列名1 ASC, 列名2 DESC;//即若第一个相同则按照第二个排序
聚合函数

聚合函数用来做某列的纵向操作

  1. COUNT
    例如:SELECT COUNT(列名) FROM 表名;//计算某一个列的有效行数,但是不统计NULL值,当COUNT(2)中的2(数字)跟*表示的效果是一样的。
  2. MAX
  3. MIN
  4. SUM
  5. AVG
分组查询(GROUP)

例如:SELECT 列名,分组类信息(一般是聚合函数) FROM 表名 GROUP BY 列名;//这个表示会按照GROUP BU 后面这个列名的各个值分组,然后按照列名后面的分组类信息的名称类别来显示。

分组前添加条件:

SELECT 列名,分组类信息(一般是聚合函数) FROM 表名 WHERE 条件 GROUP BY 列名;

分组后添加条件:
SELECT 列名,分组类信息(一般是聚合函数) FROM 表名 WHERE 条件 GROUP BY 列名 HAVING 条件;//主义这个时候的条件就必须是有意义的条件,就是再添加这个条件之前显示出来的信息为基础设置的条件。

LIMIT 子句(方言,MYSQL 才有)

LIMIT 用来限定查询结果的起始行,以及总行数
SELECT * FROM 表名 LIMIT 4,3;//其中4表示从第五行开始,其中3表示一共查询3行,即查询第5 6 7行记录。

注意:如果后面限定的记录数量不足,那么有多少给多少。

这个作用主要用来分页查询(类似必应搜索中,每一页只给你几个结果)