MySQL笔记

一.数据库(DataBase DB)

1.数据库:存储数据结构的仓库

2.分类

(1)关系型数据库:以二维表存储的数据(MySQL,SQLServer,Orcale等)
(2)非关系型数据库(Nosql):MongDB 等

3.MySQL

(1)安装
(2) 进入

 window :开始--运行--cmd
 linux : 打开终端

(3)MySQL配置文件

window: my.ini
linux : /etc/my.cnf 
// 查看配置文件 
vi  /etc/my.cnf
:q // 退出不保存
datadir= /var/lib/mysql //数据库存储位置

4. 登录

  mysql -u用户名 -p密码 [-P端口号]  [-D选择数据库] 

5. 退出

 quit
 exit
 \q

6.注释

-- 注释内容
#注释内容

7.提示符号修改(prompt)

(1) 进入MySQL时修改提示命令

mysql>prompt 提示符

(2) 登录时命令

mysql -uroot -p --prompt=提示符

说明:

a.恢复 prompt mysql>
b. 
    \u :MySQL的用户
    \h : 主机名称
    \D : 获得系统时间日期
    \d :选择的数据库

8、 SQL(Structured Query Language结构化查询语言):

(1)DDL(数据定义语言):创建数据库,创建表,创建视图等

创建(CREATE)
删除(DROP)
修改(ALTER)

(2)DML(数据操作语言): 对表中数据的操作

增(INSERT)
删(DELETE)
改(UPDATE)

(3)DQL(数据查询语言):

查询(SELECT)

(4)DCL(数据控制语言):

对用户分配权限(GRANT),
撤销权限(REVOKE)

9. SQL的命令规范

(1)系统命令要大写,名称小写
(2)命令行以分号结束 或 \g
说明:修改结束符号 delimiter 结束符号
(3)支持折行,但不能在函数,名称,引号中折行
(4)名称不能是 关键字或保留字,如果是关键字或保留字要用反引号(``),例如 users

10.数据库操作(DDL)

(1)查看数据库
SHOW DATABASES;
(2) 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名称 [[DEFAULT] CHARACTER SET [=] 编码];
(3)查看创建数据库命令
SHOW CREATE DATABASE 数据库名称
(4)删除数据库
DROP DATABASE [IF EXISTS]数据库名称;
(5) 修改创建数据库编码
ALTER DATABASE 数据库名称 [DEFAULT] CHARACTER SET [=] 编码;
(6)选择(打开)数据库
USE 数据库名称;
(7) 查看当前打开的数据库
SELECT DATABASE();

11. 创建表操作(DDL)

(1) 查看表
SHOW TABLES;
(2)创建表结构

CREATE TABLE [IF NOT EXISTS] 表名(
       字段名(列名Field) 数据类型 [字段属性|约束条件],
       字段名(列名Field) 数据类型 [字段属性|约束条件],
       ...
     )[ENGINE=Inno DB DEFAULT CHARSET=utf8];

说明:

MySQL引擎:
       InnoDB : 如果创建外键或事物必须用InnoDB
       MyISAM :

(3)查看表结构

DESC 表名;
DESCRIBE 表名;
SHOW COLUMNS FROM 表名;

(4)查看创建表命令

  SHOW CREATE TABLE 表名;

12.添加和查询数据

(1)添加数据

INSERT 表名(字段名,字段名...) VALUE[S]
       (值,值...),
       (值,值...)...;

(2) 查询数据

SELECT * FROM 表名;
SELECT 字段名,字段名... FROM 表名;

13.数据类型

1.整型
   (1)TINYINT([M]) [UNSIGNED无符号位|ZEROFILL]
        有符号位 : -128~127
        无符号位 : 0~255
        大小 : 1个字节(Byte  2^8)
   (2)SMALLINT([M]) [UNSIGNED无符号位|ZEROFILL]
        有符号位 : -32768~32767
        无符号位 : 0~65535
        大小 : 2个字节(Byte  2^16)
   (3)MEDIUMINT([M]) [UNSIGNED无符号位|ZEROFILL]
        有符号位 : -8388608~8388607
        无符号位 : 0~16777215
        大小 : 3个字节(Byte  2^24)
   (4)INT([M]) [UNSIGNED无符号位|ZEROFILL]
        有符号位 : -2147483648~2147483647
        无符号位 : 0~4294967295
        大小 : 4个字节(Byte  2^32)
    (5)BIGINT([M]) [UNSIGNED无符号位|ZEROFILL]
        大小 : 8个字节(Byte  2^64)
        说明:
          UNSIGNED: 无符号位(正数)
          ZEROFILL:当显示的位数小于指定位数用0 填补。字段有ZEROFILL字段属性自动添加UNSIGNED
