構(gòu)建SQL方案語(yǔ)句

(一)創(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的縮寫(xiě))
    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;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容