创建表

默认值 default

  1. create table t_student
  2. (
  3. no int,
  4. namecode int,
  5. name varchar(255),
  6. sex char(1) default 1, --赋默认值
  7. birthday date
  8. );

约束(Constratint)

非空约束 not null 字段不可为空。
唯一约束 unique 字段不可重复, 但可以为空。
主键约束(PK) primary key 字段既不能为空,也不可重复。
外键约束(FK) foreign key 外键可为空。
检查约束 check Oracle数据库有check约束,mysql不支持。
drop table if exists t_student;
create table t_student
(
no int, 
namecode int not null, --非空约束
name varchar(255) unique --唯一性约束,列级唯一约束
);

多列添加唯一约束(表级唯一约束)

drop table if exists t_student;
create table t_student
(
no int, 
namecode int,
name varchar(255),
unique(usercode, username) --多列唯一约束,表级唯一约束
);

主键约束

drop table if exists t_student;
create table t_student
(
no int primary key, --主键约束,列级主键约束
name varchar(255)
);
drop table if exists t_student;
create table t_student
(
no int not null, 
name varchar(255),
primary key(no) --主键约束,表级主键约束
);

主键值自增 auto_increment

drop table if exists t_student;
create table t_student
(
no int primary key auto_increment, --字段自动维护一个自增数字,从1开始,以1递增
name varchar(255)
);
insert into t_student(namecode) values('zhangsan');
insert into t_student(namecode) values('lisi');
insert into t_student(namecode) values('wangwu');

外键约束

t_student中的classno字段引用t_class表中的cno字段,此时t_student表叫做子表,t_class叫做父表。
创建表的时候,先创建父表,再创建子表。
删除表的时候,先删除子表,再删除父表。
添加数据的时候,先添加父表,再添加子表。
删除数据的时候,先删除子表,再删除父表。
外键可以为NULL。
外键字段引用其他表的某个字段的时候,被引用的字段可以不为主键,但是必须有unique唯一约束。

drop table if exists t_student;
drop table if exists t_class;

create table t_class
(
cno int,
cname varchar(255),
primary key(cno)
);

create table t_student
(
sno int,
sname varchar(255),
classno int,
primery key(sno),
foreign key(classno) references t_class(cno)
);

修改表

增加表字段

alter table tablename add [cloumn] cloumn_definition [first | after col_name];

alter table [table name] add column [column] int;
alter table emp add birth date after ename; --在ename字段后面新增字段birth

删除表字段

alter table tablename drop [cloumn] col_name;

alter table [table name] drop column [column];

修改字段类型

alter table tablename modify [cloumn] cloumn_definition [first | after col_name];

alter table [table name] modify [column] varchar(20);
alter table emp modify age1 int first; --修改字段age1,将它放在最前面

修改字段名

alter table tablename change [cloumn] old_col_name cloumn_definition [first | after col_name];

alter table [table name] change [old_column] [new_column] int;

修改表名

alter table [table name];

修改字段进阶

  1. change和modify都可以修改表的定义,不同的是change后面需要写两次列名,不方便。 但是change的优点是可以修改列名称,modify则不能。
  2. 字段增加和修改语法(add/change/modify)中,都有一个可选项first | after column_name,这个选项可以用来修改字段在表中的位置,add增加的新字段默认是加在表的最后位置,而change/modify默认都不会改变字段的位置。

    删除表

    drop table if exists [table name];