MYSQL数据表操作(一)

创建数据表

锚点
使用主键
使用外键
使用非空约束
使用唯一性约束
使用默认约束

链接
MYSQL数据表操作(二)

创建表的语法形式

数据表属于数据库,在创建数据表之前,使用USE <数据库名> 指定在哪一个数据库种进行,如果没有选择数据库,就会抛出"No databases selected"的错误。

CREATE TABLE <表名>(
	字段名1,数据类型[列级别约束条件][默认值],
	字段名2,数据类型[列级别约束条件][默认值],
	......
	[表级别的约束条件]
);

使用CREATE TABLE创建表时,必须指定以下信息:

  1. 表的名称,不区分大小写,不能使用SQL语言中的关键字,如DROP,ALTER,INSERT等。
  2. 数据表中每一列(字段)的名称和数据类型,如果创建多列,就要用逗号隔开。
create table tmp1(id INT(11),name VARCHAR(25),deptid INT(11),salary FLOAT);

在这里插入图片描述

使用主键

主键,是表中一列或多列的组合。主键约束要求主键列的数据唯一,并且不允许为空。主键能够唯一标识表中的一条记录,可以结合外键来定义不同数据表中的关系,并且可以加快数据库查询的速度。

  1. 单字段主键
字段名 数据类型 PRIMARY KEY [默认值]
  • 定义列的同时指定主键
create table tmp1(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptid INT(11),
salary FLOAT
);
  • 定义完所有列之后指定主键
create table tmp1(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptid INT(11),
salary FLOAT,
PERIMARY KEY(id)
);
  1. 多字段联合主键
PRIMARY KEY [字段1,字段2....字段n]

SQL语句如下:

CREATE TABLE tmp2(
	name VARCHAR(25),
	deptId INT(11),
	salary FLOAT,
	PRIMARY KEY(name,deptId)
);
使用外键约束

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

  • 外键:它不是本表的主键,但是要对应另外一个表的外键。外键的主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。外键的作用是保持数据的一致性,完整性。例如,部门表的一个主键是id,在员工表中就有一个键deptId与这个id关联。
  • 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。
  • 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

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

[CONSTRANT <外键名>]FOREIGN KEY 字段1 [,字段2...]
REFERENCES <主表名> 主键列1 [,主键列2,...]

"外键名"为定义的外键约束的名称,一个表中不能有两个相同名称的外键;"字段名"表示子表需要添加外键约束的字段列;"主表名"即被子表外键所依赖的表的名称;"主键列"表示主表中定义的主键列,或者列组合。

建立一个部门表和员工表并建立关系:

CREATE TABLE tb_tept(
	id int(11) PRIMARY KEY,
	name VARCHAR(20) NOT NULL,
	address VARCHAR(20)
);
创建外键的方式有两种
  1. 建立表时创建外键
create table tb_emp(
id INT PRIMARY KEY,
name VARCHAR(25),
deptId INT,
CONSTRAINT `fk_emp_tept` FOREIGN KEY (`deptId`) REFERENCES `testData`.`tb_tept` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
);
  1. 已存在表增加外键
drop table tb_emp;

create table tb_emp(
id INT PRIMARY KEY,
name VARCHAR(25),
deptId INT
);

ALTER TABLE tb_emp ADD CONSTRAINT `fk_emp_tept` FOREIGN KEY (`deptId`) REFERENCES `testData`.`tb_tept` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;

从8.0.17版本开始,TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT类型的显示宽度将失效,所有这里声明int类型不用在声明长度了。

另外说一下创建MySQL外键的4种约束

  1. CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。

  2. SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。

  3. NO ACTION: 当取值为NO ACTION或者RESTRICT时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。

  4. RESTRICT: 同NO ACTION。NO ACTION来源于标准SQL,在有些数据库中会延迟检查,即在修改或者删除完以后去检查从表中是否有对应的数据,如果有,拒绝操作,但是在MySQL中,外键约束都会立即检查,所以两者等价(默认为RESTRICT)。

使用非空约束

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

字段名 数据类型 NOT NULL
CREATE TABLE `tb_test` (
  `id` int NOT NULL,
  `name` varchar(25) NOT NULL,
  `deptId` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) 
使用唯一性约束

唯一性约束要求改列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。
语法如下:

  1. 在定义完所有列之后直接指定唯一约束
字段名 数据类型 UNIQUE
create table tb_test(
id INT PRIMARY KEY,
name VARCHAR(22) UNIQUE,
address VARCHAR(20)
);
  1. 在定义完所有列之后指定唯一约束,语法规则如下:
CREATE TABLE `tb_test` (
  `id` int NOT NULL,
  `name` varchar(22) DEFAULT NULL,
  `address` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
);

UNIQUE和PRIMARY KEY的区别:一个表可以有多个UNIQUE,但只能有一个PRIMARY KEY,并且其不能为空值,但UNIQUE却允许空值。

使用默认约束

默认约束指定某列的默认值。如果插入一条记录没有为这个字段赋值,那么系统会自动为这个字段赋值。
默认约束的语法规则如下:

字段名 数据类型 DEFAULT 默认值
create table tb_emp2(
id INT PRIMARY KEY,
name VARCHAR(25)NOT NULL,
deptId INT DEFAULT 101
);
insert into tb_emp2(name) values ('XIXI'),('HAHA')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值