篇幅简介

一、Msql数据类型

1、整型

tinyint,  占 1字节 ,有符号: -128~127,无符号位 :0~255

smallint, 占 2字节 ,有符号: -32768~32767无符号位 :0~65535

mediumint 占 3字节 ,有符号: -8388608~8388607,无符号位:0~16777215:

int, 占 4字节 ,有符号: -2147483648~2147483647,,无符号位 无符号位 :0~4 284967295

bigint, bigint,bigint, 占 8字节

bool  等价于 tinyint

2、浮点型

float([m[,d]])  占 4字节 ,1.17E-38~3.4E+3838~3.4E

double([m[,d]])  占 8字节

decimal([m[,d]])  以字符串形式表示的浮点数

3、字符型

char([m]): :定长的字符 ,占用 m字节

varchar[(m)]::变长的字符 ,占用 m+1m+1 字节,大于 255 个字符:占用 m+2m+2

tinytext,255 个字符 (2 的 8次方 )

text,65535 个字符 (2 的 16 次方 )

mediumtext,16777215字符 (2 的 24 次方 )

longtext (2的 32 次方 )

enum(value,value,...)占 1/2个字节 最多可以有 65535 个成员 个成员

set(value,value,...) 占 1/2/3/4/8个字节,最多可以 有 64个成员

二、Mysql数据运算

1、逻辑运算 and or not

for example:

选择出 书籍价格 为(30,60,40,50)的记录

sql> select bName,publishing,price from books where price=30 or price=40 or price=50 or price=60;

1

2、in 运算符

in 运算符用于 WHERE 表达式,以列表的形式支持多个选择,语法如下

where colunmm in (value1,value2,.......)

where colunmm not in (value1,value2,..........)

当in前面加上not时,表示与in相反,既不在结果中

sql> select bName,publishing,price from books where  price in (30,40,50,60)order by price asc;

2

3、算术运算符  >= | <=| <> |=

for example

找出价格小于70的记录

mysql> select bName,price from books where price <= 70;

3

4、模糊查询  like '%...%'

字段名 [not] like  '%......%'   通配符  任意多个字符

查询书中包含程序字样的记录

mysql> select bName,price from books where bName like '%程序%'

4

5、范围运算 [not] between .......and

查找价格不在30和60之间的书名和价格

mysql> select bName,price from books where price not between 30 and 60  order by price desc;

5

6、Mysql 子查询

select where条件中又出现select

查询类型为网络技术的图书

mysql> select bName,bTypeId from books where bTypeId=(select bTypeId from category where bTypeName='网络技术');

6

7、limit 限定显示的条目

LIMIT子句可以被用于强制 SELECT语句返回指定的记录数。 LIMIT 接受一个或两数字参。必 须是一个整数常量。如果给定两 个数,第一指定返 回记录行的偏移量,第二个参数返回记录行的最大数目。初始偏移量是 0( 而不是 1)。

语法 : select * from limit m,n

其中 m是指记录开始的 index indexindex,从 0开始,表示第一条记录,n是指从第 m+1 条开始,取 n。

查询books表中第2条到六行的记录

mysql>select * from books limit 1,6;

7

8、连接查询

以一个共同的字段,求两张表当中符合条件并集。 通过 共同字段把这两张表的共同字段把这两张表连 接起来。

常用的连接:

内连接:根据表中的共同字段进行匹配

外连接:现实某数据表的 全部记录和另外数据表中符合连接条件的记录。

外连接:左连接、右连接

内连接:for exmaple

create table student(sit int(4) primary key auto_increment,name varchar(40));

insert into student values(1,‘张三’),(2,‘李四’),(3,‘王五’),(4,‘mikel’);

create table teachers(sit int(4),id int(4) primary key auto_increment,score varchar(40));

insert into teachers values(1,1,‘1234’),(1,2,‘2345’),(3,3,‘2467’),(4,4,‘2134’);

select s.* ,t.* from student as s,teachers as t where s.sid=t.sid;

8

左连接: select 语句 a表 left[outer] join b 表  on 连接条件 ,a表是主,都显示。

b表是从,主表内容全都有,主表多出来的字段,从表没有的就显示 null,从表多出主表的字段不显示。

select * from student as s left join teachers as t on  s.sit=t.sit;

9

右连接:select 语句 a表 right[outer] join b 表  on 连接条件 ,b表是主,都显示。

