创建物理表
一、创建表操作
1、设计表的结构
SQL 里的 create table 语句用于创建表。虽然创建表的实际操作十分简单,但在此之前,应该花更多的时间和精力来设计表的结构,这样可以节省反复修改表结构所浪费的时间。
在创建表时,需要考虑以下一些基本问题:
-> 表里会包含什么类型的数据?
-> 表的名称是什么?
-> 哪个(或哪些)列组成主键?
-> 列(字段)的名称是什么?
-> 每一列的数据类型是什么?
-> 每一列的长度是多少?
-> 表里哪些列可以是 NULL?
考虑了这些问题之后,实际的 create table 命令就很简单了。
2、create table 语句
语法:create table 表名(
列名1 列类型 [ 列的完整性约束 ],
列名2 列类型 [ 列的完整性约束 ],
... ... );
叙述:在当前数据库下新创建一个数据表。
列类型:表示该列的数据类型。
例1:建立一个表 school,其由两列组成,第一列属性为非空、做为主键并自增。
create table school
(school_id int(10) not null auto_increment primary key,
school_name varchar(20) not null );
例2:创建一张表,要求如下:
* EMPLOYEE,字段分别为:ID 字符串类型,长度20;NAME 字符串类型,长度50;SEX 数值型;Data_Update 日期类型
* 设置ID为主键
CREATE TABLE EMPLOYEE
(ID VARCHAR(20) NOT NULL primary key,
NAME VARCHAR(50) NOT NULL,
SEX INTEGER(2) NOT NULL,
Data_Update DATE NULL );
二、显示表结构操作
语法:describe 表名;
desc 表名;
叙述:用于显示表的创建结构。
三、更改表结构操作
在表被创建之后,我们可以使用 alter table 命令对其进行修改。可以添加列、删除列、修改列定义、添加和去除约束等。
1、alter table 命令
语法:alter table 表名 action;
说明:action 可以是如下语句:
- add 列名 建表语句 [ first | after 列名 ]
可以为表添加一列,如果没指定 first 或者 after,则在列尾添加一列,否则在指定列添加新列
- add primary key (列名)
为表添加一个主键,如果主键已经存在,则出现错误
- add foreign key (列名) references 表名(列名)
为表添加一个外键
- alter 列名 set default 默认值
可以更改指定列默认值
- change 旧列名 新列名 <建表语句> [ first | after 列名 ]
可以更改列类型和列名称,如果原列的名字和新列的名字相同
- modify 列名 <建表语句> [first | after 列名]和 change 的作用相同
- drop 列名,可以删除一列
- drop primary key,可以删除主键
- engine 类型名,可以改变表类型
- rename as 新表名,可以将表名更改
2、操作举例
例1:向 people 表中添加字段 address2 ,类型为 varchar,最大长度为100:
alter table people add address2 varchar(100);
例2:将 people 表中的 name 列默认值改为100:
alter table people alter name set default 100;
例3:向 student 表增加“入学时间”列,其数据类型为日期型。
alter table student add scome date;
注:无论基本表中原来是否已有数据,新增加的列一律为空值。
例4:将年龄的数据类型改为半字长整数。
alter table student modify sage smallint;
注:修改原有的列定义有可能会破坏已有数据。
四、删除表操作
删除表是一种相当简单的工作,我们可以使用 drop table 命令完成。
语法:drop table [ if exists ] 表名 [ , 表名 ] ...
叙述:从数据库中删除给定的表。如果给出 if exists 子句,则删除不存在的表不会出错。
例:删除表 temp
drop table temp;
显示结果:Table dropped.
五、设置主键
1、主键的指定
主键的作用在于表里每条记录都具有唯一的值。由于在下面的例子里 student 表里一般不会出现用多条记录表示一个学生的情况,所以学号 sid 可以作为 主键。主键是在创建表时指定的,可以在 create table 语句里的字段列表中指定,如上面 school 表里的 school_id;也可以在 create table 语句里的字段列表之后定义主键约束,如下例 student 表里的 sid。
例:在创建学员信息表 student 时指定主键 sid 。
create table student
(sid int not null auto_increment,
name varchar(20) not null,
primary key(sid) );
2、主键的选择
主键:帮助 MySQL 以最快的速度把一条特定数据记录的位置确定下来
* 主键必须是唯一的
* 主键应该是紧凑的,因此整数类型比较适合
选择主键的原则:
* 最少性:尽量选择单个键作为主键
* 稳定性:尽量选择数值更新少的列作为主键
【参考资料】
W3school 在线SQL教程 http://www.w3school.com.cn/sql/sql_create_table.asp SQL CREATE TABLE 语句
http://www.w3school.com.cn/sql/sql_alter.asp SQL ALTER TABLE 语句
http://www.w3school.com.cn/sql/sql_drop SQL 撤销索引、表以及数据库
课后练习:
1. 建立一个学生信息表(student),定义列 sno 学号,类型为5位定长字符串,非空,主键;定义列 sname 姓名,类型为8位定长字符串,非空;定义列ssex性别,取值1或0;定义列 sage 年龄,类型为短整型;定义列 sdept 系名,数据类型为20位变长字符串。显示此表的结构。
2. 建立一个课程信息表(course),定义列 courseid 课程号,类型为整型,非空,自动增长,主键;定义列 cname 课程名,类型为16位变长字符串,非空。显示此表的结构。
3 建立一个学生考试成绩信息表(sc),定义列 grade 成绩,类型为整型;要求把表字段补充完整,可以通过学号查看学生相关课程的成绩。
4. 在软件 Navicat for MySQL 中练习创建、显示、更改、删除表结构。
5. 创建一个员工表 employee:
create table employee
(id int,
name varchar(20),
gender varchar(4),
birthday date,
entry_date date,
job varchar(40),
salary double,
resume text );
要求:1)查看表的结构;
2)在上面员工表里增加一个 image 列;
3)修改 job 列,使其长度为60;
4)删除 sex 列;
5)列名 name 修改为 username;
6)表名改为 user。
6. 创建一个顾客信息表 customer,字段和类型如下:
First_Name char(25)
Last_Name char(25)
Address char(50)
City char(25)
Country char(25)
Birth_Date date
要求:1)在表里加入一个 Gender 字段,类型为 char(1);
2)把 Address 列改名为 Addr;
3)将 Addr 列的数据类型改为 char(30);
4)删除 Gender 列。
7. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如下图中的表(一)~表(四)所示,用SQL语句创建四个表。