SQL

前言

DML数据操纵语言(INSERT, UPDATE, DELETE)

DDL数据定义语言(CREATE TABLE, VIEW, INDEX, )

DQL数据查询语言(SELECT)

DCL数据控制语言(GRANT, ROLLBACK, COMMIT)🖊

DML数据操纵语言(INSERT, UPDATE, DELETE)

DDL数据定义语言(CREATE TABLE, VIEW, INDEX, )

DQL数据查询语言(SELECT)

DCL数据控制语言(GRANT, ROLLBACK, COMMIT)

一、创建和使用数据库

1
2
CREATE DATABASE test;
USE test;

二、创建表

1
2
3
4
5
6
CREATE TABLE table (
id INT NOT NULL AUTO_INCREMENT,
col1 VARCHAR(45) NOT NULL DEFAULT "COL1",
col2 DATE NOT NULL,
PRIMARY KEY (`id`)
);

三、修改表

Alter, Drop

添加列

1
2
ALTER TABLE table
ADD col CHAR(20);

删除列

1
2
ALTER TABLE table
DROP COLUMN col;

删除表

1
DROP TABLE table;

四、插入行

插入

1
INSERT INTO table(col1, col2) VALUES (val1, val2);

插入检索出来的数据

1
2
3
INSERT INTO table(col1, col2)
SELECT col1, col2
FROM table_A;

将一个表中的内容插入到新表

1
2
CREATE TABLE newtable AS
SELECT * FROM table;

插入时若已经存在主键冲突则忽略插入

1
INSERT IGNORE INTO table(col...) values (...);

六、更新

1
2
3
UPDATE table
SET col1 = val1
WHERE id = 1;

七、删除

1
2
DELETE FROM table
where id = 1;

八、查询

DISTINCT

重复行只出现一次。作用于所有列,也就是说所有列的值都相同才算重复

1
2
SELECT DISTINCT col1, col2
FROM table;

LIMIT

分页。限制返回的行数。可以有两个参数,第一个参数为:起始行,从0开始;第二个参数为返回的行数。

返回前5行

1
2
3
SELECT col1, col2
FROM table
LIMIT 5; # 返回前5行
1
2
3
SELECT col1, col2
FROM table
LIMIT 0, 5; # 返回前5行完整写法

返回3~5行

1
2
3
SELECT col1, col2
FROM table
LIMIT 2, 3; # 返回第2+1行开始的3条数据,也就是345行

八、排序

  • ASC:升序(默认)
  • DESC:降序

可以按多个列排序,而且可以给每个列指定不同的排序方式

1
2
3
SELECT col1, col2
FROM table
ORDER BY col DESC, col2 ASC;

九、用where过滤

WHERE子句可用的操作符

操作符 说明
= 等于
< 小于
> 大于
<> != 不等于
<= !> 小于等于
>= !< 大于等于
BETWEEN 在两个值之间
IS NULL 为 NULL 值
  • 注意:NULL和0和空字符串””都不一样!区分!

WHERE子句的连接符

连接符 说明
AND 与,连接过滤条件。与比或优先
OR 或,连接过滤条件
IN 匹配值,后面可以接SELECT子句,匹配查询到的一组值
NOT 否定一个条件
col LIKE xx 检查col匹配通配符xx

通配符

  • % 匹配 >=0 的任意字符串
  • _ 匹配 1 个字符
  • [ ] 匹配集合内的字符,例如 [ab] 匹配字符 a 或者 b。
  • ^ 否定,配合 [ ] 使用,表示不匹配集合内的字符,如 [^ab]

使用 LIKE 来进行通配符匹配

1
2
3
SELECT col1, col2
FROM table
WHERE col LIKE '[^AB]%' -- 不以A或B开头的任意文本
  • 注意:通配符位于开头处匹配会非常慢!不要滥用!

十、计算字段

十一、函数

十二、分组

十三、子查询

十四、连接

十五、组合查询

十六、视图

十七、存储过程

十八、游标

十九、触发器

二十、事务管理

基本术语:

  • 事务(transaction)指一组 SQL 语句;
  • 回退(rollback)指撤销指定 SQL 语句的过程;
  • 提交(commit)指将未存储的 SQL 语句结果写入数据库表;
  • 保留点(savepoint)指事务处理中设置的临时占位符(placeholder),你可以对它发布回退(与回退整个事务处理不同)。

不能回退 SELECT 语句,回退 SELECT 语句也没意义;也不能回退 CREATE 和 DROP 语句。

MySQL 的事务提交默认是隐式提交,每执行一条语句就把这条语句当成一个事务然后进行提交。当出现 START TRANSACTION 语句时,会关闭隐式提交;当 COMMIT 或 ROLLBACK 语句执行后,事务会自动关闭,重新恢复隐式提交。

通过设置 autocommit 为 0 可以取消自动提交;autocommit 标记是针对每个连接而不是针对服务器的。

如果没有设置保留点,ROLLBACK 会回退到 START TRANSACTION 语句处;如果设置了保留点,并且在 ROLLBACK 中指定该保留点,则会回退到该保留点。

1
2
3
4
5
6
7
START TRANSACTION
// ...
SAVEPOINT delete1
// ...
ROLLBACK TO delete1
// ...
COMMIT

二十一、字符集

二十二、权限管理

  • Mysql的账户信息存在mysql这个数据库中
1
2
USE mysql;
SELECT user from user; # 查询mysql.user表

创建账户

新创建的账户没有任何权限

1
CREATE USER myuser Identified By 'password';

删除账户

1
DROP USER myuser;

授予权限Grant

账户用 username@host 的形式定义,username@% 使用的是默认主机名。

1
GRANT SELECT, INSERT ON mydatabase.* TO myuser

删除权限Revoke

GRANT 和 REVOKE 可在几个层次上控制访问权限:

  • 整个服务器,使用 GRANT ALL 和 REVOKE ALL;
  • 整个数据库,使用 ON database.*;
  • 特定的表,使用 ON database.table;
  • 特定的列;
  • 特定的存储过程。
1
REVOKE SELECT, INSERT ON mydatabase.* FROM myuser;

查看权限

1
SHOW GRANTS FOR myuser;

修改密码

使用 Password() 函数

1
SET PASSWORD FOR myuser = Password('new_password');

修改账户名

1
RENAME myuser TO newuser;

本文标题:SQL

文章作者:Aaron.H

发布时间:2018年08月06日 - 19:08

最后更新:2018年09月08日 - 08:09

原始链接:https://uncleaaron.github.io/Blog/DataBase/SQL/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。