MySQL语句简要

SQL功能

DDL:数据定义语言,创建、修改、删除数据库对象(表,视图、索引)
DML:数据操纵语言,主要用于查询、添加、修改或者删除存储在数据库中的数据
DCL:数据控制语言, 用于控制数据库中特定访问用于的权限,访问类型

SQL执行方式

交互式SQL:直接执行SQL语句,输出在命令行的
嵌入式SQL:嵌入到高级语言中的SQL语句

SQL关键词

  • 数据定义:
    CREATE TABLE
    DROP TABLE
    ALER TABLE //修改表结构
    CREATE INDEX
    DROP INDEX
    CREATE PROCEDURE //创建一个存储过程
    DROP PROCEDURE

  • 数据操作:
    SELECT
    INSERT
    UPDATE
    DELETE

  • 权限控制:
    GRANT
    REVOKE

  • 事务控制:
    COMMIT
    ROLLBACK

  • 数据类型:
    整数:
    TINYINT 8bit
    SMALLINT 16bit
    MEDIUMINT 24bit
    INT 32bit
    BIGINT 64bit
    实数:
    FLOAT 32bit
    DOUBLE 64bit
    DECIMAL //精确的小数
    字符串:
    CHAR //固定长度
    VARCHAR //可变长度,有利有弊
    TEXT //较长的文本,非二进制
    BLOB //二进制
    ENUM //不允许ENUM外字符插入
    SET //SET类型
    日期:
    DATE //YYYY-MM-DD
    TIME //HH-MM-SS
    DATETIME
    TIMESTAMP //时间戳

数据类型选择准则:

最小原则
简单原则
避免索引列上的NULL

修改表结构

ALTER TABLE:
CHANGE
RENAME
DROP
ADD

算术运算符:

+,-,*,/,%
例子:SELECT 1+2;
SELECT row1-row2 FROM TABLE1;

比较运算符:

<>(不等于), !=, =, >, <, <=>(是否为NULL), between, in, is null, like
like一般不推荐使用,因为它要搜索整个表

逻辑运算符:

not/!, and/&&, or/||, XOR

位运算符:

&, |, ^(位异或), ~, <<(左移), >>

数学函数

ABS(), CEILING()(向上取整), FLOOR(向下取整), GREATEST(), LEAST(), MOD(), RAND(), ROUND(), TRUNCATE()(截断小数点后多少位), SIGN(), 三角函数, LN(), LOG(), BIN(), OCT()(八进制),

聚合函数:

AVG(), SUM(), MIN(), MAX(), COUNT(), STD(), STDDEV(), VARIANCE()

字符串函数:

LENGTH(), LCASE(), LOWER(), UCASE(), UPPER(), STRCMP(), POSITION(), REPLACE(), INSERT(), CONCAT(), CONCAT_WS(), LPAD(), RPAD()(右边填充), LTRIM(), RTRIM(), TRIM(), SUBSTRING(), ASCII()

日期和时间函数:

NOW(), CURTIME(), CURDATE(), YEAR(), MONTH(), DAYOFYEAR(), DAYOFWEEK(), DATE_ADD(), DATE_SUB(), DATE_FORMAT(), TIME_FORMAT()

查询一个表结构:

DESCRIBE TABLE;

插入方法:

  1. INSERT INTO TABLENAME VALUES(**, **, **)
  2. INSERT INTO TABLENAME (COLNUM1, COLNUM2, COLNUM3) VALUES(**, **, **) //这种方式可以少插入几列的数据
  3. INSERT INTO TABLENAME SET COLNUMNAME=VALUE

更新表值:

UPDATE TABLE SET COLUM=VALUE WHERE VALUE=TARGETVALUE

连接类型:

  • 交叉连接CROSS JOIN:笛卡尔积,无where语句
    -内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
    外连接:
  • 外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
    SELECT * FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.COLUM=TABLE.COLUM2 WHERE…
  • 自连接:自己和自己连接,相当于把一个表当成两个表
  • 联合:连接两个表结构相同的表,上下连接

子查询:

根据另一个select来进行查询,就是select嵌套

HAVING:

当我们用到聚合函数,如sum,count后,又需要筛选条件时,having就派上用场了,因为WHERE是在聚合前筛选记录的,having和group by是组合着用的,having后的判断字段必须是聚合函数返回的结果

事务处理:

作为一个单独单元的一个或者多个SQL语句组成,要么全部完成,要么执行失败则全部回滚。

事务处理生命周期:

START TRANSACTION;
…//事务流程
COMMIT; //或者ROLLBACK
开始事务之后,想要将操作写进数据库,执行语句之后都需要使用COMMIT语句进行提交。
想要完成自动提交:
@@AUTOCOMMIT设置为TRUE时,就是自动提交,不需要显示COMMIT语句

使用特定存储引擎:

CREATE TABLE TEST(…) ENGINE=INNODB;

事物的隔离级别:

查看隔离级别:SELECE @@GLOBAL.TX_ISOLATION或者SELECE @@SESSION.TX_ISOLATION
设置隔离级别:SET SESSION TRANSACTION LEVEL [隔离级别]
可重复读是MySQL的默认级别
重复读级别:保证同一事务查询的结果是一致的,但是会导致幻读:一个事务中新插入一行,另一个事务是能够查到的。
提交读:同一事务查询结果可能不同,因为只要一个事务提交了,另一个事务就能够查询到。这导致不可重复读,因为不可重复读的概念就是,一个事务的多次查询结果是一致的。

在使用事务表时,提高性能的一些方法:

  1. 使用小事务
  2. 选择合适的隔离级别
  3. 避免死锁
  4. 保证开始事务前一切都是可行的

表级锁:

LOCK TABLE TABLENAME READ/WRITE;
读锁为共享锁,大家都可读,但是不能修改
写锁为排他锁,只有一个用户可读可写

数据库管理:

运行时间:数据库启动之后能运行多久
数据备份:mysqldump
安全和访问控制:
性能优化:
使用日志排错和统计:

权限:

GRANT ALL PRIVILEGES ON ‘.’ TO USER@HOST IDENTIFIED BY PASSWORD WITH GRANT OPTIONS
FLUSH PRIVILEGES;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值