MySQL基本命令与语法

MySQL
SQL
与MYSQL交互使用的一种叫SQL(结构化查询语言)的语言。SQL是一个标准,MYSQL和SQL Server是遵守这种标准的。市面上的大部分数据库都遵从这种标准
数据定义语言(DDL)
定义和管理数据对象,比如建立数据库、数据表
数据操作语言(DML)
用于操作数据库对象中的包含的数据
数据库查询语言(DQL)
用于查询数据库对象中包含的数据,能够对表进行查询
操作数据库的流程
1、连接MYSQL服务器
2、账号和密码    root   
3、选择数据库
4、对数据表进行增删改查
5、关闭数据库
数据库的连接与退出
连接
开始----->运行--->cmd---->mysql -u root -p  
mysql
        -u 用户名 root
        -p 密码
        -h 主机名 localhost
        -P 端口号 3306
        -b 关闭蜂鸣器 
cmd命令进不去的解决办法
右键-》我的电脑-》属性-》高级-》环境变量-》系统变量-》path-》;D:\xampp\mysql\bin   添加之后重启电脑
退出 
quit    或者  exit 或者   \q
数据库语法特点
1、每个SQL命令都要使用分号来完成。
2、如果没有分号结尾,MySQL会认为你还没输入完,然后提示->
3、如果你失误现在的提示符为'>那么只需要输入一个'回车就可以了因为这个时候MySQL认为你要输入一个字符串。
4、MySQL里面所有的命令都不区分大小写,但是一般来说用大写字母来写出SQL关键字和函数的名字,用小写字母写出数据库、数据表和数据列的名字。这样写完全是为了能够看着舒服一些。
数据库的操作
查看所有的数据库
show       databases
创建数据库 
create database 数据库名
create database if not exists 数据库名;
注意
1、每创建一个数据库都会在你的mysql的data目录下创建一个名为你创建的名字的文件夹。
2、数据库是唯一的。
选择使用数据库
use 数据库名
注意
windows下面数据库名是不区分大小写的,在Linux下面严格区分
删除数据库 
drop database 数据库名
drop database if exists 数据库名称
注意
当使用drop database的时候会将创建的文件夹也一同删掉
数据表的操作
查看数据库中所有的表
show tables
创建数据表
create table 表名(
           字段名1 类型约束,
           字段名2 类型约束,
           字段名2 类型约束,
          字段名3  类型约束
            );
查看表结构
desc 表名
查看创建表的语句
show create table 表名
show create table 表名  \G
注意:如果G后面有分号会报一个错误
删除表
drop table 表名
注意
在创建删除表的过程中,如果表名中出现空格或者表名或者字段名为系统保留字则需使用反引号
如果中间操作使用\c取消
数据表中数据的操作
插入数据
insert into 表名(字段名1,字段名2,.....) values(值1,值2,.....);
指定字段名
insert into 表名 values(值1,值2,......);
不指定字段名时要求值的顺序需要跟表字段一样
insert into 表名(字段名1,字段名2,.....) values(值1,值2,.....),(值1,值2,.....),(值1,值2,.....);
插入多条数据要使用逗号分隔
查看数据
select 字段名1,字段名2,字段名3.... from 表名
select * from 表名
修改数据
update 表名 set 字段名1=值1,字段名2=值2.... where 条件
删除数据
delete from 表名 where 条件 
必须有条件
数据类型
创建数据表时,会指定数据的类型,整型、浮点型、字符串、日期、枚举、集合类型。原则,根据内容决定索要选择的类型
整型
注意
1、整数控制多大多小是由类型来进行控制的,不是由后面的int(11)来控制的,它的意思不是有11位
2、设置整型的位数如果超出了设定的这个数值将不会被截断
3、后面的()可以不用写
浮点、定点数
注意
1、定点数和浮点数都可以使用类型名后面加(M,D)方式来表示。(M,D)表示该类型一共显示出M位数字(整数位+小数位),D为小数点后面几位
2、decimal和double的不同点
1、浮点数如果不写精度(M)和标度(D),会按照实际精度值显示。如果有精度和标度则会自动四舍五入.
2、定点数如果不写精度和标度会按照decimal(10,0)来进行操作。如果超出了精度和标度,也会进行四舍五入。定点数的存储使用二进制进行存储所以比较准确
字符串
注意
char和varchar很类似,都可以用来存储MySQL中较短的字符串,区别
1、char列的长度为固定长度,创建表的时候声明的最大长度,可以为0~255
2、varchar值可变长度,长度为0~65535之间的值。
3、char和varchar在超出指定的长度时都会被截取到指定的字符串
4、char列删除了尾部的空格,而varchar保留这些空格
5、text和blob,二者之间的区别是blob用来保存二进制数据,text只能保存字符串数据。
6、blob和text在经过大量的删除操作之后有可能会引起性能问题。(删除以后在数据表中留下“空洞”) 可以使用 optimize table 表名 来回收这些空间
日期时间类型
使用时间戳 类型选择int
枚举类型 enum(‘a’,'b')
  注意
