MYSQL 文档
https://dev.mysql.com/doc/refman/5.7/en/
表复制
create table t2 like t1;
insert into t2 select * from t1;
创建索引
主键索引、唯一索引、普通索引、全文索引
比较简单,我就不写了。
视图
SELECT 语句不能包含FROM 子句中的子查询
SELECT 语句中不能引用系统或用户变量
SELECT 语句不能引用预处理语句参数
在存储子程序内,定义不能引用子程序参数或局部变量
在定义中引用的表或视图必须存在。但是,创建视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE 语句。
在定义中不能引用TEMPORARY 表,不能创建TEMPORARY 视图。
在视图定义中命名的表必须已存在。
不能将触发程序与视图关联在一起。
在视图定义中允许使用ORDER BY ,但是,如果从特定视图进行了选择,而该视图又使用了具有自己ORDER BY 的语句,它将被忽略。
不能给视图添加索引。
视图通常是不允许更新的,能更新的视图比较少,条件也比较苛刻。只要SQL 语句中含有下面任何一个子句,都会限制视图的更新:
聚合函数(SUM ()、MIN ()、MAX ()、COUNT ()等)。
DISTINCT 。
GROUP BY 。
HAVING 。
UNION 或UNION ALL。
位于选择列表中的子查询。
JOIN 。
FROM 子句中的不可更新视图。
WHERE 子句中的子查询,引用FROM 子句中的表。
仅引用文字值(在该情况下,没有要更新的表)。
ALGORITHM=TEMPLABLE(使用临时表总会是视图成为不可更新的)。
关于可插入性(可用INSERT 语句更新),如果满足关于视图的列的下叙额外要求,可更新的视图也是可插入的:
不得有重复的视图列名称。
视图必须包含没有默认值的基表中的所有列。
视图列必须是简单的列引用而不是导出列。
其实以上要求综合起来就一句话:视图的数据和基表表的数据不一样。因此视图一般用于查询的目的。那么使用视图有什么好处呢?
首先,实现了更细致的权限控制。比如你查询学生表,允许你知道学生姓名,但不允许看到学生的联系方式。这是就可以定义一个视图,仅包含学生姓名,并赋予使用者此视图的权限。这样就屏蔽了使用者对基础表的使用权限,仅暴露给其使用的字段。虽然给表字段分配用户权限也能达到同样的效果,但是如果涉及多表关联时,远没有视图灵活和直观。
其次,把业务中常用的SQL 语句用一个视图来表示,可使查询语句更直观。
最后,性能优势虽在MYSQL中不存在,但是ORACLE 等商业数据库中,视图支持更多的特性,如物化视图。
内置函数
链接 https://blog.hijs.cc/post/mysql-func.html
预处理语句
设置stml1预处理,传递一个数据作为一个where判断条件:
mysql> prepare stmt1 from 'select * from t1 where id>?';
设置一个变量:
mysql> set @i=1;
执行stmt1预处理:
mysqll> execute stmt1 using @i;
设置@i为5:
mysql> set @i=5;
再次去执行stmt1:
mysql> execute stmt1 using @i;
如何删除预处理stmt1:
mysql> drop prepare stmt1;
事务处理
关闭自动提交功能
mysql> set autocommit=0;
从表t1中删除了一条记录
mysql> delete from t1 where id=11;
此时做一个p1还原点:
mysql> savepoint p1;
再次从表t1中删除一条记录:
mysql> delete from t1 where id=10;
再次做一个p2还原点:
mysql> savepoint p2;
此时回复到p1还原点,当然后面的p2这些还原点自动会失效
mysql> rollback to p1;
退回到最原始的还原点:
mysql> rollback;
mysql> START TRANSACTION;
Query OK, 0 rows affected
mysql> delete from a;
Query OK, 6 rows affected
mysql> rollback;
Query OK, 0 rows affected
mysql> START TRANSACTION;
Query OK, 0 rows affected
mysql> delete from a where id =1;
Query OK, 1 row affected
mysql> commit;
Query OK, 0 rows affected
触发器
下次补充
正则表达式
外键
忘记MySQL密码
1.KILL掉系统里的MySQL进程;
killall -TERM MySQLd
2.用以下命令启动MySQL,以不检查权限的方式启动;
safe_mysqld --skip-grant-tables &
3.然后用空密码方式使用root用户登录 MySQL;
MySQL -u root
4.修改root用户的密码;
MySQL> update MySQL.user set password =PASSWORD ('新密码' ) where User ='root' ;
MySQL> flush privileges;
MySQL> quit
作者
admin
发表于
2015-12-03 19:32:45
,添加在分类
mysql
下
,并被添加「
MYSQL
」标签
,最后修改于
2018-02-24 17:20:02
Comments