create table user( id int, name char(16) ); insert into user values(1,null) # 能夠修改 alter table user modify name char(16) not null; insert into user(name,id) values(null,2); # 報錯 插入數據能夠在表名後面指定插入數據對應的字段 create table student( id int, name char(16) not null, gender enum('male','female','others') default 'male' ) insert into student(id,name) values(1,'jason') # 成功
# 單列惟一 create table user1( id int unique, name char(16) ); insert into user1 values(1,'jason'),(1,'egon') # 報錯 insert into user1 values(1,'jason'),(2,'egon') # 成功 # 聯合惟一 create table server( id int, ip char(16), port int, unique(ip,port) ) insert into server values(1,'127.0.0.1',8080); insert into server values(2,'127.0.0.1',8080); # 報錯 insert into server values(1,'127.0.0.1',8081);
ps:primary key至關於not null uniquecode
# 單從約束角度來講primary key就等價於not null unique create table t11(id int primary key); desc t11; insert into t11 values(1),(1); # 報錯 insert into t11 values(1),(2); # 除了約束以外,它仍是innodb引擎組織數據的依據,提高查詢效率 """ 強調: 1.一張表中必須有且只有一個主鍵,若是你沒有設置主鍵,那麼會從上到下搜索直到遇到一個非空且惟一的字段自動將其設置爲主鍵 """ create table t12( id int, name char(16), age int not null unique, addr char(16) not null unique )engine=innodb; desc t12; """ 2.若是表裏面沒有指定任何的能夠設置爲主鍵的字段,那麼innodb會採用本身默認的一個隱藏字段做爲主鍵,隱藏意味着你在查詢的時候沒法根據這個主鍵字段加速查詢了 索引:相似於書的目錄,沒有主鍵就至關於一頁一頁翻着查 3.一張表中一般都應該有一個id字段,而且一般將改id字段做成主鍵 """ # 聯合主鍵:多個字段聯合起來做爲表的一個主鍵,本質仍是一個主鍵 create table t18( ip char(16), port int, primary key(ip,port) ); desc t18; # 主鍵id做爲數據的編號,每次最好能自動遞增 create table t13( id int primary key auto_increment, name char(16) ); insert into t13('jason'),('jason'),('jason'); # id字段自動從1開始遞增 # 注意:auto_increment一般都是加在主鍵上,而且只能給設置爲key的字段加