2.浮点型
   (1)FLOAT([M,D]):单精度浮点
        范围: -3.40e38 ~3.40e38 
   (2) DOUBLE([M,D]):双精度浮点
        范围: -1.79e308 ~1.79e308 
   (3) DECIMAL([M,D]):定长浮点
       说明:单精度浮点,双精度浮点存近似值;DECIMAL定长浮点存储精确值,会报警告错误。
3.字符类型
  (1) CHAR([M]) :定长字符 
     大小: 0-255字节(一个字母一个字节)
  (2) VARCHAR([M]):变长字符
     大小: 0-65535字节(一个字母一个字节)
  (3)TINYTEXT([M]): 0-255字节
  (4) TEXT([M]):0 -65535字节
  (5) MEDIUMTEXT([M]):0 -16777215字节
  (6) LONGTEXT([M]): 0-4294967295字节
    说明:
      a. CHAR 效率高但不省空间,VARCHAR效率低但省空间,TEXT效率最低。
      b.CHAR,VARCHAR 最大存储的字节数受下面情况影响
        (a) 一个字段最大能存65535字节
        (b) 编码:
           gbk,gb2312 : 一个字最多能存2个字节
           utf8 :一个字最多能存3个字节; 65532/3=21844字节
        (c) 多个字段的字符类型总共不能超65535字节
4.布尔类型
   (1) TINYINT(1)
   (2) BOOLEAN
5. 时间日期类型
   (1) DATE :4个字节 ,YYYY MM DD
   (2) TIME :3个字节,   HH MM SS
   (3) YEAR :1个字节      YYYY
   (4) DATETIME:8个字节  YYYY MM DD HH MM SS
   (5) TIMESTAMP:4个字节 时间戳 1970-1-1  ~ 2037-1-1
6.枚举类型
   enum :至多可以有 65535字节
   例如: 字段:  sex enum('man','woman')

14.约束条件

1.DEFAULT : 默认值
2.NOT NULL: 不能为空(必填)
3. [PRIMARY] KEY:主键,一个表中必须有一个主键, 是主键的字段一定是 NOT NULL 和 UNIQUE。
4. UNIQUE [KEY]:唯一性,一个表中可以有多个唯一性(例如:user用户名不能重复,邮箱不能重复)
5. AUTO_INCREMENT:自动增长,编号自动增长1,如果字段有AUTO_INCREMENT,一定是主键。

二.表结构操作(DDL)

1. 添加字段

ALTER TABLE 表名
ADD 字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名],
ADD 字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名]...;

2. 删除字段

   ALTER TABLE 表名
   DROP 字段名,
   DROP 字段名...;

3.修改字段

  ALTER TABLE 表名
  MODIFY 字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名];

4.更改字段名

   ALTER TABLE 表名
   CHANGE 旧字段名 新字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名];

5.添加默认值

   ALTER TABLE 表名
   ALTER 字段名 SET DEFAULT 值;

6.删除默认值

  ALTER TABLE 表名
  ALTER 字段名 DROP DEFAULT;

7. 添加主键

  ALTER TABLE 表名
  ADD PRIMARY KEY(字段名);

8. 删除主键

  ALTER TABLE 表名 DROP PRIMARY KEY;
  说明:
    如果主键字段有AUTO_INCREMENT ,要先删除AUTO_INCREMENT才能删除主键

9、添加唯一性

  a.ALTER TABLE 表名 ADD UNIQUE KEY|INDEX(字段名);
  b.ALTER TABLE 表名 ADD [CONSTRAINT 约束名称] UNIQUE KEY|INDEX(字段名);

10、删除唯一性

    ALTER TABLE 表名 DROP KEY|INDEX 唯一性的约束名称
    说明:如果没有定义唯一性的约束名称,默认就是字段名。

11.表重命名

    (1)ALTER TABLE 表名 RENAME [AS|TO] 表名;
    (2)RENAME TABLE 旧表名 TO 新表名;

12.重置 AUTO_INCREMENT

    ALTER TABLE 表名 AUTO_INCREMENT=值;

三、帮助

  ? 命令
  help 命令
  \h  命令

四、表中数据操作(DML)

