1. 数据库操作
#创建数据库
CREAT DATABASE IF NOT EXISTS db_name DEFAULT CHARACTER SET charset_name
#查看数据库
SHOW DATABASE LIKE 'pattern' | WHERE expr
#修改数据库
ALTER DATABASE db_name DEFAULT CHARACTER SET charset_name
#删除数据库
DROP DATABASE IF EXISTS db_name
#使用数据库
USE db_name
2. MySQL 管理
端口号:3306
超级用户名:root
连接:mysql -u root -p
关闭:cd /usr/bin 然後 ./mysqladmin -u root -p shutdown
检查MySQL服务器是否启动:ps -ef | grep mysqld
启动mysql服务器cd /usr/bin 然後 ./mysqld_safe &
用戶管理
#新增用戶
INSERT INTO user (host, user, password, select_priv, insert_priv, update_priv) VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y');
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON TUTORIALS.* TO 'zara'@'localhost' IDENTIFIED BY 'zara123';
#刷新
FLUSH PRIVILEGES;
#查看用戶
SELECT host, user, password FROM user WHERE user = 'guest';
#权限列表
Select_priv、Insert_priv、Update_priv、Delete_priv、Create_priv、Drop_priv、Reload_priv、Shutdown_priv、
Process_priv、File_priv、Grant_priv、References_priv、Index_priv、Alter_priv
数据表操作
创建数据表
#创建数据表
CREAT TABLE IF NOT EXISTS table_name(column_name data_type,...);
#同時插入數據
CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] select_statement
查看数据表
#查看数据表
SHOW TABLES [FROM db_name]
#查看數據表結構
SHOW COLUMNS FROM tbl_name
#查看數據表索引
SHOW INDEX FROM tbl_name
#查看Mysql的性能及统计信息
SHOW TABLE STATUS LIKE [FROM db_name] [LIKE 'pattern'] \G:
插入记录
#插入记录
INSERT INTO tbl_name [(col_name),...] VALUES(val,...) #普通插入
INSERT [INTO] tbl_name SET col_name={expr | DEFAULT},... #可使用子查詢
INSERT [INTO] tbl_name [(col_name)] SELECT ... #將查詢結果插入到指定表
更新記錄
#更新記錄
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT}[,clo_name2={expr2|DEFAULT}]...[WHERE where_condition] #單表更新
UPDATE table_references SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...[WHERE where_condition] #多表更新
刪除記錄
#刪除記錄
DELETE FROM tbl_name [WHERE where_condition] #單表刪除
DELETE tbl_name[.*][,tbl_name[.*]]... FROM table_references [WHERE where_condition] #多表刪除
查找记录
#查询表达式
SELECT id [AS] alias_name
#条件表达式
SELECT id [AS] alias_name [WHERE where_condition]
#LIKE子句
SELECT id [AS] alias_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
#结果分组, 分组条件
SELECT id [AS] alias_name [GROUP BY {col_name|position} [ASC|DESC],...] [HAVING where_condition]
#UNION 操作符
SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions];
#结果排序
SELECT id [AS] alias_name [ORDER BY {col_name | expr | position} [ASC | DESC],...]
#限制结果返回数量
SELECT id [AS] alias_name [LIMIT {[offset,] row_count | row_count OFFSET offset}]
子查询
#语法
SELECT * FROM tb_name WHERE col_name =(SELECT col_name2 FROM tb_name2)
#內层-可包含多個關鍵字或條件
DISTINC、GROUP BY、ORDER BY、LIMIT、函數等
#内层-可使用比較運算符
=、>、<、>=、<=、<>、!=、<=>
#外层
SELECT、INSERT、UPDATE、SET、DO
#ANY、SOME、ALL、[NOT] IN、[NOT] EXISTS
operand comparison_operator ANY(subquery)
operand comparison_operator SOME(subquery)
operand comparison_operator ALL(subquery)
operand comparison_operator [NOT] IN(subquery)
operand comparison_operator [NOT] EXISTS(subquery)
连接
#语法
table_reference {[INNER | CROSS] JOIN | {LEFT|RIGHT} [OUTER] JOIN} table_reference ON conditional_expr
tbl_name [[AS] alias] | table_subquery [AS] alias
#內连接
INNER JOIN、JOIN、CROSS JOIN #顯示左表及右表符合連接條件的記錄
#左外连接
LEFT [OUTER] JOIN #顯示左表全部記錄及右表符合連接條件的記錄
#右外连接
RIGHT [OUTER] JOIN #顯示右表全部記錄及左表符合連接條件的記錄
#自身连接
同一個數據表對其自身進行連接
約束使用
#自动编号
AUTO_INCREMENT
#空值与非空
NULL,NOT NULL
#主键约束
PRIMARY KEY
#唯一约束
UNIQUE KEY
#默认值
DEFAULT
#外键约束
FOREIGN KEY : CASCADE,SET NULL,RESTRICT,NO ACTION
#表级约束
#列级约束
存儲引擎
#配置文件
default-storage-engine=INNODB
#创建时指定引擎
CREATE TABLE tbl_name(...) ENGINE=engine;
#修改存储引擎
ALTER TABLE tal
#MyISAM、InnoDB、Memory、CSV、Archive类型
MyISAM #256TB、支持索引、表級鎖定、數據壓縮
InnoDB #64TB、支持事務和索引、鎖顆粒為行鎖
共享锁(读锁)
同一时间段时,多个用户可以读取同一资源,读取过程中数据不会发生任何变化
排他锁(写锁)
在任何时间只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或写锁操作
修改數據表
#添加单列
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]
#添加多列
ALTER TABLE tbl_name ADD[COLUMN] (col_name column_definition,...)
#删除列
ALTER TABLE tbl_name DROP [COLUMN] col_name
#修改列定义
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST|AFTER col_name]
#修改列名称
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
#添加主键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type](index_col_name,...)
#添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY][index_name] [index_type] (index_col_name,...)
#添加外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition
#添加/删除默认约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
#删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY
#删除唯一约束
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
#删除外键约束
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol
#数据表更名
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 TO new_tbl_name2]...
临时表
函数
内置函数-字符函數
CONCAT() #字符连接
CONCAT_WS() #使用指定的分隔符连接
FORMAT() #数字格式化
LOWER() #转换成小写字母
UPPER() #转换成大写字母
LEFT() #获取左侧字符
RIGHT() #获取名侧字符
LENGHT() #获取字符串长度
LTRIM() #删除前导空格
RTRIM() #删除后续空格
TRIM() #删除前导
SUBSTRIANG() #字符串截取
[NOT] LIKE #模糊匹配
REPLACE() #字符串替换
内置函数-数值运算符与函數
CEIL() #进一取整
FLOOR() #舍一取整
DIV() #整数除法
MOD() #取余数(取模)
POWER() #幂运算
ROUND() #四舍五入
TRUNCATE() #数字截取
内置函数-比较运算符与函數
[NOT] BETWEEN ... AND ... #[不]在范围内
[NOT] IN() #[不]在列出值范围内
IS [NOT] NULL #[不]为空
内置函数-日期时间函數
NOW() #当前日期和时间
CURDATE() #当前日期
CURTIME() #当前时间
DATE_ADD() #日期变化
DATEDIFF() #日期差值
DATE_FORMAT() #日期格式化
内置函数-信息函數
CONNECTION_ID() #连接ID
DATEBASE() #当前数据库
LAST_INSERT_ID() #最后播放
USER() #当前用户
VERSION() #版本信息
内置函数-聚合函數
AVG() #平均值
COUNT() #计数
MAX() #最大值
MIN() #最小值
SUM() #求和
内置函数-加密函數
MD5() #信息摘要算法
PASSWORD() #密码算法
自定义函数
创建自定义函数
# 参数 : 0個或多個
# 返回值 : 只能有1个返回值
CREATE FUNCTION function_name(xxname VACHAR(32)) RETURNS {STRING | INTEGER | REAL | DECIMAL} routine_body
#复合结构
CREATE FUNCTION function_name(xxname VARCHAR(20)) RETURNS {STRING | INTEGER | REAL | DECIMAL} BEGIN routine_body END
# 删除函数
DROP FUNCTION [IF EXISTS] function_name
存储过程
流程
SQL命令->MySQL引擎->分析语法->可识別命令->执行结果0>返回客服端
优点
增加SQL功能和灵活性,实现较快的执行速度,减少网络流量
#创建存储过程
CREATE [DEFINER={user | CURRENT_USER}] PROCEDURE sp_name ([proc_parameter[,...]])[characteristic ...] routine_body
proc_parameter:[IN | OUT | INOUT ]param_name type #需要通過delimiter修改定界符
#修改存储过程
ALTER PROCEDURE sp_name [characteristic ...] COMMENT 'string' | {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }
#删除存储过程
DROP PROCEDURE [IF EXISTS] sp_name
#调用存储过程
CALL sp_name([parameter[,...]])
CALL sp_name[()]
参数
IN #该参数必须在存储过程时指定
OUT #该参数可被存储过程改变,且可返回
INOUT #该参数调用时指定,且可被改变和返回
特性
COMMENT 'string' | {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }
COMMENT #注释
CONTAINS SQL #包含SQL语句,但不含读或写数据的语句
NO SQL #不包含SQL语句
READS SQL DATA #包含读数据的语句
MODIFIES SQL DATA #包含写数据的语句
SQL SECURITY { DEFINER | INVOKER } #指明谁有权限来执行
存储过程与自定义函数区别
- 存储过程实现的功能要复杂一些;函数针对性更强
- 存储过程可以返回多个值;函数只能有一个返回值
- 存储过程一般独立来执行;而函数可以作为其他SQL语句的组成部分出现
事务
控制语句
BEGIN或START TRANSACTION; #显式地开启一个事务
COMMIT 或 COMMIT WORK #提交事务,并使已对数据库进行的所有修改成为永久性的;
ROLLBACK 或 ROLLBACK WORK #回滚会结束用户的事务,并撤销正在进行的所有未提交的修改
SAVEPOINT identifier #允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT
RELEASE SAVEPOINT identifier #删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常
ROLLBACK TO identifier #把事务回滚到标记点
SET TRANSACTION #设置事务的隔离级别 : READ UNCOMMITTED,READ COMMITTED,REPEATABLE ,SERIALIZABLEREAD
事务处理
BEGIN #开始一个事务
ROLLBACK #事务回滚
COMMIT #事务确认
SET AUTOCOMMIT=0 # 禁止自动提交
SET AUTOCOMMIT=1 # 开启自动提交