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