(1) 增(INSERT)
   a.不写字段的添加(从第一个字段到最后一个字度依次都有赋值)
      INSERT [INTO] 表 VALUE[S](值,值,值...);
   b. 写字段的添加(添加一个记录)
      INSERT [INTO] 表(字段名,字段名...) VALUE[S] (值,值...);
   c. 写字段的添加(添加多记录)
      INSERT [INTO] 表(字段名,字段名...) VALUE[S] (值,值...),(值,值...)...;
   d. INSERT...SET(只能添加一条记录)
      INSERT [INTO] 表名 SET 字段名=值,字段名=值...;
(2) 删(DELETE)
   a. DELETE FROM 表 [WHERE条件];
       说明:如果DELETE命令没有WHERE条件,清空表数据,但AUTO_INCREMENT不重置
   b.TRUNCATE 表;
       说明:清空表数据,并且AUTO_INCREMENT重置
(3)  改(UPDATE)
    UPDATE 表名 SET 字段名=值,字段名=值... [WHERE条件];
    说明:
      如果UPDATE命令没有WHERE条件,将所有记录中的列赋相同的值了。

五、表中的数据查询(DQL)

(1) 查询所有字段 (效率低)
   SELECT * FROM 表名;
(2) 列出字段的查询
   SELECT 字段名|expr,字段名|expr...
   FROM 表名;
(3)给字段起别名
   SELECT 字段名 [AS] 别名
   FROM 表名;
(4)给表起别名
   SELECT 字段名 
   FROM 表名 [AS] 别名;
(5)表名(别名).字段:字段来自哪个表
   SELECT 表名.字段名 
   FROM 表名;
(6)数据库.表名:表来自哪个数据库
   SELECT 字段名...
   FROM  数据库名.表名;
(7)查询完整格式
   SELECT 字段名|expr,字段名|expr...
   FROM 表名
   [WHERE 条件]
   [GROUP BY 字段]
   [HAVING 条件]
   [ORDER BY 字段]
   [LIMIT $offset,$length];
(8) WHERE 条件:条件过滤
   条件:
     (a) 比较运算符:
         > >= < <= = 
         != <>(不等于)
         <=> (判断null值)
     (b) IS [NOT] NULL :判断null值
     (c) [NOT] BETWEEN ...AND... (范围值)
     (d) [NOT] IN(值,值...); (包含某个值)
     (e) 逻辑运算符
          ! (非)
          && AND (与,并且)
          || OR  (或者)
     (f) [NOT] LIKE '字符串'; 模糊查询
          关键字
             _ :任意一个字符
             % : 任意字符(0个或1个或多个)
(9) GROUP BY 字段:分组
    说明:
      (a) 对某个字段中相同的值分为一组,并且显示小编号一个结果,一般显示的字段是分组的字段
      (b) GROUP BY 结合 聚合函数使用
          COUNT(*):每组中的个数,包含null
          COUNT(字段):每组中的个数,不包含null值
          AVG(字段):每组中的平均值
          MAX(字段):每组中的最大值
          MIN(字段):每组中的最小值
          SUM(字段):每组中的和
(10) HAVING 条件:二次条件过滤
     说明:
        (a) WHERE条件是字段的过滤
        (b)HAVING条件是对一个结果的过滤一般结合GROUP BY 使用
(11) ORDER BY 字段 :排序
     说明:
         (a)ORDER BY 字段
             ASC 默认升序|DESC 降序
(12) LIMIT [$offset,]$length: 显示前n条信息
     说明:
         (a)$offset:偏移量,编号从0开始,起始编号
         (b)$length:显示的长度(条数)
         (c) WEB分页原理
            计算: $offset =(当前页-1)*显示条数
            $offset =($curpage-1)*$pagesize;

六、MySQL 表达式和函数

1. 算术运算符 和函数
    (1) + - * / % MOD(  求余)
    (2) POW,POWER :求次幂
   (3)SQRT :开平方
   (4)FLOOR:向下取整
   (5) CEIL:向上取整
   (6) ROUND:四舍五入
    (7) RAND:随机小数
          RAND()-- [0,1)
          例如: 0-100整数
          ROUND( RAND()*100)
2.字符函数
    (1) LOWER:转为小写
    (2) UPPER:转为大写 
    (3) CONCAT:字符串连接
          CONCAT($str,$str...)
    (4) CONCAT_WS:字符串连接
          CONCAT_WS('分隔符',$str,$str...)
    (5) SUBSTR,SUBSTRING:字符串截取,编号从1开始
    (6) TRIM:清除两边空格
    (7) RTRIM:清除右边空格
    (8) LTRIM:清除左边空格
    (9) REPLACE:字符串替换
REPLACE($str,$search,$replace)
   (10)LENGTH:获得字符串长度 
