mysql

309 阅读9分钟

基本概念

  1. 数据库:保存有组织的数据的容器
  2. 表:某种特定类型数据的结构化清单
  3. 列(COLUMN):表中的一个字段。所有表都是由一个或多个列组成
  4. 数据类型:所容许的数据的类型。每个表列都由相应的数据类型,它限制该列中所存储的数据
  5. 行(row):表中的数据是按行存储的,所保存的每个记录存储在自己的行内
  6. 主键(PRIMARY KEY): 一列或一组列,其值能够唯一区分表中每个行,主键通常用来表示一个特定的行。没有主键,更新或删除表中特定行很困难。
  7. 主键需要满足两个条件, 一是任意两行都不具有相同的主键值, 二是每行都必须具有一个主键值(主键列不允许NULL值)
  8. 数据的所有存储、检索、管理和处理实际上是由数据库软件——DBMS(数据库管理系统完成的)。 MYSQL是一种DBMS。
  9. DBMS可分为两类:一类为基于共享文件系统的DBMS(ACCESS, FileMaker), 另一类基于客户机-服务端的DBMS
  10. 自动增量(AUTO_INCREMENT):某些表需要唯一值,如订单编号,雇员ID等
  11. sql语句以分号结束
  12. ORDER BY应位于WHERE之后
  13. 关系数据库以行为单位读写数据。
  14. 约束:约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件 的功能。例如NOT NULL, 设置不能输入空白; PRIMARY KEY(id)设置主键约束
  15. NULL与任意数进行运算,值还是为NULL
  16. 事务:对表进行更新通常需要INSERT、UPDATE、DELETE,更新处理不是执行一次就结束了,需要一系列的操作,所以就需要事务,事务就是需要在同一处理单元中执行的一系列更新处理的集合。
  17. 子句的书写顺序:. 1.SELECT → 2. FROM → 3. WHERE → 4. GROUP BY
  18. mysql的+号只有一个功能:运算符, select 'john' + 90; 如果转换成功,继续做加法运算。转换失败,则将字符串数值转换为0
  19. 分组函数:做统计使用

mysql注释

  1. --单行注释
  2. /* 多行注释 */

设置字符集

打开mysql.ini文件,找到 default-character-set=gbk 和 character-set-server=gbk, 修改想要的字符

mysql基本命令

  1. 显示数据库列表: SHOW DATABASES;
  2. 使用某个数据库:USE 数据库名
  3. 显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库: SHOW TABLES
  4. 显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。: SHOW COLUMNS FROM 数据表
  5. 查看字符集:SHOW variables like '%char%';
  6. 设置字符集:set names gbk;

mysql关键字

  1. CREATE:创建数据库和表等对象
  2. DROP: 删除数据库和表等对象
  3. ALTER: 修改数据库和表等对象的结构
  4. SELECT语句:从一个表或多个表中检索信息
  5. INSERT INTO:向表中插入新数据
  6. UPDATE:更新表中的数据
  7. DELETE:删除表中的数据
  8. DISTINCT: 检索不同的行,如果不希望某个重复的值每次都出现
  9. LIMIT:限制结果
  10. ORDER BY: 为了明确地排序用SELECT语句检索出的数据,对输出进行排序
  11. DESC降序, ASC升序
  12. WHERE:搜索条件(过滤条件)
  13. 范围值检查:[WHERE BETWEEN ... AND ]
  14. IN操作符:IN(值最小范围,值最大范围)
  15. Not操作符:WHERE子句后用来否定条件的关键字
  16. LIKE操作符:分为通配符(用来匹配值的一部分的特殊字符)和搜索模式(由字面值、通配符或两者组合构成的搜索条件)
  17. 百分号通配符(%): %表示任何字符出现任意次数
  18. 下划线通配符(_): 只匹配单个字符而不是多个字符
  19. concat(字段名1, 字段名2): 字符串拼接
  20. IFNULL(字段名, 要返回的值): 如果为空

mysql通配符

MySQL 中使用 REGEXPNOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。

  1. %(百分号):替代0个或多个字符
  2. _(下划线): 替代一个字符
  3. [charlist]:字符列中的任何单一字符
  4. [^charlist]或[!charlist]: 不在字符列中的任何单一字符

mysql约束

语法:CREATE TABLE 表名 ( 字段名 数据类型(大小) 约束类型 );

约束类型

  1. NOT NULL: 指示某列不能存储NULL(空)值。
  2. UNIQUE:保证某列的每行必须有唯一的值。
  3. PRIMARY KEY(主键):NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识有助于更容易更快速地找到表中的一个特定的记录
  4. FOREIGN KEY(外键):保证一个表中的数据匹配另一个表中的值的参照完整性
  5. CHECK:保证列中的值符合指定的条件
  6. DEFAULT(默认值):规定没有给列赋值时的默认值

