(一)創(chuàng)建person表的語(yǔ)句
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語(yǔ)句中由于gender列只接受特定的值(對(duì)于性別列來(lái)說(shuō)酪碘,只能為'M'和'F')所以增加了一個(gè)檢查約束殖蚕,以限制該列只存放被允許的值夏醉。
在定義表時(shí)岗憋,需要向數(shù)據(jù)庫(kù)指明哪些列作為表的主鍵绪颖,通過(guò)為表建立一個(gè)約束(constraint)可以做到這一點(diǎn)抡笼,對(duì)于上面的SQL語(yǔ)句的約束為主鍵約束苏揣,它被創(chuàng)建在person_id列上并被命名為pk_person。
(二)查看person表是否創(chuàng)建成功
-
show columns from person
image.png -
desc person (desc是describe的縮寫)
image.png
(三)創(chuàng)建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)
);
由于一個(gè)人可能有多種喜愛(ài)的食物推姻,僅靠person_id列不能保證表數(shù)據(jù)的唯一性平匈,因此本表的主鍵包含兩列:person_id和food。
favorite_food表還包含了另一種類型的約束藏古,即外鍵約束增炭,它限制了favorite表中person_id列的值只能夠來(lái)自person表。通過(guò)這種約束拧晕,使得當(dāng)person表中沒(méi)有person_id為27的記錄時(shí)隙姿,向favorite_food表中增加person_id為27,喜愛(ài)食物為比比薩的數(shù)據(jù)是不能添加成功的。
(四)查看favorite_food表是否創(chuàng)建成功
image.png
(五)操作與修改表
-
插入數(shù)據(jù)
由于在之前的操作中設(shè)置了外鍵約束厂捞,所以當(dāng)我們?cè)噲D通過(guò)修改已經(jīng)存在的表定義時(shí)输玷,出現(xiàn)了錯(cuò)誤提示
image.png
這時(shí)候可以選擇如下操作解決問(wèn)題
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;
image.png
在person表中為William Turner創(chuàng)建一行
INSERT INTO person
(person_id,fname,lname,gender,birth_date)
VALUES(null,'William','Turner','M','1972-05-27');
插入3條語(yǔ)句保存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的相關(guān)信息
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');
)
- 更新數(shù)據(jù)
在William Turner的數(shù)據(jù)被添加到表中時(shí),insert語(yǔ)句中忽略了他的地址蔫敲∷撬裕可以通過(guò)update語(yǔ)句更新這些列上的數(shù)據(jù)炭玫。
UPDATE person
SET street='1225 Tremont St.',
city='Boston',
state='MA',
country='USA',
postal_code='02138'
WHERE person_id=1;
- 刪除數(shù)據(jù)
DELETE FROM person
WHERE person_id=2;