DDL
查看所有数据库:show databases
切换:USE 数据库名
创建数据库:CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARSET=UTF8]; 中括号表示可选内容,可以是语句更加细腻,但是写语句的时候不能把中括号写上去
删除数据库:DROP DATABASE [IF EXISTS] 数据库名
修改数据库编码:ALTER DATABASE 数据库名 CHARACTER SET UTF8
-
创建表:
CREATE [IF NOT EXISTS] 表名( 列名 列类型, 列名 列类型, … 列名 列类型 );
-
查看当前数据库的所有表的名称:
SHOW DATABASES;
-
查看指定的表的创建语句:
SHOW CREATE TABLE 表名;
-
查看表结构:
DESC 表名;
-
删除表:
DROP TABLE 表名;
-
修改表(前缀: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
用户授权规则:
- 一个项目创建一个用户,一个项目对应的数据库只有一个!
- 这个用户只能对这个数据进行操作,而不能对其他的数据库进行操作。
创建用户:
sql CREATE USER 用户名@IP地址 IDENTIFIED BY '密码';
这样就表示用户只能在指定的IP上登入
sql CREATE USER 用户名@'%' IDENTIFIED BY '密码';
用户可以在任意IP地址上登入
用户授权:
sql ·GRANT 权限1,…,权限n ON 数据库名.* TO 用户名@IP地址
- 权限,用户,数据库
- 给用户分配在指定的数据库上的指定的权限例如: 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可以省略。
条件控制:
-
条件查询:就是使用WHERE 关键字 来限定范围,例如:
SELECT 列名 FROM 表名 WHERE 条件
-
模糊查询:就是使用LIKE 关键字 再加上一些特殊符号,例如:
SELECT name FROM stu WHERE name LIKE 章_;
//就是表示查询stu这张表中所有以两个字,并且姓章的人的姓名(因为就一个下划线)。
下划线’_‘表示任意一个字符
百分号’%'表示任意数量,任意字符
排序
- 升序,例如:
SELECT * FROM 表名 ORDER BY 列名 ASC;
//那么就会以升序的方式列出所有记录,其中的ASC可以省略。 - 降序,例如:
SELECT * FROM 表名 ORDER BY 列名 DESC;
//那么就会以降序的方式列出所有记录。 - 使用多列作为排序条件(若排序列相同,那么引用第二列进行排序)
SELECT * FROM 表名 ORDER BY 列名1 ASC, 列名2 DESC;
//即若第一个相同则按照第二个排序
聚合函数
聚合函数用来做某列的纵向操作
- COUNT
例如:SELECT COUNT(列名) FROM 表名;
//计算某一个列的有效行数,但是不统计NULL值,当COUNT(2)中的2(数字)跟*表示的效果是一样的。 - MAX
- MIN
- SUM
- 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行记录。
注意:如果后面限定的记录数量不足,那么有多少给多少。
这个作用主要用来分页查询(类似必应搜索中,每一页只给你几个结果)