一 表结构
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;