MySQL(2)——数据表

目录

一、创建数据表

1、切换数据库

2、创建数据表

 3、查看数据表

 二、主键

1、单字段主键

(1)在定义列的同时指定主键

(2)在定义完所有列之后指定主键

2、多字段联合主键

三、外键

 四、其他约束

1、非空约束

2、唯一性约束

(1)在定义完列之后直接指定唯一约束

(2)在定义完所有列之后指定唯一约束

注意:UNIQUE和PRIMARYKEY的区别

3、默认约束

4、表的属性值自动增加

五、查看表结构

六、 修改数据表

1、修改表名

2、修改字段的数据类型

3、修改字段名

4、添加字段

(1)、 添加无完整性约束条件的字段

(2)、添加有完整性约束条件的字段

(3)、在表的第一列添加一个字段

(4)、在表的指定列之后添加一个字段

5、删除字段

6、修改字段的排列位置

 (1)、修改字段为表的第一个字段

(2)、 修改字段到表的指定列之后

7、更改表的存储引擎

8、删除表的外键约束

七、删除数据表 

1、删除没有被关联的表

2、删除被其他表关联的主表


一、创建数据表

        创建好数据库之后,接下来就是创建数据表,所谓创建数据表就是在数据库中新建行列式表格。 创建数据表的过程也是规定数据列属性的过程,也是实施数据完整性的约束过程。

1、切换数据库

        注意:创建表之前,要用USE dbname 先切换到指定数据库中。

USE test;

 蓝色为数据库名

 

2、创建数据表

create table 表名
(
字段名1 数据类型[列级约束条件] 默认值,
字段名2 数据类型[列级约束条件] 默认值,
......
[表级约束条件]
);

行与行间用  ,  隔开最后一行不用  ,

 eg:

create table tb_emp1

(
id INT(11),
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);

 

语句执行后,便创建了一个名称为tb_emp1的数据表 

 3、查看数据表

使用SHOW TABLES;语句查看数据表是否创建成功,

SQL语句如下:

show tables;

 二、主键

        主键,又称主码,是表中一列或多列的组合。

        主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一地标识表中的一条记录,可以结合外 键来定义 不同数据表之间的关系,并且可以加快数据库查询的速度。 主键和记录之间的关系如同身份证和人之间的关系,它们之间是一一对应的。

        主键分为两种类型:单字段主键和多字段联合主键。

1、单字段主键

(1)在定义列的同时指定主键

字段名 数据类型 PRIMARY KEY [默认值]

比如:定义数据表tb_emp2,其主键为id,SQL语句如下:

create table tb_emp2
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);

(2)在定义完所有列之后指定主键

[CONSTRAINT 约束名] PRIMARY KEY (字段名)

 比如:定义数据表tb_emp 3,其主键为id,SQL语句如下:

create table tb_emp3

(
id INT(11),
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
PRIMARY KEY(id)
);

 

2、多字段联合主键

主键由多个字段联合组成

语法规则如下:

PRTMARY KEY (字段1,字段2...字段n)

        比如:定义数据表tb_emp4,假设表中间没有主键id,为了唯一确定一个 员工,可以把name、deptId联合起来做为主键,SQL语句如下:

create table tb_emp4
(
id INT(11),
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
PRIMARY KEY(name,deptId)
);

        语句执行后,便创建了一个名称为tb_emp4的数据表name段和deptld段组合在一起成为tb_emp4的多字段联合主键。 

三、外键

        外键用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可 以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值, 则每一个外键值必须等于另一个表中主键的某个值。

        外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键

        主要作用:是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。

        主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。

        从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个 表即是从表。

         创建外键的语法规则如下:

CONSTRAINE 外键名 FOREIGN KEY (字段名)[,字段名2,...] REPERENCES 主键列1 [,主键列2,...]

 蓝色可替换

        比如:首先创建一个部门表tb_dept1,SQL语句如下:

create table tb_dept1
(
id INT(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
location VARCHAR(50)
);

        然后定义数据表tb_emp5,并在tb_emp5表上创建外键约束。 让它的键deptId作为外键关联到tb_dept1的主键id,SQL语句为:

create table tb_emp5
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES
tb_dept1(id)
);

        以上语句执行成功之后,在表tb_emp5上添加了名称为fk_emp_dept1的外键约束,外键名称为deptId,其依赖于表tb_dept1的主键id

        关联指的是在关系型数据库中相关表之间的联系。它是通过相容或相同的属性或属性组来表示的。子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果类型不一样,则创建子表时,就会出现错误:

