Mysql基本用法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
#登录数据库
mysql -hlocalhost -uroot -p;
#修改密码
mysqladmin -uroot -pold password  new;
 
 
#显示数据库
show databases;
#显示数据表
show tables;
#选择数据库
use examples;
#创建数据库并设置编码utf-8 多语言
create  database  `examples` default  character  set  utf8 collate  utf8_general_ci;
#删除数据库
drop  database  examples;
#创建表
create  table  test(
     id int (10) unsigned zerofill not  null  auto_increment,
     email varchar (40) not  null ,
     ip varchar (15) not  null ,
     state int (10) not  null  default  '-1' ,
     primary  key  (id)
)engine=InnoDB;
#显示表结构
describe
#删除表
drop  table  test;
#重命名表
alter  table  test_old rename test_new;
#添加列
alter  table  test add  cn int (4) not  null ;
#修改列
alter  table  test change id id1 varchar (10) not  null ;
#删除列
alter  table  test drop  cn;
#创建索引
alter  table  test add  index  (cn,id);
#删除索引
alter  table  test drop  index  cn
#插入数据
insert  into  test (id,email,ip,state) values (2, 'qq@qq.com' , '127.0.0.1' , '0' );
#删除数据
delete  from  test where  id = 1;
#修改数据
update  test set  id= '1' ,email= 'q@qq.com'  where  id=1;
#查数据
select  * from  test;  #取所有数据
select  * from  test limit 0,2;  #取前两条数据
select  * from  test email like  '%qq%'  #查含有qq字符 _表示一个 %表示多个
select  * from  test order  by  id asc ;#降序 desc
select  * from  test id not  in ( '2' , '3' );#id不含2,3或者去掉 not 表示含有
select  * from  test timer between  1 and  10;#数据在1,10之间
 
# ---------------------------表连接知识------------------------------
#等值连接又叫内链接 inner  join  只返回两个表中连接字段相等的行
select  * from  A inner  join  B on  A.id = B.id; #写法1
select  * from  A,B where  A.id = B.id; #写法2
select  a.id,a.title from  A a inner  join  B b on  a.id=b.id and  a.id=1;#写法3 表的临时名称
select  a.id as  ID,a.title as  标题 from  A inner  join  B on  A.id=B.id;#添加 as 字句
 
#左连接又叫外连接 left  join  返回左表中所有记录和右表中连接字段相等的记录
select  * from  A left  join  B on  A.id = B.id;
 
select  * from  A left  join  (B,C,D) on  (B.i1=A.i1 and  C.i2=A.i2 and  D.i3 = A.i3);#复杂连接
 
#右连接又叫外连接 right  join  返回右表中所有记录和左表中连接字段相等的记录
select  * from  A right  join  B on  A.id = B.id;
 
#完整外部链接 full  join  返回左右表中所有数据
select  * from  A full  join  B on  A.id = B.id;
 
#交叉连接 没有 where 字句 返回卡迪尔积
select  * from  A cross  join  B;
-------------------------表连接结束------------------------------------------------------------
-----------------索引创建------------------------------------------------
show index  from  A #查看索引
alter  table  A add  primary  key (id) #主键索引
alter  table  A add  unique ( name ) #唯一索引
alter  table  A add  index  name ( name ) #普通索引
alter  table  A add  fulltext( name ) #全文索引
alter  table  A add  index  name (id, name ) #多列索引
 