mysql数据类型

数据库相关命令

  1. 创建数据库: CREATE DATABASE 数据库名;
  2. 删除数据库: DROP database 数据库名;
  3. 创建数据表:CREATE TABLE 表名 (字段名1 字段数据类型1, 字段名2 字段数据类型2);
  4. 删除数据表: DROP TABLE 表名;
  5. 创建数据表(如果表已存在): CREATE TABLE IF NOT EXISTS 表名(字段名 数据类型);

表相关命令

  1. 向表中插入数据: INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2)
  2. 查看表的数据结构: desc 表名; SHOW CREATE TABLE 表名;
  3. 修改表结构: ALTER TABLE 表名 ADD 字段名 字段数据类型;
  4. 修改字段名: ALTER TABLE 表名 CHANGE 原字段名 要更改的字段名 原字段数据类型;
  5. 修改字段类型:ALTER TABLE 表名 MODIFY 字段名 要更改的数据类型;
  6. 删除字段: ALTER TABLE 表名 DROP 字段名
  7. 修改表名:ALTER TABLE 表名 rename 要更改的名称
  8. 为字段添加UNIQUE属性:ALTER TABLE 表名 ADD CONSTRAINT UNIQUE(字段名);
  9. 为字段删除UNIQUE数学:ALTER TABLE 表名 DROP CONSTRAINT UNIQUE(字段名);
  10. 将需要的字段改为主键和非空还有自增长: ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 NOT NULL AUTO INCREMENT PRIMARY KEY;

表中的数据相关命令

  1. 读取数据表所有数据:SELECT * FROM 表名;
  2. 读取数据: SELECT 字段名1,字段名2 FROM 表名 [WHERE所包含的条件]
  3. 更新数据:UPDATE 表名 SET 字段名1='值1', 字段名2='值2' [WHERE所包含的条件]
  4. 删除数据:DELETE FROM 表名 [WHERE所包含的条件]; 如果没有指定WHERE语句,数据将会被全部删除
  5. LIKE子句(用于模糊查询):SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '%值';
  6. 为列表设置别名(别名也可以设置为中文):SELECT 字段名1 AS 别名1, 字段名2 AS 别名2 FROM 表名
  7. WHERE子句(要紧跟在FROM后边): SELECT 字段名 FROM 表名 WHERE<条件表达式>;
  8. 从其他表中复制数据(INSERT....SELECT常用来做数据备份)INSERT INTO 源数据表 (字段1,字段2...) SELECT 字段1, 字段2... FROM 其他表
  9. UNION: MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
  10. 排序(ORDER BY):SELECT 字段1,字段2 FROM 表名 ORDER BY 字段 [ASC(默认升序) DESC(降序)]
  11. 分组(GROUP BY): GROUP BY 语句根据一个或多个列对结果集进行分组,通常结合数据库的聚合函数一起使用。语法:SELECT 字段名, function(字段名) FROM 表名 GROUP BY 字段名;
  12. LIMIT(限制结果集): LIMIT子句对于拥有数千条记录的大型表来说,是非常有用的。语法:SELECT 字段 FROM 表名 LIMIT 数字;
  13. IN(WHERE字句中规定多个值):SELECT 字段名FROM 表名 WHERE 字段名 IN (值1,值2);
  14. BETWEEN...AND(两个值之间的数据范围内的值): SELECT 字段名 FROM 表名 WHERE 字段名 BETWEEN 值1 AND 值2
  15. INSERT INTO SELECT(复制表数据):INSERT INTO 新表 SELECT 字段1, 字段2 FROM 旧表
  16. 插入默认值值:使用DEFAULT来代替
  17. AND和OR并用: SELECT 字段1,字段2 FROM 表名 (WHERE 字段1=值1 AND 字段2=值2) OR 字段3=值3
  18. max(最大值): SELECT MAX(字段名) FROM 表名 WHERE[条件]
  19. min(最小值): SELECT MIN(字段名) FROM 表名 WHERE[条件]
  20. sum(总和): SELECT SUM(字段名) FROM 表名 WHERE[条件]
  21. avg(平均值): SELECT AVG(字段名) FROM 表名 WHERE[条件]
  22. count(计算表中的记录数): SELECT COUNT(字段名) FROM 表名, 字段名也可以用*来代替
  23. 使用聚合函数删除重复值:count(DISTINCT column_name): SELECT COUNT(DISINCT 字段名) FROM 表名 WHERE[条件]
  24. concat字符串拼接: SELECT CONCAT(字段名1,字段名2) FROM 表名
  25. length: 获取参数值的字节个数

