字段约束,索引,主外键
第二节 字段约束,索引,主外键
字段约束条件
1.1作用:限制如何给字段赋值的
1.2包括内容有:NULL Key Default Extra
NULL是否允许给字段赋null值
null默认允许赋null值
not null不允许赋null值
key键值类型:普通索引唯一索引全文索引主键外键
Default默认值作用:当不被字段赋值时,使用默认值给字段赋值
不设置默认值是系统定义的是null
default值
Extra额外设置,字段是否设置为自动增加,默认没有自动增长功能
案例:
1)建库
Mysql>create database db2;
2)进库
use db2;
3)建表
Mysql>create table t2(
>name char(3),
>level int(3)zerofill
);
Mysql>create table t5(
>classroom char(7)default"nsd1801",
>name char(5)not null,
>age tinyint(2)unsigned zerofill default 18,
>sex enum("boy","girl")not null default"boy"
);
4)表里建值
insert into db2.t1 values("bob",1);
insert into db2.t1 values("bob",99);
insert into db2.t1 values("bob",218);
insert into db2.t1 values("bob",7218);
insert into t5(name)values("lucy");
insert into t5 values("nsd1802","alice",31,"girl");
修改表结构
mysql>alter table库.表执行动作;
添加新字段add字段名类型(宽度)[约束条件]
删除已有字段drop字段名
修改已有字段的类型宽度及约束条件
***划重点****修改时不能与已经存储的数据矛盾的话不允许修改
修改字段名
modify字段名类型(宽度)[约束条件]
change源字段名新字段名类型(宽度)[约束条件]
修改表名alter table源表名rename[to]新表名;
案例:
1)修改
alter table studb.t1 add name char(15)first;
alter table studb.t1 add addrhome varchar(50)default"beijing";
2)修改
alter table studb.t1 add sex enum("boy","girl")not null
Default"boy"after name;
3)查看表结构
desc studb.t1;
4)查看表数据
select*from studb1;
5)修改
mysql>alter table studb.t1 drop sex,drop name;
mysql>alter table t1 modify addrhome char(10)default"beijing";
mysql>alter table t1 modify level smallint(6)not null;
mysql>alter table t1 modify age tinyint(4)first;
mysql>alter table t1 change addrhome home char(10)default"beijing";
mysql>alter table t1 rename dogperson;
*************************************************************************
mysql键值
设置在表中字段上的,作用是约束如何给字段赋值。同时会给字段做索引。
索引介绍:树状目录结构类似与书的“目录”
优点:加快查询表记录的速度
缺点:会减慢编辑表记录的速度,且占用磁盘的物理存储空间
(delete insert update)
键值:普通索引唯一索引全文索引主键外键
普通索引的使用(index)
1)使用规则?
查看
desc表名;
show index from表名;
Table:t2
Key_name:aaa
Column_name:age
Index_type:BTREE(二叉树)
2)创建
3)在已有表创建
create index索引名on表名(字段名);
例1:create index aaa on studb.t2(age);
例2:mysql>show index from studb.t2\G;
Key_name:aaa#索引名
Column_name:age#字段名
Index_type:BTREE(二叉树)Hash#索引类型
4)建表是时创建索引类型
Mysql>create table表名(
>字段列表,
>index(字段名),
>index(字段名),
);
例1:mysql>create table studb.t21(
>classroom char(7)default"nsd1801",
>age tinyint(2)unsigned zerofill default 18,
>sex enum("boy","girl")not null default"boy",
>index(name),
>index(age),
>index(classroom)
);
6)查看索引列表
desc studb.t21;
show index from studb.t21\G;
7)删除
drop index索引名on表名;
mysql>drop index aaa on t2;
mysql>desc t2;
mysql>show index from t2;
主键primary key
(普通主键复合主键主键+auto_increment)
1)使用规则?
查看desc表;key---->PRI
2)创建
在已有表创建alter table表add primary key(字段名);
3)建表时创建
Mysql>reate table表名(
>primary key(字段名)
);
创建复合主键的使用:多个字段一起做主键,插入记录时,只要做主键字段的
值不同时重复,就可以插入记录。
desc mysql.db;
desc mysql.user;
4)主键primary key通常和auto_increment连用。
让字段的值自动增长i++
数值类型i=i+1
5)删除主键
mysql>alter table表drop primary key;
已有表创建主键
1)创建主键
mysql>alter table t21 add stu_id char(9)first;
mysql>alter table t21 add primary key(stu_id);
2)查看表结构
mysql>desc t21;
3)键值
insert into t21 values(null,"nsd1801","lxd",18,"boy");报错
insert into t21 values("nsd180101","nsd1801","lxd",18,"boy");可以
insert into t21 values("nsd180101","nsd1801","gxh",18,"boy");报错
insert into t21 values("nsd180118","nsd1858","gxh",18,"boy");可以
4)查看数剧
select*from t21;
5)删除主键
alter table表drop primary key;
desc t21;
6)再次建值
insert into t21 values("nsd180101","nsd1801","gxh",18,"boy");可以了
建表时创建主键
使用格式
Mysql>create table表名(
>字段列表,
>primary key(字段名)
);
Mysql>create table表名(
>字段类型(宽度)primary key,
>......
>);
1)建表
Mysql>create table studb.t22(
>person_id char(18),
>name char(10),
>age tinyint(2)unsigned,
>primary key(person_id)
);
Mysql>create table studb.t24(
>person_id char(18)primary key,
>name char(10),
>age tinyint(2)unsigned
);
2)查看表结构
desc studb.t22;
desc studb.t24;
3)建值
insert into studb.t22 values(null,"bob",21);错误
insert into studb.t22 values("xxxxxx","bob",21);可以了
insert into studb.t22 values("xxxxxx","lucy",19);错误
insert into studb.t22 values("Fxxxxx","lucy",19);可以了
创建复合主键
作用:多个字段一起做主键,插入记录时,只要做复合主键字段的值
不同时重复,就可以插入记录。
1)建表
mysql>create table studb.t23(
->clientip char(15),
->port smallint(2),
->status enum("allow","deny"),
->primary key(clientip,port)
->);
2)查看表结构
mysql>desc studb.t23
3)建值
insert into studb.t23 values("1.1.1.1",22,"allow");可以
insert into studb.t23 values("1.1.1.1",22,"deny");报错
insert into studb.t23 values("2.1.1.1",22,"deny");可以
主键primary key通常和auto_increment连用。
1)建表
Mysql>create table studb.t27(
>stu_id int(2)zerofill primary key auto_increment,
>name char(10),
>age tinyint(2)unsigned,
>sex enum("boy","girl")
);
2)建值
insert into studb.t27(name,age,sex)values("bob",19,"girl");
insert into studb.t27(name,age,sex)values("bob",19,"girl");
3)产看表结构
select*from t27;
4)添加主键
向已有表中添加记录编号字段id并使其字段的值自动增长方式赋值
mysql>alter table dogperson add id int(2)primary key
>auto_increment first;
5)查看表数据
select*from dogperson;
select*from dogperson where id=3;
6)添加主键
alter table studb.t22 add primary key(name);
外键(作用限制如何给字段赋值的)
给当前表中字段赋值时,值只能在其他表的指定字段值的范围里选择。
作用:实现同步管理,删除,更新
使用规则?
创建外键foreign key的命令格式:
Mysql>create table表(
字段名列表,
foreign key(字段名)references表名(字段名)
on update cascade on delete cascade
)engine=innodb;
缴费表
use studb;
1)建表
Mysql>create table jfb(
>jfb_id int(2)primary key auto_increment,
>name char(15),
>pay float(7,2)
>)engine=innodb;
2)建值
insert into jfb(name,pay)values("bob",26800);
insert into jfb(name,pay)values("tom",26000);
3)查看数据
select*from jfb;
班级表
1)建表
Mysql>create table bjb(
>bjb_id int(2),
>name char(15),
>foreign key(bjb_id)references jfb(jfb_id)
>on update cascade on delete cascade
>)engine=innodb;
2)建值
insert into bjb values(3,"lucy");
insert into bjb values(1,"bob");
insert into bjb values(2,"tom");
3)查看数据
select*from bjb;
4)同步更改和删除
mysql>update jfb set jfb_id=9 where name="bob";
mysql>delete from jfb where jfb_id=2;
5)查看数据
select*from jfb;
select*from bjb;
6)查看mysql>show create table表名;
7)删除外键
alter table表名drop foreign key外键名;
alter table bjb drop foreign key bjb_ibfk_1;
8)在已有表创建
mysql>delete from bjb;
mysql>alter table bjb add foreign key(bjb_id)references jfb
(jfb_id)on update cascade on delete cascade;
###########################################
内容总结:
•索引的类型:三类型
B+tree
hash
Btree二叉树(一般选择)
##############################################
•键值类型
index:普通索引
unique:唯一索引
fulltext:全文索引
primary key:主键
foreign kry:外建
索引的作用:
•索引是什么?
–索引是对记录集的多个字段进行排序的方法。
–类似于书的目录
–索引类型包括:Btree、B+tree、hash
•索引优点
–通过创建唯一性索引,可以保证数据库表中每一行数
据的唯一性
–可以加快数据的检索速度
•索引缺点
–当对表中的数据进行增加、删除和修改的时候,索引
也要动态的维护,降低了数据的维护速度
–索引需要占物理空间
•使用说明
–一个表中可以有多个INDEX字段
–字段的值允许有重复,切可以赋NULL值
–经常把做查询条件的字段设置为INDEX字段
–INDEX字段的KEY标志是MUL