欧酷网

您的位置:主页>数据库>

Mysql

part one 基础部分

标准的sql语句(一定要回的)
插入Insert into (table-name )[(column name list)] values(value list)
更新Update (table-name ) set column name=value[,…] [where condition]
删除Delete from (table-name )[where condition]
查询Select column list from(table-name )
[inner| left | right join table2 on condition […]]
[where condition]
[group by column [having condition]]
[order by column asc|desc …]

查询
select <>from <>
DISTINCT关键字,顾名思义,此关键字指示MySQL
只返回不同的值

LIMIT 参数一,参数二 第一个数为开始位置,第二个数为要检索的行数 行0 检索出来的第一行为行0而不是行1 。 MySQL 5支持LIMIT的另一种替代语法。LIMIT4 OFFSET 3意为从行3开始取4行,就像LIMIT 3, 4一样。

排序:ORDER BY 为了进行降序排序,必须指定DESC关键字。

ORDER BY子句的位置 在给出ORDER BY子句时,应该保证它
位于FROM 和where子句之后。如果使用LIMIT,它必须位于ORDER BY之后。

筛选 where not in and or

通配符 like 为在搜索子句中使用通配符,必须使用LIKE操作符
% 代表搜索模式中给定位置的0个、1个或多个字符
_ 只匹配单个字符而不是多个字符
注意尾空格 尾空格可能会干扰通配符匹配。

正则表达式

计算字段
拼接:Concat()函数

去空格:Trim函数 MySQL除了支持RTrim()(正如刚才所见,它去掉串右边的空格),还支持LTrim()(去掉串左边的空格)以及
Trim()(去掉串左右两边的空格)

起别名 as

函数
常用的文本处理函数

Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写
SOUNDEX是一个将任何文
本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较

时间处理函数
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分

数值处理函数
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切

聚集函数
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和

分组 GROUP BY 过滤 having

SELECT子句及其顺序:select from where group by having
order by limit

子查询 经常使用in

完全限定列名 在引用的列可能出现二义性时,必须使用完
全限定列名(用一个点分隔的表名和列名)。

联结
目前为止所用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内部联结。

内部联结
where 和inner join(on) 两种语法
SELECT employee_id ,department_name
FROM employees ,departments;
WHERE employees.department_id=departments.department_id;

SELECT employee_id ,department_name
FROM employees INNER JOIN departments
on departments.department_id=employees.department_id;

起别名 关键字as
SELECT employee_id ,department_name
FROM employees AS e INNER JOIN departments AS d
on e.department_id=d.department_id;

组合查询 UNION
SELECT employee_id ,first_name,last_name
FROM employees
WHERE department_id=100
UNION
SELECT employee_id,first_name,last_name
FROM employees
WHERE manager_id=114;

全文本搜索

插入
INSERT INTO employees(employee_id,first_name,last_name)
VALUES(207,‘rky’,‘sunshine’);

更新
UPDATE employees
SET first_name=‘rky’
WHERE employee_id=100;

删除
DELETE FROM employees
WHERE employee_id=100;

表的操作
#创建表,注意:字符型的char和varchar要定义长度,int(M),里面的M不是指定大小的
CREATE TABLE user(
id int NOT NULL AUTO_INCREMENT ,
name VARCHAR(100),
password VARCHAR(50),
sex VARCHAR(50) DEFAULT ‘女’,
PRIMARY KEY(id)
)ENGINE=INNODB;

#更新表ALTER TABLE

ALTER TABLE user
ADD COLUMN number int;

#删除表
DROP TABLE user;

#重命名表
RENAME TABLE user to user1;

事务
使用到的关键字

set autocommit=0;
start transaction;
commit;
rollback;
savepoint 断点

rollback to 断点

SET autocommit=0;
START TRANSACTION;
INSERT account VALUES(‘h7’,2000000);
SAVEPOINT d;
INSERT account VALUES(‘h8’,2000000);
#ROLLBACK to d;
INSERT account VALUES(‘h9’,2000000);
COMMIT;

事务的隔离级别:

事务并发问题如何发生?

当多个事务同时操作同一个数据库的相同数据时
事务的并发问题有哪些?
脏读:一个事务读取到了另外一个事务未提交的数据
不可重复读:同一个事务中,多次读取到的数据不一致
幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据

如何避免事务的并发问题?

通过设置事务的隔离级别
1、READ UNCOMMITTED
2、READ COMMITTED 可以避免脏读
3、REPEATABLE READ 可以避免脏读、不可重复读和一部分幻读
4、SERIALIZABLE可以避免脏读、不可重复读和幻读
设置隔离级别:
set session|global transaction isolation level 隔离级别名;
查看隔离级别:
select @@tx_isolation;

  • 点赞

  • 收藏

  • 分享

  •    
    • 文章举报

鬼怪的新娘

 
发布了10 篇原创文章 ·    获赞 2 ·    访问量 198  

私信

关注

相关文章推荐