MySQL理论概述及常用命令

MySQL理论概述及常用命令

MySQL数据库

1、mySQL是什么?

a)        MySQL是一个完整的数据库管理系统,是一个关系型的数据库。

b)        MySQL与linux php apache组成黄金搭档 lamp的服务器环境.

2、SQL是什么?

SQL:是一种数据库的结构化查询语言,不仅限使用于mySQL!

      

根据功能我们对SQL语句进行划分:

DDL:数据库定义语言,定义和管理数据对象,比如建表,建库。

DML:数据库操作语言,操作数据库对象中的数据。

DQL:数据库的查询语言,用于查询数据库对象中所包含的数据。

DCL:数据库控制语言,管理数据库的语言。

 

使用数据库的步骤:

1、安装mysql服务器软件

2、创建数据库

3、链接数据库

4、选择数据库

5、对数据库表进行增加,删除,修改,查询的操作。

 

连接数据库

命令:mysql –u用户名 –p密码 –h主机地址 –b;

-b: beep蜂鸣器关闭蜂鸣器的声音。

 

退出数据库:

1、exit

2、quit

3、\q

以上三种方法都可以退出数据库。

 

MySQL的语法特点:

1、每条SQL命令必须以分号来完成,可以使用\g来代替,如果没有;结尾直接执行会出现一个->表示还没有看到;所以不会执行,只有见到分号才会开始执行。

2、SQL命令不区分大小写,通常我们会用大写字母来写SQL的关键字和函数名称。

3、使用\c取消未完成的操作,比如没有给出;但是回车执行了,此时要么继续输入;要么使用\c来取消当前的命令。

创建数据库:

命令:create database [if not exists] 数据库名称;

需要注意一下几点:

1、数据库不能重名

2、每次创建一个数据库,会在data目录下面创建一个以数据库名字命名的文件夹。

3、Mysql配置文件里面有datadir选项表示你的数据库路径,默认是存放在mysql软件安装的盘符内,c盘建议修改为系统盘以外的磁盘。

4、使用if not exists语句创建数据库的时候,系统会先去判断是否存在这个名称的数据库,如果不存在就创建,如果存在也不会报错。

 

选择数据库:

命令:use 数据名称

注意这句可以不用分号结尾,当然分号结尾也一样可以执行。

在windows下面数据库名称是不区分大小写的,在Linux下面是严格区分大小写。

 

查看当前所在的数据库:

命令:select databases();

 

查看当前系统下的所有数据库:

命令:show databases;

 

删除数据:

命令:drop database [if exists] 数据库名

 

数据库表的操作:

显示当前数据库下面的数据表:

命令:Show tables;

创建数据表:

命令:create table 表名 (表内的列名及列的数据类型,数据长度等内容)[engine=myisam default charset=utf8];

 

查看表的结构:

命令:desc table;

删除数据表:

命令:drop table [if exists];

 

插入数据:

命令:insert into 表名 (字段1,字段2,字段3) values(‘对应的值1’, ‘对应的值2’, ‘对应的值3’…);

 

查询数据:

Select * from 表名

Select 字段名1,字段名2….. from 表名

Select 字段名1,字段名2…. From 表名where 条件

 

修改数据:

Update 表名 set 字段名=值1 whare 条件

注意update 必须要和where配合使用,否则后果非常严重,将更新表格内所有的元素.

删除数据:

Delete from 表名 where 条件

注意:也必须和where条件配合使用,否则后果更严重,直接删除所有内容。

MySQL的数据类型:

 

一、数值类型:

1、int()默认是11个长度,占用4个字节。

2、unsigned用在整型里面代表的是无符号如果,有unsigned修饰存入负数的时候会从0开始。

3、zerofill:0填充!例如:0000010 !

4、float:浮点型(单精度浮点型)。

5、double:浮点型(双精度浮点型);

6、decimal:定点数。

二、日期类型:

1、date:年月日

2、datetime:年月日时分秒

3、timestamp:返回显示yyyy—mm-dd HH:I:SS的字符串

4、year:年

三、字符串类型:(重点)

1、char:char的长度限制为char声明的时候的限制/

2、varchar的长度是可变的长度,会保留空格。

其中char的速度要比varchar的速度快,但是浪费存储空间,对于长度差不多,查询速度有较高要求的,建议采用char类型。

3、blob类型:可以直接将文件,或者内容,文字,以二进制的形式存储。

4、注意:如果往char或者varchar里面存储东西的时候,需要给引号,单引号,双引号,都可以。

四、数据字段的约束:

1、unsigned:无符号;

2、zerofill :0填充

3、auto_increment:自动增长:从曾经出现过的最大的数值开始增长。

注意:只有定义主键之后才能自动增长!

4、default:设置默认值!

5、Null:意味着没有值或者未知的值。

 

MySQL:索引:

索引是用来提高数据库的搜索,查询性能的工具。注意:索引并非建立的越多越好,适当的使用索引,一张表只能有一个索引。

 

