约束是一种限制,它经过对表的行或者列的数据作出限制,来确保表数据的完整性和惟一性. 在mysql当中通常有一下这几种约束:mysql
ALTER TABLE 'tbname' 增长 :ADD 删除 :DROP 修改 :MODIFY #改列的数据类型 CHANGE #改列名和数据类型 RENAME #改表名 #ADD mysql> ALTER TABLE `tb1` -> ADD (`age` INT, -> `number` INT); #DROP mysql> ALTER TABLE `tb1` -> DROP `number`; #MODIFY mysql> ALTER TABLE `tb1` -> MODIFY `age` VARCHAR(4); #CHANGE mysql> ALTER TABLE `tb1` -> CHANGE `age` `ages` INT; #RENAME mysql> ALTER TABLE `tb1` RENAME `tb2`; #表名和字段名,尽可能避免修改,即使是在封装得很好的状况下也要修改代码,若是是上线的东西就更加不要修改
就是限制数据库中某个值是否能够为空,null字段值能够为空,not null字段值不能为空sql
注意: 若是你的约束不生效能够先设置一下sql_modeset session sql_mode='STRICT_TRANS_TABLES'
。shell
字段添加惟一约束以后,该字段的值不能重复,也就是说在一列当中不能出现同样的值。数据库
# 添加惟一约束 ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name) # 删除惟一约束 ALTERT TABLE tbl_name DROP {INDEX|KEY} index_name
已经添加的值不能再重复的插入服务器
主键保证记录的惟一性,主键自动为NOT NULL 每张数据表只能存在一个主键 NOT NULL + UNIQUE KEY
一个UNIQUE KEY 又是一个NOT NULL的时候,那么它被当作PRIMARY KEY主键 当一张表里没有一个主键的时候,第一个出现的非空且为惟一的列被视为有主键。session
#添加主键约束 ALTER TABLE tbl_name ADD [CONSTRAINT[sysbol]] PRIMARY KEY [index_type] (index_col_name) #删除主键约束 ALTER TABLE tbl_name DROP PRIMARY KEY
AUTO_INCREMENT
自动编号,且必须与主键组合使用 默认状况下,起始值为1,每次的增量为1。 当插入记录时,若是为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种状况:spa
mysql> ALTER TABLE user CHANGE id id INT NOT NULL AUTO_INCREMENT; mysql> DESCRIBE user mysql> SELECT * FROM user;
mysql> INSERT INTO `user`(`name`,`number`) -> VALUES('take',2), -> ('which',4) -> ; mysql> SELECT * FROM `user`;
mysql> ALTER TABLE `user` CHANGE `id` `id` INT NOT NULL ; mysql> DESCRIBE `user`;
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
rest
mysql> ALTER TABLE `user` ALTER `number` SET DEFAULT 0; mysql> DESCRIBE `user`;
code
mysql> ALTER TABLE `user` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT; mysql> INSERT INTO `user`(`name`) VALUES('rock'); mysql> SELECT * FROM `user`;
blog
mysql>select * from teacher where id=(select teacher_id from students where name='twj');
外键约束要求数据表的存储引擎只能为InnoDB
SHOW ENGINES;
MySQL配置文件 ->/etc/my.cnf [mysqld] default-storage-engine=INNODB
sudo service mysqld restart