您现在的位置是:首页 > 数据库 > MySQLMySQL

数据表的基本操作

第十三双眼睛2019-05-18【MySQL】人已围观

简介创建数据表
在创建完数据库之后,接下来的工作就是创建数据表,所谓创建数据表,就是在已经创建好的数据库中,建立新表,创建数据表就是确定数据列和数据列属性的过程,同时也是实施数

创建数据表
在创建完数据库之后,接下来的工作就是创建数据表,所谓创建数据表,就是在已经创建好的数据库中,建立新表,创建数据表就是确定数据列和数据列属性的过程,同时也是实施数据完整性约束的过程,
创建表之前,应该使用use databasename 语句来选择表要创建在哪个数据库下面,如果没有选择数据库,就会抛出no databases selected的错误,创建数据表的语法如下:
CREATE TABLE (
         字段名1,数据类型[列级别约束条件]       [默认值],
         字段名2,数据类型[列级别约束条件]       [默认值],

           字段名3,数据类型[列级别约束条件]       [默认值],
         字段名4,数据类型[列级别约束条件]       [默认值],
         .......
         [表级别约束条件]
);
使用CREATE TABLE创建表时,必须指定以下信息,
1要创建表的名称,不区分大小写,不能使用SQL语言中的关键字,如DROP ALTER等
2数据表中的每个列的名称和数据类型,如果要创建多列,要用逗号隔开。
例如
CREATE TABLE tb_emp1(
         id int (11),
         name varchar(25),
         dept_id int(11),
         salary float()
);
执行上面的语句,就会在数据库中建立一个名称为tb_emp1的表,使用show tables就可以查看表是否创建成功

使用主键约束
主键又称主码,可以为一列,也可以为多列,要求主键列的数据唯一,整个数据表中不能由重复,并且不能为空,主键和数据之间的关系如同身份证和人之间的关系,它们之间是一一对应的。主键分为单字段主键和多字段联合主键
单字段
单字段主键由一个字段组成,定义的方法有如下两种
1在定义列的同时指定主键,如以下:
id int (11) primary key,
......
2在定义完所有列后,在最后指定,如下:
id int (11),
......
primary key(id)
上面的两种定义主键的方式作用都是一样的
多字段联合主键
多字段联合主键由多个字段构成,具体的语法规则如下:
primary key [字段1,字段2,字段3,字段...],例如:
CRETAE TABLE tb_emp(
        id int (11),
        name varchar(12),
        dept_id int (11),
        primary key(id,dept_id)
)
执行上述语句后,建立了一张名为tb_emp的表,其中,id和dept_id作为联合主键,保证数据不重复
使用外键约束
外键用来在两个表之间的数据建立连接关系,它可以是一列或者多列,一个表可以有一个或者多个外键,外键对应的是参照完整性,一个表的外键可以为空值,如果不为控制,则必须为另一个表的主键。
外键:首先是表中的一个字段,它可以不是本表的主键,但是一定要对应另外一张表的主键,外键的作用主要是保证数据的参照完整性,定义了外键后,不允许删除参照的数据行
主表:也叫父表,关联字段中,主键所在的表,叫做主表
从表:也叫子表,关联字段中,外键所在的表,叫做从表
定义外键语法:
和定义主键一样,在定义完字段后,用语句CONSTRAINT fk_emp_deptid  foreign key(dept_id) REFERENCES tb_dept(dept_id)
执行完上述语句后,就在创建的表中定义了一个外键,它的名字叫fk_emp_deptid ,字段名是dept_id,参考表tb_dept中的字段dept_id
关联指的是在关系型数据库中,相关表之间的联系,它是通过相容或者相同的属性来表示的,子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果数据类型不一致,就会报错。
非空约束
非空约束指的是字段的值不能为空,对于使用了非空约束的字段,如果在添加数据的时候,没有给该字段指定值,会报错。非空约束的语法规则如下:
字段名  数据类型 not null
CREATE TABLE emp(
         id int (11),
         name varchar(20) not null
)
执行上述语句,就会创建一张名为emp的表,其中,name属性不能为空,在插入一条数据的时候,必须给整个字段赋值
唯一性约束
唯一性约束要求该列唯一,允许为空,所以,在整个数据表中,只能由一个空值,定义唯一约束的语法如下:
1字段名 字段类型 unique
CREATE TABLE tb_dept(
         id int (11),
         name varchar(20) unique
)
执行上述语句后,就定义了一张表tb_dept,其中,name字段是唯一的,也就是不能重复的。
2也可以在定义完所有的字段后,在最后指定哪些字段是唯一的
CONSTRAINT STH UNIQUE(name)
其中,STH是约束名,name是受唯一约束的字段
唯一约束和主键的区别:一个表中可以有多个字段被声明为UNIQUE,但是只能有一个字段为主键,声明为主键的字段不能有空值,但是声明为唯一约束的字段可以有空值。
默认约束
默认约束指定了某个列的默认值,如一个学生表中,男生比较多,就可以将性别整个字段的默认值设置为男
默认约束的语法规则如下:字段名 数据类型  DEFAULT 默认值
CREATE TABLE EMP(
         id int (11),
         name varchar(20),
         sex varchar(2) default '男'
);
以上语句执行了以后,就在数据库中创建了一张表,名字为emp,其中,sex的属性的默认值为男
表的属性自动增加
在属性库应用中,经常希望在数据库中插入新记录时,系统自动生成主键的值,可以通过设置主键的AUTO_INCREMENT关键字来实现,默认的,在Mysql数据库中,每增加一条数据,该字段的值加一,,一个表只能有一个字段使用这个属性,且该字段必须是主键的一部分,而且,该属性修饰的 字段类型为整型。具体语法为:
字段名   数据类型   AUTO_INCREMENT
CREATE TABLE emp(
        id int (11) AUTO_INCREMENT,
        name varchar(20),
        primary key (id)
)
上述语句执行后,会在数据库中创建一张名为emp的表,其中,主键是id,而且是自动增长的。

