基本概念
- 数据库:保存有组织的数据的容器
- 表:某种特定类型数据的结构化清单
- 列(COLUMN):表中的一个字段。所有表都是由一个或多个列组成
- 数据类型:所容许的数据的类型。每个表列都由相应的数据类型,它限制该列中所存储的数据
- 行(row):表中的数据是按行存储的,所保存的每个记录存储在自己的行内
- 主键(PRIMARY KEY): 一列或一组列,其值能够唯一区分表中每个行,主键通常用来表示一个特定的行。没有主键,更新或删除表中特定行很困难。
- 主键需要满足两个条件, 一是任意两行都不具有相同的主键值, 二是每行都必须具有一个主键值(主键列不允许NULL值)
- 数据的所有存储、检索、管理和处理实际上是由数据库软件——DBMS(数据库管理系统完成的)。 MYSQL是一种DBMS。
- DBMS可分为两类:一类为基于共享文件系统的DBMS(ACCESS, FileMaker), 另一类基于客户机-服务端的DBMS
- 自动增量(AUTO_INCREMENT):某些表需要唯一值,如订单编号,雇员ID等
- sql语句以分号结束
- ORDER BY应位于WHERE之后
- 关系数据库以行为单位读写数据。
- 约束:约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件 的功能。例如NOT NULL, 设置不能输入空白; PRIMARY KEY(id)设置主键约束
- NULL与任意数进行运算,值还是为NULL
- 事务:对表进行更新通常需要INSERT、UPDATE、DELETE,更新处理不是执行一次就结束了,需要一系列的操作,所以就需要事务,事务就是需要在同一处理单元中执行的一系列更新处理的集合。
- 子句的书写顺序:. 1.SELECT → 2. FROM → 3. WHERE → 4. GROUP BY
- mysql的+号只有一个功能:运算符, select 'john' + 90; 如果转换成功,继续做加法运算。转换失败,则将字符串数值转换为0
- 分组函数:做统计使用
mysql注释
- --单行注释
- /* 多行注释 */
设置字符集
打开mysql.ini文件,找到 default-character-set=gbk 和 character-set-server=gbk, 修改想要的字符
mysql基本命令
- 显示数据库列表: SHOW DATABASES;
- 使用某个数据库:USE 数据库名
- 显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库: SHOW TABLES
- 显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。: SHOW COLUMNS FROM 数据表
- 查看字符集:SHOW variables like '%char%';
- 设置字符集:set names gbk;
mysql关键字
- CREATE:创建数据库和表等对象
- DROP: 删除数据库和表等对象
- ALTER: 修改数据库和表等对象的结构
- SELECT语句:从一个表或多个表中检索信息
- INSERT INTO:向表中插入新数据
- UPDATE:更新表中的数据
- DELETE:删除表中的数据
- DISTINCT: 检索不同的行,如果不希望某个重复的值每次都出现
- LIMIT:限制结果
- ORDER BY: 为了明确地排序用SELECT语句检索出的数据,对输出进行排序
- DESC降序, ASC升序
- WHERE:搜索条件(过滤条件)
- 范围值检查:[WHERE BETWEEN ... AND ]
- IN操作符:IN(值最小范围,值最大范围)
- Not操作符:WHERE子句后用来否定条件的关键字
- LIKE操作符:分为通配符(用来匹配值的一部分的特殊字符)和搜索模式(由字面值、通配符或两者组合构成的搜索条件)
- 百分号通配符(%): %表示任何字符出现任意次数
- 下划线通配符(_): 只匹配单个字符而不是多个字符
- concat(字段名1, 字段名2): 字符串拼接
- IFNULL(字段名, 要返回的值): 如果为空
mysql通配符
MySQL 中使用 REGEXP或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
- %(百分号):替代0个或多个字符
- _(下划线): 替代一个字符
- [charlist]:字符列中的任何单一字符
- [^charlist]或[!charlist]: 不在字符列中的任何单一字符
mysql约束
语法:CREATE TABLE 表名 ( 字段名 数据类型(大小) 约束类型 );
约束类型
- NOT NULL: 指示某列不能存储NULL(空)值。
- UNIQUE:保证某列的每行必须有唯一的值。
- PRIMARY KEY(主键):NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY(外键):保证一个表中的数据匹配另一个表中的值的参照完整性
- CHECK:保证列中的值符合指定的条件
- DEFAULT(默认值):规定没有给列赋值时的默认值
mysql数据类型
数据库相关命令
- 创建数据库: CREATE DATABASE 数据库名;
- 删除数据库: DROP database 数据库名;
- 创建数据表:CREATE TABLE 表名 (字段名1 字段数据类型1, 字段名2 字段数据类型2);
- 删除数据表: DROP TABLE 表名;
- 创建数据表(如果表已存在): CREATE TABLE IF NOT EXISTS 表名(字段名 数据类型);
表相关命令
- 向表中插入数据: INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2)
- 查看表的数据结构: desc 表名; SHOW CREATE TABLE 表名;
- 修改表结构: ALTER TABLE 表名 ADD 字段名 字段数据类型;
- 修改字段名: ALTER TABLE 表名 CHANGE 原字段名 要更改的字段名 原字段数据类型;
- 修改字段类型:ALTER TABLE 表名 MODIFY 字段名 要更改的数据类型;
- 删除字段: ALTER TABLE 表名 DROP 字段名
- 修改表名:ALTER TABLE 表名 rename 要更改的名称
- 为字段添加UNIQUE属性:ALTER TABLE 表名 ADD CONSTRAINT UNIQUE(字段名);
- 为字段删除UNIQUE数学:ALTER TABLE 表名 DROP CONSTRAINT UNIQUE(字段名);
- 将需要的字段改为主键和非空还有自增长: ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 NOT NULL AUTO INCREMENT PRIMARY KEY;
表中的数据相关命令
- 读取数据表所有数据:SELECT * FROM 表名;
- 读取数据: SELECT 字段名1,字段名2 FROM 表名 [WHERE所包含的条件]
- 更新数据:UPDATE 表名 SET 字段名1='值1', 字段名2='值2' [WHERE所包含的条件]
- 删除数据:DELETE FROM 表名 [WHERE所包含的条件]; 如果没有指定WHERE语句,数据将会被全部删除
- LIKE子句(用于模糊查询):SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '%值';
- 为列表设置别名(别名也可以设置为中文):SELECT 字段名1 AS 别名1, 字段名2 AS 别名2 FROM 表名
- WHERE子句(要紧跟在FROM后边): SELECT 字段名 FROM 表名 WHERE<条件表达式>;
- 从其他表中复制数据(INSERT....SELECT常用来做数据备份):INSERT INTO 源数据表 (字段1,字段2...) SELECT 字段1, 字段2... FROM 其他表
- UNION: MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
- 排序(ORDER BY):SELECT 字段1,字段2 FROM 表名 ORDER BY 字段 [ASC(默认升序) DESC(降序)]
- 分组(GROUP BY): GROUP BY 语句根据一个或多个列对结果集进行分组,通常结合数据库的聚合函数一起使用。语法:SELECT 字段名, function(字段名) FROM 表名 GROUP BY 字段名;
- LIMIT(限制结果集): LIMIT子句对于拥有数千条记录的大型表来说,是非常有用的。语法:SELECT 字段 FROM 表名 LIMIT 数字;
- IN(WHERE字句中规定多个值):SELECT 字段名FROM 表名 WHERE 字段名 IN (值1,值2);
- BETWEEN...AND(两个值之间的数据范围内的值): SELECT 字段名 FROM 表名 WHERE 字段名 BETWEEN 值1 AND 值2
- INSERT INTO SELECT(复制表数据):INSERT INTO 新表 SELECT 字段1, 字段2 FROM 旧表
- 插入默认值值:使用DEFAULT来代替
- AND和OR并用: SELECT 字段1,字段2 FROM 表名 (WHERE 字段1=值1 AND 字段2=值2) OR 字段3=值3
- max(最大值): SELECT MAX(字段名) FROM 表名 WHERE[条件]
- min(最小值): SELECT MIN(字段名) FROM 表名 WHERE[条件]
- sum(总和): SELECT SUM(字段名) FROM 表名 WHERE[条件]
- avg(平均值): SELECT AVG(字段名) FROM 表名 WHERE[条件]
- count(计算表中的记录数): SELECT COUNT(字段名) FROM 表名, 字段名也可以用*来代替
- 使用聚合函数删除重复值:count(DISTINCT column_name): SELECT COUNT(DISINCT 字段名) FROM 表名 WHERE[条件]
- concat字符串拼接: SELECT CONCAT(字段名1,字段名2) FROM 表名
- length: 获取参数值的字节个数
PHP AND MYSQL
- PDO(PHP数据对象):扩展支持与MySQL服务器一起支持不同类型的基础数据库服务器。 因此,它是可移植的,以备将来决定在任何时候交换基础数据库服务器时使用。
- Mysqli: MySQLi扩展特定于MySQL服务器,并提供了更好的速度和性能。
PHP怎么连接mysql
通过 mysqli_connect()函数: mysqli_connect('主机名', '数据库用户名','数据库密码', '数据库名')
<?php
$con = mysqli_connect('localhost', 'root', '', 'social');
if(mysqli_connect_errno()){
echo '连接失败'. mysqli_errorno();
}
?>
如何插入数据
- 写好sql语句: INSERT INTO 表名 (字段名1, 字段名2) VALUES(值1,值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);
?>
如何更新数据
- 写好sql语句:UPDATE 表名 SET 字段名=值 WHERE[条件]
- 执行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);
?>
如何查询数据
常用的函数
- mysqli_fetch_all: 一次获取所有结果行。 您还可以指定将结果作为关联数组,数字数组还是两者。
- mysqli_fetch_array: 一次检索一行。 因此,您必须使用while循环来遍历所有记录。 同样,您可以指定是否要将结果行作为关联数组,数字数组或两者兼而有之。
- mysqli_fetch_assoc: 它一次获取一个结果行作为关联数组。
- mysqli_fetch_object: 它一次获取一个结果行作为一个对象。
- mysqli_num_rows: 用于统计SELECT语句执行后的记录数
- 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);
?>