-
Oracle所能够定义的数据类型
CHAR:固定长度的字符串,没有存储字符的位置,用空格填充。 VARCHAR2:可变长度的字符串,自动去掉前后的空格。 NUMBER(M, N):数字型,M是位数总长度, N是小数的长度。 DATE:日期类型,包括日期和时间在内。 BOOLEAN:布尔型,即逻辑型。 -
Mysql所能够定义的数据类型
INT或者INTEGER(占据4字节) FLOAT(4字节):单精度浮点数值 DOUBLE(8字节):双精度浮点值 DATE(3字节):日期值YYYY-MM-DD CHAR(0-255):变长字符串 VARCHAR(0-65535):变长字符串 TEXT(0-65535):长文本数据 -
MYSQL所能够创建的数据约束
primary key (PK) #标识该字段为该表的主键,可以唯一的标识记录,主键就是不为空且唯一当然其还有加速查询的作用 foreign key (FK) #标识该字段为该表的外键,用来建立表与表的关联关系 类似的使用foreign key(dep_id) references dep(id) not null #标识该字段不能为空 name varchar(10) not null unique key (UK) #标识该字段的值是唯一的 id int unique key auto_increment #标识该字段的值自动增长(整数类型,而且为主键) id int auto_increment default #为该字段设置默认值 grade int default 60-
可以对约束进行命名,例如:
constraint pk_name primary key(id); -
当约束作用于多个属性时,可以在表创建的最后书写,比如
unique key(属性1,属性2,属性3) -
具体实例:在创建表时使用了几种比较常见的约束
CREATE TABLE publishing_company( pub_com_number INT PRIMARY KEY auto_increment, pub_com_name VARCHAR(20) NOT NULL, address VARCHAR(10) NOT NULL, telephone_number VARCHAR(12) );- 上面语句运行后的结果

- 上面语句运行后的结果
-
外键约束的使用
-
语法[CONSTRANT 约束名] FOREIGN KEY(列名1,列名2,...)REFERENCES 表名(列名1,列名2,...) - -
-
如果子记录存在,则不允许删除主记录
-
创建两个数据表,first作为主表,second作为子表,second创建一个外键约束
CREATE TABLE first( id int PRIMARY KEY, first_name VARCHAR(10) NOT NULL, address VARCHAR(20) NOT NULL ); CREATE TABLE second( second_id int PRIMARY KEY, first_name VARCHAR(10) NOT NULL, address VARCHAR(20) NOT NULL, FOREIGN KEY(second_id) REFERENCES first(id) ); -
创建表的结果
-
-


-
在子表中插入数据:此时主表中存在下方这两条记录
mysql> select * from first; +----+------------+---------+ | id | first_name | address | +----+------------+---------+ | 1 | gjirgje | fajifas | | 2 | gjagrt | gkjoig | +----+------------+---------+ 2 rows in set (0.08 sec) -
在子表中插入记录,但是待插入记录中外键索引的列的值在主表中不存在,那么将无法插入成功,通过下图可看出确实是这样子,其中插入的表second的id列的值为3,但是fisrt表中并不存在id值为3的记录,此时插入将失败

- 当子记录存在时(子表中的记录),主记录将不被允许删除(主表中的记录)

-
第二种语法,如果子记录存在,则删除主记录时,级联删除子记录
[CONSTRANT 约束名] FOREIGN KEY(列名1,列名2,...)REFERENCES 表名(列名1,列名2,...)on delete cascade - 通过下面语句将数据表second删除,重新创建出second数据表 drop table second; CREATE TABLE second( second_id int PRIMARY KEY, first_name VARCHAR(10) NOT NULL, address VARCHAR(20) NOT NULL, FOREIGN KEY(second_id) REFERENCES first(id) ON DELETE CASCADE );-
删除主表的记录时,子表中的记录也会被随之删除
-
此时数据表first和second中存在的数据

-
运行以下语句
mysql> delete from first where id = 1; -
结果如下所示,可以看出删除主表的记录之后,子表对应的记录也被随之删除

-
外键约束能够设置成以下约束
第三种语法,如果子记录存在,则更新主记录时,级联更新子记录:
[CONSTRANT 约束名] FOREIGN KEY(列名1,列名2,...)REFERENCES 表名(列名1,列名2,...)on update cascade (oracle 9i 不支持)第四种语法,如果子记录存在,则删除主记录时,将子记录置成空:
[CONSTRANT 约束名] FOREIGN KEY(列名1,列名2,...)REFERENCES 表名(列名1,列名2,...)on delete set null其中的表名为要参照的表名。
-
-
显示表的结构
DESCRIBE 表名 -
通过查询结果创建表
-
ORACLE语法
CREATE TABLE 表名(列名...) AS SQL查询语句; -
MYSQL语法
CREATE TABLE 表名(SQL语句),SQL语句中待查询的列就是新表的列; -
具体实例:
-
数据库本来存在的数据表

-
通过查询语句创建表

-
创建出的表的结果

-
-
在复制表时如果不想要复制数据,只需要在查询语句后面添加一个不可能实现的语句即可
-