SQL练习代码(第二篇)

📚 SQL练习代码(第二篇)

  • 🔁 文章原始同步:微信搜索公众号:sky wide 技术
  • 📖 QQ技术群:308191819
  • 欢迎各位加入
    该篇文章主要是将博主在学习sql时候的代码进行讲解,提供给小白入门使用。
-- 1. 创建数据库并设置字符集
CREATE DATABASE IF NOT EXISTS collage;
USE collage;
ALTER DATABASE collage DEFAULT CHARACTER SET gbk;

-- 检查字符集和排序规则设置
SHOW VARIABLES LIKE '%character%';
SHOW VARIABLES LIKE 'collation_%';

-- 2. 禁用外键检查以进行表创建
SET FOREIGN_KEY_CHECKS=0;

-- 3. 创建表
-- a. 部门表
CREATE TABLE Department (
    Did CHAR(5) PRIMARY KEY,            -- 部门编号,主键
    Dname VARCHAR(30) NOT NULL UNIQUE,  -- 部门名称,唯一约束
    Dheader CHAR(5),                     -- 部门负责人
    CONSTRAINT fk_dheader FOREIGN KEY (Dheader) REFERENCES Teacher (Tid)  -- 外键约束
) DEFAULT CHARSET=gbk;

-- b. 教师表
CREATE TABLE Teacher (
    Tid CHAR(5) PRIMARY KEY,            -- 教师编号,主键
    Tname VARCHAR(10) NOT NULL,         -- 教师姓名
    Tsex ENUM('男','女'),                -- 教师性别
    Tprof ENUM('助教','讲师','副教授','教授'),  -- 教师职称
    Tdept CHAR(3),                       -- 教师所属部门
    Sal DECIMAL(5,1),                   -- 工资
    Comm DECIMAL(5,1),                  -- 佣金
    CONSTRAINT fk_tdept FOREIGN KEY(Tdept) REFERENCES Department(Did)  -- 外键约束
) DEFAULT CHARSET=gbk;

-- c. 学生表
CREATE TABLE Student (
    Sid CHAR(5) PRIMARY KEY,            -- 学生编号,主键
    Sname VARCHAR(10) NOT NULL,         -- 学生姓名
    Ssex ENUM('男','女') DEFAULT '男',   -- 学生性别,默认值为 '男'
    Sbirth DATE,                        -- 学生出生日期
    Sdept CHAR(3),                      -- 学生所属部门
    CONSTRAINT fk_sdept FOREIGN KEY(Sdept) REFERENCES Department(Did)  -- 外键约束
) DEFAULT CHARSET=gbk;

-- d. 课程表
CREATE TABLE Course (
    Cid CHAR(5) PRIMARY KEY,            -- 课程编号,主键
    Cname VARCHAR(20) NOT NULL,         -- 课程名称
    Ccredit INT,                        -- 学分
    Cpno CHAR(3),                       -- 先修课程编号
    Climit INT DEFAULT 60               -- 课程人数上限,默认值 60
) DEFAULT CHARSET=gbk;

-- e. 教师-课程关系表
CREATE TABLE Tc (
    Tid CHAR(4),                        -- 教师编号
    Cid CHAR(3),                        -- 课程编号
    PRIMARY KEY(Tid, Cid),              -- 主键(教师编号,课程编号)
    CONSTRAINT fk_tid FOREIGN KEY(Tid) REFERENCES Teacher(Tid),  -- 外键约束
    CONSTRAINT fk_cid FOREIGN KEY(Cid) REFERENCES Course(Cid)    -- 外键约束
) DEFAULT CHARSET=gbk;

-- f. 学生-课程关系表
CREATE TABLE Sc (
    Sid CHAR(4),                        -- 学生编号
    Cid CHAR(3),                        -- 课程编号
    Grade DECIMAL(5,1),                 -- 成绩
    PRIMARY KEY(Sid, Cid),              -- 主键(学生编号,课程编号)
    CONSTRAINT fk_sid FOREIGN KEY(Sid) REFERENCES Student(Sid),  -- 外键约束
    CONSTRAINT fk_cid2 FOREIGN KEY(Cid) REFERENCES Course(Cid)  -- 外键约束
) DEFAULT CHARSET=gbk;

-- 4. 显示表和描述
SHOW TABLES;                           -- 显示所有表
DESC Course;                           -- 显示课程表结构

-- 5. 创建显示列的存储过程
DELIMITER //

CREATE PROCEDURE ShowColumns()
BEGIN
    DECLARE tableArray VARCHAR(255);
    DECLARE tables VARCHAR(255) DEFAULT 'course,department,sc,student,tc,teacher';
    DECLARE currentPosition INT DEFAULT 1;

    WHILE currentPosition > 0 DO
        SET @nextComma = LOCATE(',', tables, currentPosition);
        
        IF @nextComma = 0 THEN
            SET tableArray = SUBSTRING(tables, currentPosition);
            SET currentPosition = 0; -- 到达表名的末尾
        ELSE
            SET tableArray = SUBSTRING(tables, currentPosition, @nextComma - currentPosition);
            SET currentPosition = @nextComma + 1;
        END IF;

        IF tableArray != '' THEN
            SET @cmd = CONCAT('SHOW COLUMNS FROM ', tableArray);
            PREPARE stmt FROM @cmd;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        END IF;
    END WHILE;
END //

DELIMITER ;

-- 调用存储过程显示列
CALL ShowColumns();

-- 使用完后删除存储过程
DROP PROCEDURE ShowColumns;

-- 6. 其他操作
SHOW DATABASES;                       -- 显示所有数据库
USE collage;                          -- 使用 collage 数据库
SHOW TABLES;                         -- 显示数据库中的所有表

-- 对 `ac` 表的示例操作(似乎重命名为 `sc`)
USE collage;                         -- 再次使用数据库
DESC ac;                             -- 显示 `ac` 表结构

-- 示例表操作
ALTER TABLE ac DROP i;              -- 删除某一列(如果存在,否则会报错)
ALTER TABLE ac DROP COLUMN birthdate; -- 删除已存在的列
ALTER TABLE ac ADD COLUMN birthdate DATE; -- 添加新列

-- 将表重命名从 `ac` 为 `sc`
ALTER TABLE ac RENAME TO sc;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sky wide

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值