#常用函数
abs (-1)#绝对值
pi()#pi值
sqrt(2)#平方根
mod(-5,3)#取余-2
ceil(10.6)#进位+1 结果11 ceil(10.0)结果10
floor(10.6)#取整 10
round(2.5)#四舍五入到整数 结果3
round(2.5,2)#保留两位小数 结果2.50
truncate (2.5234,3)#取小数后3位不四舍五入 2.523
sign(-2);#符号函数 返回-1 0还是0 正数返回1
pow(2,3),exp(2);#2的3次幂 或e的2次幂
log(2),log10(2);#求对数
radians(180),degrees(0.618);#角度弧度转换
sin(0.5),asin(0.5)#正弦和反正弦 类似cos acos tan atan
length( 'hi' )#计算字符长度
concat( '1' ,1, 'hi' )#合并字符串
insert ( '12345' ,1,0, '7890' );#从开头第1个字符开始到0个结束,替换成后边字符串,0表示在最前边插入
ucase( 'a' ),lcase( 'A' )#转成大写和小写
left ( 'abcd' ,2), right ( 'abcd' ,2);#返回前两个字符和后两个字符
ltrim( '  0  ' ),rtrim( ' 0 ' ),trim( '  0  ' )#删除空格
replace ( '1234567890' , '345678' , '0' );#替换输出12090
substring ( '12345' ,1,2)#取字符 输出12 1是位置 2是长度
instr( '1234' , '234' );#取得234位置是2
reverse( '1234' );#反序输出4321
current ()#返回日期
curtime()#返回时间
now()#返回日期时间
month (now())#当前月份 monthname 英文月份
dayname(now())#星期英文 dayofweek()1是星期天 weekday()1是星期二
week(now())#本年第多少周
dayofyear(now()),dayofmonth(now())#今天是本年第多少天 今天是本月第多少天
year (now()), month (now()), day (now()), hour (now()), minute (now()), second (now())#返回年月日 时分秒
time_to_sec(now()),sec_to_time(3600*8);#转换时间为秒和还原
version()#mysql版本
database ()#当前连接的数据库 没有为 null
user ()#获取用户名
md5( 'a' )#加密字符串
ascii( 'a' )#ascii值97
bin(100),hex(100),oct(100)#返回二进制 十六进制 八进制
conv(10001,2,8);#各种进制相互转换
rand()#生成0到1之间随机数
sleep(0.02)#暂停秒数
 
数据库优化
.开启缓存,尽量使用php函数而不是mysql
. explain select  语句可以知道性能
.一行数据使用 limit 1;
.为搜索字段重建索引 比如关键字 标签
.表连接 join 保证字段类型相同并且有其索引
.随机查询使用php $r = mysql_query( "SELECT count(*) FROM user" );
                     $d = mysql_fetch_row($r);
                     $rand = mt_rand(0,$d[0] - 1);
                     $r = mysql_query( "SELECT username FROM user LIMIT $rand, 1" );
.避免使用 select  * 应该使用具体字段
.每张表都是用id主键,并且是unsigned int
.对于取值有限而固定使用enum类型,如性别 国家 名族 部门 状态
.尽可能使用 not  null  ip存储使用 int (4),使用ip 转化函数ip2long()相互long2ip()
. delete insert 语句会锁表,所以可以采用分拆语句操作
     while(1){操作语句;usleep(2000);}
.选择正确的存储引擎;MyISAM适合大量查询 写操作多用InnoDB支持事务
 
#存储过程
#存储程序
delimiter #定义存储程序
create  procedure  getversion( out  params varchar (20)) #params是传出参数 in 传进 out 传出 inout传回
begin
select  version() into  params; #版本信息赋值params
end
call getversion(@a); #调用存储过程
select  @a;
delimiter #定义存储函数
create  function  display(w varchar (20)) returns  varchar (20)
begin
return  concat( 'hello' ,w);
end
select  display( 'world' );
 
drop  procedure  if exists spName; #删除一个存储过程
alter  function  spName [];#修改一个存储过程
show create  procedure  spName;#显示存储过程信息
declare  varName type default  value;#声明局部变量
#if语句
if 条件 then  语句
elseif 条件 then  语句
else  语句
end  if
# case 语句
case  条件
when  条件 then  语句
when  条件 then  语句
else  语句
end  case
#loop语句
fn:loop
语句
end  loop fn;
leave fn #退出循环
#while语句
fn:while 条件 do
语句
end  while fn
 
 
#mysql使用帮助资料
? contents; #列出帮助类型
? data types;#列出数据类型
int ;#列出具体类型
? show;#show语句
? create  table ;#
#常见表的比较
                     Myisam   BDB    Memory    InnoDB    Archive
