表是数据库中存储的基本对象,是存储数据的容器,一个完整的表由表结构和表数据两部分组成。
表结构的设计
1.1创建数据表
例:创建学生信息表
create table 学生信息(
学号 char(10),
姓名 char(10),
性别 char(10),
年龄 int,
联系方式 char(11)
);
1.2 查看表的信息
语法格式: desc 表名;
desc 学生信息;
1.3 重命名表
语法格式:rename table 原数据表名 to 新数据表名;
rename table 学生信息 to student;
1.4 删除表
drop table 表名;
drop table 表名1,表名2,...; //可在同一语句中指定几个表对它们进行删除
drop table if exists 表名; //如果不能肯定一个表是否存在,但如果它存在就删除它。
MySQL数据类型
1.1整数类型
特殊:如果只希望表示零和正整数,可以使用无符号整数。unsigned 用于定义大于等于0的数。
例如定义一个学生的年龄可使用“年龄 int unsigned”
类型 | 字节数 | 说明 |
tinyint | 1字节 | 最小整数 |
smallint | 2字节 | 小型整数 |
medium | 3字节 | 中型整数 |
int | 4字节 | 标准整数 |
bigint | 8字节 | 大整数 |
1.2小数类型
数据类型 | 单位 | 说明 |
float | 8字节或4字节 | 单精度浮点数 |
double |
8字节 | 双精度浮点数 |
decimal | 自定义长度 | 小数位数确定的小数 |
decimal(length,precision) 用于表示精度确定的小数类型,length决定了该小数的最大位数,precision 用于设置精度(小数点后数字的位数)
例;创建商品表,设置数值型数据类型
create table 商品表 (
订单号 char(10),
商品名称 char(10),
商品价格 decimal(5,2),
商品销量 int,
折后价 float(5,2),
销售总额 double
);
1.3 字符串类型
类型 | 说明 |
char(n) | 固定长度为N的字符串,其中N的取值范围为0~255,英文一个字节,汉字两个字节 |
varchar(n) | 长度可变,最多8000个英文,4000个汉字 |
text | 长度可变,超大数据 |
char(N) :为固定长度字符串类型,当保存char值时,字符串实际的长度小于定义的长度。
varchar(N):为可变长度字符串类型,varchar的最大有效长度由最大度由最大行大小和使用的字符集确定。varchar存储变长数据可节约存储空间,但存储效率没有char高
text类型是一种特殊的字符串类型,text只能保存字符数据。
例:创建顾客信息表,表名为顾客信息
create table 顾客信息(
买家ID char(10),
姓名 char(10),
家庭住址 varchar(50),
联系电话 char(10),
备注 text
);
1.4 日期类型
类型 | 说明 |
date | 日期 |
time | 时间 |
datetime | 日期和时间 |
timestamp | 时间标签 |
year | 年份 |
1.5 复合类型
类型 | 说明 |
enum('value1','value2'......) | 该类型的字段只能容纳所列值之一或为NULL |
set('value1','value2'......) | 该类型的字段只能容纳一组值或为NULL |
例:创建学生兴趣表,包含字段有学号、姓名、性别、爱好。
create table 学生信息表(
学号 char(10),
姓名 char(10),
性别 enum('男','女'),
爱好 set('唱','跳','Rap','篮球')
);
在创建表时,使用字符串类型时应遵循以下的原则:(了解即可)
1)从速度方面考虑,要选择固定的列,可以使用char类型
2)要节省空间,使用动态的列,可以使用varchar类型
3)要将列中的内容限制在一种选择,可以使用enum类型
4)允许在一个列中有多于一个的条目,可以使用set类型
5)如果搜索的内容不区分大小写,可以text类型
修改表的结构
1.1 增加字段
alter table 表名 add 新字段名 新数据类型 [first | after 旧字段名 ];
first:将新字段添加到表的最左边。
after 旧字段名:将新字段添加到表中原有的某个字段的后面。
1.2 删除字段
alter table 表名 drop 字段名;
1.3 修改字段的数据类(modify)
alter table 表名 modify 字段名 新数据类型;
1.4 修改字段名(change)
alter table 表名 change 旧字段名 新字段名 数据类型;
alter table 顾客信息 add 顾客编号 char(10) first;
alter table 顾客信息 add 年龄 tinyint after 性别;
alter table 顾客信息 add 家庭住址 varchar(50) after 联系方式;
alter table 顾客信息 change 省份证 身份证 char(18);
alter table 顾客信息 modify 联系方式 char(11);
alter table 顾客信息 drop 爱好;
设置约束
为表设置约束是解决数据完整性的主要方法。MySQL数据库将数据的完整性解释为:存储在数据库中的所有数据值均正确。
在MySQL中,为表创建约束有两种方法:1)在创建表时添加约束;2)通过修改表结构添加约束。
1.1主键约束——当字段设置为主键时,该字段的值就不能为空,也不能重复。
主键的建立有三种方法,纯了以下两种,还有修改表结构添加约束
设置主键的方法有两种:
1) 字段名 数据类型 primary key; 或 constraint 约束名称 primary key(字段名);
2) 如果一张表的单个字段无法定义为主键,则需要把多个字段共同设置为主键,即复合主键。
constraint 约束名称 primary key(字段名1,字段名2........);
create table 学生选课(
学号 char(10),
课程号 char(10),
成绩 int,
constraint x_k_pk primary key(学号,课程号)
);
例:为课程信息表中的“课程号”设置自动增长型字段,并设置为主键。
auto_increment 约束的字段可以是任何整数,默认情况下,该字段的值从1开始自增。MySQL中规定自增列必须为主键。
create table 课程信息(
课程号 int auto_increment primary key,
课程名称 char(10),
学分 int default 4
);
1.2 唯一约束
字段名 数据类型 unique;
1.3 非空约束——用来强调实现数据的域完整性,它用来设定某列值不能为空。
字段名 数据类型 not null;
1.4 默认约束
字段名 数据类型 default '值'; //值如果是数字时可以省略单引号。
1.5 外键约束
一张表中的字段值恰好引用了另外一张表的主键值,那么该字段值就是本表的外键。
外键不应该是本表的主键,但它可以与其它字段共同设置为该表的主键。
外键的作用:
1)禁止从表中插入主表中不存在的数据。
2)禁止由于修改主表中的主键的值,导致从表中相应的外键值孤立。
3)禁止删除在从表中有对应记录的主表记录。
设置外键约束的语法格式:
constraint 约束名称 foreign key(字段名) references 主表名(字段名);
create table 学生选课(
学号 char(10),
课程号 int,
成绩 int,
constraint x_k_pk primary key(学号,课程号),
constraint x_fk foreign key(学号) references 学生信息(学号),
constraint k_fk foreign key(课程号) references 课程信息(课程号)
);
create table book(
图书编号 char(10) primary key,
书名 varchar(30) unique,
作者 varchar(30) default'作者不详',
单价 decimal(5,2) default 0,
出版社 char(10) not null
);
1.6修改表结构添加约束
alter table 表名 add constraint 约束名称 约束类型(字段名,......);
其中约束类型只能是 primary key 和 foreign key 。
not null、unique、default约束可以通过修改表结构中的字段实现
例:alter table 学生选课 modify 成绩 int not null default 0;
alter table 学生选课 add constraint x_k_pk primary key(学号,课程号);
alter table 学生选课 add constraint x_fk foreign key(学号) references 学生信息(学号);
alter table 学生选课 add constraint k_fk foreign key(课程号) references 课程信息(课程);
1.7 删除约束
删除主键约束:alter table 表名 drop primary key;
删除外键约束:alter table 表名 drop foreign key 约束名;
alter table 学生选课 drop primary key;
alter table 学生选课 drop foreign key x_fk;
数据更新
1.1 插入数据
格式一:insert into 表名 [(字段列表)] values(字段值1,字段值2,字段值3,....);(普遍用这个)
格式二:insert into 表名 set 字段1=值1,字段2=值2,...;
insert into 学生信息 values
('1906010801','飞雪','女',21,'13691875603'),
('1906010802','西门吹雪','男',18,'13691875604'),
('1906010803','夜未央','女',28,'13691875613'),
('1906010804','菊花残','男',38,'13691875673'),
('1906010805','满地伤','男',26,'13691875663');
1.2 修改数据
修改数据时可以修改数据表中的一个字段或多个字段的全部值
update 表名
set 字段名1=值1[,字段名2=值2,....]
[where 条件表达式]
update 学生信息 set 联系方式='无';
update 学生信息 set 年龄=年龄-5 where 性别='女';
update 学生信息 set 联系方式='11011010' where 学号='1906010801';
1.3 删除数据
1)用delete语句删除记录:(如果没有指定where子句(省略where子句),那么该表的所有记录都将被删除,但表结构依然存在)
delete from 表名 [where 条件表达式];
2)使用truncate table 语句完全清空一个表
truncate table 表名;
truncate table 语句是不支持事物的回滚,并且不会触发触发器程序的运行。而delete语句删除的数据是可以恢复的。