初识 mysql 数据库
数据库与数据表的命名
数据库与数据表可以根据名称的含义使用下划线_进行拼接,如:公司名_项目名_表名
主键
主键是表里的一个关键数据,是每条数据的一个唯一值,一般用作 id,类型为整数、且会跟随创建自增,如果已经存在的 id 被删除,那么其他 id 数值也不会逐个减一或重新计算,而是继续往后延续
mysql 命令书写规范及注意事项
mysql 命令可以是大写,也可以是小写,但是一般我们都按照默认的命令大写,其他字段、数据小写的方式来书写 mysql 代码
mysql 代码中表名跟字段名是需要用反引号``包裹的,字符串的值是用单引号’’包裹
mysql 常用命令
- 连接数据库:
mysql -h localhost -u root -p password;
- 展示数据库:
SHOW DATABASES;
- 选择数据库:
USE mydatabase;
- 展示数据表:
SHOW TABLES;
- 创建数据库:
CREATE DATABASE IF NOT EXISTS test;
- 创建数据表(以商品用户表为例):
--在test数据库下创建mall_user数据表
CREATE TABLE `test`.`mall_user` (
-- 内容区
-- 创建id字段 整数类型 不为空 备注为用户id
`id` INT NOT NULL COMMENT '用户id' ,
-- 创建username字段 varchar类型,限制长度30 设置utf8mb4编码 排序规则utf8mb4_unicode_ci 不为空 备注为用户名
`username` VARCHAR(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名' ,
-- 创建password字段 varchar类型,限制长度30 设置utf8mb4编码 排序规则utf8mb4_unicode_ci 不为空 备注为用户密码
`password` VARCHAR(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户密码' ,
-- 创建gender字段 TINYINT类型 不为空 备注为区分男女
`gender` TINYINT NOT NULL COMMENT '用户性别:1,男;0,女' ,
-- 创建age字段 TINYINT类型 不为空 备注为用户年龄
`age` TINYINT NOT NULL COMMENT '用户年龄' ,
-- 设置id为主键
PRIMARY KEY (`id`)
-- 存储引擎为InnoDB可事务回滚 编码utf8mb4 排序规则utf8mb4_unicode_ci 备注商城用户表
) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT = '商城用户';
- 查询 SELECT
-- *默认是查询所有数据,也可以替换为字段名查询某列数据,后面也可以增加WHERE命令进一步增加条件
SELECT * FROM `mall_user`;
- 修改 UPDATE
-- UPDATE语句中一般必须要加WHERE判断,否则会把字段的所有数据全部修改
UPDATE `mall_user` SET `username` = 'admin' WHERE `id` = 1;
- 删除 DELETE
-- DELETE语句中也必须要加WHERE判断,否则会收拾行李准备跑路
DELETE FROM `mall_user` WHERE `id` = 1;
- 新增 INSERT
-- 新增单个数据
INSERT INTO `mall_user` SET `username` = `admin`;
-- 新增一组数据
INSERT INTO `mall_user`(`id`,`username`,`password`,`gender`,`age`)VALUES('','ADMIN','ADMIN123','1','18');
运算符
- 比较运算符
|比较|符号|
|—-|—-|
|大于|>|
|小于|<|
|等于|=|
|大于等于|>=|
|小于等于|<=|
|不等于|<>| - 逻辑运算符
|逻辑|符号|
|—-|—-|
|与|AND|
|或|OR|
|异或|XOR| 逻辑非 NOT/!
逻辑非有两种方式一种是 NOT,另一种是!,NOT 常用于判断是否为 NULL,!常与=一起使用,判断是否为非某个值SELECT * FROM `mall_user` WHERE `username` = 'admin' AND `id` != 1;
SELECT * FROM `mall_user` WHERE `username` = 'admin' AND `password` IS NOT NULL;
BETWEEN 查询某个区间内的值
<!-- 查询id大于等于1小于等于2的所有内容 -->
SELECT * FROM `mall_user` WHERE `id` BETWEEN 1 AND 2;
LIKE 模糊查询
模糊查询一般搭配_或者%使用,其中_代表一个字符,在要查询的内容前后加多少个,就相当于是前后有多少个数据,%相当于是所有数据,加在前后,不管有多少全部查询出来
SELECT * FROM `mall_user` WHERE `username` LIKE '__admin__';
SELECT * FROM `mall_user` WHERE `username` LIKE '%admin%';
LIMIT 分页
LIMIT 后面如果只跟一个参数,代表查询前多少条数据,也可以跟两个参数,第一个参数是查询的起始位置,第二个是查询的条数,mysql 数据库里数据的下标与数组相同,也是从 0 开始。SELECT * FROM `mall_user` WHERE `username` = 'admin' LIMIT 10;
SELECT * FROM `mall_user` WHERE `username` = 'admin' LIMIT 0,10;
排序 ORDER BY
ORDER BY 后面跟需要按那一列的数值进行排序,再后面默认是正序排列,也可以加 DESC 代表是倒序排列.ORDER BY 必须在 LIMIT 前面SELECT * FROM `mall_user` WHERE `username` = 'admin' ORDER BY `id` LIMIT 10;
SELECT * FROM `mall_user` WHERE `username` = 'admin' ORDER BY `id` DESC LIMIT 10;
- 比较运算符
PDO 连接数据库
/**
* 连接数据库
* @param localhost 主机名称
* @param test 数据库名称
* @param root 数据库账号
* @param password 数据库密码
*/
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
//prepare方法预处理sql语句
$pre = $pdo->prepare('SELECT * FROM `mall_user`');
//execute()方法执行sql预处理的语句
$exe = $pre->execute();
//fetch、fetchALL
// fetch返回结果中的第一条数据是一维数据 fetchAll返回结果集
$data = $pre->fetch();
$datas = $pre->fetchAll();
//try{}catch{}对数据库连接抛错
try {
$pdo = new PDO('mysql:host=localhost,dbname=test', 'root', 'root');
} catch (PDOException $e) {
echo '数据库连接失败' . $e->getMessage();
}
//errorInfo()对执行抛错
if (!$exe) {
print_r($pre->errorInfo());
}
//PDO绑定参数
// PDO绑定参数有两种方式
// 第一种
$sql = 'INSERT INTO `mall_user` SET `username`=:username,`password`=:password,`gender`=:gender,`age`=:age';
$pre = $pdo->prepare($sql);
// 通过bindParam绑定
//三个参数分别为:指定的内容,传入的值,指定的传入的类型
$pre->bindParam('username', $username, PDO::PARAM_STR);
$pre->bindParam('password', $password, PDO::PARAM_STR);
$pre->bindParam('gender', $gender, PDO::PARAM_INT);
$pre->bindParam('age', $age, PDO::PARAM_INT);
$exe = $pre->execute();
//执行完毕后可以使用rowCount()查看影响的行数(即是否成功)
echo $pre->rowCount();
//还可以使用pdo里的lastInsertId();来查看最后一个增加的id
echo $pdo->lastInsertId();
// 第二种?号占位符
$sql = 'INSERT INTO `mall_user` SET `username`=?,`password`=?,`gender`=?,`age`=?';
$pre = $pdo->prepare($sql);
$pre->bindParam(1, $username, PDO::PARAM_STR);
$pre->bindParam(2, $password, PDO::PARAM_STR);
$pre->bindParam(3, $gender, PDO::PARAM_INT);
$pre->bindParam(4, $age, PDO::PARAM_INT);
$exe = $pre->execute();
// 以上两种方法也可以不用绑定,在execute的时候直接传一个数组进去
// 第一种
$sql = 'INSERT INTO `mall_user` SET `username`=:username,`password`=:password,`gender`=:gender,`age`=:age';
$pre = $pdo->prepare($sql);
$exe = $pre->execute(['username' => $username, 'password' => $password, 'gender' => $gender, 'age' => $age]);
//第二种
$sql = 'INSERT INTO `mall_user` SET `username`=?,`password`=?,`gender`=?,`age`=?';
$pre = $pdo->prepare($sql);
$exe = $pre->execute([$username, $password, $gender, $age]);