db2 约束条件 添加字段 删除字段 创建索引 主键 primary key 外键创建与运用

一。约束条件  作用控制如何给字段赋值

NULL       |                  key      |     default   |    extra

是否允许赋null值      键值            默认值        额外设置

 null(允许为空)   not(不允许为空) key(索引类型)   default(设置默认值,缺省为null)

create    table   t7(name   char (15)   not    null,   (不允许为空)

 class       char(7)   default      "nsd1804",            (设置默认值缺省为null)

age     tinyint(2)   not    null   default     19,

sex    enum("boy","girl")  not  null    default   "boy");   (enum给定值中选择一个)set(给定值中选择一个或多个)

desc    t7;


insert   into    t7(name)values("bob");

insert  into    t7    values("bob2","nsd1803",21,"girl");   (赋于值)

insert into     t7   values("null",null,22,"boy");  

insert  into    t7  values("jim",null,22,"boy");       

insert  into  t7  values("",null,31,"boy");

select   *  from  t7;



create    table  t8(name char(15)  not  null  default  "",

class   char(7)   default   "nsd1804",

age     tinyint(2)   not  null  default  19,

sex   enum ("boy","girl")  not   null  default  "boy");

insert   into   t8(class,age,sex)values("nsd1802",45,"boy");

select  *  from  t8;

二,修改表结构 :对已经创建的表的结构做修改:

添加新字段    :格式用法:alter  table   表名    add    字段名      类型(宽度)    约束条件;可加after字段名;或者first;

add

alter  table   db2.t8

add    email   varchar(50)  default   "[email protected]",

add   qq      char(11);

desc   t8;

select     *   from   t8;

可加after字段名(在指定字段后面);或者first;(在所有字段前面)

alter  table   db2.t8

add   stu_num   char(9)   first,  (在字段最前面)

add   likes    set("eat","sleeps","game","film")  after   sex;    (在指定字段后面)

删除已有字段:alter    table   db2.t8    drop    email; 

删除多个:alter  table   db2.t8   drop   email,   drop   qq;

desc   t8;

select   *  from   t8;

   修改已有字段类型 :       格式:alter   table   表名    modify   字段名    l类型(宽度)   约束条件;     可加可加after字段名;或者first;

modify

*修改字段类型时,若新的类型与字段已经存储数据冲突,不允许修改。

不修改的部分要原样写一遍,否则alter   table  t8  modify   stu_num   varchar(9);就是还原。

alter   table  t8  modify   stu_num   varchar(9);

alter    table   t8  modify

sex   enum('boy','girl',"no")  not  null   default   "boy";

desc  t8;

(改变位置)

alter   table   t8    modify    sex   enum('boy','girl',"no")   not   null   default   "boy"  after  name;

select   *    from   t8;

    修改字段名    :   格式:alter   table    表名  change    源字段名    新字段名    类型(宽度)   约束条件;

change

   alter   table   t8   change   stu_num   stu_id   varchar(9);

select  *   from    t8;

修改表 : 格式;alter  table  表名   rename  新表名;

rename  

alter    table   t8   rename   stuinfo ;

show    tables;

select    *   from   stuinfo;

三,MYSQL键值   (重点)    约束如何给字段赋值。

普通索引  index   唯一索引:unique   全文索引:fulltext     主键:primary   key      外键:  foreign    key

索引介绍:给字段值排序的树型结构,类似与“书的目录”

索引优点:方便查找加快查询数据的速度

索引缺点:1.占用存储空间   2.减慢写入数据的速度

使用索引

使用规则

查看、  desc   表 ;   key    ---MUL

           show    index   from    表;

创建:   把已有表的字段设置为index字段

desc   stuinfo;

show   index   from     stuinfo\G;

    create    index   aaa  on    stuinfo(name);    (设置为index字段,创建索引)

                               (索引名)      (表名)

desc     stuinfo;

show    index    from   stuinfo\G;

删除: Iindex

drop    index    aaa   on     stuinfo;

desc    stuinfo;

show    index     from     stuinfo\G;

创建表时指定index字段

create    table   t9(name    char(15)   not    null   default   "",

class    char(7)   default    "nsd1804",

age    tinyint(2)   not     null    default     19,

sex     enum("boy","girl")    not    null   default    "boy",

index(name),index(class));

