1,创建表:例:
##use 数据库名
create table student(
id char(36)comment 'id标识符',
user_name varchar(12)comment '用户名',
password varchar (15)comment '密码',
address varchar(120)comment '地址'
)
后面可以不写comment,但为在design table时方便更清楚用处,后面单引号括出属性
2,重命名:例如:
rename table student to user_info
3,截断表:
truncate table user_info
等价于delete *from user_info,要提交事务。上面不用提交事务。结果是把表中内容清空。
4,unique:限制内容不能重复但可以为null;not null:限制不能为null,但可以是' ';也就是有unique修饰的,不能多次运行同样的内容,但内容定义时为null得话可以多次执行特记当内容是' ',也不能多次执行,可not null刚好相反,只要不被定义为null,都可以多次执行。primary key 是主键,限制内容不能重复且不能为null,就是相同内容不能执行多次。
5,default用在创建表的时候加在数据类型后,他后面跟单引号括起来的内容,(看数据类型变化是否加引号)当执行insert into...语句添加内容时若没有相应的为其赋值会自动定义为默认值。
6,删除表。例如:
drop table student
重点:外键
举例下:当创建一个user_info表:如将京东fuliuqingfeng的用户信息及其多个邮寄商品地址保存到数据库中,里面有相同内容,如果按常规来如下:
create table user_info(
id char(36) primary key,
user_name varchar(30) not null,
password varchar(30) not null,
real_name varchar(8),
mobile char(11),
address varchar(150)
);
insert into user_info (id,user_name,password,real_name,mobile,address)
values ('51b28fe1-4ebf-41ac-a17b-d5e276861fd0','fuliuqingfeng','123456','张三','18920120206','河南安阳');
insert into user_info (id,user_name,password,real_name,mobile,address)
values ('cc95772b-75a2-4702-bd99-4c3b0322d606','fuliuqingfeng','123456','李四','18617297545','北京海淀');
insert into user_info (id,user_name,password,real_name,mobile,address)
values ('c63028fd-cf8d-4dac-a278-b5cc8fd61e3c','fuliuqingfeng','123456','王五','17694976949','山西大同');
很冗余,现在重复的信息还不多,要是个人信息字段比较多这一问题表现的越严重。
解决方法一:
先将使用者相同信息集合到一个表中,令id唯一不为空
create table user_info(
id char(36) primary key,
user_name varchar(30) not null,
password varchar(30) not null,
real_name varchar(8),
mobile char(11),
address varchar(150)
);
再创建地址表存储变更信息 ,也有主键,但相应添加了使用者的主键
create table address(
id char(36) primary key,
user_info_id char(36),
real_name varchar(8) not null,
mobile char(11) not null,
address varchar(150) not null
)
再插入数据时,只要添加使用者的主键信息就会相应找到对应的共有属性,减少重复内容的输入
insert into address (id,user_info_id,real_name,mobile,address)
values ('bfb9472a-7911-4e6f-a479-3b719454ebab','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','张三','18920120206','河南安阳');
insert into address (id,user_info_id,real_name,mobile,address)
values ('5227c6b9-45a2-44aa-8ac0-1f63a38d3b65','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','李四','18617297545','北京海淀');
insert into address (id,user_info_id,real_name,mobile,address)
values ('30b8584b-aa6a-4516-a623-03f487058586','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','王五','17694976949','山西大同');
但,上面有缺陷,在地址表中若肆意添加使用者信息中不存在的主键,则无法找到正确连接的相关属性,于是有了:
constraint address_user_info_id_fk foreign key(user_info_id) references user_info(id)
如下:
create table user_info(
id char(36) primary key,
user_name varchar(30) not null,
password varchar(30) not null
)
insert into user_info (id,user_name,password) values ('51b28fe1-4ebf-41ac-a17b-d5e276861fd0','fuliuqingfeng','123456');
create table address(
id char(36) primary key,
user_info_id char(36),
real_name varchar(8) not null,
mobile char(11) not null,
address varchar(150) not null,
constraint address_user_info_id_fk foreign key(user_info_id) references user_info(id)
)
insert into address (id,user_info_id,real_name,mobile,address)
values ('bfb9472a-7911-4e6f-a479-3b719454ebab','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','张三','18920120206','河南安阳');
insert into address (id,user_info_id,real_name,mobile,address)
values ('5227c6b9-45a2-44aa-8ac0-1f63a38d3b65','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','李四','18617297545','北京海淀');
insert into address (id,user_info_id,real_name,mobile,address)
values ('30b8584b-aa6a-4516-a623-03f487058586','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','王五','17694976949','山西大同');
说明:这种方案为user_info_id添加了外键,指向user_info表的主键,该约束起到了保护数据完整性的作用:如果删除的用户信息id已经在address表中使用,则该条数据无法删除;无法向address表中添加用户id不存在的地址信息。
也就是说,不能往address中添加user_info表中不存在的id信息,而且不能删除user_info中的已经被使用的信息,如要删除信息,先删除address中数据。