1.表的数据库对象
- 列(Columns):
创建表时指定列名与数据类型
- 索引(index):
根据特定表中的指定列建立起来的序列,可以通过该序列快速定位到目标记录
- 触发器(Triggers):
用户定义的事物命令的集合,当对一个表中的记录进行插入、更新、删除时,这组命令会自动执行
2.表结构
- desc [yourTable]; (【yourTable】:用户指定的已存在的表)
查看表结构
- show create table [yourTable]; (【yourTable】:用户指定的已存在的表)
获取该表的详细创建语句,即该表的详细定义
3.表约束
- not null (约束字段不能为空:如果插入记录时该字段传入的值为null,则报错)
- default [defaultValue] (设置字段的默认值:如果插入记录时该字段传入的值为空,则该字段的值默认为【defaultValue】)
- unique (设置该字段值的唯一性:如果插入记录时,该字段的值已经存在于该表的其他记录中,则报错)
create table unique_temp01(
userId int unique,
username varchar(100)
);
create table unique_temp02(
userId int,
userName varchar(100),
constraint ukId unique(userId)
);
show create table unique_temp01;
CREATE TABLE `unique_temp01` (
`userId` int(11) DEFAULT NULL,
`username` varchar(100) DEFAULT NULL,
UNIQUE KEY `userId` (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
show create table unique_temp02;
CREATE TABLE `unique_temp02` (
`userId` int(11) DEFAULT NULL,
`userName` varchar(100) DEFAULT NULL,
UNIQUE KEY `ukId` (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- primary key (主键约束:使得该字段成为表的主键,用以唯一标识一条记录)
<单字段主键>
create table primary_key_temp01(
userId int primary key,
userName varchar(100)
);
create table primary_key_temp02(
userId int,
userName varchar(100),
constraint pkId primary key(userId)
);
show create table primary_key_temp01;
CREATE TABLE `primary_key_temp01` (
`userId` int(11) NOT NULL,
`userName` varchar(100) DEFAULT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
show create table primary_key_temp02;
CREATE TABLE `primary_key_temp02` (
`userId` int(11) NOT NULL,
`userName` varchar(100) DEFAULT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--------------------------------------------------------------------------------------------------------
<多字段主键:此处为userId和userName共同组成一个唯一性主键用来表示每条记录>
create table primary_key_temp001(
userId int,
userName varchar(100),
constraint pkId primary key(userId,userName)
);
show create table primary_key_temp001;
CREATE TABLE `primary_key_temp001` (
`userId` int(11) NOT NULL,
`userName` varchar(100) NOT NULL,
PRIMARY KEY (`userId`,`userName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- auto_increment (自增:该字段的值为自动增长)
create table auto_increment_temp01(
userId int primary key auto_increment,
userName varchar(100)
);
create table auto_increment_temp02(
userId int unique auto_increment,
userName varchar(100)
);
show create table auto_increment_temp01;
CREATE TABLE `auto_increment_temp01` (
`userId` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(100) DEFAULT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
show create table auto_increment_temp02;
CREATE TABLE `auto_increment_temp02` (
`userId` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(100) DEFAULT NULL,
UNIQUE KEY `userId` (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- foreign key (外键约束:构建A表的a字段与B表的b字段之间的参照关系,可以为null)
<设置外键约束的两张表间具有父子关系,即子表中某个字段的取值由父表中的某字段的值的集合决定>
<举例:万恶的社会,女孩能找哪些男的当男友,只能从现存的男的中挑,女孩的boyFriend为null就是单身哦>
create table boy(
boyId int primary key auto_increment,
boyName varchar(100)
);
create table girl_US(
girlId int primary key auto_increment,
girlNma varchar(100),
boyFriendId int,
constraint fkId foreign key(boyFriendId) references boy(boyId)
);
insert into girl_US values(null,"ZYQ",null);
show create table boy;
CREATE TABLE `boy` (
`boyId` int(11) NOT NULL AUTO_INCREMENT,
`boyName` varchar(100) DEFAULT NULL,
PRIMARY KEY (`boyId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
show create table girl_US;
CREATE TABLE `girl_us` (
`girlId` int(11) NOT NULL AUTO_INCREMENT,
`girlNma` varchar(100) DEFAULT NULL,
`boyFriendId` int(11) DEFAULT NULL,
PRIMARY KEY (`girlId`),
KEY `fkId` (`boyFriendId`),
CONSTRAINT `fkId` FOREIGN KEY (`boyFriendId`) REFERENCES `boy` (`boyId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.修改表
- alter table [your_old_table_name] rename [your_new_table_name];
(将表名从【your_old_table】修改为【your_new_table】)
- alter table [your_table_name] add [your_table_new_property] [property _type]
(新增字段:向名为【your_table_name】的表中添加类型为【property_type】且名称为【your_table_new_property】的字段)
1. alter table [your_table_name] add [your_table_new_property] [property_type] first;
(新增字段,并指定将其添加在开头的位置)
2.alter table [your_table_name] add [your_table_new_property] [property_type] after [existed_property]
(新增字段,并指定将其添加在已存在字段【existed_property】之后)
- alter table [your_table_name] drop [existed_property]
(删除字段:从【your_table_name】表中删除【existed_property】字段)
- alter table [your_table_name] change [your_old_property] [your_new_property] [property_type]
(修改字段:将【your_table_name】表中的【your_old_property】字段重命名为【your_new_property】且字段类型为【property_type】)
- alter atble [your_table_name] modify [your_old_property_01] [your_old_property_01_type] after [your_old_property_02]
(修改字段的排列顺序:将【your_table_name】表中的【your_old_property】字段移动到【your_old_property_02】前面,且移动后的【your_old_property01】的类型为【your_old_property_01_type】)