1、枚举方式的取值范围需要在创建表的时候指定。
2、对于1~255个成员的枚举需要占用1个字节存储对于256~65535个成员使用2个字节存储。最多存储65535个成员。
3、如果超过了枚举里面指定的值,将会插入一个‘空’,枚举类型只能从集合中选取单个的值。而不能一次选去多个值。
4、enum的值不区分大小写
集合类型 set('a','b')
注意
1、set类型可以在里面保存0~64个成员,根据成员的不同所占空间的大小也不同
1-8 1
 9~16 2
17~24 3
25~32 4
33~64 8                                                       
2、set和enum除了存储之外,主要区别在于set类型可以一次选取多个成员,enum只能选取一个。
注意
1、重复的成员只保留一个
2、超出范围的成员将会忽略
3、插入值的时候应该都带引号
约束条件
1、null、not
null,插入值时没有在字段中插入一个值,默认为null
指定not null必须在插入值时在该字段中插入一个值。如果不给插入一个值那么为"空"
2、default 值
在不插入该字段时默认插入的值
3、整型的约束条件
1、zerofill表示0填充。一般和整型后面设定的宽度一起使用,如果数值长度小于指定的长度那么将会在前面补充相对应的0进行填充
2、unsigned(无符号)如果要在字段里面保存非负数,或者较大上限的值时可使用该约束条件,将从0开始,需要在字段类型后面紧跟着定义unsigned
3、auto_increment,自增,在产生一个唯一的标识或顺序值的时候,可以利用这个约束条件。这个约束条件只能用于整数类型,值一般从1开始。每行加1,插入一个null到一个auto_increment列时,MySQL将插入一个比出现过的最大值+1的值。一个表中只能有一个auto_increment列,并且必须定义为primary key或unique才能够使用
4、索引
索引是数据库中用来提高搜索性能的。我们通常在做数据库优化的时候通常先做索引的优化,数据量少的时候没效果,数据越多效果越明显。
注意
索引加上之后是自动创建的,不用我们刻意去使用的。
分类
1、常规索引(index),最基本的索引,没有任何限制
创建索引
创建表的时候
create table 表名(
字段.....,
index 索引名 (要索引的字段)
);
表已经创建的时候
create index 索引名 on 表名(要加索引的字段);
删除索引
drop index 索引名 on 表名
2、唯一索引(unique)与普通索引相似,但是索引列里面的值必须是唯一的,允许有空值
创建索引
创建表的时候
create table 表名(
字段....,
unique 索引名(要索引的字段)
 );
