mysql知识碎片(笔记)

创建数据库时修改数据库格式
create database if not exists {dbname} character set gbk

修改数据库编码方式

alert Database {dbname} character set = utf8

整型
tinyint -128 到 127 unsigned 0 到 255 占一个字节

smallint -2(15)次方 到 2(15)次方-1 unsigned 0 到 2(16)次方-1 占2个字节

mediumint -2(23)次方 到 2(23)次方-1 unsigned 0 到 2(24)次方-1 占3个字节

int -2(31)次方 到 2(31)次方-1 unsigned 0 到 2(32)次方-1 占4个字节

bigint -2(63)次方 到 2(63)次方-1 unsigned 0到2(64)次方-1 占8个字节

浮点型
float(m,d) 为数字总位数,d是小数点后面的位数 so m>=d

double(m,d)

decimail(m,d)

double是float几乎是存储的两倍 一般用float 因为存储范围越大,占得字节也就越大

float占4个字节,double占8个字节,decimail(M,D)占M+2个字节(价格设置建议使用)

char(m) m个字节 m:0–255

varchar(m) m<65535
以上两个的区别是比方说存储一个abc,若使用char存储,则abc所占字符的剩余部分用XXX补全,而varchar是只存储abc

tinytext 2(8)+1
text 2(16)+2个字节
mediumtext 2(24)+3个字节
longtext 2(32)+4个字节

多出来加的字节都是用来保存数据值的长度的,对长度可变的数据进行处理的时候,mysql要把数据内容和长度都保存起来

enum(‘男’,’女’,’保密’) 占1或2个字节 ,取决于枚举值的个数,最多65535个值

set(”,”) 1,2,3,4或8个字节,取决于set成员的数目,最多64个成员
enum相当于单选,set相当于多选

unique key 唯一约束 保证记录唯一性 可以为空 可以存在多个唯一约束

default”;

foreign key (表属性) references {tablename} (表属性) 设置外键
cascade 从父表删除或更新且自动删除或更新子表中的匹配项

修改表
添加单列
alter table {tablename} add {属性 属性类型}after {列明}
after后面不写则会插入到表的最后一行,写了after表示插入到某列之后

添加多列
alter table {tablename} add ({属性 属性类型},{属性 属性类型}…)

修改数据表列位置和属性(比方说把 tinyint类型改成smallint)
alter table {tablename} modify {属性 属性类型} first/after…

修改数据表列名称和属性
alter table {tablename} change{属性 属性类型}

修改数据表名
alter table {tablename} rename {新的表名}

select中查询中属性的别名用as
group by 对查询结果进行分组
having 分组条件 having中的出现的属性 必须要在select中体现,或者having里出现的属性,必须要包裹在聚合函数类(如count,sum,max,min,AVG,round)

保留小数 用round(m,d) d代表要四舍五入的小数点后的位数

子查询必须出现在圆括号内,可以包括多个关键字或者条件
子查询可以返回一个标量,

比较运算符,>= <= = > < 要配合any all some使用

,>= +any/some 指的是大于最小值就可以了
<,<= +any/some 指的是小于最大值就可以了
= +any/some 指的是等于任意值

,>= +all 指的是大于最大值
<,<= +all 指的是小于最小值
<>,!= +all 指的是不等于任意值

=any 跟 in等效
!=all ,<>all 跟 not in等效

多表更新
链接类型
{[inner|cross]join|{left|rignt}[outer]join}
update {tablename} inner join {tablename} on {一张表的属性} = {另一张表的属性}(这里是找出相等属性值) set {表属性} = {表属性}(这里将右边属性值赋给左边)

select * from table1 as a inner join table2 as b on a. = b.*

内链接,仅显示左表及右表符合链接条件的记录
左外连接 显示左表中的全部记录以及右表中符合条件的记录
右外连接 显示右表中的全部记录以及左表中符合条件的记录

删除多条记录
delete t1 from {tablename}as t1 left join {tablename}as t2 where t1.* = t2.*

字符函数
concat()字符链接 concat(‘a’,’-‘,’b’) 代表a-b
concat_ws()使用制定分隔符链接 concat_ws(‘|’,’a’,’b’,’c’) 代表a|b|c

format()数字格式化,format(1000.00,2) 代表1,000.00 千分位

lower()英文变小写
upper()英文变大写

left()从左侧开始截取 left(‘mysql’,2)代表my
right()从右侧开始截取 right(‘mysql’,3)代表sql

length()获取字符长度,空格也算一个长度

ltrim()删除前导空格
rtrim()删除后续空格
trim()删除前导和后续空格

substring() 截取字符串
like/not like匹配相似字符

查找属性中包含%的
select * from {tablename} where {属性} like ‘%1%%’ escape’1’;

数值运算符
ceil()向上去整
div 整数除法
floor()向下取整
mod取余数
power()幂运算 power(3,3)代表3的3次方=27
round()四舍五入 round(23.2367,2)代表保留这个数的小数点后两位 23.24
truncate()数字截取 truncate(23.2367,2)结果是23.23

比较运算符
(not)between..and .. (不)在范围之类
(not)in() (不)在列出的范围之类
is(not)null (不)为空

创建自定义函数

不带参数的自定义函数
create function f1()
returns varchar(30) //定义返回数据类型
return date_format(now(),’Y年m月d日 H时i分s秒’)//函数内的操作

带参数的自定义函数
create function f2(num1 smallint unsigned,num2 smallint unsigned)
returns float(10,2) unsigned
return (num1+num2)/2

函数体为复合结构则使用begin..end语句
create function adduser(username varchar(20))
returns int unsigned
begin
insert test(username) values(username);
return last_insert_id();
end

删除函数
drop function [if exists] {functioname}

创建存储过程:
create procedure removeUserById(IN p_id int unsigned)
begin
delete from users where id = p_id
end

删除存储过程
drop procedure [if exists] sp_name

调用存储过程:
call {存储名}(参数)

用in输入数据处理 用out输出数据
create procedure removeUserAndReturnUserNums(IN p_id int unsigned,OUT userNums int unsigned)
begin
delete from user where id = p_id;
select count(id) from users into userNums;
end

call removeUserAndReturnUserNums(27,@num)
@num为一个变量
然后select @num 输出数据总条数(select count(id) from users)

在begin end结束之后局部变量也就消失了

set @i = 7;被称为用户变量

局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的);

申明局部变量语法:declare @变量名 数据类型;例如:declare @num int;

赋值:有两种方法式(@num为变量名,value为值)

set @num=value; 或 select @num=value;

row_count()获取被插入,删除,更新所影响的行数
php中的mysql_affected_rows()就是调用了这个方法

把一些复杂的操作封装成存储过程,可以提高性能

创建存储过程时需要通过delimiter语句修改定界符

存储引擎特点:
myisam:存储限制可达256tb,支出索引,表锁(表级锁定),数据压缩

Innodb:存储限制为64tb,支持事务和索引,行锁,支持外键

猜你喜欢

转载自blog.csdn.net/wry_developer/article/details/77876838