約束是一種限制,它經過對錶的行或者列的數據作出限制,來確保表數據的完整性和惟一性. 在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