文章

目前顯示的是 2017的文章

InnoDB 與 FOREIGN KEY

圖片
我們知道要讓兩個資料表有關聯,可以用外鍵(FOREIGN KEY )進行關聯。 【範例一】 CREATE TABLE product ( prod_id INT NOT NULL, prod_name CHAR(20), PRIMARY KEY (prod_id)); CREATE TABLE myorder ( order_id INT NOT NULL, prod_id INT, PRIMARY KEY (order_id)); 上述表單 product 的主鍵是 prod_id ; 表單 myorder 的主鍵是 order_id,並透過外鍵 myorder.prod_id 與product.prod_id做關聯。 然後插入資料 insert into product values (1,'Pen'),(2,'Pencil'),(3,'Box'); insert into myorder values (1,1),(2,2),(3,3); 但是當我們刪除product的資料時 delete from product where prod_id=1; 結果如下 系統根本不知道,prod_id=1這個資料是被另外表單參考的。 所以product中的資料被刪除,myorder.prod_id=1 就參考不到正確的資料了。 【範例二】 所以,我們刪除上面的表單後再另外宣告 CREATE TABLE product ( prod_id INT NOT NULL, prod_name CHAR(20), PRIMARY KEY (prod_id)); CREATE TABLE myorder ( order_id INT NOT NULL, prod_id INT, FOREIGN KEY(prod_id) REFERENCES product(prod_id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (order_id)); 這次宣告了FOREIGN KEY(prod_id) REFERENCES product(prod_i

學生選課資料練習 (續)

(1)建立資料庫 create database mycourse_20170526 character set utf8 collate utf8_general_ci; (2)選擇資料庫 use mycourse_20170526; (3)建立學生選課資料表 : 學生資料表、課程資料表、選課表、老師資料表、科系資料表。 學生資料表 student create table student ( stud_no char(8) not null, stud_name char(10), stud_sex char(1), stud_tel char(12), dept_no char(1), primary key(stud_no), unique (stud_tel)); 課程資料表 course create table course ( course_no char(5) not null, course_name char(20), course_credit int default 3, teacher_no char(5), course_type char(1), dept_no char(1), primary key (course_no)); 選課表 student_course create table student_course ( stud_no char(8), course_no char(5), course_score int not null, primary key (stud_no, course_no), foreign key (stud_no) references student (stud_no) on update cascade on delete cascade, foreign key (course_no) references course (course_no) on update cascade on delete cascade); 老師資料表 teacher create table teacher ( teacher_no char(5) not null, teacher

如何輸出執行結果到檔案

select * from table_name INTO OUTFILE '/directory/output.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' 以上就會執行select * from table_name 然後輸出到  '/directory/output.csv' 以逗號為欄位的分隔符號 然後每個欄位資料以雙引號刮起來 每筆資料結尾以  '\n' 結束。

學生選課資料練習

(1)建立資料庫 create database mycourse character set utf8 collate utf8_general_ci;  (2)選擇資料庫 use mycourse; (3)建立學生選課資料表 : 學生資料表、課程資料表、選課表。 學生資料表 student create table student ( stud_no char(8) not null, stud_name char(10), stud_sex char(1), stud_tel char(12), primary key(stud_no), unique (stud_tel)); 課程資料表 course create table course ( course_no char(5) not null, course_name char(20), course_credit int default 3, primary key (course_no)); 選課表 student_course create table student_course ( stud_no char(8), course_no char(5), course_score int not null, primary key (stud_no, course_no), foreign key (stud_no) references student (stud_no) on update cascade on delete cascade, foreign key (course_no) references course (course_no) on update cascade on delete cascade); on update/on delete 參考資料 https://technet.microsoft.com/zh-tw/library/ms186973(v=sql.105).aspx (4)插入資料到 : 學生資料表、課程資料表、選課表。 insert into student values ('S001', '李大華', 'M

資料表的運算 (續)

圖片
這篇是接著之前文章,再來說明的 資料表單的運算 http://www.mysql.tw/2014/05/blog-post_21.html 關聯模式的運算 http://www.mysql.tw/2015/05/blog-post_14.html 資料表的運算有以下~ 限制(Restrict) 投影(Project) 聯集(Union) 卡氏積(Cartesian Product) 差集(Difference) 交集(Intersection) 合併(Join) 除法(Division) (1)限制(Restrict) : 指的是從資料表取出符合條件的資料 。 從客戶表單中取出客戶編號為1的資料~ SELECT * FROM customer WHERE cus_id=1; (2)投影(Project) :  指的是從資料表取出特定欄位 。 從客戶表單中取出客戶編號與客戶姓名~ SELECT cus_id, cus_name FROM customer; (3)聯集(Union) : 指的將兩個或多個資料表產生為新的資料表,若有重複的資料,則只顯示一次。 例如有兩個結構一樣的客戶資料表,要把他合併起來,但是要去除重複資料。 以下是測試過程~假設原本已經有customer表單 //建立一個結構跟customer一樣的資料表 customer2 create table customer2 like customer; //要把原customer的資料也插入customer2 insert customer2 select * from customer; 然後可以在customer2多插一筆新資料,刪除一筆舊資料,以便看出聯集的作用 insert into customer2 (cus_id, cus_name, cus_address, cus_no) values (6, 'Ted', 'Chiayi', ;006'); delete from customer2 where cus_id=5; select * from customer UNION select * from customer2; (4