索引的分类:

常规索引:(index)

       最基本的索引,没有任何限制!

       建立方法:

       Create table 表名(列名以及列的参数,约束条件等….. index[索引名](要索引的字段(索引多长)));

注意:索引长度一般和当前字段的长度限制一样。

 

唯一索引:(unique)

       和常规索引相同,不同的地方在于他的列的值是唯一的,但是可以为空。

      

主键索引:(primary key)

和唯一索引相同,不同的是不能为空。

全文索引:

       用来搜索大段文本中的内容,很少使用,项目中往往使用MySQL+Sphinx来处理中文索引以及分词。

 

索引的创建规则:

1、最适合创建索引的列通常出现在where子句中。

2、索引的建立时建立在大量的数据的情况下才会有效果,否则无明显效果。

3、不要过度的使用索引,每个索引都要占用额外的磁盘空间,降低写的操作。修改表的内容,需更新索引。

 

创建索引的方法:

1.ALTER TABLE

ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

 

ALTER TABLE table_name ADD INDEX index_name (column_list)

ALTER TABLE table_name ADD UNIQUE (column_list)

ALTER TABLE table_name ADD PRIMARY KEY (column_list)

2.CREATE INDEX

CREATE INDEX可对表增加普通索引或UNIQUE索引。

 

CREATE INDEX index_name ON table_name (column_list)

CREATE UNIQUE INDEX index_name ON table_name (column_list)

删除索引

DROP INDEX index_name ON talbe_name

ALTER TABLE table_name DROP INDEX index_name

ALTER TABLE table_name DROP PRIMARY KEY

 

MySQL存储引擎:

1、myisam引擎

优点:大量的写入数据速度快

缺点:不支持事物,不支持外键,表级锁,容易锁冲突。

以select 和insert为主的建议使用myisam引擎。

2、InnoDB引擎

优点:提供事物处理,可以支持外键。行级锁,不容易锁冲突。

 

字符集:

给创建的新表设定默认字符集

Create table tbname(…) default charset=utf8;

 

表的修改:

 

修改字段:

Alter table 表名 change原字段新字段字段属性、约束条件。

Alter table 表名 modify字段名字段属性,约束条件。

注意:change可以更改字段名,但是modify不能更改,但是都可以更改字段的属性

 

增加字段:

Alter table 表名 add 新字段字段属性,约束条件。

Alter table 表名 add新字段字段属性,约束条件 after在哪个字段的后面。

Alter table 表名 add新字段字段属性,约束条件,firest放在第一个位置的字段。

 

删除字段:

Alter table 表名 drop要删除的字段名

注意:删除列之后这个列所队形的数据也没有。

提示:mysql里面对表以及库的删除操作都是drop对数据的删除操作是delete

 

更改表名称:

Alter table 表名 rename as 新表名

 

复制表:

create table user1 as select * from user;

 

更改字符集:alter table 表名 default charset=utf8;

注意:当修改完表的字符集的时候,字段的字符集是没有改变的。

 

