创建数据库 创建表

数据类型

插入数据的几种方法

约束

代码

CREATE DATABASE mysql_shiyan;

use mysql_shiyan;

CREATE TABLE department
(
dpt_name CHAR(20) NOT NULL,
people_num INT(10) DEFAULT '',
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)是用于约束表中的一行,作为这一行的唯一标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要,主键不能有重复记录且不能为空。

在 MySQL-03-01.sql 中,这里有主键:

也可以这样定义主键:

还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识,比如:

默认值

默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值。

默认值常用于一些可有可无的字段,比如用户的个性签名,如果用户没有设置,系统给他应该设定一个默认的文本,比如空文本或 ‘这个人太懒了,没有留下任何信息’

在 MySQL-03-01.sql 中,这段代码包含了 DEFAULT 约束:

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) 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。

在 MySQL-03-01.sql 中,也有 UNIQUE 约束:

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

INSERT INTO employee VALUES(01,'Tom',25,3000,110110,'dpt1');
INSERT INTO employee VALUES(02,'Jack',30,3500,110110,'dpt2');

结果如图:

外键:

外键 (FOREIGN KEY) 既能确保数据完整性,也能表现表之间的关系。

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

一个表可以有多个外键,每个外键必须 REFERENCES (参考) 另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。

在 INSERT 时,如果被外键约束的值没有在参考列中有对应,比如以下命令,参考列 (department 表的 dpt_name) 中没有 dpt3,则 INSERT 失败:

INSERT INTO employee VALUES(02,'Jack',30,3500,114114,'dpt3');

可见之后将 dpt3 改为 dpt2(department 表中有 dpt2),则插入成功:

非空约束

非空约束 (NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。

搭建一个简易的成绩管理系统的数据库

介绍

现需要构建一个简易的成绩管理系统的数据库,来记录几门课程的学生成绩。数据库中有三张表分别用于记录学生信息、课程信息和成绩信息。

数据表结构如下:

学生表(student):学生 id 、学生姓名和性别

课程表:课程 id 和课程名

成绩表:成绩 id 、学生 id 、课程 id 和分数

服务器中的 MySQL 还没有启动,请注意 MySQL 的 root 账户默认密码为空。

$ sudo service mysql start

$ mysql -u root

mysql> CREATE DATABASE gradesystem;

mysql> use gradesystem

mysql> CREATE TABLE student(
-> sid int NOT NULL AUTO_INCREMENT,
-> sname varchar(20) NOT NULL,
-> gender varchar(10) NOT NULL,
-> PRIMARY KEY(sid)
-> ); mysql> CREATE TABLE course(
-> cid int NOT NULL AUTO_INCREMENT,
-> cname varchar(20) NOT NULL,
-> PRIMARY KEY(cid)
-> ); mysql> 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)
-> ); mysql> INSERT INTO student VALUES(1,'Tom','male'),(2,'Jack','male'),(3,'Rose','female'); mysql> INSERT INTO course VALUES(1,'math'),(2,'physics'),(3,'chemistry'); mysql> 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);

mysql_study_1的更多相关文章

随机推荐

  1. ECMA Script 6_Generator

    Genertor  是一个普通函数,但是有两个特征: function 关键字 与 函数名之间有一个星号: 函数体内部使用 yield 表达式,定义不同的内部状态(yield 在英语里的意思就是“产出 ...

  2. PHP使用 strpos() 注意事项

    返回字符出现的第一个位置, 如果字符在被搜索字符串的开头, 则会返回 ‘0’ 因此, 在使用此函数判断 字符串是否包含 某一个字符时  使用: if(strpos('string','str') != ...

  3. tar:short read problem

    1. tar:short read problem description 在PC机上将需要下载到板子上的两个文件夹gdb.ncurses用tar命令打包. 命令如下:tar -cvf test5.t ...

  4. myeclipse连接mysql失败出错,已解决问题

    问题描述: 解决方案:

  5. 【Python基础】lpthw - Exercise 43 基本的面向对象分析和设计

    1. A game from sys import exit from random import randint from textwrap import dedent # 使可以使用三引号型的字符 ...

  6. 用SharedPreference或文件的方式存储数据

    一.用SharedPreference存储数据 当程序有少量的数据需要保存,而这些数据的格式比较简单(例如一些配置信息),这个时候就可以使用SharedPreference来进行保存 下面例子将演示向 ...

  7. 从github上下载一个项目的子目录

    https://github.com/pbojinov/developer.chrome.com/tree/master/extensions/examples/extensions/proxy_co ...

  8. Spring+Mybatis 复杂的分组查询

    1.需要的结果数据格式为 { "responseCode": "0000", "responseMsg": null, "data ...

  9. js 获取url具体参数

    用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new ...

  10. 2019年IntelliJ IDEA 最新注册码,亲测可用(截止到2020年3月11日)

    2019年IntelliJ IDEA 最新注册码(截止到2020年3月11日) 操作步骤: 第一步:  修改 hosts 文件 ~~~ 在hosts文件中,添加以下映射关系: 0.0.0.0 acco ...