表已经创建的时候
create unique index 索引名 on 表名(要索引的字段)
删除索引
drop index 索引名 on 表名
3、主键索引(primary key),和唯一索引类似,也是唯一的,一个表只能有一个主键
创建索引
create table 表名(
id int  auto_increment primary key,
);
删除索引
alter table 表名 drop primary key
注意
如果主键的字段上面有自增(auto_increment)那么需要先将auto_increment去掉。然后再删除。
alter table 表名 change 自增的列  自增的列  类型
表字段的操作
更改字段
alter table 表名 change 原字段名 新字段名  类型  约束条件
alter table 表名 modify 字段名 类型 约束条件
change可以修改字段名,modify不可以修改字段名
添加字段
alter table 表名 add 字段名 类型 约束条件
alter table 表名 add 字段名 类型 约束条件 first  放在最前面。
alter table 表名 add 字段名 类型 约束条件 after 要放在哪个字段名后面 
删除字段
alter table 表名 drop 字段名
修改表名
alter table 表名 rename as 新表名
密码的修改与找回
修改密码
1、use mysql
2、update user set password=password("输入新密码") where user='root'
3、flush privileges
找回密码
关闭正在运行的mysql
打开dos进入mysql的bin目录
输入  mysqld --skip-grant-tables
再打开一个窗口进入到mysql的bin目录下
输入mysql回车,这个时候可以使用root的身份强行进入mysql数据库
重复修改密码的步骤
数据的备份与恢复
导出
导出数据库里面的结构和数据
mysqldump -u root -p 数据库名 >导出文件的路径
导出数据库里面的表的结构和数据
mysqldump -u root -p 数据库名 表名 > 导出文件的路径
导出数据库里面的结构
mysqldump -u root -p -d 数据库名  >导出文件的路径
导出数据库里面的表的结构
mysqldump -u root -p -d 数据库名 表名> 导出文件的路径
导入
退出的情况
mysql -u root -p 数据库名 < 数据库文件
进入的情况
source 数据库文件
存储引擎
是MySQl的一个特性之一,用户可以根据应用的需要选择如何存储。用户可以选择不同的存储引擎来提高应用效率。 默认情况下,创建表的时候不指定表的存储引擎,将使用默认的存储引擎
查看当前数据库引擎
show engines;
分类
MyISAM表
不支持事务,其优势就是访问的速度快。对事务没有完整性的要求或以select、insert为主的通常使用MyISAM表
表锁:开销小,加锁快,发生冲突的概率高。
每个MyiSAM引擎在磁盘上存储都会分成3个文件。他的文件名和表名称相同。
        .frm(存储表的定义);
        .MYD(存储的数据);
        .MYI(索引)
MyISAM:如果是读、插入为主,只有很少的更新和删除。对事务要求不高可以使用该引擎。
InnoDB表
会提供事务处理,会占用更多的磁盘空间
行锁:开销大,加锁慢,发生冲突的概率低。
InnoDB:对事务有完整的要求,数据操作除了插入和查询外,还包括很多的更新和删除操作。   
查询记录
select主句
select 1+2;
from子句-从指定的表里面提取数据
where子句-条件查询(可选)
数据表一般包含大量的数据,很少需要检索表中所有的行,只会根据特定的操作提取特定的数据。select语句里面使用where子句指定过滤条件。
where条件中可以用算数运算符、比较运算符、逻辑运算符
+ - * / %
< >= > <= !=  =
其他的操作符
in操作符,指定条件范围,范围中的每个条件都可以进行匹配
格式:in(值1,值2.....)
between操作符,在指定的两个值之间
格式:between 起始值 and 结束值
not,否定后面的操作
like或 not like 两个操作符要使用包含通配符的字符串
模糊查询
格式:字段名 like '字符串'
通配符:用来匹配值的一部分的特殊字符
%:表示任意字符出现任意次数,可以放在任意位置
%值% :包含值
%值:以值结尾的
值%:以值开头的
_:下划线,用户和%一样,但是表示任意字符出现一次。
注意
1、不要过度使用通配符,如果其他操作符能够达到目的一定要用其他的操作符。
2、在确实有必要使用通配符时,除非绝对有必要,否则不要把它们放在搜索模式的开始处。
order by子句----对字段进行排序
在SQL标准中对没有经过排序的数据他的顺序是不可信的。
格式1:order by 字段名[asc | desc]
注意:
1、asc(默认排列顺序)是升序排序,desc降序排列
2、通常有很多人使用order by子句时,他认为排序列必须是要显示出来的列。
3、desc、asc关键字应该直接用到列名的后面,他作用给了前面所列出来的列名
order by 字段名1[asc | desc],字段名2[asc | desc]
注意:指的是字段名1完全相同的情况下按照字段名2进行排序
limit 子句 ---限制结果集
格式1:   limit m
  注意:返回多少行数据
