mysql
连接命令
mysql -h<host> -u<user> -p<passwd>
mysql默认仅允许本地查询,需开权限
#授权(命令行执行) GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "<root用户密码>"; flush privileges;
sql
- 示例
SELECT * FROM[WHERE <条件语句>] [GROUP BY <列名> HAVING <分组后条件>] [ORDER BY <列名> [ASC/DESC]] [LIMIT <单页条数> OFFSET <起始序号>]
- JOIN
SELECT * FROM <table1> AS t1 INNER/LEFT/RIGHT JOIN <table2> AS t2 ON t1.<列名> = t2.<列名> [过滤/聚合/排序语句]</table2></table1>- 表连接比子表查询性能高
- 去重查询
SELECT DISTINCT column_name,column_name FROM table_name;- 插入
INSERT INTO table_name VALUES (value1,value2,value3,...);
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);- 更新
UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value;- 删除
DELETE FROM table_name WHERE some_column=some_value;- 字符串截取
substring(str,index,len) 截取str,从index开始(从1开始),截取len长度
SELECT SUBSTRING(str,index,len) FROM table_name;存储过程
- 概念:
- 存储过程(Stored Procedure)为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
- 存储过程可封装,并隐藏复杂的商业逻辑。
- 存储过程可以回传值,并可以接受参数
- 声明存储过程
CREATE PROCEDURE demo_in_parameter(IN p_in int)
- 存储过程参数说明
- IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
- OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
- INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
- 开始和结束
BEGIN .... END
- 变量定义
DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
- 变量赋值
SET @变量名 = 表达式值 [,variable_name = expression ...]
- 条件语句
if-then-else-end if
mysql > DELIMITER // mysql > CREATE PROCEDURE proc2(IN parameter int) -> begin -> declare var int; -> set var=parameter+1; -> if var=0 then -> insert into t values(17); -> end if; -> if parameter=0 then -> update t set s1=s1+1; -> else -> update t set s1=s1+2; -> end if; -> end; -> // mysql > DELIMITER ;
case
mysql > DELIMITER // mysql > CREATE PROCEDURE proc3 (in parameter int) -> begin -> declare var int; -> set var=parameter+1; -> case var -> when 0 then -> insert into t values(17); -> when 1 then -> insert into t values(18); -> else -> insert into t values(19); -> end case; -> end; -> // mysql > DELIMITER ;
- 循环语句
while
while 条件 do 循环体 end while;
repeat
repeat 循环体 until 循环条件 end repeat;
loop
loop 循环体 leave end loop;
- 示例
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义) mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> BEGIN -> DELETE FROM MATCHES -> WHERE playerno = p_playerno; -> END$$ Query OK, 0 rows affected (0.01 sec) mysql> delimiter; #将语句的结束符号恢复为分号
注:使用DELIMITER $$
命令将语句的结束符号从分号';'临时改为两个美元符,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。
- JOIN
- 示例