表结构 、 MySQL键值

一 表结构

	1.1 字段约束条件的设置
		作用:限制字段赋值   

设置约束条件

null 允许为空(默认设置)
not null 不允许为null (空)
key 键值类型
default 设置默认值,缺省为null
extra 额外设置

create database db2 ;            
mysql> create  table  db2.t1( 
          name  char(15)  not null default  "",                                                               //  不允许为空值
          sex  enum("boy","girl")  default "boy",                                                           //允许为空 值 , 默认为“boy”
          likes  set("eat" , "game" , "money" , "it" )  not null  default "eat,money" );  //不允许为空值,默认值为"eat","money"
mysql> desc db2.t1;                                                                                       //查看表结构
`mysql> insert into db2.t1(name) values ("nb");                                          //name  字段插入“nb”其他` 
 insert into  db2.t1 values ("dingmy","girl" , "game,it");                        //插入“dingmy”其他 第二位默认"girl " 第三位默认”game,it“ 
	1.2 修改表结构

alter table 库.表 执行动作; add 添加字段
alter // 修改 modify 修改字段类型
添加新字段 add change 修改字段名
drop 删除字段
add 字段名 类型 [约束条件] ; rename 修改表名

         add 字段名 类型  [约束条件]  after 字段 ;                    //在..后面
                add 字段名 类型  [约束条件] first ;                                //在..前面 (默认值)
mysql> use  db2;
mysql> alter table t1  add class  char(7) default "nsd1911" first;                          //不加选项是(约束条件是)添加到最前面
mysql> alter table t1 add  email  varchar(50) ;                                                       //不加约束条件加到最后                                                        
mysql> alter table t1  add  age tinyint unsigned  default 23 after name;              //加到name  后面
mysql> desc  t1;
mysql> select  * from t1;
		修改字段类型 modify
			修改的新类型不能与字段已经存储的数据冲突
mysql> alter  table t1  modify  email char(30) default "stu@163.com" ;        //修改email  (default)  默认值为stu@163.com
mysql> alter table t1 modify  age tinyint unsigned  default  23 after class ;      //修改age 位置到class后面 
		修改字段名   change
mysql> alter table t1  change  name  user char(15) not null default "" ;     //修改字段名name  为user 
		删除字段     drop
mysql> alter table  t1 drop class , drop email;            //删除字段email  
		修改表名     rename
mysql> alter table t1  rename stuinfo ;                   //修改表名 t1 为stuinfo
mysql> show tables;       
二  MySQL键值
	2.1  普通索引  index
		索引介绍(什么索引)
		Btree  B+tree  hash
		二叉树

新华字典 查找不认识或不理解意思的汉字

目录
笔画 1 2 index 普通索引
unique 唯一索引
拼音 a b c z fulltext 全文索引
primary key 主键
301 350 foreign key 外键

部首  200-250
索引的优点
  -通过创建唯一性索引,可以保证数据量库表中每一行数据的唯一性
       可以加快数据查询速度   (优先查询索引)
索引的缺点
 -  当对表中的数据进行增加,删除和修改的时候,索引也要动态的的调整,降低了数据的维护速度
 -索引需要站物空间

普通索引规则

  一个表可以多个index(索引)字段
  字段的字段的值允许重复,且可以赋NULL值
  通常把作为查询条件的字段设置为index 字段
index   字段 标志是 MUL 
create  index  索引名  on  表名 (字段名)      // 在已有的表里创建索引

drop index 索引名 on 表明; // 删除索引

为什么要使用索引(索引的优点与缺点)
		使用索引:
		   使用规则?
		   创建索引
			建表时创建索引
	mysql> create table t2 ( 
                  name char(10), cj  int  , class char(7), 
                  index(name) , index(cj) 
                   );
mysql> desc  t2;
            在已有表里创建索引
mysql> create index  xxx on stuinfo(user) ;
mysql> desc  t2;
		   查看索引
mysql> show index from stuinfo \G ;

		mysql> show index from  t2 \G;
			Table: t2
			Column_name: name
			Index_type: BTREE
			 Key_name: name
		   删除索引
      mysql> drop index name on  t2;
mysql> drop index cj on  t2;
	

