(一)创建person表的语句
CREATE TABLE person
(person_id SMALLINT UNSIGNED,
fname VARCHAR(20),
lname VARCHAR(20),
gender ENUM('M','F'),
birth_date DATE,
street VARCHAR(30),
city VARCHAR(20),
state VARCHAR(20),
country VARCHAR(20),
postal_code VARCHAR(20),
CONSTRAINT pk_person PRIMARY KEY(person_id)
);
在上面的SQL语句中由于gender列只接受特定的值(对于性别列来说,只能为'M'和'F')所以增加了一个检查约束,以限制该列只存放被允许的值。
在定义表时,需要向数据库指明哪些列作为表的主键,通过为表建立一个约束(constraint)可以做到这一点,对于上面的SQL语句的约束为主键约束,它被创建在person_id列上并被命名为pk_person。
(二)查看person表是否创建成功
-
show columns from person
-
desc person (desc是describe的缩写)
(三)创建favorite_food表
CREATE TABLE favorite_food
(person_id SMALLINT UNSIGNED,
food VARCHAR(20),
CONSTRAINT pk_favorite_food PRIMARY KEY(person_id,food),
CONSTRAINT fk_fav_food_person_id FOREIGN KEY(person_id)
REFERENCES person(person_id)
);
由于一个人可能有多种喜爱的食物,仅靠person_id列不能保证表数据的唯一性,因此本表的主键包含两列:person_id和food。
favorite_food表还包含了另一种类型的约束,即外键约束,它限制了favorite表中person_id列的值只能够来自person表。通过这种约束,使得当person表中没有person_id为27的记录时,向favorite_food表中增加person_id为27,喜爱食物为比比萨的数据是不能添加成功的。
(四)查看favorite_food表是否创建成功
(五)操作与修改表
-
插入数据
由于在之前的操作中设置了外键约束,所以当我们试图通过修改已经存在的表定义时,出现了错误提示
这时候可以选择如下操作解决问题
SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE person MODIFY person_id smallint unsigned auto_increment;/* DO WHAT YOU NEED HERE */
SET FOREIGN_KEY_CHECKS = 1;
在person表中为William Turner创建一行
INSERT INTO person
(person_id,fname,lname,gender,birth_date)
VALUES(null,'William','Turner','M','1972-05-27');
插入3条语句保存William的食物偏好
INSERT INTO favorite_food(person_id,food)
VALUES(1,'pizza');
INSERT INTO favorite_food(person_id,food)
VALUES(1,'cookies');
INSERT INTO favorite_food(person_id,food)
VALUES(1,'nachos');
向person表中增加Susan Smith的相关信息
INSERT INTO person
(person_id,fname,lname,gender,birth_date,
street,city,state,country,postal_code)
VALUES(null,'Susan','Smith','F','1975-11-02','23 Maple St.','Arlington','VA','USA','20220');
)
- 更新数据
在William Turner的数据被添加到表中时,insert语句中忽略了他的地址。可以通过update语句更新这些列上的数据。
UPDATE person
SET street='1225 Tremont St.',
city='Boston',
state='MA',
country='USA',
postal_code='02138'
WHERE person_id=1;
- 删除数据
DELETE FROM person
WHERE person_id=2;