“ERROR 1005(HY00):Can't create table database. tablename'(errno:150)”

 四、其他约束

1、非空约束

        非空约束(Not Null Constraint) 指字段的值不能为空,对于使用了非空约束的字段, 如果用户在添加数据时没有指定值,数据库系统会报错。语法规则如下:

字段名 数据类型 not null

 比如:定义数据表tb_emp6,指定员工的名称不能为空,SQL语句如下:

CREATE TABLE tb_emp6
(
id INT(11) PRIMARY KEY,
name VARCHAR(25) NOT NULL,
deptId INT(11),
salary FLOAT
);

执行后,在tb_emp6中创建了一个Name字段,其插入值不能为空 (NOTNULL)。

 插入语句

insert into tb_rmp6(id) values(1);

tb_rmp6 为表名

(id)为指定字段

values() 为输入值

 

 

查看数据表内容  

SELECT * FROM tb_emp6;

tb_emp6为需要查看的数据表 

2、唯一性约束

        唯一性约束(Unique Constraint)要求该列唯一,允许为空,但只能出现 一个空值。

        唯一约束可以确保一列或者几列不出现重复值。

        唯一性约束的语法规则如下:

(1)在定义完列之后直接指定唯一约束

        语法规则如下:

字段名 数据类型 UNIQUE;

 比如: 定义数据表tb_dept2,指定部门的名称唯一,SQL语句如下

CREATE TABLE tb_dept2
(
id INT(11) PRIMARY KEY,
name VARCHAR(22) UNIQUE,
location VARCHAR(50)
);

(2)在定义完所有列之后指定唯一约束

        语法规则如下:

[CONSTRAINT ] UNIQUE ()

 比如: 定义数据表tb_dept3,指定部门的名称唯一,SQL语句如下:

CREATE TABLE tb_dept3
(
id INT(11) PRIMARY KEY,
name VARCHAR(22),
location VARCHAR(50),
UNIQUE(name)
);

 

注意:UNIQUE和PRIMARYKEY的区别

        一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARYKEY声明,声明为PRIMAYKEY的列不允许有空值,但是声明为UNIOUE的字段允许空值(NULL)。 

3、默认约束

        默认约束(Default Constraint)指定某列的默认值。如男性同学较多,性别就可以默认’男' 如果插入一条新的记录时没有为这个字段赋值,那么系统会自动为这个字段赋值'男'

        默认约束的语法规则如下

 字段名 数据类型 DEFAULT 默认值

 比如:定义数据表tb_emp7,指定员工的部门编号默认为1111,SQL语句 如下:

CREATE TABLE tb_emp7
(
id INT(11),
name VARCHAR(25),
deptId INT(11) DEFAULT 1111,
salary FLOAT
);

 

4、表的属性值自动增加

        在数据库应用中,经常希望在每次插入新记录时,系统自动生成字段的主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现默认的,在MySOL中AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加 1。

        一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。 AUTO INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLIN、 INT、BIGINT等)。 设置表的属性值自动增加的语法规则如下:

字段名 数据类型 AUTO_INCREMENT 

 比如:定义数据表tb_emp8,指定员工的编号自动递增,SQL语句如下:

CREATE TABLE tb_emp8
(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);

 

        注意:这里使用INSERT声明向表中插入记录的方法,并不是 SQL 的标准语法, 这种语法不一定被其他的数据库支持,只能在MySQL中使用。

五、查看表结构

        使用SQL语句创建好数据表之后,可以查看表结构的定义,以确认表的定义是否正确。 在MySQL中,查看表结构可以使用 DESCRIBE 和 SHOW CREATE TABLE 语句。

        DESCRIBE/DESC语句可以查看表的字段信息, 其中包括:字段名、字段数据类型、是否为主键、是否有默认值等

        语法规则如下

DESCRIBE 表名;

或者简写为:

DESC 表名;

 

 

 各个字段含义:

NULL:表示该列是否可以存储NULL值

Key: 表示该列是否已编制索引

PRI 表示该列是表主键的一部分

UNI 表示该列是UNIQUE索引的一部分

MUL 表示在列中某个给定值允许出现多次

