一。约束条件 作用控制如何给字段赋值
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");(定义name的值为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 "student@tedu.cn",
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; (字段likes在指定字段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";(修改性别为boy)
desc t8;
(改变位置)
alter table t8 modify sex enum('boy','girl',"no") not null default "boy" after name;(sex性别默认值为boy,在表结构字段name后面)
select * from t8;
修改字段名 : 格式:alter table 表名 change 源字段名 新字段名 类型(宽度) 约束条件;
change
alter table t8 change stu_num stu_id varchar(9);(把字段stu_num 改名为stu_id)
select * from t8;
修改表 : 格式;alter table 表名 rename 新表名;
rename
alter table t8 rename stuinfo ;(把表名t8改为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字段,创建索引,把字段name设为索引,索引名为aaa,)
(索引名) (表名)
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 "",(指定name的默认值为空字符)
class char(7) default "nsd1804",(指定class的默认值为nsd1804)
age tinyint(2) not null default 19,(指定age默认值为19)
sex enum("boy","girl") not null default "boy",(指定sex默认值为boy)
index(name),index(class));(把name,class,设为索引字段)
desc t9;
show index from t9\G;(查看t9表的索引)
四,primary key 主键
限制如何给字段赋值
primary key 使用规则(不能为空,不能重复)
建表时创建主键 字段
create table t10(stu_id char(9) primary key,(把stu_id字段设为主键)
name char(10),
age int(2));
两种方法
create table t11(stu_id char(9),
name char(10),
age int(2),
primary key(stu_id));(把字段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);(创建主键添加到t10表里把字段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,(把字段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);(给对应字段赋值)
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,(把yginfo表的字段yg_id设为主键自定增长)
name char(15))engine=innodb;(把字段name设为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 update
create table gztab(gz_id int(2),(表gztab,字段gz_id)
pay float(7,2), float(小数类型) cascade:层叠
foreign key(gz_id) references yginfo(yg_id) on delete cascade on update cascade)engine=innodb;(创建外键,把yginfo表里内容作为gztab表的参照表)
select * from gztab;
desc gztab;
show create table gztab;
insert into gztab values(1,50000);(表1gztab发工资测试,以表2为参照)
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;(修改表yginfo的字段yg_id的id)
select * from yginfo;
select * from gztab;
同步删除
delete from yginfo where yg_id=3;(删除yginfo表的字段yg_id的id)
select * from yginfo;
select * from gztab;
字段值不允许重复和赋null值
alter table gztab add primary key(gz_id);(加主键可以不为空,不重复)
删除外键:
show create table gztab;(查看gztab表的外键)
alter table gztab drop foreign key gztab_ibfk_1;(删除gztab表的外键)
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;
.. ..
db2新增主键sql db2给表添加主键
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
DB2日常运维命令linux sql Database db2
-
emobile6 搭建
第一步:启动MyEclipse 6,如下图所示: 按图所示:选择配置服务器:在弹出的preferences中选择要配置的weblogic服务器类型,这里我们选
emobile6 搭建 weblogic myeclipse jdk 服务器