查看数据表结构
在用SQL语句创建好表后,可以进行查看表结构的定义,以确认表的定义是否正确,可以使用DESCRIBE 和SHOW CREATE TABLES两种语句进行查看:
DESCRIBE语句可以查看表的字段信息,其中包括,字段名,字段数据类型,是否为主键,是否有默认值,语法如下:
DESCRIBE 表明;或者简写为:DESC 表明
查看表详细结构语句SHOW CREATE TABLE
用SHOW CREATE TABLE语句可以来显示创建表时的CREATE TABLE 语句,语法如下:
SHOW CREATE TABLE 表名\G;
\G的作用是使得显示结果好看一些,如果不加的化,可能使结果很混乱。

修改数据表
修改表是指修改数据库中已经存在的表的结构,常用的修改表的操作有:修改表名,修改字段的数据类型,修改字段名,增加字段,删除字段,修改字段的排列位置,更改表的存储引擎,删除表的外键约束。
修改表名
修改表的表名语法如下:
ALTER TABLE 旧表面名  RENAME 新表名;

修改字段的数据类型
修改数据的字段类型就是将数据的类型修改为另一种类型,具体规则如下:
ALTER TABLE 表名 MODIFY 字段名 数据类型;
如:ALTER TABLE tb_dept modify name varchar(30);
其中,表名指的是要修改的字段所在的表,字段名是要修改的字段名,数据类型指的是修改后的数据类型。
修改字段名
修改字段名就是将字段名由原来的名字修改为一个新的名字,具体语法如下:
ALTER TABLE 表名 CHANGE 旧字段名  新字段名 数据类型
如:ALTER TABLE tb_dept1 CHANGE location loc varchar(20);
执行完这条语句后,就将dept1表中的字段location 改为了loc
也可以只修改数据类型,只需要将新的字段名和旧的字段名一样就可以,但是,由于不同类型的数据再数据库中的存储方式和长度不同,修改数据类型可能会影响数据表中已有的数据记录,因此,当表中有数据记录时,不要轻易修改表的数据类型。