Default:表示该列是否有默认值,如果有的话值是多少

Extra:表示可以获取的与给定列有关的附加信息,例如 AUTO_INCREMENT 等

查看表详细结构语句

SHOW CREATE TABLE 语句可以用来显示创建表时的CREATE TABLE

语法格式如下:

show create table 表名 \G;

        使用SHOW CREATE TABLE 语句,不仅可以查看表创建时候的详细语句, 而且还可以查看存储引擎和字符编码。如果不加 \G参数,显示的结果可能非常混乱,加上参数'\G’之后,可使显示结果更加直观,易于查看

比如:使用SHOW CREATE TABLE查看表tb_emp的详细信息,SQL语句如下:

使用参数’\G’之后的结果如下: 

 

六、 修改数据表

        修改表指的是修改数据库中已经存在的数据表的结构,MySQL使用ALTER TABLE语句修改表。

        常用的修改表的操作有:修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等。

1、修改表名

MySQL是通过ALTER TABLE语来实现表名的修改的,具体的语法规则如下

alter table 旧表名 rename [to] 新表名;

 其中TO为可选参数,使用与否均不影响结果。

比如:将数据表tb_emp8改名为tb_emp10。

使用ALTER TABLE将表tb_emp8改名为tb_emp10,SQL语句如下:

ALTER TABLE tb_emp8 RENAME tb_emp10;

        在修改表名称时使用DESC命令查看修改前后两个表的结构,修改表名并不修改表的结构, 因此修改名称后的表和修改名称前的表的结构必然是相同的 

2、修改字段的数据类型

        就是把字段的数据类型转换成另一种数据类型。

在MySQL中修改字段数据类型的语法规则如下:

alter table 表名 modify 字段名 数据类型;

        其中“表名”指要修改数据类型的字段所在表的名称,“字段名”指需要修改的字段“数据类型”指修改后字段的新数据类型。

比如:将数据表tb_dept1中name字段的数据类型由VARCHAR(22)修改成 VARCHAR(30)。

 执行修改表名操作之前,使用DESC查看tb_dept表结构,结果如下:

 可以看到现在name字段的数据类型为VARCHAR(22),下面修改其类型。

3、修改字段名

        MySOL中修改表字段名的语法规则如下:

alter table 表名 change 旧字段名 新字段名 新数据类型;

“旧字段名”指修改前的字段名

“新字段名”指修改后的字段名;

“新数据类型”指修改后的数据类型,如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样即可,但数据类型不能为空。

比如:将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变

        CHANGE 也可以只修改数据类型,实现和MODIFY同样的效果,方法是将SQL语句中的“新字段名”和“旧字段名”设置为相同的名称,只改变“数据类型”。

        由于不同类型的数据在机器中存储的方式及长度并不相同,修改数据类型可能会影响到数据表中已有的数据记录。因此,当数据库表中已经有数据时,不要轻易修改数据类型。

4、添加字段

        随着业务需求的变化,可能需要在已经存在的表中添加新的字段。 一个完整字段包括字段名、数据类型、完整性约束。

添加字段的语法格式如下:

 alter table 表名 add 新字段名 数据类型 约束条件 first(after) 已存在字段;

 其中红蓝颜色为可选参数

新字段名为需要添加的字段的名称

“FIRST”为可选参数,其作用是将新添加的字段设置为表的第一个字段

“AFTER”为可选参数,其作用是将新添加的字段添加到指定的 “已存在字段名”的后面

(1)、 添加无完整性约束条件的字段

        比如:在数据表tb_dept1中添加一个没有完整性约束的INT类型的字段 managerId(部门经理编号),SQL语句如下:

alter table tb_dept1 add managerId int(10);

 

(2)、添加有完整性约束条件的字段

        比如:在数据表tb_dept1中添加一个不能为空的VARCHAR(12)类型的字段 column1, SQL语句如下:

alter table tb_dept1 add column1 varchar(12) not null;

 

(3)、在表的第一列添加一个字段

比如:在数据表tb_dept1中添加一个INT类型的字段column2,SQL语句如下:

alter table tb_dept1 add column2 int(11) first;

(4)、在表的指定列之后添加一个字段

比如:在数据表tb_dept1中name列后添加一个INT类型的字段column3, SQL语句如下:

alter table tb_dept1 add column3 int(11) after name;

5、删除字段

