mysql常用技巧
1.什么是数据库
数据库是按照数据结构,存储和管理数据的仓库。
关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等书序概念和方法来处理数据库中的数据。
DB:数据库 DBA:数据库管理员 DSMS:数据库管理系统
SQL:结构化查询语言. DQL:数据查询语言 DML:数据操作语言 DDL:数据定义语言 TCL:事务控制语言
mysql 是最流行的关系型数据库管理系统。
登入mysql -h 域名 -u 用户名 -P 端口号 -p 密码
查看mysql版本 mysql --version
或进入mysql select version
2、mysql语法规范
1.不区分大小写,建议关键字用大写
2.每条命令以;结尾
3.单行注释 # 或--空格 ,多行注释 /*...*/
查看所有的数据库 show databases;
打开制定的数据库 use 库名;
查看库下所有的表. show tables;
查看别的库下的表。show tables from 库名;
查看表结构 desc 表名;
产看当前使用的数据库 select database();
3.数据库操作
创建数据库 create database [if not exists] 数据库名 [default] character set 字符集;
修改数据库 alter database 数据库名 character set 字符集
删除数据库 drop database [if exists ] 数据库名
4.mysql数据结构
数字型 tinyint、smallint、int、bigint float(M,D) 整数个数+小数个数总共为M个,小数个数为M个 Double(M,D)
字符串类型 char(M) 固定长度 varchar(M)最大可显示M位 text 长文本 blob 二进制 set集合(value1,value2) enum枚举(value1,value2)
日期型 date 日期 time 时间 datetime 日期时间 timestemp 时间戳 year 年
5.表操作
create table [if not exists ] 表名(字段名 类型 约束条件)
常见约束条件
not null 非空
default 默认值
unique 唯一值
foreign key 外键
auto_increment 自增
外键设置
要在从表中设置
从表的外键类型要与主键相关联列的类型一样
主表的关联列至少位一个Key ,一般为主键
插入数据时,先插主表,再插从表
删除数据时,先删从表,在删主表
创建约束的时机 : 创建表时,修改表时
create table(id int primary key auto_increment ,name varchar(20),age int,constraint fk foreign key(表2的列名) reference 主表(列名) )
修改表结构 alter table 表名
add column 字段名 类型 [first | after 列名] 添加新字段
add index [索引名] 字段名. 添加索引
add primary key (字段名) 添加主键
add unique(索引) 字段名. 添加唯一
change column 字段名 新字段名 类型
modify column 字段名 新类型
drop column 字段名
drop primary key 删除主键
drop index 索引名
rename [as] 新表名
add [constraint 约束名] 约束类型(字段名)
删除表 drop table 表名
6.算数运算符
+ - * / % div
7.比较运算符
= != <> > is null between and 、in 、 like 、regexp 匹配字符串
匹配符:% 任意多个字符。- 任意一个字符
8、逻辑运算符
&& and 与。 || or 或 ! not 非 xor 异或
9、表数据的增删改
insert into 表名(column1,column2) values(value1,value2)
insert into 表名 set column1 = value1
update 表名 set column1 = value1 [where 条件表达式].
delete from 表名 [where 条件表达式]
truncate table 表明
*****delete与truncate的区别
1.delete 可与where连用
2.对于存在自增加列的表,使用truncate后,添加数据从1开始,delete从上次计数后一个开始
3.truncate 效率高
4.delete 可用于事务,回滚
5.truncate 无返回值 delete可显示受影响的行数
级联删除。 on delete casecade on delete setnull
10、表数据的查询
select 查询内容 5
from 表1 别名1 [inner | left |right] join 表2 别名2 on 连接条件. 1
where 筛选条件。 2
group by 字段名分组 3
having 分组后筛选条件 4
order by 字段名 6
limit a,b 从索引a开始,显示b条数据 7
distinct 删除重复值
聚合函数. sum \avg\min\max \count
子查询。select 查询是另一个查询的附属. = > exists any all
select * from 表A where user_id in (select user from 表b )
***合并查询union 与union all 的区别
union all 不删除重复值
union 删除重复值
11、mysql中常用函数
字符函数
length :计算字节长度 length(字符)
concat :拼接字符串 concat(str1,str2)
lower : 小写 lower(str)
upper : 大写 upper(str)
substr(str,index1,[length2]). 截取 在字符串中,从索引1开始,截取长度为length2的长度
instr(str,substr) 查询索引位置。在str中查找第一次出现substr的索引位置,找不到则为0
trim(str from string) 删除 string中删除指定str
lpad(str,length,str2) 左填充 总长度为length,长度不够,用指定的字符串str2左填充
rpad(str,length,str2)右填充 总长度为length,长度不够,用指定的字符串str2右填充
replace(str,str2,str3) 替换. 在字符串str中,用str3替换str中的str2
数字函数
round(1.654,2) 四舍五入 小数后保留两位小数
ceil(2,3) 向上取整
floor(2.3) 向下取整
truncate(1.2222,2) 小数后截断2位
mod(10,3) 取余。
日期函数
now :显示现在的日期和时间
curdate : 显示现在的日期
cuttime: 显示现在的时间
year : 显示年份
month:显示月份
day :显示日
datediff(日期1,日期2)。计算两个日期的时间差
str_to_date :字符串格式变为时间格式 str_to_date("19930804","%Y%m%d")
date_format:日期 准化为字符串 date_format(now(),"%Y-%m-%d")
12、条件语句
一、if (条件,值1,值2)
二、
if 条件1 then 语句1
elseif 条件2 then 语句2
elseif 条件3 then 语句3
else 条件n
end if
select if(10>5,1,0)
case 两种使用情况
一、case 要判断的字段或表达式
when 常量1 then 显示的值1或语句1
when 常量2 then 显示的值2或语句2
...
else 要显示的值n或语句n
end
二 、 case
when 要判断的语句1 then 显示值1或语句1
when 要判断的语句2 then 显示值2或语句2
...
else 要显示的值n或语句n
end
13、视图
多次用到同一个结果
查询的sql语句复杂
create view 视图名 as (查询语句) 创建试图
drop view 试图名. 删除试图
show create 试图名 查看试图
desc 试图名.
14.存储过程和函数
创建存储过程 create procedure 存储过程名(参数列表)begin 存储过程 end
参数列表包括三部分。 参数模式. 列名。 参数类型。
参数模式:
in :输入值。该参数可以作为输入
out :输出值 该参数为输出值
inout :输入输出值。该参数可输入也可输出
delimiter 重构结束标志
call 存储过程名(实参列表)
删除存储过程
drop procedure 存储过程名
查看存储过程的信息
show create procedure
存储过程可以有0个返回值或多个返回值
函数只有1个返回值
创建一个函数 create function 函数名(函数列表) returns 返回类型
begin. 函数体 return end
函数列表. 参数名 参数类型
调用函数
select 函数名(实参)