添加字段
随着业务的变化,可能需要再已经存在的表中添加新的字段,一个完整的字段应该包括字段名,数据类型,完整性约束,具体语法如下:
添加无完整性约束的字段
ALTER TABLE 表名 ADD 新字段名 数据类型 约束条件
如:ALTER TABLE tb_dept1 ADD managerId int(10);
执行上面的语句会再表tb_dept1的最后加一个名叫managerId的字段
添加有完整性约束的字段
如:ALTER TABLE tb_dept1 ADD column1 varchar(12) not null;
执行上面的语句,会再表tb_dept1的后面添加一个名叫column1的字段,类型为varchar,且不能为空
再表的第一列添加一个字段
如:ALETER TABLE tb_dept1 ADD column2 int(10) FIRST;
执行上面的语句会再表tb_dept1的第一列添加一个名为column的字段,长度为10,
再表的指定的列之后添加一个字段
如:ALTER TBALE tb_dept1 ADD column3 int (11) after name;
执行上面的语句会再表tb_dept1的name字段后面,添加一个名为column3的字段,长度为11。

删除字段
删除字段是将表中某个字段删除,具体的语法如下:
ALTER TABLE 表名 DROP 字段名
如:ALTER TABLE tb_dept1 DROP column2;
执行上面的语句后,就会将表tb_dept1中的column2字段删除

修改字段的排列位置
对于一个表来说,再创建的时候,字段再表中的顺序就已经确定了,但是表的结构并不是完全不可以改变的,可以通过ALTER关键字来修改表中字段的相对位置,语法如下:
ALTER TABLE 表名 MODIFY 字段1 数据类型 FIRST|AFTER 字段2
修改为表的第一个字段
ALTER TABLE tb_dept1 MODIFY column1 varchar(12) FIRST;
执行完上面的语句后,就会将字段column1移动到第一列,
修改为指定列之后,语法如下:
ALTER TABLE tb_dept1 MODIFY column1 varchar(12) AFTER location 
执行上面的语句后,就会将字段column1移动到location后。

更改表的存储引擎
存储引擎就是MYSQL中的数据存储再内存或者文件中时采用的技术实现,可以根据自己的需要,选择不同的存储引擎,可以为每张表选择不同的存储引擎
也可以修改数据表的存储引擎,具体语法为:
ALTER TABLE 表名 ENGINE =更改后的存储引擎名
如:ALTER TABLE tb_dept1 ENGINE=InnoDB
执行完上述的SQL语句,这个表的存储引擎就会修改为InnoDB

删除表的外键约束
对于数据表中定义的外键,如果已经不再需要,可以将其删除,具体语法如下:
ALTER TABLE 表名 DROP FOREGIEN KEY 外键名
如:ALTER TABLE tb_dept1 DROP FOREIGN KEY fk_dept_emp;
执行上述语句后,表tb_dept1中的外键就会被删除

删除数据表
删除数据表就是将数据库中已经存在的表从数据库中删除,而且,删除数据表的时候,原本再数据表中的数据也会被删除。
删除没有被关联的表
具体语法如下:
DROP TABE [IF EXISTS] 表1,表2,...
如果没有[IF EXISTS] ,当要删除的表不存在的时候,会报错,如果有[IF EXISTS] 的话,删除之前,会对要删除的表进行判断,
如:DROP TABLE IF EXISTS tb_dept1;
执行上面的语句后,数据库中就不会存在tb_dept1这张表

删除被其他表关联的表
数据表之间如果有外键关系,这时候删除的话,被失败,原因是直接删除的话会破坏数据的参照完整性,如果必须要删除,可以先删除与它关联的子表,在删除表本身,这样的话,会删除两张表中的数据,这个时候就需要将外键关系取消,然后再删除。可以先将外键关系删除,然后在删除要删除的表。语句前面已经讲过。

注意
不是每一个表都必须有主键,表可以没有主键,而且有的情况下最好不要使用主键
外键的建立不能跨存储引擎,即必须在相同的存储引擎之间建立外键
AUTO_INCREMENT属性默认是1,每增加一条数据就会加1,默认值是可以修改的。具体语句如下:
alter table 表名 auto_increment=NUMBER

 

Tags:MySQL   数据表

很赞哦! ()

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

本站推荐

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计64篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们