mysql必知必会sql语句-阶段中
1、自动编号:auto_increment
- 目的保证数据的唯一性,譬如设置id字段,auto_increment
- 自动编号,且必须与主键一起使用。
- 默认情况下,起始值为1,每次增量为1.
2、主键:PRIMARY KEY
- 每张数据表当中只有一个主键字段。(从而能够查找行记录)
- 主键保证其唯一性,即不可以重复。
- not null
3、唯一约束:unique key
- 唯一约束可以用来保证记录的唯一性,即不可重复(重复会报错)
- 唯一约束的字段可以是空值
- 每张数据表中可以为多个唯一约束
4、默认值:default
- 当插入数据记录时,没有声明该字段赋值,它会自动赋值默认值
5、 数据类型
整型
浮点型
double的存储范围比float大,但是占用的空间也大,所以除非有需要才使用double。
一般使用float类型而不是double类型。
日期时间型
很少使用到日期类,大多数是使用时间戳数字来记录时间。
字符型
6、外键约束
- 1、父表和子表必须使用相同的存储引擎
- 2、数据表的存储引擎只能为InnoDB
- 3、外键列和参照列必须具有相同数字参数。字符型比较特殊,长度可以不一致。
- 4、外键列和参照列必须创建索引。如果外键表无索引,那么它会自动创建索引。
外键约束的参数:
cascade:从父表删除或更新且自动删除或更新子表中匹配的行
set null:从父表删除或更新行,并设置子表的外键列为null。如果使用该选项,必须保证子表列没有指定not null
restrict:拒绝对父表的删除或更新操作
no action:标准SQL的关键字,在MySQ中和restrict一样
外键的使用对于减少数据库冗余性,以及保证数据完整性和一致性有很大作用。
另外注意,如果两张表之间存在外键关系,则MySQL不能直接删除表(Drop Table),而应该先删除外键,之后才可以删除。
所以一般默认就好(RESTRICT)。
create table user1(
'id' smallint (5) unsigned not null auto_increment,
'username' varchar(10) not null,
'pid' smallint(5) unsigned default null,
PRIMARY key ('id'),
key ('pid'),
constraint 'user1' foreign key('pid') references 'provinces' ('id') on delete cascade
)ENGINE=InnoDB Default CHARSET=utf-8;
7、修改数据表
添加单列
alter table tbl_name add [column] col_name column_definition
[first|after col_name]
alter table tbl_name add age tinyint usigned not null default 10;
添加多列
alter table tbl_name add [column] (col_name column_definition,…)
删除列
alter table tbl_name drop password,drop age
添加约束
添加主键约束:PRIMARY KEY('index_col_name')
添加唯一约束:UNIQUE KEY/INDEX [index_name][index_type](index_col_name,..)
添加外键约束:ALTER table tbl_name add foreign key(pid) references tal_name2(id);
添加/删除默认约束:ALTER table tbl_name3 alter col_name {set defult data_value|drop default}
删除约束
删除主键约束:alter table tbl_name drop primary key
删除唯一约束:alter table tbl_name drop {INDEX|KEY} index_name
删除外键约束:allter table tbl_name drop foreign key tbl_name_ibfk
修改列定义
alter table tbl_name modify [column] col_name column_definition [first|after col_name]
FIRST表示c|r|u|d此列为第一个列
AFTER表示c|r|u|d在某个列之后