zoukankan      html  css  js  c++  java
  • 2017年06月28号课堂笔记

    2017年06月28号 星期三 晴 空气质量:中度污染

    内容:MySQL第二节课

    1、创建学生表

    1)老师代码:

    CREATE TABLE IF NOT EXISTS student(
    studentNo INT(4) NOT NULL PRIMARY KEY COMMENT '学号',
    loginPwd VARCHAR(20) NOT NULL COMMENT '密码',
    studentName VARCHAR(50) NOT NULL COMMENT '姓名',
    sex CHAR(2) NOT NULL DEFAULT'男' COMMENT '性别',
    gradeID INT(4) UNSIGNED COMMENT '年级编号',
    phone VARCHAR(50) COMMENT '电话',
    address VARCHAR(255) DEFAULT'地址不详' COMMENT '地址',
    bornDate DATETIME COMMENT '出生日期',
    email VARCHAR(50) COMMENT '邮箱账号',
    identityCard VARCHAR(18) UNIQUE KEY COMMENT '身份证号'
    )COMMENT='学生表';

    2)约束类型:

    主键约束 primary key (pk) 用于设置表的主键,用来确保该行的唯一性
    外键 foreign key (fk) 用于建立表与表之间的关系
    非空约束 not null 字段不允许为空
    默认约束 default 字段的默认值
    唯一约束 unique key(uk) 字段的值是唯一的可以是null,但只能有一个
    自动增长 auto_increment 设置列的自动增长(标识列),通常用于设置主键

    2、修改表中数据

    -- 修改表名 把 student表名 改成 stu
    ALTER TABLE student RENAME AS stu;

    -- 给表中增加 微信 字段 不为空 唯一
    ALTER TABLE student ADD wechat VARCHAR(20) UNIQUE KEY;

    -- 修改表中 微信 字段的长度为50
    ALTER TABLE student MODIFY wechat VARCHAR(50);

    -- 删除表中 微信 字段
    ALTER TABLE student DROP wechat;

    -- 修改studentName字段的名称为 stuName
    ALTER TABLE student CHANGE `studentName` stuName VARCHAR(20);

    3、创建subject(科目表)

    1)老师代码:

    CREATE TABLE IF NOT EXISTS `subject`(
    subjectNo INT(4) AUTO_INCREMENT PRIMARY KEY COMMENT '课程编号',
    subjectName VARCHAR(50) COMMENT '课程名称',
    classHour INT(4) COMMENT '学时',
    gradeID INT(4) COMMENT '年级编号'
    )COMMENT='科目表' CHARSET='utf8';

    2)遇到问题总结:

    在使用AUTO_INCREMENT  必须和PRIMARY KEY 联合使用!

    4、创建年级表

    老师代码:

    CREATE TABLE IF NOT EXISTS grade(
    gradeID INT(4) COMMENT '年级编号',
    gradeName VARCHAR(10) COMMENT '年级名称'
    )COMMENT='年级表';

    5、添加主键的语法

    1)语法:

    ALTER TABLE 表名 ADD CONSTRAINT 主键名
    PRIMARY KEY 表名(主键字段);

    2)代码:

    -- 给年级表中id设置成主键
    ALTER TABLE grade ADD CONSTRAINT pk_grade_gradeID PRIMARY KEY(gradeID);

    6、创建成绩表

    老师代码:

    CREATE TABLE IF NOT EXISTS result(
    studentNo INT(4) NOT NULL PRIMARY KEY COMMENT '学号',
    subjectNo INT(4) NOT NULL COMMENT '课程编号',
    examDate DATETIME NOT NULL COMMENT '考试日期 ',
    studentResult INT(4) NOT NULL COMMENT '考试成绩'
    )COMMENT='成绩表' charset='utf8' engine=InnoDB;

    7、外键的语法

    1)语法:

    ALTER TABLE 表名 ADD CONSTRAINT 外键名
    FOREIGN KEY(外键字段)
    REFERENCES 关联表名(关联字段);

    2)创建student表和grade表的关系

    学生应该属于某个年级

    外键必须建立在 从表上!

    3)代码:

    ALTER TABLE student ADD CONSTRAINT fk_student_grade
    FOREIGN KEY(gradeID)
    REFERENCES grade(gradeID);

    4)问题: 前提已经建立了 主外键关系

    如果说有三个年级,编号分别是 1 2 3
    那么也有三个学生 对应的关系是
    第1个学生 1年级
    第2个学生 2年级
    第3个学生 2年级


    01.有没有这种情况 有个学生的年级编号是4 ??
    主表中没有数据! 从表无法创建!

    02.可不可以删除年级表2年级或者1年级???
    不能删除!因为从表中还有关联数据!


    03.如果我们非得删除年级 怎么办??
    先把从表中的关联数据删除 ,之后再删除主表中的数据!

    8、联合主键

    将多列设置成主键!

    -- 给成绩表设置联合主键
    ALTER TABLE result ADD PRIMARY KEY pk_result (studentno,subjectno,examdate);

    9、MyISAM 和 InnoDB的区别

    MyISAM 和 InnoDBmysql是数据库中常用的两种存储引擎

    1)应用对比:

          MyISAM   InnoDB
    事务处理    不支持     支持
    外键约束    不支持     支持
    全文索引    支持      不支持


    2)使用的场景:

    MyISAM:不能使用事务,空间小,适合查询!
    InnoDB:多适用于增删改,安全性高!事务的并发处理!

    3)查询及修改存储引擎

    -- 查询当前默认的存储引擎
    SHOW VARIABLES LIKE 'storage_engine%';
    -- 修改存储引擎
    -- 找到安装路径下面的my.ini文件
    -- 加入 default-storage-engine=InnoDB


    4)数据库表的存储位置:data文件夹

    InnoDB类型的表文件
    *.frm :表结构定义文件
    *.ibd : 数据文件

    MyISAM类型的表文件
    *.frm :表结构定义文件
    *.MYD :数据文件
    *.MYI :索引文件

    10、DML和DQL   增删改查

    老师代码:

    SELECT * FROM grade

    1)新增 insert

    -- 向年级表中新增3条数据
    INSERT INTO grade(gradeID,gradeName) VALUES(4,'4年级');
    INSERT INTO grade(gradeID,gradeName) VALUES(5,'5年级');
    INSERT INTO grade(gradeID,gradeName) VALUES(6,'6年级');

    2)-- 删除 456
    DELETE FROM grade WHERE gradeID>3;
    DELETE FROM grade WHERE gradeID=4 OR gradeID=5 OR gradeID=6;
    DELETE FROM grade WHERE gradeID IN (4,5,6);

    3)-- 同时插入多条数据 (oracle数据库不支持
    INSERT INTO grade(gradeID,gradeName)
    VALUES(4,'4年级'),(5,'5年级'),(6,'6年级');


    4)-- 修改gradeID=1的年级名称为 one
    UPDATE grade SET gradeName='one'
    WHERE gradeID=1

    5)-- delete 删除表中所有的数据
    DELETE FROM grade;

    11、老师辛苦了!

  • 相关阅读:
    华为交换机配置NTP服务端/客户端
    利用shell简单监控网络设备的接口状态发出告警
    Linux下自动清理超过指定大小文件
    Kotlin进阶学习5
    Kotlin进阶学习4
    Kotlin进阶学习3
    大二暑假第一周学习总结
    Kotlin进阶学习2
    Kotlin进阶学习1
    Kotlin基础学习3
  • 原文地址:https://www.cnblogs.com/wsnedved2017/p/7098068.html
Copyright © 2011-2022 走看看