格式2:limit n,m
注意:
1、n表示从多少行开始取值(第一条数据结果是从0开始的),m表示返回的行数。
2、如果没有足够的行数,有多少行就显示多少行。
select->from->where->order by->limit
join查询
左连接
select id,name from 表1 left join 表2 on 表1的id=表2的pid
右连接
select id,name from 表1 right join 表2 on 表1的id=表2的pid
左连接与右连接两者的区别在于 左连接左边的表数据全部显示,右连接则是右边的表的数据全显示。两者之间可以相互转换
重置数据库表中的数据
truncate 表名
字符集
用来定义MySQL存储字符串的方式
校对规则:定义了比较字符串的方式
_ci结尾的是大小写不敏感的
_cs结尾的是大小写敏感的
查看MYSQL的编码
show  variables like 'character%'
查看MySQL支持的编码
show  character set
查看现在的编码
status
MySQL的字符集划分级别
服务器级
数据库级
数据表级
数据字段级
设置数据库字符集
create database 数据库名 default character set utf8;
命令行修改
alter database 数据库名 default  character set utf8
在服务器端设置
mysqld
character_set_server=utf8
client
default-character-set=utf8
php操作MySQL数据库
php操作MySQL数据库常用的方式
mysql
mysqli
PDO
链接数据库的步骤
链接数据库
mysqli_connect('主机地址','用户名','密码');
mysqli_connect_errno();
返回错误号码,如果错误号码为0表示没有错误
mysqli_connect_error();
返回的错误信息
mysqli_set_charset(链接对象,'utf8');
设置链接、通信的字符集
选择数据库
mysqli_select_db(链接的对象,'选择哪个数据库');
准备SQL语句
执行SQL语句
mysqli_query(链接的对象,'SQL语句的字符串');
处理结果
有结果集 (select)
mysqli_fetch_assoc(结果集);
每次从结果集中拿一条数据出来。到最后返回NULL 拿成关联数组
mysqli_fetch_row(结果集);
每次从结果集中拿出一条数据来。 到最后返回NULL 拿成一个索引数组。
mysqli_num_rows(结果集);
获得结果集的条数
注意:如果说执行的是select语句那么mysqli_query()将会返回一个结果集的对象(集合)
没有结果集但是有影响行数   (insert、delete、update)
mysqli_affected_rows(链接对象);
获得影响行数,如果是大于等于1说明插入成功,如果小于1说明插入失败
mysqli_insert_id(链接对象);
获得插入表中的auto_increment列的最大ID
关闭数据库
mysqli_close(链接对象);
项目中页面乱码的问题
代码存储字符集
浏览器解析字符集 
数据表的存储字符集是否为utf8
PHP和MySQL的链接、通信字符集是否为utf8
SQL
与MYSQL交互使用的一种叫SQL(结构化查询语言)的语言。SQL是一个标准,MYSQL和SQL Server是遵守这种标准的。市面上的大部分数据库都遵从这种标准
数据定义语言(DDL)
定义和管理数据对象,比如建立数据库、数据表
数据操作语言(DML)
用于操作数据库对象中的包含的数据
数据库查询语言(DQL)
用于查询数据库对象中包含的数据,能够对表进行查询
操作数据库的流程
1、连接MYSQL服务器
2、账号和密码    root   
3、选择数据库
4、对数据表进行增删改查
5、关闭数据库
数据库的连接与退出
连接
开始----->运行--->cmd---->mysql -u root -p  
mysql
        -u 用户名 root
        -p 密码
        -h 主机名 localhost
        -P 端口号 3306
        -b 关闭蜂鸣器 
cmd命令进不去的解决办法
右键-》我的电脑-》属性-》高级-》环境变量-》系统变量-》path-》;D:\xampp\mysql\bin   添加之后重启电脑
退出 
quit    或者  exit 或者   \q
数据库语法特点
1、每个SQL命令都要使用分号来完成。
2、如果没有分号结尾,MySQL会认为你还没输入完,然后提示->
3、如果你失误现在的提示符为'>那么只需要输入一个'回车就可以了因为这个时候MySQL认为你要输入一个字符串。
4、MySQL里面所有的命令都不区分大小写,但是一般来说用大写字母来写出SQL关键字和函数的名字,用小写字母写出数据库、数据表和数据列的名字。这样写完全是为了能够看着舒服一些。
数据库的操作
查看所有的数据库
show       databases
创建数据库 
create database 数据库名
create database if not exists 数据库名;
注意
1、每创建一个数据库都会在你的mysql的data目录下创建一个名为你创建的名字的文件夹。
2、数据库是唯一的。
选择使用数据库
use 数据库名
注意
windows下面数据库名是不区分大小写的,在Linux下面严格区分
删除数据库 
drop database 数据库名
drop database if exists 数据库名称
注意
当使用drop database的时候会将创建的文件夹也一同删掉
数据表的操作
查看数据库中所有的表
show tables
创建数据表
create table 表名(
           字段名1 类型约束,
           字段名2 类型约束,
           字段名2 类型约束,
          字段名3  类型约束
            );
