7.MySQL入门

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 # 开启自动提交 

你可能感兴趣的:(7.MySQL入门)