MySQL数据库的增删改查(IDUS

 

添加数据:

 

一、插入完整的数据

Insert into 表名 values(值1,值2,值3….)

注意:

1、插入数据的时候字符串类型的数据必须要添加引号。

2、必须每一个字段都需要提供值,如果没有可以用null,前提是当前字段可以为空。

3、在添加数据的时候注意字段的顺序。

 

4、建议不要使用这个插入语句。

 

二、插入一部分:

Insert into 表名 (字段1,字段2…) values(值1,值2) 如果值为字符串加引号。

三、插入某些查询结果

Insert into 表名 (字段1,字段2) select 字段1,字段2 from 表明。

注意:使用领域往往是数据库的迁移脚本中涉及。以及网站升级

五、插入多行:

Insert into 表名 (字段1,字段2) values(值1,值2),(值3,值4);

注意:多条的insert插入要比单条的快很多.

 

查询数据:

1、查找单个列:

Select 列名 from 表名

2、查找多个列

Select 列名1,列名2…. From 表名

注意:选择多个列的时候记得在列之间加上逗号。

3、检索所有的列

Select * from 表名

注意:尽量不要使用select * 极大的影响程序的响应时间和性能,尤其数据量巨大的情况。

4、过滤列中重复的值

       Select distinct 列名 from 表名

注意:distinct必须放在列名的前面

不能部分使用distinct 如果使用多个列加上distinct 代表多个相连的不重复项.

 

5、限制显示的结果集:

Select * from 表名 limit m;

Select * from 表名 limit n,m;

 

M代表的是显示多少条结果,n代表的是从第n条开始取出结果。

 

6、完全限定表名:

Select 表名.字段名 from 库名.表名

使用环境:经常使用在网站数据迁移,程序升级或者更换的情况下。

7、数据排序:

Order by

Select 字段名 from 表名 order by 字段名3;以字段名3排序默认是升序排列

注意:排序不一定非要使用被查询的列来排序,可以使用当前表里面有的任何一个可以排序的列。

Order by 两个参数 ASC DESC;

ASC: 升序排列默认的的排列顺序

DESC:降序排列

Select 字段名1 from 表名 order by 字段名2 ASC;

Select 字段名1 from 表名 order by 字段名2 DESC;

第三种情况:两个参数混合使用

 

Select 字段1,字段2 from 表名 order by 字段3 ASC,字段4 DESC;

 

表示:如果以字段3升序排列之后任然有重复的那么以字段4的降序排列。

 

注意:order by 往往放在语句的最后,但是如果和limit结合使用 limit放在最后。

 

Select * from website where =name=’脸盆网’ order by id asc limit 10;

8、数据过滤

 

关键词:where

Select * from 表名 where 条件都可以用not 取反

= 等于

!=不等于

<小于

>大于

>=大于等于

<=小于等于

Between  (not between )

Is null (not null)

In   (not in)

Or

And 优先级大于or的优先级,可以使用()小括号改变优先级not尽量不要应用在or上面!

例如:

Select * from user where username=’redrain’;

Select * from user where id!=10;

Select * from user where id<3;

Select * from user where id>10;

Select * from user where id>=10;

Select * from user where id<=20;

Select * from user where id between 1 and 5;

Select * from user where id not between 10 and 30;

Select * from user where id is null;

Select * from user where id is not null;

Select * from user where id in (1,3,5,7,9);

Select * from user where id not in (2,4,6,8,0);

 

9、通配符:

通配符的使用需要借助like关键字。

百分号通配符%:

代表任意字符,出现任意次数,可以放在任何位置。

1、%值% 包含值

2、%值以值结束

3、值% 以值开头

4、值1%值2 以值1开头和值2结尾。

 

通常用作模糊查询的时候使用。

 

_:和百分号的功能类似,但是表示只能出现一次的字符。

10、            拼接字段:

Select concat(字段1,字段2)from 表名

例如:select concat(id,name)from user;

11、            别名:

字段名 as 别名

Select concat(id,name) as newname from user;

字段名别名 (省略 as)

Select concat(id,name) newname from user;

 

数据汇总:

 

       Count () 确定有多少行数

       注意:count(*) 是对表中的所有的行进行汇总。

Count(字段)是对指定的字段中的非空进行汇总,会忽略null。

 

Sum(字段):计算字段的和

Max(字段):取字段中的最大值

Min (字段):字段中的最小值

Avg(字段):计算平均数

 

数据分组:

 

       Group by 字段名按照字段名进行分组

注意:SQL语句的固定顺序:

       Select from where (group by) having (order by) limit;

Group by 字段名 having 分组后你想给出的条件和where的条件的区别:

Where是所有数据的过滤,having起到的是分组后的过滤。

 

子查询:

前置子查询:

 

Select car.name,car,type,(select cartype.name from cartype where car.type=cartype.id) as typename from cartoon as car;

 

后置子查询:

Select cartoon.name,cartoon.type from cartoon where cartoon.type=(select cartype.id from cartype where cartype.name=”熊出没”);

 

注意:

子查询都是从内向外进行处理的。上面的例子实际上是执行了两条select 查询语句。

对于能够嵌套的数据没有限制,但是不能太多,影响性能。

子查询一般和in操作符以及=和!=这些结合使用。

 

多表查询:

 

关联查询:

Select a.id,a.name,a.age,b.email from user as a, user_Data as b where a.id=b.id;

 

自查询:

 

就是自己查自己,同一张表可以利用别名的方式使用多次。

现在有一张表如下:Cat表

+—-+—————-+——+

| id | name           | pid  |

+—-+—————-+——+

|  1 | 电脑           |    0 |

|  2 | 笔记本电脑     |    1 |

|  3 | 台式电脑       |    1 |

|  4 | 联想笔记本电脑 |    2 |

|  5 | 戴尔笔记本电脑 |    2 |

 

Select b.id,b.name,a.name as fname from cat as a , cat as b where a.id=1 and a.id=b.pid;

 

修改:

Mysql 语句:

Update user set username=‘redrain’ where id=2;

 

删除语句:

Delete from user where id = 2;

 

Mysql链接数据:

      

$con = mysql_connect(‘主机地址’,’mysql用户名’,’mysql 密码’);

 

执行mysql 语句:

Mysql_query(sql语句);

 

Mysql_insert_id()获取最后插入的自增值

 

以下函数都是从数据库拿数据的函数,拿到的类型略有不同而已,推荐mysql_fetch_assoc()

Mysql_fetch_row($result)拿到的是索引数据

Mysql_fetch_assoc($result)拿到的是关联数组

Mysql_fetch_array($result)拿到的是关联和索引数组

Mysql_fetch_object($result)拿到的是对象。

Mysql_num_rows($result) 拿到了多少数据。

One thought on “MySQL理论概述及常用命令

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据