约束(修饰符,属性)
null 空
not null 非空
default
因为每一种数据,都有自己的默认值,如果默认值不满意可以自己改,
比如添加一个int类型,不想它为空,默认值为0,用default改一下它的默认值,在不添加数据的情况下使用默认值100.
unique(key) 在字段里不能出现重复的值 唯一,但它也是一种key,统称,键。
不是唯一的拥有这种特性的属性还有一个,primary key 主键,在字段里不能出现重复的值
新建一个表 create table t1(id int unique);
desc t1 查看 下面的都可以称属性
一次可以再来一次就重复了。
mysql> alter table t11 drop index id; //删除 这里的这个index不是真正的索引
auto_increment 自增 (要写下划线 设置自增一定要设key)
mysql> create table t4(id int unique auto_increment,name varchar(10));
设置自动增长列一定要设key
这样才能成功
primary key(key)主键
每张表里只能有一个主键,不能为空,而且唯一
mysql> create table t7(hostname char(20) primary key,ip char(150));
mysql> create table t9(hostname char(20),ip char(150),primary key(hostname));
联合主键 把primary key写在所有字段定义的最后,能设置两个字段也可以三个
mysql> create table t9(hostname char(20),ip char(150),primary key(hostname,ip)); 指定host,ip是联合主键,是对两列同时生效的。
mysql> alter table t2 drop primary key; //删除主键
hostname ip (指两个字段合在一起不重复)第一列重复没关系只要第二列不重复就行。
www 192.168.1.8
www 192.168.1.9
两个合在一起不能长得一样。
index(key)
索引 优化查询速度 可以把索引当作一本书的目录,有了目录就快了很多。这就是它的作用。
当公司数据库查询速度非常慢的时候,开发人员会找到你,自己也可能会监控到这件事,这时要找原因,第一件事想到的应该是内存够不够,cpu够不够,网络够不够。第二件事mysql的并发访问量是不是太高了,导致访问速度过慢。第三件事往数据库本身想,是不是这张表太大里边的列比较多,索引是不是创建的太少了,要多加几列索引,因为加索引也可以增加数据库的查询速度。
创建索引:三种
mysql> create table t100(hostname char(20) primary key,ip char(150),index (ip));
mysql> create table t101(hostname char(20) primary key,ip char(150),index dizhi(ip)); 创建索引的时候还可以命名。
mysql> create index dizhi on t105(ip);
删除索引:
mysql> alter table t101 drop index dizhi; / 删除index索引 直接删名字
mysql> drop index id on t5; 直接跟索引的名称id 表t5
外键foreign key (key)
mysql> create table t1(id int,manager char(10) primary key) engine = innodb;
mysql> create table t2(id int,admin char(10),foreign key (admin) references t1 (manager)) engine = innodb ;
带关联删除的外键:
mysql> create table xingzheng(id int,admin char(10),foreign key (admin) references guanli(manager) on delete cascade) engine = innodb;