a表是从,主表内容全都有,主表多出来的字段,从表没有的就显示 null,从表多出主表的字段不显示。

select * from student as sright join teachers as t on  s.sit=t.sit;

10

三、聚合函数

1、sam() 求和

select sum (id+score) as g from teachers;

2、avg() 求平均值

select avg (id+score) as g from teachers;

3、max() 最大值

select max (id) as g from teachers;

4、min() 最小值

select min(id) as g from teachers;

5、substr(string,start,len) 截取

select substr(soucr,1,2) as g from teachers;

从start开始,截取len长度,start从1开始

concat(str1,str2,str3......................)字符串拼接,将多个字符串拼接在一起

select concat(id,score,sit) as g from teachers;

6、count() 统计计数 记录字段数据条数

select count(id) as g from teachers;

7、upper() 大写

select upper(name) as g from student;  #将字段name中英文全部变为大写,但不改变原值

8、lower() 小写

select lower(name) as g from student;  #将字段name中英文全部变为小写,但不改变原值

四、索引

mysql中索引是以文件形式存放的,对表进行增删改,会同步到索引,索引和表保持一致,常用在where 后字段查询就加索引。

优点:加快查询速度,减少查询时间

缺点:索引占据一定磁盘空间,会影响insert,delete,update执行时间

1、索引类型

普通索引:最基本索引,不具备唯一性

唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一

主键索引:记录值唯一,主键字段很少被改动,不能为空,不能修改,可用于一个字段或者多个字段

全文索引:检索文本信息的, 针对较大的数据,生成全文索引查询速度快,但也很浪费时间和空间

组合索引:一个索引包含多个列

2、创建索引

普通索引:

# 创建普通索引

create table demo(id int(4),uName varchar(20),uPwd varchar(20),index (uPwd));

# 查看建表过程

show create table demo;