desc    t9;

show   index   from    t9\G;


四,primary  key  主键

限制如何给字段赋值  

primary key   使用规则

建表时创建主键  字段

create  table  t10(stu_id  char(9)   primary  key,

name   char(10),

age   int(2));


    两种方法

create   table   t11(stu_id  char(9),

name   char(10),

age     int(2),

primary   key(stu_id));

desc   t10;

desc   t11;

inset    into    t10    values("nsd180401","lucy",21);

inset   into     t10    values("nsd180401","bob",21);

inset  into     t10     values(null,"lucy",21);

  

删除主键

alter    table    t10    drop    primary  key;

desc    t10;

insert     into      t10    values("nsd1804","lucy",21);

insert    into       t10    values(null,"lucy",21);

select   *    from    t10;

在已有表里创建主键字段

delete  from    t10;(有重复值)

alter   table    t10    add     primary     key(stu_id);

desc   t10;

创建复合主键:表中的多个字段一起做主键,赋值时,主键字段的值不同时重复。

create  table   t12(name   char(15),

class char(7),

pay    enum("yes","no"),

primary  key(name,class));

insert   into   t12   values("bob","nsd1804","yes");

insert   into    t12   values("bob","nsd1804","no");       (主键不能同时重复)

insert    into    t12    values("bob",nsd1805","yes");

insert    into    t12    values("bob","nsd1805","no");

删除复合主键:

alter   table    t12    drop    primary   key;

insert   into     t12    values("bob","nsd1805","no");

select   *   from    t12;

主键同常和auto_increment连用  让字段的值自动增长。

primary  数值必须有才能创建

向表中插入记录时 不给自动增长的字段赋值, 字段的值是如何获得的呢,用当前字段最大的值+1  后把结果做当前新记录字段的值

案:create  database db3;

     use  db3 

     create table  t1(id  int(2)  primary key auto_ increment,

   name  char(15)  not null,

   age  tinyint(2)  unsigned  default  19,

   pay  float(7,2)  default   26800);

   insert  into  t1(name,age,pay) values("tom",21,18000);

  insert  into  t1(name,age,pay) values("lucy",23,18800);

  insert  into  t1  values(7,"jerry",23,18800);

  insert  into  t1 (name,age,pay) values("alice",33,18800);

  insert  into  t1 values(null,"jerry2",23,18800);

删除自动增长:

alter  table  t2  change  id id int;

外键:让当前表字段的值,在另一个表字段值范围里选择。

外键的使用:1,表的储存引擎必须是innodb,字段类型必须一致,被参照字段必须是索引类型的一种,通常是主键primary key

格式:

 create table yginfo(yg_id  int(2) primary key auto_increment,

name char(15))engine=innodb;

insert into yginfo(name)values("bob");

insert into yginfo(name)values("bob");

insert into yginfo(name)values("lucy");

select * from yginfo;

创建外键:

格式:foreign key(表a的字段名)

          references表b(字段名)

        on delete

      on  uodate


create  table  gztab(gz_id int(2),

pay float(7,2),

foreign key(gz_id) references yginfo(yg_id)  on delete cascade on update cascade)engine=innodb;

select * from gztab;

desc gztab;

show create table gztab;


insert into gztab values(1,50000);

insert into gztab values(2,25000);

insert into gztab values(3,35000);

insert into gztab values(4,60000);  如果没有编号者不能成立

同步更新

update yginfo set yg_id=7 where yg_id=2;

select  * from yginfo;

select * from gztab;

同步删除

delete from yginfo where yg_id=3;

select * from yginfo;

select * from gztab;

   字段值不允许重复和赋null值

alter table gztab add primary key(gz_id);(加主键)

删除外键:

show create table gztab;

alter table gztab drop foreign key  gztab_ibfk_1;

show create table gztab;

alter   table  t8  modify   stu_num   varchar(9);

数据库管理
NSD DB 基础
DAY02内容
上午
09:00 ~ 09:30 作业讲解和回顾
09:30 ~ 10:20 约束条件
10:30 ~ 11:20 修改表结构
11:30 ~ 12:00
14:00 ~ 14:50
下午
15:00 ~ 15:50
MySQL 键值
16:10 ~ 17:00
17:10 ~ 18:00
总结和答疑约束条件约束条件
• Null 允许为空,默认设置
• NOT NULL 不允许为空




索引类型
• Key
• Default 设置默认值,缺省为 NULL约束条件(续 1 )



解修改表结构
修改表结构
修改表结构
语法结构
添加新字段
修改字段类型
修改字段名
删除字段
修改表名修改表结构语法结构
• 基本用法
– ALTER TABLE 表名 执行动作 ;




Add
Modify
Change
Drop
Rename
添加字段
修改字段类型
修改字段名
删除字段
修改表名添加新字段
• 基本用法




– ALTER TABLE 表名
– ADD 字段名 类型 ( 宽度 ) 约束条件 ;
可加 AFTER 字段名 ;
或者 FIRST;修改字段类型
• 基本用法




– ALTER TABLE 表名
– modify 字段名 类型 ( 宽度 ) 约束条件 ;
可加 AFTER 字段名 ;
或者 FIRST;修改字段名
• 基本用法




– ALTER TABLE 表名
– change 源字段名 新字段名 类型 ( 宽度 ) 约束条件
;
当跟新类型和约束条件时,也可修改字段类型删除字段
• 基本用法




– ALTER TABLE 表名
– drop 字段名 ;
表中有多条记录时,所有列此字段的值都删除了修改表名
• 基本用法




– ALTER TABLE 表名
– Rename 新表名;
表对应的文件名,也会改变案例 1 :修改表结构
• 表的字段修改




– 添加字段
– 修改字段名
– 修改字段类型
– 删除字段MySQL 键值
MySQL 索引概述
索引介绍
索引优缺点
MySQL 键值
键值类型
MySQL 键值类型
INDEX 普通索引
primary key 主键
foreign key 外键MySQL 索引概述索引介绍
• 索引是什么?




– 索引是对记录集的多个字段进行排序的方法。
– 类似于书的目录
– 索引类型包括 :Btree 、 B+tree 、 hash索引优缺点
• 索引优点




– 通过创建唯一性索引,可以保证数据库表中每一行数
据的唯一性
– 可以加快数据的检索速度
• 索引缺点
– 当对表中的数据进行增加、删除和修改的时候,索引
也要动态的维护,降低了数据的维护速度
– 索引需要占物理空间键值类型
• INDEX :普通索引
• UNIQUE :唯一索引




• FULLTEXT :全文索引
• PRIMARY KEY :主键
• FOREIGN KEY :外键MySQL 键值类型INDEX 普通索引
• 使用说明




– 一个表中可以有多个 INDEX 字段
– 字段的值允许有重复,切可以赋 NULL 值
– 经常把做查询条件的字段设置为 INDEX 字段
– INDEX 字段的 KEY 标志是 MULINDEX 普通索引(续 1 )
• 建表的时候指定索引字段
– INDEX( 字段 1), INDEX( 字段 2) .. ..



解INDEX 普通索引(续 2 )
• 在已有的表中设置 INDEX 字段
– CREATE INDEX 索引名 ON 表名 ( 字段名 );




• 删除指定表的索引字段
– DROP INDEX 索引名
ON 表名 ;INDEX 普通索引(续 3 )
• 查看表的索引信息
– SHOW INDEX FROM 表名 ;




使用 B 树算法primary key 主键
• 注意事项




– 一个表中只能有一个 primary key 字段
– 对应的字段值不允许有重复,且不允许赋 NULL 值
– 如果有多个字段都作为 PRIMARY KEY ,称为复合主
键,必须一起创建。
– 主键字段的 KEY 标志是 PRI
– 通常与 AUTO_INCREMENT 连用
– 经常把表中能够唯一标识记录的字段设置为主键字段
[ 记录编号字段 ]primary key 主键(续 1 )
• 建表的时候指定主键字段
– PRIMARY KEY( 字段名 )



解primary key 主键(续 2 )
• 在已有的表中设置 PRIMARY KEY 字段
– ALTER TABLE 表名 ADD PRIMARY KEY( 字段名 );




• 移除表中的 PRIMARY KEY 字段
– ALTER TABLE 表名 DROP PRIMARY KEY;
移除主键前,如果有自增属性,必须先去掉foreign key 外键
• 什么是外键?




– 让当前表字段的值在另一个表中字段值的范围内选择

• 使用外键的条件
– 表的存储引擎必须是 innodb
– 字段类型要一致
– 被参照字段必须要是索引类型的一种 (primary key)foreign key 外键(续 1 )
• 基本用法




– FOREIGN KEY( 表 A 的字段名 )
References 表 B( 字段名 )
ON UPDATE CASCADE
ON DELETE CASCADEforeign key 外键(续 2 )
• 删除外键字段
– ALTER TABLE 表名 DROP FOREIGN KEY 约束名 ;




外键约束名称MySQL 索引创建与删除
1. 普通索引、唯一索引、主键索引的创建 / 删除
2. 自增主键索引的创建 / 删除




3. 建立员工表 yg 、工资表 gz ,并设置外键实现同步
更新与同步删除总结和答疑
primary key
问题现象 1
故障分析及排除
问题现象 2
故障分析及排除
总结和答疑
foreign key
问题现象 1
故障分析及排除
问题现象 2
故障分析及排除primary key问题现象 1
• 把已有表中的字段设置为主键报错
– 报错:




Duplicate entry '2' for key 'PRIMARY'
mysql> select * from t1;
| 2 | jerry |
| 2 | bob |
+------+-------+
4 rows in set (0.01 sec)
mysql>
mysql> alter table t1 add primary key(id);
ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'故障分析及排除
• 原因分析
– 不符合主键使用规则,主键字段的值不允许重复




• 解决办法
– 修改字段的重复值
mysql> update t1 set id=4 where name="jerry";
.. ..
mysql> alter table t1 add primary key(id);
.. ..问题现象 2
• 删除表中主键字段报错
– 报错: ERROR 1075 (42000):




mysql> desc t2;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra
|
+-------+----------+------+-----+---------+----------------+
| id
| int(2)
| NO | PRI | NULL | auto_increment |
| name | char(10) | YES | | NULL |
|
+-------+----------+------+-----+---------+----------------+
mysql> alter table t2 drop primary key;
ERROR 1075 (42000): Incorrect table definition; there can be only
one auto column and it must be defined as a key故障分析及排除
• 原因分析:
– 有自动增长属性的字段必须作为主键,不允许删除




• 解决办法:
– 去掉字段的自动增长属性,再删除主键
mysql> alter table t2 modify id int(2) not null;
.. ..
mysql> alter table t2 drop primary key;
.. ..foreign key问题现象 1
• 创建外键失败
– 报错: ERROR 1215 (HY000): Cannot .. ..




mysql> desc t2 ;
+-------+----------+------+-----+---------+-------+
| id | int(2) | NO | | NULL |
|
| name | char(10) | YES | | NULL |
|
+-------+----------+------+-----+---------+-------+
mysql> create table t3(
-> id int(2),
-> pay float(7,5),
-> foreign key(id) references t2(id)
-> );
ERROR 1215 (HY000): Cannot add foreign key constraint故障分析及排除
• 原因分析:




– 不符合外键使用规则。
– 被参考字段必须是 key 值中的一种。
• 解决办法:
– 给被参考字段设置 key 值
mysql> create index id on t2(id);
mysql> create table t3( id int(2), pay float(7,5), foreign key(id)
references t2(id) );
.. ..问题现象 2
• 删除表中字段失败
– 报错: Cannot delete or update a parent row .......




mysql> drop table t2;
ERROR 1217 (23000): Cannot delete or update a parent row: a
foreign key constraint fails
mysql> alter table t2 drop id;
ERROR 1553 (HY000): Cannot drop index 'id': needed in a foreign
key constraint故障分析及排除
• 原因分析
– 被参考的表、表的字段不允许被删除




• 解决办法
– 删除其他表对待删除表或字段的参考
mysql> alter table t3 drop foreign key t3_ibfk_1;
.. ..
mysql> alter table t2 drop id;
.. ..


猜你喜欢

转载自blog.csdn.net/xixi1067087210/article/details/80998316