01 基础入门

  • 题目1: 创建一个学生表(students),包含以下字段:

    • id(整数,主键,自动递增)

    • name(姓名,最多50字符)

    • age(年龄,整数)

    • gender(性别,1字符)

    • email(邮箱,最多100字符)

  • 答案:固定字符串长度,使用CHAR类型
    CREATE TABLE student(
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(50),
      age INT,
      gender CHAR(1),
      email VARCHAR(100)
    );
  • 扩展思考:
    • 如果要让name字段不能为空,应该怎么做?  加上NOT NULL
    • 如果要让email字段具有唯一性,应该怎么做?UNIQUE constraint
    • 除了VARCHAR,还可以用什么类型存储姓名?各有什么优缺点?
    • image

  • 题目2: 查看 students 表的结构
  • 答案:
    DESC student;
  • 扩展思考:
    • DESC student 和 SHOW COLUMNS FROM student 有什么区别?
    • image 

    • 如何查看建表的完整SQL语句?(提示:SHOW CREATE TABLE)
    • SHOW CREATE TABLE student;
    • 如何查看数据库中所有的表?
    • SHOW TABLES;
  • 题目3: 插入3条学生记录:

    • 张三,20岁,男,zhangsan@example.com
    • 李四,22岁,女,lisi@example.com
    • 王五,21岁,男,wangwu@example.com
  • 答案1:
    效率低:
    INSERT
    INTO student(name,age,gender,email) VALUES('张三',20,'','zhangsan@example.com'); INSERT INTO student(name,age,gender,email) VALUES('李四',22,'','lisi@example.com'); INSERT INTO student(name,age,gender,email) VALUES('王五',21,'','wangwu@example.com');
  • 答案2
    INSERT INTO student(name,age,gender,email) VALUES('张三',20,'','zhangsan@example.com'),('李四',22,'','lisi@example.com'),('王五',21,'','wangwu@example.com');
  • 扩展思考:
    • 如果分3次执行单条INSERT,和一次执行批量INSERT,哪个更快?为什么?
    • image 

    • 如果你想让id从1001开始,应该怎么做?
    • 方案1:创建表时直接指定 AUTO_INCREMENT 起始值
    • CREATE TABLE student(
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(50),
        age INT,
        gender CHAR(1),
        email VARCHAR(100)
      ) AUTO_INCREMENT = 1001;
    • 方案2:修改已有表的 AUTO_INCREMENT 值,修改前表中还没有数据
    • ALTER TABLE student AUTO_INCREMENT = 1001;
    • 当前最大值的影响:假如表中已经有id大于1001的数据,比如2000,设置了id从1001开始,插入数据后还是按照2001开始
    • 处理已有数据的表
      -- 方法1:清空表并重置(谨慎使用!)
      TRUNCATE TABLE student; -- 清空所有数据,AUTO_INCREMENT重置为1
      ALTER TABLE student AUTO_INCREMENT = 1001;  -- 设置为1001
    • 如果插入时某个邮箱重复了会怎样?(如果email有UNIQUE约束)
    • 插入失败
    • SELECT name, age 和 SELECT * 有什么区别?
    • image 

    • image

    • 能否改变查询结果的字段顺序?如 SELECT age, name  可以的
    • 如何给查询结果的列名起别名?(提示:使用AS)
  • 题目4: 查询所有学生的姓名和年龄
  • 答案:
    SELECT age,gender FROM student;
  • 题目5: 删除表 students
  • 答案:
    DROP TABLE student;
  • 扩展思考:
    • DROP TABLE students 和 DELETE FROM students 有什么区别?image
    • image 

    • 如果想保留表结构只删除数据,应该用什么命令?
    • delete 或者 truncate
    • 如何避免误删表?(提示:可以先用IF EXISTS判断)
posted @ 2026-01-09 10:22  理想赵雷  阅读(1)  评论(0)    收藏  举报