您的位置:首页 > 编程语言 > PHP开发

php操作mysql

2015-12-08 09:40 656 查看
一、mysql简介:

在我们学习mysql 之前来理解一下什么叫开源精神:

开源精神是 Free & Open Source,意思是自由及开放源代码,Free指的是自由不是免费。

GNU Free Software是这么定义其所谓的“自由”的:

1. 出于任何目的使用该软件的自由;

2. 研究、修改该软件以使其实现你的目的的自由;源码的公开是实现此项的前提条件;

mysql 是来自于瑞典有 mysql AB 公司一个产品,它诞生于79年,在那个年底oracle也只是小打小闹, mssql还没有出生,从这里我们可以知道mysql的资历。

在2000年的时候 mysql 公布了自己的源代码,并采用GPL(GNU General Public License)许可协议,并正式进入开源世界

二、mysql 平台命令:

连接MYSQL: mysql -h110.110.110.110 -uroot -pabcd123 (注:u与root可以不用加空格,其它也一样)

本机: mysql -hlocalhost -uroot -ptest123

退出MYSQL命令: exit (回车) \q

修改密码: mysqladmin -uroot -p旧密码 password 新密码

增加新用户: grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"

比如:

增加一个用户test1密码为abc,让他可以在指定主机上登录,并对指定数据库有查询、插入、修改、删除的权限。

首先用以root用户连入MYSQL,然后键入以下命令:

grant select,insert,update,delete on mytest.* to test1@"10.0.0.16" Identified by "abc";

显示数据库: show databases;

使用一个数据库: use 数据库名;

显示表: show tables;

纠正数据库编码: set names '编码';

创建一个数据库: create database '库名';

创建一个表

create table 表名(

字段名 类型(长度) 参数,

....,

....

)engine=myisam charset=utf8;

显示数据表的结构: desc 表名;

删库和删表: drop database 库名;

drop table 表名;

将表中记录清空: delete from 表名;

将表中结构清空: truncate 表名

备份导出:mysqldump -u 用户名 -p 数据库 > 路径+文件名

导入>>>>(3个步骤:)

1、创建一个库

2、进入这个库

3、source 路径+文件名

mysql -uroot -p密码 < c:\school.sql #导入

将文本数据转到数据库中

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\n来代替.

例:

3 rose
深圳二中 1976-10-10

4 mike
深圳一中 1975-12-23

2、数据传入命令 load data local infile "文件名" into table 表名;

注意:你最好将文件复制到\mysql\bin目录下,并且要先用use命令打表所在的库

create table teacher

(

id int(3) auto_increment not null PRimary key,

name char(10) not null,

address varchar(50) default '深圳',

year date

);

运算操作:

Select (20+5)*4;

查询当前用户与时间

select USER(),now();

数据类型的选择和区别:

数字类型 字符串类型 时间类型

tinyint 1个字节 3位数 带符号在 -128 127 无符号0--255

mediumint 2个字节 5位数 带符号在 -32768 32767 无符号0--65535

smallint 3个字节 8位数 带符号在 -8388608 8388607 无符号8位数 0--16777215

int 4个字节 10位数 带符号在 -2147483648 2147483647 无符号0--4294967295

bigint 8个字节 19位数 带符号在-9223372036854775808 9223372036854775807 无符号0--18446744073709551615

保存价格通常使用 decimal(m,n);

mysql> create table test2(

-> price decimal(5,3) not null

-> );

Query OK, 0 rows affected (0.05 sec)

mysql> insert into test2 values(12.36);

Query OK, 1 row affected (0.00 sec)

字符串类型 :

char(长度) 最大 255

varchar(长度) 最大 65535

区别:

char和varchar 保存以及检索的规则不相同,char(m)保存数据的如果数据长度不够m,那么char将自动填充空格,varchar不会填充,char(m)在检索数据的时候会自动把尾部空格删除,varchar不会删除。

char(m) 通常用于固定长度数据存储 varchar(m) 可变长度数据存储

text与 blob:

text 通常用于存储文本

blob 通常用于存储二进制资源文件,但是字实际的应用中,如果有更好的方式代替那么尽量不适用.

mysql是基于表引擎的关系型数据库服务器, myisam innodb

如果要使用innodb 那么需要在mysql配置文件 my.ini 注释掉skip-innodb,保存后重启服务器

默认值:

CREATE TABLE `myuser` (

`uid` int(11) NOT NULL auto_increment,

`username` varchar(250) NULL default '王兵',

`photo` varchar(250) NULL default '32423342',

PRIMARY KEY (`uid`),

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

上面的后两个字段均设置了默认值,在mysql命令行下可用如下命令插入默认值:

insert into myuser (username,photo) values (default,default);

枚举的应用:

创建一个表

create table student

(

name varchar(20) not null,

sex enum('f','m') not null,

student_id int not null auto_increment primary key

)

插入: insert into student values('aaa','m');

外键的应用:

create table dage( #大哥表

id int not null primary key auto_increment,

name varchar(30) not null

)engine=myisam default charset=utf8;

create table xiaodi( #小弟表

id int not null primary key auto_increment,

dage_id int not null,

name varchar(32) not null,

constraint xiaodiId_fk_dageId foreign key (dage_id) references dage(id)

)engine=myisam default charset=utf8;

插入个大哥:

mysql> insert into dage(name) values('铜锣湾');

Query OK, 1 row affected (0.01 sec)

mysql> select * from dage;

插入个小弟:

mysql> insert into xiaodi(dage_id,name) values(1,'铜锣湾_小弟A');

Query OK, 1 row affected (0.02 sec)

mysql> select * from xiaodi;

删除大哥:

delete from dage where id=1; #在mysql里面是可以删除的

没有大哥也可以插入小弟

insert into xiaodi(dage_id,name) values(2,'旺角_小弟A');

注意:

**但是在innodb 引擎就不能删除大哥 也不能直接插入小弟

删除列

alter table tablename drop 列名称;

增加列

alter table tablename add 列名称 类型信息与约束 COMMENT '注释说明';

修改列的类型信息

alter table tablename change 列名称 新列名称 类型信息与约束 COMMENT '注释说明';

重命名列

alter table tablename change 列名称 新列名称 类型信息与约束 COMMENT '注释说明'

添加索引

alter table tablename add index 索引名称(列名称);

添加唯一限制条件索引

alter table tablename add unique 唯一性索引名称(列名称);

删除索引

alter table tablename drop index 索引名称;

sql 查询语句整理

用各种操作符来设定检索条件 = > < >= <=

select * from score where score>95; //显示所有分数在95分以上的信息

对不同类型的值进行组合查找

select last_name,first_name,birth,state from president where birth<'1950-1-1' and (state='VA' or state='BA');

//找出1950年前出生于VA州或BA州的总统

NULL 值的特别处理

select last_name,first_name,birth,state from president where death is null; //找出所有没死的总统

在某些情况下,NULL 值是很有用的类型,大家慢慢就会理解的。

查询结果进行排序

select last_name,first_name,birth,state from president order by last_name; //让总统们的名字按字母顺序排列

可以设置排列的升序降序--多字段排序

select last_name,first_name from president order by state DESC,last_name ASC;

限制查询结果中数据行个数使用limit

select * from zfdm limit 2,2;

只要用limit 子句就可以了,看两个例子:

select last_name,first_name,birth,state from president order by birth limit 5; //只想看前5个

select last_name,first_name,birth,state from president order by birth limit 10,5; //返回从第11个记录开始的5个记录(跳过了10个,默认从0开始的)

批量查询数据,可以用in来实现

select * from article where id in(1,3,5)

使用concat连接查询的结果

select concat(id,"-",con) as res from article where id=1

返回"1-articlecontent"

模式匹配

有些情况下,模糊查询是很必要的,我们使用like和not like加上一个带通配符的字符串就可以了。共有两个通配符”_”(单个字符)和”&”(多个字符)

select concat(first_namem,last_name) where last_name like 'W%'; //找到以W或w开头的人

统计语句

distinct 去除重复

select distinct state from president //看看美国总统们都来自那些州?(distinct 去除重复)

select distinct city from customer order by id desc; 从customer表中查询所有的不重复的city

组合子句

where、group by、having、order by(如果这四个都要使用的话,一般按这个顺序排列)

select state,count(*) as count from president group by state order by count desc limt4; //看看出生总统最多的前四个州是哪几个

使用group by

group by 是把相同的结果编为一组

select city ,count(*) from customer group by city;

group by 经常与AVG(),MIN(),MAX(),SUM(),COUNT()一起使用

使用having

having 允许有条件地聚合数据为组

$sql="select city,count(*),min(birth_day) from customer

group by city having count(*)>10";

这句话是先按city归组,然后找出city地数量大于10的城市

btw:使用group by + having 速度有点慢

同时having子句包含的表达式必须在之前出现过

三、php 操作mysql
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: