Note:这里根据 CSDN Mysql技能树 整理的易错题,可参考MySQL 有这一篇就够,MySQL详细学习教程(建议收藏),MySQL 菜鸟教程
create + grant),参考mysql创建新用户并授权mysql -h Joe的开发机地址-u joe-p mysql在局域网内的任何计算机上使用。mysql -h IP地址 -u 用户 -p 密码 -P 端口登录。create database 数据库名 或者 drop ...)id INT PRIMARY KEY AUTO_INCREMENT)drop table 表名),参考MySQL 有这一篇就够innodb,参考MySQL常见的三种存储引擎,mysql索引详解InnoDB 支持事务和外键,有更好的并发能力。更新(删除)操作频率也高,或者要保证数据的完整性,比如OA自动化办公系统。MyISAM 不支持事务和外键,结构简单,可以压缩为只读状态。以读写插入为主的应用程序,比如博客系统、新闻门户网站。Memory 引擎将数据保存在内存中,重启会丢失数据,读速度快很快,适合作为会话表和缓存表。Memory引擎:
memory存储引擎myisam存储引擎 (磁盘临时表也可以使用innodb存储引擎,通过internal_tmp_disk_storage_engine参数来控制使用哪种存储引擎,mysql5.7.6之后默认为innodb存储引擎,之前版本默认为myisam存储引擎。Note:
DDL代表数据定义语言,是一种有助于创建数据库模式的SQL命令。DDL中常用的命令有:create,drop,alter,truncate和rename等等。DML代表数据操作语言,是一种有助于检索和管理关系数据库中数据的SQL命令。DML中常用的命令有:insert,update,delete和select等等。varchar str = "123dafa" // 转换为数字是 123DECIMAL(P,D):P是表示有效数字数的精度,P范围为1〜65,D是表示小数点后的位数,D的范围是0~30,MySQL要求D小于或等于(<=)P 比如DECIMAL(4,2),值为23.46。int类型的x和y,select id, (x^2 + y^2)/2 as result from points;输出的result类型为decimal类型。default约束,这题datetime和timestamp都行),可参考MySQL默认值约束,mysql datetime与timestamp区别varchar类型的长度是可变的,而char类型的长度是固定的,当定义为 char(10)时,即使插入的内容是 abc 3 个字符,它依然会占用 10 个字符,其中包含了 7 个空字符的存储空间。char 长度最大为 255 个字符,varchar 长度最大为 65535 个字符;varchar类型的查找效率比较低,而char类型的查找效率比较高,因此变长度使用 varchar,固定长度使用char。MySQL 5.0.3版的一项更改包括将VARCHAR字段的最大长度从255个字符增加到65,535个字符。这使得VARCHAR类型比以往任何时候都更类似于TEXT。虽然两种数据类型共享的最大长度为65,535个字符,但VARCHAR中的VAR表示您可以将最大大小设置为1到65,535之间的任何值。 TEXT字段的最大固定大小为65,535个字符。MEDIUMTEXT最多可存储16 MB的字符串,LONGTEXT最多可存储4 GB的字符串。mediumBlob),可参考MySQL各个类型详解(看评论),Blob数据类型及应用,MySQL:BLOB与TEXT及其最大存储限制blob用于存放二进制数,最大字节数为65535,即文件大小最大为65K;而varchar最大字符数为65535。char,varchar,text是以字符为基本单位;而blob是以字节为基本单位,没有字符集的说法。INSERT INTO SELECT语句从一个表复制数据,然后把数据插入到一个已存在的表中,要求目标表和源表都存在,mysql支持INSERT INTO SELECT语句。SELECT INTO FROM语句在插入时会自动创建目标表,并将源表中指定字段数据插入到目标表中,这里要求目标表不存在。但mysql中不可用 SELECT INTO FROM语句,建议先创建目标表,接着使用INSERT INTO SELECT语句把源表数据转存到目标表中。call调用)。而函数可以作为查询语句的一个部分来调用。表的基本结构(InnoDB存储引擎用B+Tree实现其索引结构,B+树相较于B-树的特点是:非叶子节点只存储键值信息;所有叶子节点之间都有一个链指针;数据记录都存放在叶子节点中),可参考mysql索引详解
主键(主键或唯一键可以被引用为外键约束foregin key,可 级联更新 和 级联删除),可参考MySQL外键约束详解
唯一约束1(如何保证user输入的book唯一,在 isbn 列上加唯一约束或者设置为主键),唯一约束2(不修改表字段,可添加唯一约束),可参考MySQL添加唯一约束(UNIQUE)
Note:
唯一约束用来保证一列(或一组列)中的数据是唯一的,类似与主键,但是有以下区别:
NULL 值。自增序列(自增字段必须是主键;即使插入操作失败,自增计数仍然会被递增,下次操作使用下一个整数;),可参考关于 MySQL 自增 ID 的事儿,自增主键与UUID的优缺点
Note:
ID不发生主键冲突(前提是老系统也是数字型的)。特别是在新系统上线时,新旧系统并行存在,并且是异库异构的数据库的情况下,需要双向同步时,自增主键将是你的噩梦。UUID唯一识别码 (Universally Unique Identifier):是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。uuid之间比较大小相对数字慢不少, 影响查询速度;uuid占空间大, 如果你建的索引越多,影响越严重。Max ID ,当执行语句时则会提示主键冲突:1062 - Duplicate entry ‘4294967295’ for key ‘PRIMARY’,此时可以直接选择 Bigint 类型,它的取值范围是无符号情况下: 0 ~ 2^64–1(18446744073709551615),在一般场景下它是足够使用:假设每秒增加的记录数为1亿/秒,大约5849年才会用完。视图( 视图是从一个或多个表中导出来的表,是一种虚拟存在的表,其物理上是不存在的,但可用于查询),可参考【MySQL视图】视图的概念、创建、查看、删除和修改
计税(存储函数,create function得到个人所得税函数),可参考MySQL的存储函数
Note:
create function individual_income_tax(salary decimal(12, 4))
returns decimal(12, 4)
deterministic
begin
-- ...
end;
创建存储过程,参考存储过程——输入参数(in)、输出参数(out)、输入输出参数(inout)
Note:
create procedure sp_idt(in salary decimal(12, 4), out tax decimal(12, 4), out take_home decimal(12, 4))
begin
set tax = individual_income_tax(salary);
set take_home = salary - tax;
end;
触发器是一种特殊的存储过程。
触发器,交易审计(定义insert和delete类型的trigger),可参考MySQL触发器
Note:
SQL片段,但是触发器无需调用,当对数据库表中的数据执行DML操作(insert,update,delete)时自动触发这个SQL片段的执行, 无需手动调用。语法如下:create trigger 触发器名 before|after 触发事件
on 表名 for each row
begin
执行语句列表
end;
create trigger trigger_test after insert
on user for each row
begin
insert into user_logs values(1,now,'有新用户增加');
end
MYSQL中触发器中不能对本表进行insert,update,delete操作,以免递归循环触发1s, insert table 500条数据,那么就需要触发500次触发器,光是触发器执行的时间就要花费500s, 而insert 500条数据一共是1s,那么insert的效率就非常的低了。show triggers;,删除触发器drop trigger if exists trigger_test;。as可省略),可参考mysql中别名(列别名和表别名),MySQL 别名WHERE子句中使用列别名。原因是当MySQL评估求值WHERE子句时,SELECT子句中指定的列的值可能尚未确定。Where不配Having,WHERE age BETWEEN 18 AND 24相当于WHERE age >= 18 AND age <= 24),可参考MySQL中的BETWEEN...AND的用法(BETWEEN是闭区间)MySQL用group by进行分组,用case when ... then ... when ... then ... end增加多个判断条件),可参考Sql 实现数据透视表功能,MySQL之数据分组与数据透视表dept升序按salary降序排序:select id, name, dept, salary from employee order by dept, salary desc;UNION 和 UNION ALL 内部的 SELECT 语句必须拥有相同数量的列。SELECT 语句中列的顺序必须相同,因为union时是按照字段顺序匹配,而不是按照字段名称匹配。union 对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序。union all 对两个结果集进行并集操作,包括重复行,不进行排序。REGEXP 与 模糊查询like,可参考MySQL中的正则表达式(REGEXP),MySql like模糊查询语句用法,MySQL学习笔记: like和regexp的区别WHERE 子句中使用LIKE子句,并且使用LIKE子句代替等号 =。'%a' 以a结尾的数据
'a%' 以a开头的数据
'%a%' 含有a的数据
'_a_' 三位且中间字母是a的
'_a' 两位且结尾字母是a的
'a_' 两位且开头字母是a的
Contacts.Phone 以查找以 00 结尾的所有电话号码:SELECT Surname, Surname, City, Phone
FROM Contacts
WHERE Phone REGEXP '\\d{8}00';