2.2 主键 primary key
使用规则 ?

  -字段值不允许重复,且不允许赋NULL值
			   -一个表中只能有一个primary  key 字段
			   -多个字段都只能作为主键,称之为复合主键,必须一起创建
			   -主键字段的标志是PRI
			   -主键通常与 auto——increment  连用
			   -通常把表中唯一标识记录的字段设置为主键
			    【记录编号字段】
           mysql> create table t3(
-> name char(3),
-> age int , homedir char(9),tel char(11),
-> primary key(tel)
-> );
   mysql> create table t4( name char(3), age int , homedir char(9),
    -> tel char(11) primary key );
			在已有表里创建主键
 mysql> alter table t2 add  primary key(name);
                       删除主键
   mysql> alter table t2 drop primary key ;
	
	     创建复合主键 (表中多列一起做主键)
			   插入记录是复合主键字段的值只要不同时重复即可
      PRI        PRI

client_ip ser_port access_status
1.1.1.1 21 allow
2.1.1.1 21 deny

mysql> create table db2.t5( client_ip  char(15) , ser_port smallint , 
           access_status  enum("allow","deny") , 
           primary key(client_ip , ser_port ) ); 
       
mysql> desc db2.t5;

   mysql> insert into  db2.t5  values ("1.1.1.1" , 21 , "allow");

Query OK, 1 row affected (0.06 sec)

mysql> insert into  db2.t5  values ("1.1.1.1" , 21 , "deny");

ERROR 1062 (23000): Duplicate entry ‘1.1.1.1-21’ for key ‘PRIMARY’
mysql>

mysql> insert into  db2.t5  values ("1.1.1.1" , 22 , "deny");

Query OK, 1 row affected (0.14 sec)

mysql> insert into  db2.t5  values ("1.1.1.1" , 22 , "allow");

ERROR 1062 (23000): Duplicate entry ‘1.1.1.1-22’ for key ‘PRIMARY’
mysql>

mysql> insert into  db2.t5  values ("2.1.1.1" , 22 , "allow");

Query OK, 1 row affected (0.01 sec)

mysql> select  * from db2.t5;
           	    主键与auto_increment连用
                      字段值自增长  i++  
		   1
		   2  1+1=2
                       3   2+1=3
		   4    3+1=4 
create table  t6 ( id int primary key  auto_increment ,name  char(10) , tel char(11) , qq char(11) );
        desc  t6;
   
   insert into  t6(name , tel , qq) values ("boba","111" , "222");
insert into  t6(name , tel , qq) values ("bobB","111" , "222");
select  * from  t6; 
mysql> alter table t6 add id int primary key auto_increment first;
           2.3  外键 : foreign key 
	    功能 :插入记录时,字段值在另一个表字段值范围内选择。
	    使用规则 ?
	    创建外键的命令格式

员工表
user  yg_id 
 ZZ    1
 ZZ    2
 FF    3
     KK    4
工资表
name (外键) 参数A表的user字段
gz_id  pay
  1    20000
  2    35000 
  3    28000
      4    54000
 create  table  db2.yg( 
      yg_id  int  primary key  auto_increment ,
      name   char(15)
    )engine=innodb;   //创建表,id为自增长主键

创建外键

 create table db2.gz (  gz_id  int  , name char(15) , gz float(7,2),
     foreign key(gz_id) references  db2.yg (yg_id)  
     on update cascade  on delete      cascade 
   )engine=innodb;
insert into  db2.gz values (1 , "bob" , 50000);
   insert into  db2.yg (name) values ("bob");
   insert into  db2.gz values (1 , "bob" , 50000); 测试插入数据的约束功能
   mysql> update  db2.yg  set yg_id=8 where name="bob" ; 测试同步更新
          select  * from db2.gz;
   mysql> delete from  db2.yg  where yg_id=8;   测试同步删除
	  select * from db2.gz;
   mysql> insert into  db2.yg values(6,"jerry"),(7,"john");
mysql> delete from  db2.gz;
   mysql> alter table db2.gz add primary key (gz_id);

查看表的外键 mysql> show create table db2.gz \G

删除外键 mysql> alter table db2.gz drop foreign key gz_ibfk_1 ;

在已有表添加外键字段

   mysql> alter table db2.gz   add foreign key(gz_id) references db2.yg(yg_id) on update cascade on delete cascade;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值