数据库基础之02(修改表结构,普通索引,主键,外键)

1、修改表结构  :  对已经创建的表的结构做修改:alter  table  库.表  执行动作;
 
1-1、添加新字段  add   
alter  table  db2.t1   
add  email  varchar(50)  default  "[email protected]" ,add  qq       char(11) ;-----默认添加到最后的字段

alter  table  db2.t1
add   stu_num  char(9)  first,------添加到第一个字段
add   likes  set("eat","sleeps","game","film")  after sex;------ 添加到某一个字段之后
 
1-2、删除已有字段 drop   
alter  table  db2.t1  drop  email ,  drop  qq;----逗号间隔可一次删多个字段
 
1-3、修改已有字段类型  modify
* 修改字段类型时,若新的类型与字段已经存储数据冲突,不允许修改。
不修改的部分要原样写一遍,否则就会使用默认值,通过modify还可以修改字段位置。
 
alter  table  t1 modify   sex  enum('boy','girl',"no") not null  default   "boy" after  name;-----修改sex字段为多选,且不允许为空,不赋值时默认值为boy,并将该字段放在name字段之后
   
1-4、修改字段名   change
alter  table  t8 change  stu_num  stu_id  varchar(9);---修改字段名stu_num 为 stu_id
 
1-5、修改表名 rename
alter  table  t8  rename  stuinfo;----修改表明为stuinfo
show tables;
 
2、MYSQL键值:约束如何给字段赋值。
普通索引  index
 
2-1、索引介绍:给字段值排序的树形结构,类似与“书的目录”
 
算法(笔画 部首  拼音  BTREE  b+tree  hash)
                                二叉树
 
索引优点  :加快查询数据的速度
索引缺点  :减慢写入数据的速度 ,占用磁盘空间
 
2-2、查看索引的两种方式
desc   表;  key  ----> MUL
show  index  from 表\G;
 
2-3、创建索引的两种方式及删除索引
把已有表的字段设置为index字段
create index  aaa on  stuinfo(name);-----创建了一个名为aaa的索引在stuinfo表的(name)字段上
 
创建表时指定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));------将name和class两个字段设为了索引

删除索引index
drop index  aaa  on  stuinfo;
 
3、主键     primary  key   限制如何给字段赋值
primary key 使用规则:
1.一个表中只能有一个主键
2.设为主键的字段赋值时不允许赋空值,即不能为null,且该字段的值不允许重复
3.表中的多个字段一起做主键 ,赋值时,主键字段的值不允许同时重复。复合主键的出现是为了解决一个主键字段无法允许第二个主键字段值相同的记录的写入,此时就需要再引用一个字段作为主键来二次区分,才能再允许第二条记录的写入。注意复合主键的字段必须同时设为主键,不允许追加设为主键。
 
3-1、建表时创建主键的两种格式,两种方法  
1.1 create table  t10(
stu_id   char(9)  primary key,
name  char(10),
age  int(2));
 
1.2 create table  t11(
stu_id   char(9) ,
name  char(10),
age  int(2),
primary key(stu_id));

2.1在已有表里创建主键字段
alter  table   t10  add   primary  key(stu_id);

3-2、删除主键
alter  table  t10  drop  primary  key;
desc  t10;
insert into  t10  values("nsd180401","lucy",21);
insert into  t10  values(null,"lucy",21);  
select  * from t10;
 
3-3、创建复合主键: 表中的多个字段一起做主键 ,赋值时,主键字段的值不同时重复。
create  table  t12(
name  char(15),
class  char(7),
pay    enum("yes","no"),
primary key(name,class)
);
 
mysql> insert into   t12  values("bob","nsd1804","yes");
 
mysql> insert into   t12  values("bob","nsd1804","no");
ERROR 1062 (23000): Duplicate entry 'bob-nsd1804' for key 'PRIMARY'
 
mysql>  insert into   t12  values("bob","nsd1805","no");
mysql> insert into   t12  values("lucy","nsd1805","yes");

3-4、在已有表里创建复合主键
delete from t12;
alter table  t12  add  primary  key(name,class);
 
3-5、删除复合主键
alter table  t12  drop  primary  key;
 
3-6、主键通常和auto_increment 连用 让字段的值自动增长,做自加1 计算
        
向表中插入记录时 不给自动增长的字段赋值,字段的值是如何获得的呢,用当前字段最大的值 +1  后 把结果做当前新记录字段的值。此外也可手动赋值,但所赋值必须是非当前主键字段里已有的值
 
create  table   t1(
id        int(2)  primary key  auto_increment,---将id字段设为主键,且设为自动增长
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);
select  * from  t1;
 
4、外键:让当前表字段的值,在另一个表字段值范围里选择。
外键的使用规则:
1.两张表的存储引擎必须是innodb
2.外键字段和参考字段的类型必须一致
3.被参考字段必须是键值的一种(主键)
 
4-1、首先创建被参考的表 员工信息表
create  table   yginfo(    
yg_id    int(2)  primary key  auto_increment,-----被参考字段必须为主键
name   char(15)
)engine=innodb;-----存储引擎必须是innodb
 
insert into  yginfo(name)values("bob");
insert into  yginfo(name)values("bob");
insert into  yginfo(name)values("lucy");
 
4-2、创建外键   
create  table   gztab(    
gz_id   int(2),  
pay  float(7,2),
foreign  key(gz_id ) ----创建gz_id为外键  
references   yginfo(yg_id)----以yginfo表(yg_id)字段为参考字段
on  delete cascade ------同步删除    
on  update cascade ------同步修改
)engine=innodb; ---- 存储引擎必须是innodb
 
4-3、删除外键
show  create table  gztab;----在展现的表结构中找到外键名(CONSTRAINT关键字之后)
alter  table   gztab  drop  foreign key         gztab_ibfk_1;-----删除外键
show  create table  gztab;------重新查看将不再有外键

猜你喜欢

转载自blog.csdn.net/perfect11_1/article/details/81119629