查看表结构
desc 表名
查看创建表的语句
show create table 表名
show create table 表名  \G
注意:如果G后面有分号会报一个错误
删除表
drop table 表名
注意
在创建删除表的过程中,如果表名中出现空格或者表名或者字段名为系统保留字则需使用反引号
如果中间操作使用\c取消
数据表中数据的操作
插入数据
insert into 表名(字段名1,字段名2,.....) values(值1,值2,.....);
指定字段名
insert into 表名 values(值1,值2,......);
不指定字段名时要求值的顺序需要跟表字段一样
insert into 表名(字段名1,字段名2,.....) values(值1,值2,.....),(值1,值2,.....),(值1,值2,.....);
插入多条数据要使用逗号分隔
查看数据
select 字段名1,字段名2,字段名3.... from 表名
select * from 表名
修改数据
update 表名 set 字段名1=值1,字段名2=值2.... where 条件
删除数据
delete from 表名 where 条件 
必须有条件
数据类型
创建数据表时,会指定数据的类型,整型、浮点型、字符串、日期、枚举、集合类型。原则,根据内容决定索要选择的类型
整型
注意
1、整数控制多大多小是由类型来进行控制的,不是由后面的int(11)来控制的,它的意思不是有11位
2、设置整型的位数如果超出了设定的这个数值将不会被截断
3、后面的()可以不用写
浮点、定点数
注意
1、定点数和浮点数都可以使用类型名后面加(M,D)方式来表示。(M,D)表示该类型一共显示出M位数字(整数位+小数位),D为小数点后面几位
2、decimal和double的不同点
1、浮点数如果不写精度(M)和标度(D),会按照实际精度值显示。如果有精度和标度则会自动四舍五入.
2、定点数如果不写精度和标度会按照decimal(10,0)来进行操作。如果超出了精度和标度,也会进行四舍五入。定点数的存储使用二进制进行存储所以比较准确
字符串
注意
char和varchar很类似,都可以用来存储MySQL中较短的字符串,区别
1、char列的长度为固定长度,创建表的时候声明的最大长度,可以为0~255
2、varchar值可变长度,长度为0~65535之间的值。
3、char和varchar在超出指定的长度时都会被截取到指定的字符串
4、char列删除了尾部的空格,而varchar保留这些空格
5、text和blob,二者之间的区别是blob用来保存二进制数据,text只能保存字符串数据。
6、blob和text在经过大量的删除操作之后有可能会引起性能问题。(删除以后在数据表中留下“空洞”) 可以使用 optimize table 表名 来回收这些空间
日期时间类型
使用时间戳 类型选择int
枚举类型 enum(‘a’,'b')
  注意
1、枚举方式的取值范围需要在创建表的时候指定。
2、对于1~255个成员的枚举需要占用1个字节存储对于256~65535个成员使用2个字节存储。最多存储65535个成员。
3、如果超过了枚举里面指定的值,将会插入一个‘空’,枚举类型只能从集合中选取单个的值。而不能一次选去多个值。
4、enum的值不区分大小写
集合类型 set('a','b')
注意
1、set类型可以在里面保存0~64个成员,根据成员的不同所占空间的大小也不同
1-8 1
 9~16 2
