欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初识 mysql 数据库

程序员文章站 2022-03-03 22:44:43
...

初识 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;
  • 创建数据表(以商品用户表为例):
  1. --在test数据库下创建mall_user数据表
  2. CREATE TABLE `test`.`mall_user` (
  3. -- 内容区
  4. -- 创建id字段 整数类型 不为空 备注为用户id
  5. `id` INT NOT NULL COMMENT '用户id' ,
  6. -- 创建username字段 varchar类型,限制长度30 设置utf8mb4编码 排序规则utf8mb4_unicode_ci 不为空 备注为用户名
  7. `username` VARCHAR(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名' ,
  8. -- 创建password字段 varchar类型,限制长度30 设置utf8mb4编码 排序规则utf8mb4_unicode_ci 不为空 备注为用户密码
  9. `password` VARCHAR(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户密码' ,
  10. -- 创建gender字段 TINYINT类型 不为空 备注为区分男女
  11. `gender` TINYINT NOT NULL COMMENT '用户性别:1,男;0,女' ,
  12. -- 创建age字段 TINYINT类型 不为空 备注为用户年龄
  13. `age` TINYINT NOT NULL COMMENT '用户年龄' ,
  14. -- 设置id为主键
  15. PRIMARY KEY (`id`)
  16. -- 存储引擎为InnoDB可事务回滚 编码utf8mb4 排序规则utf8mb4_unicode_ci 备注商城用户表
  17. ) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT = '商城用户';
  • 查询 SELECT
  1. -- *默认是查询所有数据,也可以替换为字段名查询某列数据,后面也可以增加WHERE命令进一步增加条件
  2. SELECT * FROM `mall_user`;
  • 修改 UPDATE
  1. -- UPDATE语句中一般必须要加WHERE判断,否则会把字段的所有数据全部修改
  2. UPDATE `mall_user` SET `username` = 'admin' WHERE `id` = 1;
  • 删除 DELETE
  1. -- DELETE语句中也必须要加WHERE判断,否则会收拾行李准备跑路
  2. DELETE FROM `mall_user` WHERE `id` = 1;
  • 新增 INSERT
  1. -- 新增单个数据
  2. INSERT INTO `mall_user` SET `username` = `admin`;
  3. -- 新增一组数据
  4. INSERT INTO `mall_user`(`id`,`username`,`password`,`gender`,`age`)VALUES('','ADMIN','ADMIN123','1','18');
  • 运算符

    • 比较运算符
      |比较|符号|
      |—-|—-|
      |大于|>|
      |小于|<|
      |等于|=|
      |大于等于|>=|
      |小于等于|<=|
      |不等于|<>|
    • 逻辑运算符
      |逻辑|符号|
      |—-|—-|
      |与|AND|
      |或|OR|
      |异或|XOR|
    • 逻辑非 NOT/!
      逻辑非有两种方式一种是 NOT,另一种是!,NOT 常用于判断是否为 NULL,!常与=一起使用,判断是否为非某个值

      1. SELECT * FROM `mall_user` WHERE `username` = 'admin' AND `id` != 1;
      2. SELECT * FROM `mall_user` WHERE `username` = 'admin' AND `password` IS NOT NULL;
    • BETWEEN 查询某个区间内的值

      1. <!-- 查询id大于等于1小于等于2的所有内容 -->
      2. SELECT * FROM `mall_user` WHERE `id` BETWEEN 1 AND 2;
    • LIKE 模糊查询

      模糊查询一般搭配_或者%使用,其中_代表一个字符,在要查询的内容前后加多少个,就相当于是前后有多少个数据,%相当于是所有数据,加在前后,不管有多少全部查询出来

      1. SELECT * FROM `mall_user` WHERE `username` LIKE '__admin__';
      2. SELECT * FROM `mall_user` WHERE `username` LIKE '%admin%';
    • LIMIT 分页
      LIMIT 后面如果只跟一个参数,代表查询前多少条数据,也可以跟两个参数,第一个参数是查询的起始位置,第二个是查询的条数,mysql 数据库里数据的下标与数组相同,也是从 0 开始。

      1. SELECT * FROM `mall_user` WHERE `username` = 'admin' LIMIT 10;
      2. SELECT * FROM `mall_user` WHERE `username` = 'admin' LIMIT 0,10;
    • 排序 ORDER BY
      ORDER BY 后面跟需要按那一列的数值进行排序,再后面默认是正序排列,也可以加 DESC 代表是倒序排列.ORDER BY 必须在 LIMIT 前面

      1. SELECT * FROM `mall_user` WHERE `username` = 'admin' ORDER BY `id` LIMIT 10;
      2. SELECT * FROM `mall_user` WHERE `username` = 'admin' ORDER BY `id` DESC LIMIT 10;

PDO 连接数据库

  1. /**
  2. * 连接数据库
  3. * @param localhost 主机名称
  4. * @param test 数据库名称
  5. * @param root 数据库账号
  6. * @param password 数据库密码
  7. */
  8. $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
  9. //prepare方法预处理sql语句
  10. $pre = $pdo->prepare('SELECT * FROM `mall_user`');
  11. //execute()方法执行sql预处理的语句
  12. $exe = $pre->execute();
  13. //fetch、fetchALL
  14. // fetch返回结果中的第一条数据是一维数据 fetchAll返回结果集
  15. $data = $pre->fetch();
  16. $datas = $pre->fetchAll();
  17. //try{}catch{}对数据库连接抛错
  18. try {
  19. $pdo = new PDO('mysql:host=localhost,dbname=test', 'root', 'root');
  20. } catch (PDOException $e) {
  21. echo '数据库连接失败' . $e->getMessage();
  22. }
  23. //errorInfo()对执行抛错
  24. if (!$exe) {
  25. print_r($pre->errorInfo());
  26. }
  27. //PDO绑定参数
  28. // PDO绑定参数有两种方式
  29. // 第一种
  30. $sql = 'INSERT INTO `mall_user` SET `username`=:username,`password`=:password,`gender`=:gender,`age`=:age';
  31. $pre = $pdo->prepare($sql);
  32. // 通过bindParam绑定
  33. //三个参数分别为:指定的内容,传入的值,指定的传入的类型
  34. $pre->bindParam('username', $username, PDO::PARAM_STR);
  35. $pre->bindParam('password', $password, PDO::PARAM_STR);
  36. $pre->bindParam('gender', $gender, PDO::PARAM_INT);
  37. $pre->bindParam('age', $age, PDO::PARAM_INT);
  38. $exe = $pre->execute();
  39. //执行完毕后可以使用rowCount()查看影响的行数(即是否成功)
  40. echo $pre->rowCount();
  41. //还可以使用pdo里的lastInsertId();来查看最后一个增加的id
  42. echo $pdo->lastInsertId();
  43. // 第二种?号占位符
  44. $sql = 'INSERT INTO `mall_user` SET `username`=?,`password`=?,`gender`=?,`age`=?';
  45. $pre = $pdo->prepare($sql);
  46. $pre->bindParam(1, $username, PDO::PARAM_STR);
  47. $pre->bindParam(2, $password, PDO::PARAM_STR);
  48. $pre->bindParam(3, $gender, PDO::PARAM_INT);
  49. $pre->bindParam(4, $age, PDO::PARAM_INT);
  50. $exe = $pre->execute();
  51. // 以上两种方法也可以不用绑定,在execute的时候直接传一个数组进去
  52. // 第一种
  53. $sql = 'INSERT INTO `mall_user` SET `username`=:username,`password`=:password,`gender`=:gender,`age`=:age';
  54. $pre = $pdo->prepare($sql);
  55. $exe = $pre->execute(['username' => $username, 'password' => $password, 'gender' => $gender, 'age' => $age]);
  56. //第二种
  57. $sql = 'INSERT INTO `mall_user` SET `username`=?,`password`=?,`gender`=?,`age`=?';
  58. $pre = $pdo->prepare($sql);
  59. $exe = $pre->execute([$username, $password, $gender, $age]);