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理论概述及常用命令”
打个酱油,围观下