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

原文地址:https://www.cnblogs.com/Knight02/p/15798998.html