mysql notes

格式注意事项

命令不区分大小写

分号结尾

空格换行无限制

SELECT "HelloWorld";

#comment

/*comment*/
创建逻辑库
`mysql>CREATE DATABASE database_name;`

`mysql>SHOW DATABASES;`

`mysql>DROP DATABASE database_name;
创建数据表 [中括号里内容可不写]
CREATE TABLE table_name(

column_name1 data_type [约束] [comment],

column_name2 data_type [约束] [comment],

...

)[comment];

DROP TABLE table_name;
数据表其他操作
SHOW table_name;

DESC table_name;

SHOW CREATE TABLE table_name;

DROP TABLE table_name;
Alter 语句
添加字段
ALTER TABLE table_name

ADD column_name1 data_type [约束] [comment],

ADD column_name2 data_type [约束] [comment],

...;
修改字段类型和约束
ALTER TABLE table_name

MODIFY column_name1 data_type [约束] [comment],

MODIFY column_name2 data_type [约束] [comment],

...;


修改字段名称
ALTER TABLE table_name

CHANGE column_name1 data_type [约束] [comment],

CHANGE column_name1 data_type [约束] [comment],

...;
删除字段
ALTER TABLE table_name

DROP column_name1 ,

DROP column_name2 ,

...;
删除主键
ALTER TABLE table_name

DROP primary key;
修改表名
ALTER TABLE table_name RENAME new_name;
创建索引
CREATE TABLE  v

...,

INDEX [index_name] (字段)

...

);
添加/删除索引
CREATE INDEX index_name ON  table_name(字段);

ALTER TABLE table_name ADD INDEX [index_name] (字段);

SHOW INDEX FROM table_name;

DROP INDEX index_name ON table_name;
记录查询
SELECT * FROM table_name;
使用列别名
SELECT name AS "new_name"

FROM table_name;
数据分页
SELECT ... FROM ... LIMIT start,end;

start默认值为0;

结果集排序
SELECT ... FROM ... ORDER BY 列名 [ASC/DESC];

默认ASC升序,DESC降序必须注明

去除重复记录
SELECT DISTINCT name FROM table_name;

只能查询一列,不可多列

在select中仅能使用一次

条件查询
SELECT ... FROM ... WHERE 条件 [AND/OR] 条件 ...;

条件执行顺序从左到右,把能筛选掉最多纪录的条件写在最左;

聚合函数
sum函数

求和,只能用于数字类型,字符类型结果为0,日期类型结果为毫秒数相加;

SELECT SUM(comm) FROM table_name;

会排除null值;

max函数

获得非空值的最大值;

SELECT MAX(comm) FROM table_name;

取最长的名字;

SELECT MAX(LENGTH(name)) FROM table_name;
Min函数

获得非空值的最小值;

SELECT MIN(comm) FROM table_name;
Avg函数

获得非空值的平均值;

SELECT AVG(comm) FROM table_name;
Count 函数

获得包含空值的记录数;

SELECT COUNT(*) FROM table_name;

获得不包含空值的记录数;

SELECT COUNT(comm) FROM table_name;
分组查询
SELECT name1,name2 FROM table_name

GROUP BY name1;

默认情况是对全表范围;

逐级分组
SELECT name1,name2,name3 

FROM table_name

GROUP BY name1, name2

ORDER BY name1;
分组后再做汇总计算
SELECT name1,name2,name3 

FROM table_name

GROUP BY name1 WITH ROLLUP;
Group_concat函数

把分组查询中的某个字段拼接成一个字符串;

SELECT name1,GROUP_CONCAT(name2),name3 

FROM table_name

GROUP BY name1;
Having 子句
SELECT name1,name2,name3 

FROM table_name

GROUP BY name1 HAVING ...;
表连接
SELECT name1,name2,name3 

FROM table1 JOIN table2;
内连接
SELECT ... FROM table1 JOIN table2 ON 连接条件;

SELECT ... FROM table1 JOIN table2 WHERE 连接条件;

SELECT ... FROM table1 , table2 WHERE 连接条件;

相同数据表也可以做表连接,起别名;

结果集也可以起别名后作为一张表;

查询条件写on和where里效果相同,只保留符合条件的数据;

外连接

保留不符合条件的记录;

查询条件写where里,不符合条件的会被过滤掉;

左/右连接

保留左表所有记录,如右表无符合条件的,则用null连接左表

右表同理;

SELECT name1,name2,name3 

FROM table1 LEFT  JOIN table2;

SELECT name1,name2,name3 

FROM table1 RIGHT  JOIN table2;
union

将多个查询语句的结果集合并;

(查询语句)UNION(查询语句)UNION(查询语句)...
子查询

where,from(最优),select;

where

最简单,效率最低;

用表连接替代,效率高,只查询一次;

使用in,all,any,exists关键字处理多行条件

exists关键字
SELECT ... FROM table_name WHERE [NOT] EXISTS (再套一个子查询);
from

效率高,只查询一次;

select

每输出一次就要执行一次,效率低;

相关子查询

where,select;

要反复执行多次,避免使用;

insert语句

向数据表写入一条或多条记录;

INSERT INTO table_name (name1, name2,...)

VALUES (value1, value2,...);

INSERT INTO table_name (name1, name2,...)

VALUES (value1, value2,...), (value1, value2,...);
Insert 方言
INSERT INTO table_name SET name1=value1, name2=value2, ...;
Ignore 关键字

让insert只插入数据库不存在的数据;

INSERT [IGNORE] INTO table_name...;
Insert 子查询

insert可以包含子查询,并把子查询的结果写入数据表;

Update 语句

修改表中的记录;

INSERT [IGNORE] INTO table_name

SET name1=value1, name2=value2, ...

[WHERE 条件...]

[ORDER BY ...]

[LIMIT ...];
UPDATE表连接
INSERT table1 JOIN table2 ON 条件

SET name1=value1, name2=value2, ...;
INSERT table1,  table2 

SET name1=value1, name2=value2, ...

WHERE 连接条件;

内/外连接

INSERT table1 [LEFT/RIGHT] JOIN table2 ON 条件

SET name1=value1, name2=value2, ...;
Delete 语句

删除记录

DELETE [IGNORE] FROM table_name

[WHERE 条件...]

[ORDER BY ...]

[LIMIT ...];
Delete 表连接
DELETE table1, ... FROM table1 JOIN table2 ON 条件

[WHERE 条件...]

[ORDER BY ...]

[LIMIT ...];

内/外连接

DELETE table1, ... FROM table1 [LEFT/RIGHT] JOIN table2 

ON 条件;
删除数据表全部数据
TRUNCATE TABLE table_name;
管理事务
手动开启事务
START TRANSACTION;

sql语句

[COMMIT/ROLLBACK];
修改事务隔离级别

读取其他事务未提交的数据:

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

读取其他事务提交的数据:

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

(默认)反复读取数据,不受其他事务影响:

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

序列化事务,逐一执行:

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

各子句执行顺序

FROM > WHERE > GROUP BY > SELECT > ORDER BY > LIMIT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值