17~24 3
25~32 4
33~64 8                                                       
2、set和enum除了存储之外,主要区别在于set类型可以一次选取多个成员,enum只能选取一个。
注意
1、重复的成员只保留一个
2、超出范围的成员将会忽略
3、插入值的时候应该都带引号
约束条件
1、null、not
null,插入值时没有在字段中插入一个值,默认为null
指定not null必须在插入值时在该字段中插入一个值。如果不给插入一个值那么为"空"
2、default 值
在不插入该字段时默认插入的值
3、整型的约束条件
1、zerofill表示0填充。一般和整型后面设定的宽度一起使用,如果数值长度小于指定的长度那么将会在前面补充相对应的0进行填充
2、unsigned(无符号)如果要在字段里面保存非负数,或者较大上限的值时可使用该约束条件,将从0开始,需要在字段类型后面紧跟着定义unsigned
3、auto_increment,自增,在产生一个唯一的标识或顺序值的时候,可以利用这个约束条件。这个约束条件只能用于整数类型,值一般从1开始。每行加1,插入一个null到一个auto_increment列时,MySQL将插入一个比出现过的最大值+1的值。一个表中只能有一个auto_increment列,并且必须定义为primary key或unique才能够使用
4、索引
索引是数据库中用来提高搜索性能的。我们通常在做数据库优化的时候通常先做索引的优化,数据量少的时候没效果,数据越多效果越明显。
注意
索引加上之后是自动创建的,不用我们刻意去使用的。
分类
1、常规索引(index),最基本的索引,没有任何限制
创建索引
创建表的时候
create table 表名(
字段.....,
index 索引名 (要索引的字段)
);
表已经创建的时候
create index 索引名 on 表名(要加索引的字段);
删除索引
drop index 索引名 on 表名
2、唯一索引(unique)与普通索引相似,但是索引列里面的值必须是唯一的,允许有空值
创建索引
创建表的时候
create table 表名(
字段....,
unique 索引名(要索引的字段)
 );
表已经创建的时候
create unique index 索引名 on 表名(要索引的字段)
删除索引
drop index 索引名 on 表名
3、主键索引(primary key),和唯一索引类似,也是唯一的,一个表只能有一个主键
创建索引
create table 表名(
id int  auto_increment primary key,
);
删除索引
alter table 表名 drop primary key
注意
如果主键的字段上面有自增(auto_increment)那么需要先将auto_increment去掉。然后再删除。
alter table 表名 change 自增的列  自增的列  类型
表字段的操作
更改字段
alter table 表名 change 原字段名 新字段名  类型  约束条件
alter table 表名 modify 字段名 类型 约束条件
change可以修改字段名,modify不可以修改字段名
添加字段
alter table 表名 add 字段名 类型 约束条件
alter table 表名 add 字段名 类型 约束条件 first  放在最前面。
alter table 表名 add 字段名 类型 约束条件 after 要放在哪个字段名后面 
删除字段
alter table 表名 drop 字段名
修改表名
alter table 表名 rename as 新表名
密码的修改与找回
修改密码
1、use mysql
2、update user set password=password("输入新密码") where user='root'
3、flush privileges
找回密码
关闭正在运行的mysql
打开dos进入mysql的bin目录
输入  mysqld --skip-grant-tables
再打开一个窗口进入到mysql的bin目录下
输入mysql回车,这个时候可以使用root的身份强行进入mysql数据库
重复修改密码的步骤
数据的备份与恢复
导出
导出数据库里面的结构和数据
mysqldump -u root -p 数据库名 >导出文件的路径
导出数据库里面的表的结构和数据
mysqldump -u root -p 数据库名 表名 > 导出文件的路径
导出数据库里面的结构
mysqldump -u root -p -d 数据库名  >导出文件的路径
导出数据库里面的表的结构
mysqldump -u root -p -d 数据库名 表名> 导出文件的路径
导入
退出的情况
mysql -u root -p 数据库名 < 数据库文件
进入的情况
source 数据库文件
存储引擎
是MySQl的一个特性之一,用户可以根据应用的需要选择如何存储。用户可以选择不同的存储引擎来提高应用效率。 默认情况下,创建表的时候不指定表的存储引擎,将使用默认的存储引擎
查看当前数据库引擎
show engines;
分类
MyISAM表
不支持事务,其优势就是访问的速度快。对事务没有完整性的要求或以select、insert为主的通常使用MyISAM表
表锁:开销小,加锁快,发生冲突的概率高。
每个MyiSAM引擎在磁盘上存储都会分成3个文件。他的文件名和表名称相同。
        .frm(存储表的定义);
        .MYD(存储的数据);
        .MYI(索引)
