JOE个人网站

JOE个人网站,不仅仅是一个网站,更像是一个展现自我的平台,致力于让朋友们都可以
有所感触,有所收获。

笔记

2017-12-18 18:33:18
一、SQL语句
1、创建新用户并授权
  格式:
  GRANT 权限 ON 数据库.数据表 TO 用户名@登录主机 IDENTIFIED BY "密码"

  添加一个新用户名为phpuser,密码为字符串“brophp”。让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。
  首先要以root用户登录,然后输入以下命令:

  GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO phpuser@"%" IDENTIFIED BY "brophp"

  更安全的作法是,只授权在特定的一台或一些机器上登录,例如只允许在localhost上登录,并可以对数据库mydb执行查询、插入、修改、删除的操作
  命令如下 :

  GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO phpuser@localhost IDENTIFIED BY "brophp"
 flush privileges;//刷新系统权限表

2、连接数据库
  mysql -h localhost -u root -p
  再输入密码进入,这样更安全;
  更改密码:登入前:
  mysqladmin -u root -p password 新密码
  返回Enter password:
  输入旧密码即可;

3、创建数据库
  如:CREATE DATABASE [IF NOT EXISTS] bookstore;//创建一个名为bookstore的数据库;
  删除数据库
  如:DROP DATABASE [IF EXISTS] bookstore;//删除名为bookstore的数据库;
  查看数据库
  如:SHOW DATABASES;//显示所有已建立的数据库名称列表;
  显示建库信息:
  show create database 数据库名;
  打开数据库
  如:USE bookstore;//打开bookstore 数据库为当前数据库使用;
  读取sql文件,比如将sql文件放到c盘下:
  source c:\文件名.sql (不用加;)

4、创建数据表:【两种引擎:myisam常用,innodb支持事务】
  如:
  mysql> create table `book`(
    -> `id` int not null auto_increment primary key, //主键索引
    -> `bookname` varchar(50) not null default '',
    -> `author` varchar(50) not null default '',
    -> `price` double not null default '0.00',
    -> `detail` text not null,
    -> index(`bookname`,`price`) //普通索引
    ->
  )engine=myisam character set utf8 collate utf8_general_ci;

  MySQL的浮点型:
    float:
    double:用的最多;
    decimal:用得很少,字符串形式存入;
    double(M,D)或float(M,D),里面的M指总长度,D指,小数点后位数,如:double(6,2)为4位整数,2位小数;
    自增:auto_increment 主键/索引:primary key 索引:index; 对文本内容进行索引建成全文索引:fulltext;唯一性:unique;

5、查看数据表
  如:show tables;
  显示表的详细信息:
  desc 表名;
  还有两种不常用的:
  describe 表名;
  show columns from 表名;
  显示建表信息:
  show create table 表名;

6、删除数据表
  如:drop table book;

7、操作数据表
  1)、修改表
    alter table 表名 add 建表语句 [first|after 字段名]; 【增加字段】
    alter table `order` add `status` tinyint not null default 0;
    alter table `order` add tel varchar(20) not null default '' after receive
    alter table 表名 change(modify)建表语句; 【修改字段属性】
    alter table `order` modify tel varchar(30) not null default '';

【change还可以改字段名】
    alter table `order` change tel telphone varchar(20) not null default '';
    表中字段tel改变成了telphone;

  2)、删除字段
    alter table 表名 drop column 列名;

  3)、改表名
    alter table 旧表名 rename as 新表名;

8、操作表数据
  1)、插入(INSERT)
    insert into 表名 values(所有对应字段的值);
    insert into 表名(字段名1,字段名2) values('对应字段的值1','对应字段的值2');

  2)、查询(SELECT)
    select * from book;
    select id,bookname,author from book where id>0 order by id desc limit 5;
  限制检索的数量:
    select 字段名 from 表名 limit 限制的数量;
    select 字段名 from 表名 limit 起始行数,检索数量; 【行号从0开始】
  完全限定名:
    select 表名.字段名 from 表名;
    select 表名.字段名 from 数据库.表名;
  检索不同的部分:取唯一性,不要和其他字段联用,仅仅针对某一列;
    select distinct 字段名 from 表名; 【注意DISTINCT 要放在前列】
  排序:
    select 字段名 from 表名 order by 字段名 【一般排序使用的是要检索的字段,当然别的字段也可以】
  多列排序:
    select 字段名1,字段名2 from 表名 order by 字段名1,字段名2;
  【解释:先按照字段名1来排序,然后按照字段名2来排序】
  降序排序:
    select 字段名 from 表名 order by 字段名 desc; 【默认是asc升序】
  混合排序:
    select 字段名1,字段名2 from 表名 order by 字段名1 desc,字段名2;
  【注意:MySQL和大多数DBMS中认为A和a是一样的】
  【注意:from -> order by -> limit 顺序不能变】
  过滤数据:【>,<,=,>=,<=,<>,!=】
    select 字段 from 表名 where 判断条件;
  使用between过滤数据:
    select 字段 from 表名 where 字段 between n and m;
     ==sekect 字段 from 表名 where 字段 >=n and 字段 <=m;
  使用in过滤数据:
    select 字段 from 表名 where 字段 in(n1,n2,n3);
    ==select 字段 from 表名 where 字段 = n1 or 字段 = n2 or 字段 =n3;
  使用 and 配合 or 过滤数据: 【and的优先级大于or,可以加括号来改变优先级】
    select 字段 from 表名 where 条件1 or 条件2 and 条件3;
  使用not:
    select 字段 from 表名 where 字段 not in (n1,n2,n3);
    select 字段 from 表名 where 字段 not between (n1,n2,n3);
  使用like配合%:
    select 字段 from 表名 where 字段 like '%a';
  【%a -> 任意多字符+a、a% -> a+任意多字符、%a% -> 任意多字符a任意多字符;% 表示0个,1个,多个字符】
  使用like配合_:
    select 字段 from 表名 where 字段 like '_a';
  【 _ 表示一个字符】
  【不要烂用通配符,会影响效率】

3)、更改数据表中存在的记录(UPDATE)
    update book set price=99 where id=2;

4)、删除数据表中的记录(DELETE)
    delete from book where id='1';

5)、正则表达式的使用:
  可以在sql中使用正则表达式;与PHP中的区别是不用写定界符,没有\w,\d等;默认不区分大小写,加上BINARY,就会区分大小写;
    select 字段 from 表名 where 字段 regexp 正则表达式;
    select * from user where name regexp binary 'xiaoh[a-z]i';

6)、as的使用:
    select 字段 as 别名 from 表名;
    select count(*) as num from user;

7)、计算表达式的使用
    SELECT 字段1×字段2 AS 别名 FROM 表名;【AS是可以省略的】
    select *,age*id as newnum from user;
  【注意,SELECT顺序:SELECT\FROM\WHERE\GROUP BY\HAVING\ORDER BY\LIMIT】

8)、函数的使用
    COUNT()-返回满足条件的记录数
    SELECT COUNT(*) FROM 表名;
    SUM()-返回一列的总和
    SELECT SUM(字段) FROM 表名;
    AVG()-返回一列的平均值
    SELECT AVG(字段) FROM 表名;
    MAX()-返回一列中最大的值
    SELECT MAX(字段) FROM 表名;
    MIN()-返回一列中最小的值
    SELECT MIN(字段) FROM 表名;

9)、分组 group by 
    select 字段 from 表名 group by 字段;
  【分组就是按照要求将数据分成一个个组来看,如,按照性别分组。】

10)、过滤分组having
    select 字段 from 表名 group by 字段 having 条件;
  【HAVING和WHERE的区别,WHERE是过滤行的,HAVING是过滤分组的】

11)、多表查询
    select 表名1.字段,表名2.字段 from 表名1,表名2 where 判断条件;
  【多表查询一定要有WHERE判断,不然会出现笛卡尔乘积现象】

12)、内联INNER JOIN ON
    SELECT 表名1.字段,表名2.字段 FROM 表名1 INNER JOIN 表名2 ON 判断条件

13)、左关联LEFT OUTER JOIN ON
    SELECT 表名1.字段,表名2.字段 FROM 表名1 LEFT OUTER JOIN 表名2 ON 判断条件
    右关联RIGHT OUTER JOIN ON
    SELECT 表名1.字段,表名2.字段 FROM 表名1 RIGHT OUTER JOIN 表名2 ON 判断条件

二、PHP连接数据库:
  1、 使用的四个步骤:
    a.连接 数据库; $link=mysql_connect(主机,用户名,用户密码);//如果连接的数据库只有一个,可以省略$link;
    b.选择 数据库; mysql_select_db('数据库名'[,$link]);
    在这里设置一下编码:mysql_query('set names utf8');
    c.操作 数据库; $sql="sql语句"; $result=mysql_query($sql);//如果执行的sql语句是查询语句,则会返回结果资源;
    d.关闭 数据库;
  2、函数:
    mysql_connect() //连接数据库
    mysql_select_db() //选择数据库
    mysql_free_result() //释放结果集资源
    mysql_close //关闭数据库
    mysql_query() //执行sql语句,返回结果集(select),或者返回布尔类型值(insert,update,delete)
    mysql_fetch_assoc() //mysql_fetch_row,mysql_fetch_array();从结果集中获取数据,以数组的方式返回;
    mysql_data_seek() //调动结果集指针
    mysql_result() //从结果集中获取某一个具体的值
    mysql_num_rows() //是用来返回结果集中数据的行数
    mysql_num_fields() //返回结果集字段的个数
    mysql_affected_rows() //返回操作的影响行数
    mysql_error() //返回错误信息
    mysql_errno() //返回错误编号
    mysql_insert_id()