MySQL之表約束

MySQL表約束

約束是一種限制,它經過對錶的行或者列的數據作出限制,來確保表數據的完整性和惟一性. 在mysql當中通常有一下這幾種約束:mysql

  1. 非空約束。
  2. 惟一約束。
  3. 主鍵約束。
  4. 自增加。
  5. 默認約束。
  6. 外鍵約束。

表結構操做:

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

AUTO_INCREMENT自動編號,且必須與主鍵組合使用 默認狀況下,起始值爲1,每次的增量爲1。 當插入記錄時,若是爲AUTO_INCREMENT數據列明確指定了一個數值,則會出現兩種狀況:spa

  1. 若是插入的值與已有的編號重複,則會出現出錯信息,由於AUTO_INCREMENT數據列的值必須是惟一的;
  2. 若是插入的值大於已編號的值,則會把該插入到數據列中,並使在下一個編號將從這個新值開始遞增。也就是說,能夠跳過一些編號。若是自增序列的最大值被刪除了,則在插入新記錄時,該值被重用。

添加自增加

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

查看當前mysql服務器支持的存儲引擎

SHOW ENGINES;

編輯數據表的默認存儲引擎

MySQL配置文件 ->/etc/my.cnf [mysqld] default-storage-engine=INNODB

改完配置文件要重啓服務

sudo service mysqld restart

相關文章
相關標籤/搜索