MyISAM:如果是读、插入为主,只有很少的更新和删除。对事务要求不高可以使用该引擎。
InnoDB表
会提供事务处理,会占用更多的磁盘空间
行锁:开销大,加锁慢,发生冲突的概率低。
InnoDB:对事务有完整的要求,数据操作除了插入和查询外,还包括很多的更新和删除操作。   
查询记录
select主句
select 1+2;
from子句-从指定的表里面提取数据
where子句-条件查询(可选)
数据表一般包含大量的数据,很少需要检索表中所有的行,只会根据特定的操作提取特定的数据。select语句里面使用where子句指定过滤条件。
where条件中可以用算数运算符、比较运算符、逻辑运算符
+ - * / %
< >= > <= !=  =
其他的操作符
in操作符,指定条件范围,范围中的每个条件都可以进行匹配
格式:in(值1,值2.....)
between操作符,在指定的两个值之间
格式:between 起始值 and 结束值
not,否定后面的操作
like或 not like 两个操作符要使用包含通配符的字符串
模糊查询
格式:字段名 like '字符串'
通配符:用来匹配值的一部分的特殊字符
%:表示任意字符出现任意次数,可以放在任意位置
%值% :包含值
%值:以值结尾的
值%:以值开头的
_:下划线,用户和%一样,但是表示任意字符出现一次。
注意
1、不要过度使用通配符,如果其他操作符能够达到目的一定要用其他的操作符。
2、在确实有必要使用通配符时,除非绝对有必要,否则不要把它们放在搜索模式的开始处。
order by子句----对字段进行排序
在SQL标准中对没有经过排序的数据他的顺序是不可信的。
格式1:order by 字段名[asc | desc]
注意:
1、asc(默认排列顺序)是升序排序,desc降序排列
2、通常有很多人使用order by子句时,他认为排序列必须是要显示出来的列。
3、desc、asc关键字应该直接用到列名的后面,他作用给了前面所列出来的列名
order by 字段名1[asc | desc],字段名2[asc | desc]
注意:指的是字段名1完全相同的情况下按照字段名2进行排序
limit 子句 ---限制结果集
格式1:   limit m
  注意:返回多少行数据
格式2:limit n,m
注意:
1、n表示从多少行开始取值(第一条数据结果是从0开始的),m表示返回的行数。
2、如果没有足够的行数,有多少行就显示多少行。
select->from->where->order by->limit
join查询
左连接
select id,name from 表1 left join 表2 on 表1的id=表2的pid
右连接
select id,name from 表1 right join 表2 on 表1的id=表2的pid
左连接与右连接两者的区别在于 左连接左边的表数据全部显示,右连接则是右边的表的数据全显示。两者之间可以相互转换
重置数据库表中的数据
truncate 表名
字符集
用来定义MySQL存储字符串的方式
校对规则:定义了比较字符串的方式
_ci结尾的是大小写不敏感的
_cs结尾的是大小写敏感的
查看MYSQL的编码
show  variables like 'character%'
查看MySQL支持的编码
show  character set
查看现在的编码
status
MySQL的字符集划分级别
服务器级
数据库级
数据表级
数据字段级
设置数据库字符集
create database 数据库名 default character set utf8;
命令行修改
alter database 数据库名 default  character set utf8
在服务器端设置
mysqld
character_set_server=utf8
client
default-character-set=utf8
php操作MySQL数据库
php操作MySQL数据库常用的方式
mysql
mysqli
PDO
链接数据库的步骤
链接数据库
mysqli_connect('主机地址','用户名','密码');
mysqli_connect_errno();
返回错误号码,如果错误号码为0表示没有错误
mysqli_connect_error();
返回的错误信息
mysqli_set_charset(链接对象,'utf8');
设置链接、通信的字符集
选择数据库
mysqli_select_db(链接的对象,'选择哪个数据库');
准备SQL语句
执行SQL语句
mysqli_query(链接的对象,'SQL语句的字符串');
处理结果
有结果集 (select)
mysqli_fetch_assoc(结果集);
每次从结果集中拿一条数据出来。到最后返回NULL 拿成关联数组
mysqli_fetch_row(结果集);
每次从结果集中拿出一条数据来。 到最后返回NULL 拿成一个索引数组。
mysqli_num_rows(结果集);
获得结果集的条数
注意:如果说执行的是select语句那么mysqli_query()将会返回一个结果集的对象(集合)
没有结果集但是有影响行数   (insert、delete、update)
mysqli_affected_rows(链接对象);
获得影响行数,如果是大于等于1说明插入成功,如果小于1说明插入失败
mysqli_insert_id(链接对象);
获得插入表中的auto_increment列的最大ID
关闭数据库
mysqli_close(链接对象);
项目中页面乱码的问题
代码存储字符集
浏览器解析字符集 
数据表的存储字符集是否为utf8
PHP和MySQL的链接、通信字符集是否为utf8

猜你喜欢

转载自blog.csdn.net/z_c_z_/article/details/80038172