• MySql自学小记(四)(Linux环境下) 约束以及进行简易成绩管理


    结构化查询语言(structured Query Language)简称SQL
    关系型数据库管理系统(关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据)
     

    环境:

    Ubantu 16.04 64位 

    sudo service mysql start

    输入密码后,如果出现以下提示,则说明系统中已经安装有MySQL:
     

    若没有MySQL,

    #安装 MySQL 服务端、核心程序
    sudo apt-get install mysql-server
    
    #安装 MySQL 客户端
    sudo apt-get install mysql-client

    结束后, 验证

    sudo netstat -tap | grep mysql

     此时,可以根据自己的需求,用gedit修改MySQL的配置文件(my.cnf) ,使用以下命令:

    sudo gedit /etc/mysql/my.cnf

    # 启动 MySQL 服务
    sudo service mysql start
    
    mysql -u root

    CREATE DATABASE mysql_shiyan;
    
    use mysql_shiyan;
    
    CREATE TABLE department
    (
      dpt_name   CHAR(20) NOT NULL,
      people_num INT(10) DEFAULT '10',
      CONSTRAINT dpt_pk PRIMARY KEY (dpt_name)
     );
    
    CREATE TABLE employee
    (
      id      INT(10) PRIMARY KEY,
      name    CHAR(20),
      age     INT(10),
      salary  INT(10) NOT NULL,
      phone   INT(12) NOT NULL,
      in_dpt  CHAR(20) NOT NULL,
      UNIQUE  (phone),
      CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name)
     );
     
    CREATE TABLE project
    (
      proj_num   INT(10) NOT NULL,
      proj_name  CHAR(20) NOT NULL,
      start_date DATE NOT NULL,
      end_date   DATE DEFAULT '2015-04-01',
      of_dpt     CHAR(20) REFERENCES department(dpt_name),
      CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name)
     );
    

    约束

    PRIMARY KEY约束

    DEFAULT约束只会在使用INSERT语句(上一实验介绍过)时体现出来,INSERT语句中,如果被DEFAULT约束的位置没有值,那么这个位置将会被DEFAULT的值填充,如语句:

    # 正常插入数据
    INSERT INTO department(dpt_name,people_num) VALUES('dpt1',11);
    
    #插入新的数据,people_num 为空,使用默认值
    INSERT INTO department(dpt_name) VALUES('dpt2');

     输入命令SELECT * FROM department;,可见表中第二行的people_num被DEFAULT的值(10)填充:

     唯一约束UNIQUE

    当INSERT语句新插入的数据和已有数据重复的时候,如果有UNIQUE约束,则INSERT失败

    外键FOREIGN KEY既能确保数据的完整性,也能体现表之间的关系
    比如,现有用户表和文章表,给文章表中添加一个指向用户id 的外键,表示这篇文章所属的用户id,外键将确保这个外键指向的记录是存在的,如果你尝试删除一个用户,而这个用户还有文章存在于数据库中,那么操作将无法完成并报错。因为你删除了该用户过后,他发布的文章都没有所属用户了
    同理,你在创建一篇文章的时候也不能为它指定一个不存在的用户id
     

    非空约束NOT NULL 在INSERT时若对应值为空则报错

    主键约束与“not null unique”区别
    给某个字段添加主键约束之后,该字段不能重复也不能为空,效果和”not null unique”约束相同,但是本质不同。

    主键约束除了可以做到”not null unique”之外,还会默认添加”索引——index”

    练习:成绩管理

    目标如下:

     

    CREATE DATABASE gradesystem;
    
    use gradesystem;
    
    CREATE TABLE student(
        sid int NOT NULL AUTO_INCREMENT,
        sname varchar(20) NOT NULL,
        gender varchar(10) NOT NULL,
        PRIMARY KEY(sid)
    );
    
    CREATE TABLE course(
        cid int NOT NULL AUTO_INCREMENT,
        cname varchar(20) NOT NULL,
        PRIMARY KEY(cid)
    );
    
    CREATE TABLE mark(
        mid int NOT NULL AUTO_INCREMENT,
        sid int NOT NULL,
        cid int NOT NULL,
        score int NOT NULL,
        PRIMARY KEY(mid),
        FOREIGN KEY(sid) REFERENCES student(sid),
        FOREIGN KEY(cid) REFERENCES course(cid)
    );
    
    INSERT INTO student 
    VALUES(1,'Tom','male'),(2,'Amy','female'),(3,'Fang','female');
    
    INSERT INTO course 
    VALUES(1,'math'),(2,'physics'),(3,'chemistry');
    
    INSERT INTO mark 
    VALUES
    (1,1,1,80),(2,2,1,85),(3,3,1,90),
    (4,1,2,60),(5,2,2,90),(6,3,2,75),
    (7,1,3,95),(8,2,3,75),(9,3,3,85);

    本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/15798998.html

  • 相关阅读:
    Python一些常用模块
    八、线程和进程
    七、Selenium与phantomJS----------动态页面模拟点击、网站模拟登录
    一、scrapy的下载安装---Windows(安装软件太让我伤心了)
    六、BeautifulSoup4------自动登录网站(手动版)
    五、XML与xpath--------------爬取美女图片
    四、正则表达式re模块
    三、Requests库的使用
    二、urllib进阶
    一、爬虫的基本体系和urllib的基本使用
  • 原文地址:https://www.cnblogs.com/Knight02/p/15798998.html
Copyright © 2020-2023  润新知