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的字段加