字段约束,索引,主外键

翡翠谷 2019-12-10

                                                    第   字段约束,索引,主外键

字段约束条件

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表名(字段名);

1create index aaa on studb.t2(age);

2mysql>show index from studb.t2\G;

Key_name:aaa#索引名

Column_name:age#字段名

Index_type:BTREE(二叉树)Hash#索引类型

4)建表是时创建索引类型

Mysql>create table表名(

>字段列表,

>index(字段名)

>index(字段名)

);

1mysql>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 tableadd 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 tabledrop 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:外建

索引的作用:

•索引是什么?

–索引是对记录集的多个字段进行排序的方法。

–类似于书的目录

–索引类型包括:BtreeB+treehash

•索引优点

–通过创建唯一性索引,可以保证数据库表中每一行数

据的唯一性

–可以加快数据的检索速度

•索引缺点

–当对表中的数据进行增加、删除和修改的时候,索引

也要动态的维护,降低了数据的维护速度

–索引需要占物理空间

•使用说明

–一个表中可以有多个INDEX字段

–字段的值允许有重复,切可以赋NULL

–经常把做查询条件的字段设置为INDEX字段

INDEX字段的KEY标志是MUL

相关推荐