php操作mysql

来源:互联网 发布:淘宝上好玩的大人玩具 编辑:程序博客网 时间:2024/05/18 02:58
一、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






























 

0 0
原创粉丝点击