3.比较运算符
    (1) > >= < <= = != <> <=>
    (2) IS [NOT] NULL
    (3) [NOT] BETWEEN ...AND...
    (4) [NOT] IN(值...)
4.逻辑运算符
    (1) !(非)
    (2) AND &&(与)
    (3) OR  ||(或者)
5.信息函数
    (1) DATABASE():获得当前打开的数据库
    (2) NOW():获得系统时间日期
    (3) VERSION():MySQL版本
    (4) USER(): 获得用户名
6. 聚合函数
    COUNT(*) :每组中的个数,包含null
    COUNT(字段) :每组中的个数,不包含null值
    AVG(字段) : 每组中的平均值
    MAX(字段) :每组中的最大值
    MIN(字段) :每组中的最小值
    SUM(字段) :每组中的和
7. 加密函数
    MD5
    PASSWORD
    说明:表达式和函数都用SELECT语句输出 

七、多表操作

(1)多表添加
   INSERT 表(字段名...)
   SELECT ...
(2)多个更新
    UPDATE 表1
    INNER JOIN 表2
    ON 两个表的逻辑关系
    SET 字段=值
    [WHERE条件];
(3)多表联合查询
    SELECT 字段名1,字段名2...
    FROM 表1
    连接类型 表2
    ON 两个表的逻辑关系
    连接类型 表3
    ON 两个表的逻辑关系
   ...
   说明:
     连接类型:
         内连接: INNER JOIN 两个表符号的信息内容

八、多表操作

1.多表添加、多表更新、 多表联合查询

格式:

  SELECT 字段名...FROM 表名1 连接类型 表2 ON 两表的逻辑关系 连接类型 表3 ON 两表的逻辑关系  ...

说明:

(1)连接类型:
      内连接:INNER JOIN : 两个表符号条件的信息
      外连接:
         左外连接  LEFT [OUTER] JOIN显示左表中的所有信息和右表中符合条件的信息,如果左表中的信息右表中没有用NULL填补  
         右外连接  RIGHT [OUTER] JOIN显示右表中的所有信息和左表中符合条件的信息,如果右表中的信息左表中没有用NULL填补
   说明:一般多表联合查询用多个表实现,也可以用 SELECT语句得新表用括号括起来并起别名

2. 多表删除

格式:

DELETE 删除表 FROM 表1 INNER JOIN 表2 ON 两个表的逻辑关系 [WHERE 条件]

3.子查询(嵌套查询)

(1) 子查询:在SQL语句中嵌套SELECT语句
(2) 特点:

  • 子查询嵌套SELECT语句
  • 用小括号括起来
  • 一般结合WHERE,GROUP BY 使用

4.子查询的使用

(1)WHERE:
   a.IN
   b.比较运算符
      说明:
          子查询中比较运算符比较的只能是一个结果,但如果是多个结果会产生错误用 ALL,SOME/ANY 来解决
       > >=ALL         大于最大值
       < <=ALL         小于最小值
       >  >=SOME/ANY   大于最小值
       <  <=SOME/ANY   小于最大值
       =SOME/ANY   IN
(2) FROM :用子查询产生一个新表用小括号括起来起别名

九、约束(Constraint)

1.约束:对字段的唯一性,完整性约束.

2.约束种类

(1) NOT NULL 不能为空
(2) DEFAULT 默认值
(3) [PRIMARY] KEY 主键
(4) UNIQUE [KEY] 唯一性
(5) FOREIGN KEY 外键

3.约束格式

(1) 列约束:写字段后的约束,对一个字段的约束

说明: NOT NULL,和DEFAULT是列约束

(2) 表约束:对两个字段以上的约束

列约束:

    CREATE TABLE test(
       id SMALLINT UNSIGNED KEY AUTO_INCREMENT,
       name VARCHAR(30) NOT NULL UNIQUE KEY
    );  

表约束:

   CREATE TABLE test(
       id SMALLINT UNSIGNED AUTO_INCREMENT,
       name VARCHAR(30) NOT NULL,
       PRIMARY KEY(id),
       UNIQUE KEY(name)
    ); 

4.FOREIGN KEY 外键

1.外键:对两个表的完整性和一致性的约束
2.
       CREATE TABLE test(
         ...,
         FOREIGN KEY(外键列) 
         REFERENCES 参考表(字段名称)
       );

说明:

(1) FOREIGN KEY一定表约束
(2)一定先有参考表(主,父)然后再有外键表(从,子)
(3)外键列一定和参考表对应的字段数据类型一致
例如:
整型如果有UNSIGNED 也必须一致,如果是字符型,大小可以不同但编码必须一致
(4)先添加参考表(主)记录后添加外键表(从,子)
(5)创建外键 MySQL 引擎必须是InnoDB
(6)创外键,如果没有定义约束名称,MySQL引擎会默认创建索引类型的约束名称

