字段约束,索引,主外键

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

字段约束条件

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

原文地址:https://www.cnblogs.com/qingbai/p/12015014.html

时间: 2024-11-10 14:46:08

字段约束,索引,主外键的相关文章

2-16 MySQL字段约束-索引-外键

一:字段修饰符 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id int not null,name varchar(8) not null,pass varchar(20) not null); mysql> insert into worker values(1,'HA','123456'); mysql> insert into worker values(1,'LB',null); ERROR 1048 (2

2-13-MySQL字段约束-索引-外键

高版本导出报错问题,是由于高版本对导出文件优化了权限设置, show variables like '%secure%';查看权限是NULL就代表禁止导出 在配置文件my.cnf [mysqld]下加secure_file_priv=指定导出目录 本节所讲内容: 1.  字段修饰符 2.  清空表记录 3.  索引 4.  外键 5.     视图 一:字段修饰符 (约束) 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id

MySQL数据库(主键、索引、外键、触发器...)

主键: 能够唯一标识表中某一行的属性或属性组.一个表只能有一个主键,但可以有多个候选索引.主键常常与外键构成参照完整性约束,防止出现数据不一致.主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引. 索引: 是用来快速地寻找那些具有特定值的记录.主要是为了检索的方便,是为了加快访问速度, 按一定的规则创建的,一般起到排序作用. 唯一性索引:这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一. 注:当你的应

普通索引、唯一索引、主索引、外键索引、复合索引、非主码索引、聚集主码(聚集索引)、单列索引、多列索引

强烈建议看了第一个参考文献再来看这个篇博文,因为此处不准备讲底层数据结构的实现. 索引:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构.其表达的是存储引擎的范畴,也就是说只有在存储引擎级别谈索引才有意义.MyISAM.InnoDB.Memory等.此处单纯就InnoDB存储引擎讨论. B-TREE.B+TREE数据结构. 在数据之外,数据库系统还维护着满足特定查找算 法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这

MySQL普通索引、唯一索引、主索引、外键索引、复合索引、全文索引的使用

1.普通索引 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度.因此,应该只为那些最经常出现在查询条件(WHERE column = ...)或排序条件(ORDER BY column)中的数据列创建索引.只要有可能,就应该选择一个数据最整齐.最紧凑的数据列(如一个整数类型的数据列)来创建索引. 2.唯一索引 普通索引允许被索引的数据列包含重复的值.比如说,因为人有可能同名,所以同一个姓名在同一个"员工个人资料"数据表里可能出现两次或更多次. 如果能确定

C# 如何物理删除有主外键约束的记录?存储过程实现

十年河东,十年河西,莫欺少年穷 本篇主旨是如何物理删除有主外键约束的记录!那么,我们从主外键走起! 下面新建三张有主外键约束的表,分别为:系/学院表,专业班表,学生表,如下: CREATE TABLE Dept--系/学院表 ( DeptId int identity(1,1) primary key, DeptName nvarchar(50),--系名称 AddTime datetime default(getdate()) ) CREATE TABLE Grade--班级表 ( Grade

mysql、sqlserver、oracle三种数据库维护索引、外键、字段语法总结

mysql.sqlserver.oracle三种数据库维护索引.外键.字段语法总结 1.     MYSQL数据库 1)    创建索引 CREATE INDEX index_name ON table_name(column_list) CREATE UNIQUE INDEX index_name ON table_name(column_list) 修改表的方式添加索引 ALTER TABLE table_name ADD INDEX index_name(column_list) ALTE

批量删除MSSQL 中主外键约束

转自: http://www.maomao365.com/?p=813 在制作 MSSQL同步工具的时候,发现由于主外键的约束,导致数据同步异常,所有我们需要把 读数据库里面的主外键约束,进行批量删除操作. 1 如何批量查询数据库的主外键? 在MSSQL2005以上版本中,系统提供一个系统视图 sys.foreign_keys 可以查询出系统所有的外键约束2 如何批量删除数据库的主外间键? -----------------------------------------------------

myslql主外键约束

多表操作 1.分类表 create table category( cid varchar(32) primary key, cname varchar(100) ); 2.商品表 create table product( pid varchar(32) primary key, pname varchar(40), price double, category_id varchar(32) ); insert into category(cid,cname) values('c001','家