PHP AND MYSQL

  1. PDO(PHP数据对象):扩展支持与MySQL服务器一起支持不同类型的基础数据库服务器。 因此,它是可移植的,以备将来决定在任何时候交换基础数据库服务器时使用。
  2. Mysqli: MySQLi扩展特定于MySQL服务器,并提供了更好的速度和性能。

PHP怎么连接mysql

通过 mysqli_connect()函数: mysqli_connect('主机名', '数据库用户名','数据库密码', '数据库名')

<?php
    $con = mysqli_connect('localhost', 'root', '', 'social');
    if(mysqli_connect_errno()){
        echo '连接失败'. mysqli_errorno();
    }
?>

如何插入数据

  1. 写好sql语句: INSERT INTO 表名 (字段名1, 字段名2) VALUES(值1,值2)
  2. 执行sql语句:mysqli_query('数据库连接', '执行的sql语句')
<?php
//连接数据库
    $con = mysqli_connect('localhost', 'root', '', 'wangluo');
    if(!$con) {
        die('数据库连接失败') . mysqli_error($conn);
    }
    echo '连接成功<br>';

    $insert_query = "INSERT INTO stu1 VALUES('', '刘军', '男', '佛山', 85)";

    //执行sql语句
    if(mysqli_query($con, $insert_query)) {
        echo '执行成功<br>';
    }
    
    //关闭数据库连接
    mysqli_close($con);
?>

如何更新数据

  1. 写好sql语句:UPDATE 表名 SET 字段名=值 WHERE[条件]
  2. 执行sql语句
<?php
    $con = mysqli_connect('localhost', 'root', '', 'wangluo');
    if(!$con) {
        die('数据库连接失败') . mysqli_error($conn);
    }
    echo '连接成功<br>';

    //更新数据sql
    $update_query = "UPDATE stu1 SET addr='长沙' WHERE name='黄超'";

    //执行sql语句
    if(mysqli_query($con, $update_query)) {
        echo "更新数据成功<br>";
    }
    
    //关闭数据库连接
    mysqli_close($con);
?>

如何查询数据

常用的函数

  1. mysqli_fetch_all: 一次获取所有结果行。 您还可以指定将结果作为关联数组,数字数组还是两者。
  2. mysqli_fetch_array: 一次检索一行。 因此,您必须使用while循环来遍历所有记录。 同样,您可以指定是否要将结果行作为关联数组,数字数组或两者兼而有之。
  3. mysqli_fetch_assoc: 它一次获取一个结果行作为关联数组
  4. mysqli_fetch_object: 它一次获取一个结果行作为一个对象
  5. mysqli_num_rows: 用于统计SELECT语句执行后的记录数
  6. mysqli_fetch_row(): 获取一个结果,以索引数组返回
<?php
    $con = mysqli_connect('localhost', 'root', '', 'wangluo');
    if(!$con) {
        die('数据库连接失败') . mysqli_error($conn);
    }
    echo '连接成功<br>';

    //查询语句
    $select_query = "SELECT * FROM stu1 LIMIT 10";
    //返回结果集
    $result = mysqli_query($con, $select_query);
    
    //mysqli_fetch_array(结果集, 以关联数组的形式)
    //获取所有记录
    while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
        echo "id: " .$row['id'] . "<br/>"; 
        echo "姓名: " .$row['name'] . "<br/>"; 
        echo "性别: " .$row['sex'] . "<br/>"; 
        echo "地址: " .$row['addr'] . "<br/>"; 
        echo "分数: " .$row['score'] . "<br/>"; 
        echo "<br/>";
    }

    //关闭数据库连接
    mysqli_close($con);
?>

以结果集作为对象的形式获取所有记录

 //获取结果集作为对象
    while($row = mysqli_fetch_object($result)) {
        echo "id: ". $row->id ."<br/>"; 
        echo "姓名: " . $row->name . "<br/>"; 
        echo "性别: " . $row->sex . "<br/>"; 
        echo "地址: " . $row->addr . "<br/>"; 
        echo "分数: " . $row->score . "<br/>"; 
        echo "<br/>";
    }

如何删除记录

<?php
    $con = mysqli_connect('localhost', 'root', '', 'wangluo');
    if(!$con) {
        die('数据库连接失败') . mysqli_error($conn);
    }
    echo '连接成功<br>';

    //删除记录
    $delete_query = "DELETE FROM stu1 WHERE name='刘军'";

    //执行sql语句
    if(mysqli_query($con, $delete_query)) {
        echo '删除成功<br>';
    }
    //关闭数据库连接
    mysqli_close($con);
?>

PHP CRUD(Create, Read, Update, Delete)