5. 完整格式

CREATE TABLE test(
    ...,
    FOREIGN KEY(外键列) 
    REFERENCES 参考表(字段名称)
    [ON UPDATE RESTRICT|CASCADE|SET NULL|NO ACTION]
    [ON DELETE RESTRICT|CASCADE|SET NULL|NO ACTION]
);

说明:

(1)RESTRICT(默认值)|NO ACTION:不能删除或更新父表中子表有相应信息的记录
(2) CASCADE级联: 父表删除或更新,子表也删除或更新相应的信息
(3) SET NULL: 父表删除或更新,子表相应的信息设置为NULL,子表字段不能是NOT NULL类型

6.逻辑外键: 父(主)表和子(从)表是一个表

例如:无限级分类(级联菜单)

十、MySQL的备份和恢复

(1) 备份(登录MySQL时的命令)
    mysqldump -uroot -p  数据库名称 
    [表名] >位置文件名称(.sql) 
    (位置文件名称:   f:/my.sql
                  /home/www/my.sql)
(2) 恢复(MySQL提示符下的命令)
   USE 数据库
   mysql> source 位置文件名称(.sql)

十一、可视化工具操作MySQL

  1. C/S:(Client/Server):桌面软件
       MySQL-Front ,Navicat
  2. B/S: (Browser/Server):WEB软件
      PHPMyadmin

MySQL

一、概述

 实现网站的动态化

二、确认MySQL是否安装

phpinf()
MySQL函数库是PHP原生的扩展库。
MySQL不需要安装。

三、应用

1、连接数据库

mysql_connect(string server,string username,string password) 
    功能:连接数据库
    参数:
         server 连接数据库所在的服务器的名称。username 连接数据库的用户名称,password 连接数据库的密码
    返回:成功 mysql资源($link)
             失败 false

2、选择数据库

mysql_select_db(string $dbname [,resource $link])
    功能:连接数据库
    参数:
         dbname 选择数据库的名称
         link :可选参数,在仅连接一个数据库时,此参数可以不给,但是在连接多个数据库时,必须指明这个参数。

3、操作

mysql_query(string $query [,resource $link]);
     没有返回结果集的操作语句:
         a.增(insert)
         返回:成功 true 失败 false
         b.删(delete)
         返回:成功 true  失败 false
         c.改(update)
         返回:成功 true  失败 false
mysql_affected_rows([resource $link])
     功能:mysql_query对于没有返回结果集的sql语句,执行后,返回被影响的行数。
       参数: 
          link 可选参数,mysql连接产生的资源
       返回:成功:返回被影响的行数
             失败:失败 -1
mysql_insert_id([resource $link])
       功能:获取上一次insert语句产生的自增id。
       参数:
          link 可选参数,mysql连接产生的资源  
       返回:成功 自增id
             失败 0

有返回结果集的操作语句:

a.查(select、show、desc)
         成功:资源
         失败:false 
mysql_fetch_array(resource result)
      功能:取回查询的结果。
       格式(关联数组和索引数组)
每次获取一行记录,取不到时 获取到false
       参数:
         result:mysql_query产生的资源
       返回:查询的结果
mysql_fetch_assoc(resource result)
       功能:获取关联数组
          每次获取一行记录,取不到时 获取到false
      参数: 
         result:mysql_query产生的资源
      返回:查询的结果(获取关联数组)
mysql_fetch_row(resource result) 
      功能:获取索引数组 
      参数:
         result:mysql_query产生的资源
      返回:获取索引数组 
            获取不到false
mysql_num_rows(resource result)
       功能:查询结果的记录行数
       参数:
         result:mysql_query产生的资源
       返回: 查询结果的记录行数(整形)  

4、关闭

mysql_close([resource $link])
功能:关闭数据库资源
参数:
link 可选参数。在仅连接一个数据库时,此参数可以不给,但是在连接多个数据库时,必须指明这个参数。

create table poi_1 (
id int(11) NOT NULL AUTO_INCREMENT,
mid varchar(30),
img varchar(200),
x double,
y double,
position_id varchar(30),
PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

5、展示数据库的状态:

show table status from 数据库名称;

6、MySQL的引擎:

InnoDB、MyISAM
创建外键或者事务管理必须是InnoDB
修改MySQL的引擎:
alert table 表名 ENGINE=InnoDB;

你可能感兴趣的:(MySQL笔记)