在寫(xiě)代碼之前,需要注意的一個(gè)問(wèn)題是,使用命令行模式寫(xiě)MySQL語(yǔ)句,如果涉及到中文,最好利用 mysql>charset GBK;命令將客戶端字符集設(shè)置為GBK,這樣能保證正確插入和讀取中文(數(shù)據(jù)庫(kù)端字符集可以是gb2312,GBK,utf8等支持中文的字符集).
如果是利用Mysql 提供的 MySQL Query Browser 工具來(lái)寫(xiě)腳本,建議先在ultra edit等文本工具(最好別用記事本,因?yàn)榭赡苡凶址幋a問(wèn)題,推薦ultra edit)將代碼寫(xiě)好,然后再粘貼到
QueryBrowser 的Script Tab 中一并執(zhí)行,因?yàn)镼ueryBrowser對(duì)中文的支持有bug,無(wú)法正確的輸入中文,因此要先在別處寫(xiě)好。
寫(xiě)了幾個(gè)表,里面包括外鍵主鍵的設(shè)置,建表語(yǔ)句如下:
USE testdatabase;
CREATE TABLE class (
class_id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
class_name VARCHAR(40)
);
CREATE TABLE student (
student_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(student_id),
student_name varchar(40),
class_id INTEGER UNSIGNED,
CONSTRAINT FK_student_class FOREIGN KEY(class_id) REFERENCES class(class_id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE lession(
lession_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (lession_id),
lession_name varchar(40)
);
CREATE TABLE core(
core_id INTEGER UNSIGNED AUTO_INCREMENT,
lession_id INTEGER UNSIGNED NOT NULL,
student_id INTEGER UNSIGNED NOT NULL,
core FLOAT,
close_status INTEGER DEFAULT 0,
CONSTRAINT PK_core PRIMARY KEY(
core_id
),
CONSTRAINT FK_core_lession FOREIGN KEY(lession_id) REFERENCES lession(lession_id),
CONSTRAINT FK_core_student FOREIGN KEY(student_id) REFERENCES student(student_id)
ON DELETE CASCADE
);
CREATE TABLE teacher(
teacher_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(teacher_id),
teacher_name varchar(40)
);
CREATE TABLE teachlession(
teachlession_id INTEGER PRIMARY KEY AUTO_INCREMENT,
lession_id INTEGER UNSIGNED,
teacher_id INTEGER UNSIGNED,
CONSTRAINT FK_teachlession_lession FOREIGN KEY(lession_id) REFERENCES lession(lession_id)
ON DELETE CASCADE,
CONSTRAINT FK_teachlession_teacher FOREIGN KEY(teacher_id) REFERENCES teacher(teacher_id)
ON DELETE CASCADE
);
CREATE TABLE sysuser(
sysuser_id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
sysuser_name VARCHAR(40),
sysuser_password VARCHAR(40),
sysuser_role INTEGER,
foreign_id INTEGER
);
/*這是指定表和列的字符集方式創(chuàng)建表*/
use testdatabase;
drop table if exists chartable;
create table chartable(
name varchar(30) character set utf8 collate utf8_general_ci
)character set latin1 collate latin1_danish_ci;
insert into chartable values('我們的世界');
一點(diǎn)總結(jié):
1. 建表語(yǔ)句的順序必須符合各個(gè)表之間的關(guān)系,比如主表應(yīng)該在與之有外鍵關(guān)系的表之前建立。
2.關(guān)于外鍵的聲明,兩個(gè)字段的類型必須相同。
3.注意代碼的編碼格式和數(shù)據(jù)庫(kù)字符集項(xiàng)符合。
轉(zhuǎn)自:http://hi.baidu.com/sodarfish/blog/item/b415160f587fb2e9aa645727.html