删除字段是将数据表中的某个字段从表中移除,语法格式如下:

alter table 表名 drop 字段名;

 比如:删除数据表tb_dept1表中的column2字段。

删除column2字段,SQL语句如下:

alter table tb_dept1?drop column2;

6、修改字段的排列位置

        对于一个数据表来说,在创建的时候,字段在表中的排列顺序就已经确定 了。 但表的结构并不是完全不可以改变的,可以通过 ALTER TABLE 来改变表 中字段的相对位置。

语法格式如下:

alter table 表名 modify 字段1 数据类型 first/after 字段2;

 “数据类型”指“字段1”的数据类型,

“FIRST”为“字段1”指要修改位置的字段,指将“字段1”修改为表的第一个字段,

“AFTER 字段2”指将“字段1”插入 到“字段2”后面。

 (1)、修改字段为表的第一个字段

 比如:将数据表tb_dept中的column1字段修改为表的第一个字段,SQL语句如下:

alter table tb_dept1 modify column1 varchar(12) first;

(2)、 修改字段到表的指定列之后

 比如:将数据表tb_dept1中的column1字段插入到loc字段后面,SQL 语句如下:

alter table tb_dept1 modify column1 varchar(12) after location;

7、更改表的存储引擎

        通过前面章节的学习,知道存储引擎是 MySQL中的数据存储在文件或者内存中时采用的不同技术实现。可以根据自己的需要,选择不同的引擎,甚至可以为每 一张表选择不同的存储引擎。

        MySOL中主要存储引擎有:MyISAM、InnoDB、 MEMORY(HEAP)BDBFEDERATED等。 

 可以使用 SHOW ENGINES语查看系统支持的存储引擎。

show engines;

        查看表当前储存引擎

 show create table 表名 \G;

         更改表的存储引擎的语法格式如下:

alter table  表名 engine = 更改后的存储引擎名;

 比如:将数据表aaaa的存储引擎修改为MyISAM。

8、删除表的外键约束

        对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系.

MySQL中删除外键的语法格式如下:

alter table 表名 drop foreign key 外键约束名;

 “外键约束名”指在定义表时 constraint 关键字后面的参数。 比如:

 删除数据表tb_emp9中的外键约束。 首先创建表tb_emp9,创建外键deptId关联tb_dept1表的主键id,SQL语句 如下:

CREATE TABLE tb_emp9
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES
tb_dept1(id)
);

使用SHOW CREATE TABLE tb_emp9 \G;查看表tb_emp9的结构,结果如下: 

 可以看到,已经成功添加了表的外键,下面删除外键约束,SQL语句如下:

 alter table tb_emp9 drop foreign key fk_emp_dept;

执行完毕之后,将删除表tb_emp的外键约束, 使用SHOW CREATE TABLE再次查看表tb_emp9结构,结果如下:

可以看到,tb_emp9中已经不存在FOREIGN KEY, 原有的名称为emp_dept的外键约束删除成功。 

七、删除数据表 

        删除数据表就是将数据库中已经存在的表从数据库中删除。注意,在删除表的同时,表的定义和表中所有的数据均会被删除。因此,在进行删除操作前,最好对表中的数据做个备份,以免造成无法挽回的后果。

1、删除没有被关联的表

 在MySQL中使用DROP TABLE可以一次删除一个或多个没有被其他表关联的数据表

语法格式如下: 

 drop table if exists 表1,表2,...表n;

        其中“表n”指要删除的表的名称,后面可以同时删除多个表,只需将要删除的表名依次写在后面, 相互之间用逗号隔开即可。

        如果要删除的数据表不存在,则MySQL会提示 一条错误信 “ERROR 1051(42S02):Unknown table 表名”。

        参数“IFEXISTS”用于在删除前判断删除的表是否存在,加上该参数后,再删除表的时候,如果表不存在,SQL 语句可以顺利执行,但是会发出警告(warning)。

2、删除被其他表关联的主表

        数据表之间存在外键关联的情况下,如果直接删除父表,结果会显示失败。原因是直接删除, 将破坏表的参照完整性。如果必须要删除,可以先删除与它关联的子表,再删除父表,只是这样同时删除了两个表中的数据。

        但有的情况下可能要保留子表,这 时如要单独删除父表, 只需将关联的表的外键约束条件取消,然后就可以删除父表。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值