存储限制        no            no       yes                64T        no
事物安全                      支持                         支持                        
锁机制         表锁           页锁    表锁             行锁          行锁
全文索引       支持
外键支持                                                        支持
myisam  frm存储表定义 MYD存储数据 MYI存储索引
InnoDB 用于事务处理
char  varchar 保存和索引都不相同
浮点数 float (10,2) 定点数 decimal (10,2)
长度一定下,浮点数表示更大数据范围,缺点是引起精度丢失,货币等使用定点数存储
         索引适合于 where 字句或者连接字句列
         对于唯一值使用唯一索引
 
添加新用户 grant  select , insert , update , delete  on  *.* to  Yoby@localhost identified by  'mysql' ;
#           *.* 数据库名.表名,限制登录某一个数据库 test.*                           localhost是本地主机 网络可以使用 '%' 代替所有主机        'mysql' 是密码 Yoby是用户名  所有权限可以用 all 代替
查看用户权限 show grants for  'root' @ 'localhost' ;
移除权限  revoke  all  on  *.* from  root@localhost;
group  by  id 分组
having  限制字句
select1 union  select2 联合查询有重复去掉保留一行
select2 union  all  select2 所有行合并到结果集中去

  

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
关系型数据库 MySQL 索引
mysql中EXISTS用法注意点
mysql中EXISTS用法注意点
|
2月前
|
存储 SQL 关系型数据库
mysql用法
mysql用法
41 4
|
3月前
|
存储 自然语言处理 关系型数据库
MySQL的match用法说明
MySQL的match用法说明
126 4
|
3月前
|
SQL 关系型数据库 MySQL
MySQL的用法
MySQL的用法
55 1
|
4月前
|
存储 关系型数据库 MySQL
mysql中的left join、right join 、inner join的详细用法
【8月更文挑战第16天】在MySQL中,`INNER JOIN`、`LEFT JOIN`与`RIGHT JOIN`用于连接多表。`INNER JOIN`仅返回两表中匹配的行;`LEFT JOIN`保证左表所有行出现于结果中,右表无匹配时以NULL填充;`RIGHT JOIN`则相反,保证右表所有行出现于结果中。例如,查询学生及其成绩时,`INNER JOIN`仅显示有成绩的学生;`LEFT JOIN`显示所有学生及他们对应的成绩,无成绩者成绩列为空;`RIGHT JOIN`显示所有成绩及对应学生信息,无学生信息的成绩条目则为空。
|
5月前
|
存储 JSON 关系型数据库
mysql中find_in_set()函数用法详解及增强函数
总结而言,`FIND_IN_SET()`是MySQL中处理由逗号分隔的字符串列表的一种便捷方法,尤其适用于列表相对较短且不经常更改的场景。然而,对于更为复杂的需要高性能和可扩展性的数据库设计,它可能不是最优选择,应考虑使用更加正规化的数据库结构。
597 2
mysql中find_in_set()函数用法详解及增强函数
|
3月前
|
存储 自然语言处理 关系型数据库
全文索引MySQL的match用法是什么?
【9月更文挑战第2天】全文索引MySQL的match用法是什么?
88 0
|
6月前
|
关系型数据库 MySQL
【随手记】MySQL中ROW_NUMBER()、RANK()和DENSE_RANK()函数的用法
【随手记】MySQL中ROW_NUMBER()、RANK()和DENSE_RANK()函数的用法
170 1
|
6月前
|
关系型数据库 MySQL
MySQL中CASE WHEN用法总结
MySQL中CASE WHEN用法总结
|
6月前
|
存储 关系型数据库 MySQL
mysql mysqldump用法详解
mysql mysqldump用法详解