demo | CREATE TABLE `demo` (

`id` int(4) DEFAULT NULL,

`uName` varchar(20) DEFAULT NULL,

`uPwd` varchar(20) DEFAULT NULL,

KEY `uPwd` (`uPwd`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

唯一索引:字段值只允许出现一次,可以有空值

# 创建唯一索引

create table demo1(id int(4),uName varchar(20),uPwd varchar(20),unique index (uName));

# 查看建表过程

show create table demo1;

demo1 | CREATE TABLE `demo1` (

`id` int(4) DEFAULT NULL,

`uName` varchar(20) DEFAULT NULL,

`uPwd` varchar(20) DEFAULT NULL,

UNIQUE KEY `uName` (`uName`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

主键索引:字段记录值唯一,字段很少被修改,一般主键约束为auto_increment或者not null unique,不能为空,不能重复。

# 创建主键索引

create table demo2(id int(4) auto_increment primary key,uName varchar(20),uPwd varchar(20));

# 查看建表语句

demo2 | CREATE TABLE `demo2` (

`id` int(4) NOT NULL AUTO_INCREMENT,

`uName` varchar(20) DEFAULT NULL,

`uPwd` varchar(20) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

全文索引:提高全文检索效率,解决模糊查询

# 创建全文索引

create table demo3(id int(4),uName varchar(20),uPwd varchar(20),fulltext(uName,uPwd));

# 查看建表语句

| demo3 | CREATE TABLE `demo3` (

`id` int(4) DEFAULT NULL,

`uName` varchar(20) DEFAULT NULL,

`uPwd` varchar(20) DEFAULT NULL,

FULLTEXT KEY `uName` (`uName`,`uPwd`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

五、外键约束

外键约束:foreign key 表与表之间的一种约定关系,由于这种关系存在,让表与表之间的数据更加具有完整性,更加具有关联性。

创建外键约束

创建user主表

create table user1(id int(11)auto_increment primary key,name varchar(50),sex int(1));

插入数据

insert into user1(name,sex)values("mikel",4),("plyx",6);

创建order外键表

create table `order`(order_id int(11)auto_increment primary key,u_id int(11),username varchar(50),monery int(11),foreign key(u_id) references user1(id)  on delete cascade on update cascade )engine=innodb);

插入数据

INSERT INTO `order` (order_id,u_id,username,monery)values(1,1,'mikel',2345),(2,2,'plyx',3456)

测试级联删除

delete from user1 where id=1

查看order表记录

12

测试级联更新

update  user1 set id=5 where id=2

13

测试数据完整性

在order表中插入一条u_id为6的记录

insert into `orser` (u_id)values(6);

Cannot add or update a child row: a foreign key constraint fails (`school`.`order`, CONSTRAINT `order_ibfk_1` FOREIGN KEY (`u_id`) REFERENCES `user1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

user1中不存在id为6的记录,现在添加一条id为6的记录

insert into user1(id)values(6);

14

可以看到数据已经插入进去了

视图

是一张虚拟表,由 select select select语句指定的数据结构和数据,不生成真实文件

create view mikel as select * from school.books;

select  * from mikel;

15

六、存储过程

存储过程用来封装mysql代码,相当于函数,一次编译,生成二进制文件,永久有效,提高效率。

1、定义存储过程

create procedure 过程名(参数1,参数2,.............)

begin

sql语句

end

2、调用存储过程

call 过程名(参数1,参数2,...................)

example:定义一个存储过程查看books表中所有数据

1. 修改sql默认执行符号

delimiter //

create  procedure seebooks();

begin

select * from sctudent.books;

end //

call seebooks() //

16

3、存储过程参数传递

in 传入参数 int 赋值

IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)

OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

create procedure seebook(in b int)

begin

select * from school.books where bId=b;

end //

call seebook(4)

16

out --------------传出参数

select into 在过程中赋值传给变量,并查看变量值

create procedure seebook2(out b varchar(100))

begin

select bName into b  from school.books where bId=4;

end //

17

过程内的变量使用方法

声明变量名称,类型,declare 过程内的变量没有@

赋值 set 变量名=(select 语句)

create procedure seebook3()

begin

declare str varchar(100);

set str=(select bName from school.books where bId=20);

select str;

end//

call seebook3() //

18

1、触发器

与数据表有关,当表出现(增,删,改,查)时,自动执行其特定的操作

语法:create trigger 触发器名称 触发器时机 触发器动作 on 表名 for each row

触发器名称:自定义

触发器时机:after/before   之后/之前

触发器动作:insert  update  delete

创建触发器:

create trigger delstudent after delete on grade for each now

delete from student where sid='4';

delete from grade where sid=4;

mysql> select sid from student where sid=4;

Empty set

查看是否还有sid=4的值,可以发现已经被删除

2、事务

单个逻辑单元执行的一系列操作,通过将一组操作组成一个,执行的时要么全部成功,要么全部失败,使程序更可靠,简化错误恢复。

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。事务用来管理 insert,update,delete 语句。

MYSQL 事务处理主要有两种方法:

1、用 BEGIN, ROLLBACK, COMMIT来实现

BEGIN 开始一个事务

ROLLBACK 事务回滚

COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

SET AUTOCOMMIT=0 禁止自动提交

SET AUTOCOMMIT=1 开启自动提交

创建事务

begin;

update books set bName="plyx" where bId=1;

update books set bName="plyx" where bId=2;

commit//

查看记录,已经修改了

select * from books;

19

七、mysql数据结构

主配置文件  my.cnf

数据目录:/var/lib/mysql

进程通信sock文件 :/var/lib/mysql/mysql.sock

错误日志文件

[mysqld_safe]

log-error=/var/log/mysqld.log

进程PID文件:pid-file=/var/run/mysqld/mysqld.pid

二进制文件:log-bin=mysql-bin.log

八.常见的存储引擎介绍

myisam :

特性: 1、不支持事务,不支持外键,宕机时会破坏表

2、使用较小的内存和磁盘空间,访问速度快

3、基于表的锁,表级锁

4、mysql 只缓存index索引, 数据由OS缓存

适用场景:日志系统,门户网站,低并发。

Innodb:

特性:1、具有提交,回滚,崩溃恢复能力的事务安全存储引擎

2、支持自动增长列,支持外键约束

3、占用更多的磁盘空间以保留数据和索引

4、不支持全文索引

适用场景:需要事务应用,高并发,自动恢复,轻快基于主键操作

MEMORY:

特性:1、Memory存储引擎使用存在于内存中的内容来创建表。

2、每个memory表只实际对应一个磁盘文件,格式是.frm。memory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。

3、MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引。

九、思考与总结

到此主要介绍,mysql一些使用技巧,包括数据类型,查询方法,存储过程,外键约束,索引。触发器,事务,还包含一些存储引擎介绍,到此基础部分结束,还有后面的分享将会陆续推出,敬请期待!

总结

我是MIkel Pan,云计算爱好者,定期更新生活感悟,心灵进化者就在MIkel Pan,喜欢我就来找我吧!

博客园地址:http://www.cnblogs.com/plyx/

简书地址:https://www.jianshu.com/u/5986765934f4

Msql浅析-基础命令(二)的更多相关文章

  1. 运维 04 Shell基础命令(二)

    Shell基础命令(二)   查看Linux的发行版 cat /etc/redhat-release cat /etc/os-release 查看系统用户的id信息 id 用户名 id root id ...

  2. Mysql浅析-基础命令(一)

    主要从以上篇幅来介绍mysql的一些知识点 一.Mysql简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数 ...

  3. Shell基础命令(二)

    查看Linux的发行版 cat /etc/redhat-release cat /etc/os-release 查看系统用户的id信息 id 用户名 id root id 创建系统用户的命令 user ...

  4. Linux 中常用的基础命令二

    1.Linux文件分层结构  FHS:Linux有一个组织叫LSB定义的Linux发行版基础目录名称命名法则及功用规定,这种标准叫FHS文件系统层级标准./bin   存放可执行的二进制程序,管理员和 ...

  5. Linux基础命令(二)

    作业一:1) 新建用户natasha,uid为1000,gid为555,备注信息为“master” groupadd -g 555 netasha useradd -u 1000 -g netasha ...

  6. linux基础命令<二>

    1.关机 init 0   poweroff   halt  shutdown –h   now 2.重启 init 6   reboot  shutdown –r now 3.查询都有那些用户在系统 ...

  7. Docker 镜像管理及基础命令(二)

    Docker 常用命令: ## Docker 登录下载镜像: docker login # 登录官方hub.docker.com docker pull nginx:alpine # 下载nginx的 ...

  8. docker 基础命令二

    开启/停止/重启 查看当前正在运行容器docker ps 查看包括已经停止的所有容器docker ps -a 显示最新启动的一个容器docker ps -l 新建一个容器运行docker run 启动 ...

  9. linux基础之进阶命令二

    本节内容 基础命令二: 1.      alias:查看和设置别名(alias:别名) alias 'ren=ls -ld' \ren 可不取消别名,执行ren原本的命令 2.      unalia ...

随机推荐

  1. YII+DWZ三级城市联动挂件

    挂件PHP文件 class CountryCityCombox extends RXWidget { public $provinceId = 2; public $cityId = 3687; pu ...

  2. 学习笔记:如何阻止Web应用存储敏感数据

    在某些情况下,自定义Web应用会保存敏感(专有)数据到用户的缓存文件夹中.如果不重新架构该应用,使用Sysinternals SDelete的注销脚本是否可以确保数据完全被删除且没有任何可恢复残留呢? ...

  3. 入门级 - 码云(Gitee),GitHub 教程

    这篇文章的目的是记录我的关于GitHub的内容,从注册.下载直到设置成功每一步都有解释,其中有一些截图或者代码来自于网络. GitHub和码云均基于Git,所以两者的操作方法基本一致,只需要学习其中一 ...

  4. The Shapes of CSS(css的形状)

    All of the below use only a single HTML element. Any kind of CSS goes, as long as it's supported in ...

  5. Mantle 初步使用

    我写了一篇 Mantle 初步使用 的文章,欢迎访问!

  6. git修改远程仓库

    三种方式都可以. 1. 修改命令 git remte origin set-url URL 2.先删后加 git remote rm origin git remote add origin git@ ...

  7. 理解活在IPHONE中的那些APP (五)

    为了让App活起来 上一篇简单的说了一下关于IOS的一些事情,现在有必要深入了解一些对于让App活起来比较关键的信息.比如IOS系统的架构,这个我就不赘述了,请移步http://blog.csdn.n ...

  8. Mac下的mongodb安装

    mac下的mongodb安装主要有两种方式,一是手工安装,需在官网下载源文件,二是通过homebrew,至于homebrew不做介绍.既然是Mac系统下,我认为直接通过homebrew安装最好,省事还 ...

  9. 死磕salt系列-salt 故障汇总

    这里将salt使用过程中遇到的所有的故障进行一个汇总. grains 匹配后多了一个列表 salt-master中配置jinja模板来匹配自定义的grins. vim /etc/salt/minion ...

  10. weblogic之CVE-2016-0638反序列化分析

    此漏洞是基于CVE-2015-4852漏洞进行黑名单的绕过,CVE-2015-4852补丁主要应用在三个位置上 weblogic.rjvm.InboundMsgAbbrev.class :: Serv ...