《深⼊浅出mysql》学习笔记⼀:sql分类及语法
1.sql分类:
(1)DDL:数据库定义语⾔,⽤于定义表,列,索引等数据库对象. create,drop,alter等
(2)DML:数据库操纵语⾔,增删改查数据库的记录insert,delete,update,select等
(3)DCL:数据库控制语⾔,定义了数据库的表,字段,⽤户的访问权限和安全级别 grant,revoke等2.DDL语句
(1)创建数据库:create database test1;
(2)删除数据库:drop database test1;
(3)创建表:create table user(name varchar(10),age int(2));
mysql语句分类(4)删除表:drop table user;
(5)修改表:
alter table user modify name varchar(20);
alter table user add column sex varchar(10);
alter table user drop column age;
Alter table user change age age1 int(4);
Alter table user rename user1;
3.DML语句
(1)插⼊记录insert into user(name,age)values(‘zhangsan’,18);
(2)删除记录:delete from user where name=’张三’
(3)更新记录:update user set age=1 where name=’ 张三’
(4)查询记录:select * from user;
(5)查询不重复的记录j:select distinct name from user;
(6)排序查询:select from user order by age desc;
(7)限制排序:select * from user order by age limit 1,30;
(8)聚合:select name,age from user group by age;
(9)聚合后条件:select name,age from user group by age having age > 18;
(having和where的区别:having是聚合后条件,where是聚合前条件)
(10)表连接:
①内连接:
Select ename,deptname from emp,dept where emp.deptno=dept.deptno;
②外连接:
左连接:(查询 emp 中所有⽤户名和所在部门名称:)
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
右连接:
java在线教程zullfallback
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
· 左连接:包含所有的左边表中的记录甚⾄是右边表中没有和它匹配的记录
· 右连接:包含所有的右边表中的记录甚⾄是左边表中没有和它匹配的记录
(11)⼦查询:需要的条件是另⼀个select的结果
(⼦查询的关键字主要包括in, not in,=,!=,exists,not exists )
(如果查询结果数唯⼀,可⽤=代替in)
select * from emp where deptno in(select deptno from dept);
select * from emp where deptno = (select deptno from dept limit 1);
(12)记录联合:
select * from t1 union select * from t2
select * from t1 union all select * from t2
(union和union all的区别:union是将union all查询出来的结果进⾏了⼀次distinct,去除重复后的结果)
4.DCL语句
(1)授权:创建⼀个数据库⽤户 z1,具有对 sakila 数据库中所有表的 SELECT/INSERT 权限:
grant select,insert on sakila.* to 'z1'@'localhost' identified by '123';
(2)收回权限:由于权限变更,需要将 z1 的权限变更,收回 INSERT,只能对数据进⾏ SELECT 操作:revoke insert on sakila.* from 'z1'@'localhost';
⼆:mysql⽀持的数据类型
数字类型,字符串类型,⽇期和时间类型
1.数值类型
2.字符串类型
3.⽇期类型
三.mysdql中的运算符
(1)算数运算符
(2)⽐较运算符
(3)逻辑运算符
(4)位运算符
四.mysql中常⽤的函数
1.字符串函数
2.数值函数
3.⽇期时间函数
4.其它常⽤函数
五.表类型(存储引擎的选择)
1.查询当前数据库⽀持的存储引擎
Show engines \G
2.Mysql常见存储引擎对⽐
(Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB)
(1)Myisam
Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB
Myisam不⽀持事务和外键
优势是访问速度快
(2)Innodb
Innodb提供事务和外键
占⽤磁盘空间保留索引,写的效率⽐innodb差
(3)Memory
数据存放在内存中
访问速度⾮常快(使⽤hash索引)
但服务⼀旦关闭,表中的数据丢失
五.选择合适的数据类型
1.char与varchar?
Char属于固定长度的字符类型,varchar属于可变长度的字符类型
所以char处理速度⽐varchar快得多,但是浪费存储空间
(但随着mysql版本的升级varchar的性能也在不断的提升,所以⽬前varchar被更多的使⽤)
<与blob?
(1)两者都能保存⼤⽂本数据
Blob能⽤来保存⼆进制数据,⽐如照⽚
Text只能保存⽂本数据,如⽂章
(2)text和bolo 字段在进⾏删除操作时会出现“空洞”现象(表数据⽂件的⼤⼩并没有因为删除数据⽽减⼩),可以使⽤OPTIMIZE TABLE t;进⾏优化操作
(3)采⽤的优化操作⼀般是把blob或text列放到⼀个单独的表中
3.浮点数与定点数?
(1)定点数:⼩数点固定在某个位置上的数据。就好像 0.0000001 ,0.0001111;
(2)浮点数:⼩数点位置可以浮动的数据。就像数学中的 1222.210^3也可以表⽰为1.222210^6;
(3)在java中,我们知道System.out.print("7.22-7.0=" + (7.22f-7.0f));的结果并不是0.22⽽是0.219999,因此在程序中尽量避免浮点数的⽐较,运算。⽽是通过定点数进⾏⽐较和运算
BigDecimal b1 = new String(v1));
(4)数据库中,float,double表⽰浮点数
⽤decimal或numberic表⽰定点数
所以对于货币等敏感数据,⽤定点数存储
4.⽇期类型的选择?
如果只记录年份,⽤year
如果还要记录时分秒,⽤datetime
如果考虑不同时区,⽤timestamp
六.字符集
openstack openshift(1)第⼀个字符集ASCII
ascii码对照表 英文字母e是多少(2)为了处理不同的⽂字,⼜出现了⼏百种字符集。如iso-8859,GBK,GB2312等javascript跳转到另一个页面
(3)为了统⼀编码,国际标准化组织iso制定了国际字符集标准UCS,这种标准采⽤四字节编码,将代码空间划分位组,⾯,⾏,格
(4)这种UCS编码遭到了很多美国计算机协会的反对(sun,apple,ibm等)它们组成了unicode的协会,并推出了unicode1.0(⼆字节)(5)后来为了编码格式的统⼀,双⽅展开谈判,将unicode编码并⼊UCS的0组0字⾯。把它称作基本多语⾔⽂字⾯(BMP),剩下的两个字节做辅助字⾯和专⽤字⾯
(6)其实⼈们常⽤到的还是unicode⾥的字符(99%),但是要⽤unicode⾥没有⽽ucs有的怎么办呢?所以制定了UTF-16,后来UTF-16在使⽤过程中出现了⼀系列的问题,所以出现了UTF-8(1⾄4字节编码)
七.索引的设计和使⽤
0.什么是索引?
系统根据某种算法,将已有的数据(和未来新增的数据)单独建⽴⼀个⽂件,⽂件能够实现快速的匹配数据,并能够快速的到对应表中的记录
1.每种存储引擎(innodb,myidsam等)对每个表⾄少⽀持16个索引,myisam和innodb默认创建的都是BTREE索引,memory存储引擎默认使⽤hash索引
2.创建索引:
create index 索引名 on 表名列命
linux查看目录下是否有某个文件3.删除索引
drop index 索引名 on 表名
(1)主键索引
(2)唯⼀索引
(3)全⽂索引:根据⽂章内部的关键字进⾏索引
(4)普通索引
⼋.视图
1.什么是视图?
视图是⼀种虚拟存在的表。通俗的讲,视图就是⼀条SELECT语句执⾏后返回的结果集。
2.什么时候⽤到视图?
(1)经常⽤到的查询或复杂的联合查询
(2)涉及到权限管理(⽐如表中某部分字段含有机密信息,不让低权限的⽤户看到,可以提供给他们⼀个适合他们权限的视图
3.语句
(1)创建:Create or replace view 视图名 as + 查询语句
(2)查看:show create view 视图名
(3)删除:drop view 视图名
4.视图的意义
(1)可以节省sql语句(将⼀条复杂的查询结果通过视图保存)
(2)视图操作是怎对查询出来的结果,不会对原数据产⽣影响,相对安全
(3)更好的进⾏权限控制
九.函数
1.什么是函数?
将⼀段代码封装到⼀个结构中,在需要执⾏代码的时候调⽤函数即可(实现了复⽤)(任何函数都有返回值,因此函数通过select调⽤)1.函数的分类?
(1)系统函数:系统调⽤好的函数,直接调⽤即可
Select subString(字符串,开始,结束)
Select char_length(字符串)
(2)⾃定义函数:
创建语法:create function 函数名(形参列表)
Begin
函数体
Return 类型
End
调⽤: select 函数名();
⼗.存储过程
1.存储过程是什么?
存储过程是没有返回值的函数
2.创建过程?
Create procedure 过程名字(参数列表)
Begin
---过程
End
3.调⽤过程?
(过程没有返回值,不能⽤select调⽤。有⼀个专门的关键字call)
Call 过程名();
4.删除过程
Drop proceddure pro1;
5.过程参数
过程参数还有⾃⼰的类型限定(In out inout)
IN参数:
仅需要将数据传⼊存储过程,并不需要返回计算后的该值。
OUT参数:
不接受外部传⼊的数据,仅返回计算之后的值。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论