SQL语言:
CREATE TABLE Class (
Class_ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(255)
) type=innodb;
CREATE TABLE Student(
Student_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(255),
c_ID INT UNSIGNED NOT NULL,
FOREIGN KEY(c_ID) REFERENCES Class(Class_ID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
ERWin Data Modeler是CA公司的数据库建模工具,目前在关系数据库的设计中,有着比较广泛的应用.
数据库设计错误将会导致在很长一段时间内不断听到各种抱怨,因此,选择 一个适合的数据库开发工具对数据环境进行规范将非常重要 .
Erwin在物理数据库的生成和反向生成、双向同步和比较功能方面居领先地位 ,可以进行逆向工程、能够自动生成文档、支持与数据库同步、支持 团队式 开发,所支持的数据库多达20多种。
Erwin数据库设计工具可以用于设 计生成客户机/ 服务器、Web、Intranet和数据仓库等应用程序数据库。
1.ERwin并不支持与MySQL的直接连接,一般情况下,我们使用ODBC进行连接, 因此在此之前需要保证机器上已安装有MySQL ODBC Driver. [MySQL网站上有安装包提供]
2.打开ERwin. Tools>Reverse Engineer. 弹出如下对话框:
选择好对应的数据库版本.
Next, 几乎不太需要更改,[太懒的, 一点也不想多看一个英语单词…] 继续Next..
选定那个复选框…. 点击连接…. [ 下面列放的是曾经连接成功的记录,也可以直接使用列表中的, 不过第一次用的话应该时没有的]
弹出对话框,提示选择数据源:
选定machine Data Source ,建立一个ODBC连接,一路确定之后, 稍等片刻,便可生成.
Here is a summary of difference between inner join and outer join:
http://stackoverflow.com/questions/38549/sql-difference-between-inner-and-outer-join
A Visual Explanation of SQL Joins – by Coding Horror.
有两个表,如下:
mysql> SELECT * FROM Class;
+———-+——–+
| Class_ID | Name |
+———-+——–+
| 1 | 2008A |
| 2 | 2008B |
| 3 | 2008C |
+———-+——–+
3 rows in set (0.00 sec)
mysql> SELECT * FROM Student;
+————+——-+———-+——— —-+
| Student_ID | Name | Class_ID | Student_Age |
+————+——-+———-+——- ——+
| 1 | Jack | 1 | NULL |
| 2 | Lucy | 0 | NULL |
| 3 | Join | 1 | NULL |
| 4 | Tom | 2 | NULL |
+————+——-+———-+————- +
4 rows in set (0.00 sec)
即: 有三个班级 分别为2008A, 2008B.,2008C 有4个学生 , 其中, Jack, Join为2008A班的学生,Tom为2008B班的学生, 而Lucy则不在任何班级中.
mysql> SELECT * FROM Student s INNER JOIN Class c ON s.Class_ID = c.Class_ID;
+————+——+———-+————-+———-+——-+
| Student_ID | Name | Class_ID | Student_Age | Class_ID | Name |
+————+——+———-+————-+———-+——-+
| 1 | jack | 1 | NULL | 1 | 2008A |
| 3 | Join | 1 | NULL | 1 | 2008A |
| 4 | Tom | 2 | NULL | 2 | 2008B |
+————+——+———-+————-+———-+——-+
3 rows in set (0.06 sec)
Left Outer Join:左外连接
mysql> SELECT * FROM Student s LEFT OUTER JOIN Class c ON s.Class_ID = c.Class_ID;
+————+——+———-+————-+———-+——-+
| Student_ID | Name | Class_ID | Student_Age | Class_ID | Name |
+————+——+———-+————-+———-+——-+
| 1 | jack | 1 | NULL | 1 | 2008A |
| 2 | Lucy | 0 | NULL | NULL | NULL |
| 3 | Join | 1 | NULL | 1 | 2008A |
| 4 | Tom | 2 | NULL | 2 | 2008B |
+————+——+———-+————-+———-+——-+
4 rows in set (0.00 sec)
Right Outer Join:右外连接
mysql> SELECT * FROM Student s RIGHT OUTER JOIN Class c ON s.Class_
+————+——+———-+————-+———-+——-+
| Student_ID | Name | Class_ID | Student_Age | Class_ID | Name |
+————+——+———-+————-+———-+——-+
| 1 | jack | 1 | NULL | 1 | 2008A |
| 3 | Join | 1 | NULL | 1 | 2008A |
| 4 | Tom | 2 | NULL | 2 | 2008B |
| NULL | NULL | NULL | NULL | 3 | 2008C |
+————+——+———-+————-+———-+——-+
4 rows in set (0.00 sec)
Full Outer Join:
使用工具: phpMyAdmin, MySQLBroswer, 命令提示行[Windows下须将mysql目录中的bin添加到环境变量PATH中].
mysql –u root –p
或登陆后直接选定某数据库 mysql –u root –p [数据库名称]
输入密码即可建立连接;
输入quit或exit即可关闭连接.
mysql>CREATE DATABASE School;
mysql>DROP DATABASE School;
表的见
首先应选定某数据库:
mysql>use School;
然后建立一个班级表Class, 包含有班级ID, 非空, 自增, 为该表的主键; 班级名称 varchar(255);
mysql>CREATE TABLE Classes (Class_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(255));
新建一个学生表Student:
mysql>CREATE TABLE Student(Student_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(255), Class_ID INT);
建立后的两表属性:
mysql> use school
Database changed
mysql> DESCRIBE Classes;
+———-+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———-+————–+——+—–+———+—————-+
| Class_ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | YES | | NULL | |
+———-+————–+——+—–+———+—————-+
2 rows in set (0.02 sec)
mysql> DESCRIBE Student;
+————+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+————–+——+—–+———+—————-+
| Student_ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | YES | | NULL | |
| Class_ID | int(11) | YES | | NULL | |
+————+————–+——+—–+———+—————-+
3 rows in set (0.02 sec)
表的重命名: 为了保持编码风格一致, 现在我们想把Classes表更名为Class.则须运行:
mysql> RENAME TABLE Classes To Class;
Query OK, 0 rows affected (0.00 sec)
除此之外,我们现在需要在Student加入一个名为Age的Column.属性为int
mysql> ALTER TABLE Student ADD COLUMN Age int;
Query OK, 1 row affected (0.08 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> DESCRIBE Student;
+————+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+————–+——+—–+———+—————-+
| Student_ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | YES | | NULL | |
| Class_ID | int(11) | YES | | NULL | |
| Age | int(11) | YES | | NULL | |
+————+————–+——+—–+———+—————-+
4 rows in set (0.02 sec)
==>逆操作: mysql>ALTER TABLE Student Drop Age;
另外, 我们需要修改Student的Class_ID默认为0:
mysql> ALTER TABLE Student MODIFY Class_ID int DEFAULT 0;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> DESCRIBE Student;
+————+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+————–+——+—–+———+—————-+
| Student_ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | YES | | NULL | |
| Class_ID | int(11) | YES | | 0 | |
| Age | int(11) | YES | | NULL | |
+————+————–+——+—–+———+—————-+
4 rows in set (0.00 sec)
最后,总结下Column名称的修改:
mysql> ALTER TABLE Student CHANGE Age Student_Age int;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> DESCRIBE Student;
+————-+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————-+————–+——+—–+———+—————-+
| Student_ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | YES | | NULL | |
| Class_ID | int(11) | YES | | 0 | |
| Student_Age | int(11) | YES | | NULL | |
+————-+————–+——+—–+———+—————-+
4 rows in set (0.01 sec)
mysql>DROP TABLE Class;
插入:
在Class与Student两表中插入记录: 如插入ID为1,名为"2008A"的班级, id为1,姓名为"Tom"所在班级ID为1的Student.
mysql> INSERT INTO Class(Class_ID, Name) VALUES(1, ‘2008A’);
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO Student(Student_ID, Name, Class_ID) VALUES (1, ‘Tom’, 1);
Query OK, 1 row affected (0.00 sec)
修改:
譬如该学生名字应为’Tomey”, 我们需要更正其数据库中的姓名,于是我们使用:
mysql> UPDATE Student set Name = ‘Tomey’ WHERE Student_ID = 1;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0
删除:
DELETE FROM Student WHERE Student_ID = 2;
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.