[置顶] MySQL数据表的基本操作一:创建表与表约束

时间:2021-02-23 14:08:38


1 创建数据表

在数据库创建好以后,接下来的工作就是创建数据表。所谓创建数据表,指的是在已经创建好的数据库中建立新表。

创建数据表之前,应当使用语句 "USE <数据库名>“指定操作是在哪个数据库中进行。

1 .1 创建表的语法

CREATE TABLE <表名>

(

字段名1 数据类型[列级别约束条件][默认值],

字段名2 数据类型[列级别约束条件][默认值],

...
[表级别约束条件]

);

1.2 说明
  • 要创建的表的名称,不区分大小写,不能使用SQL语言中的关键字。
  • 数据表中每个列的名称和数据类型,如果需要创建多个列,需要以逗号隔开。

1.3 示例

1)要创建的employees表结构说明

employees表结构
字段名称 数据类型 备注
employee_id INT(11) 员工编号
employee_name VARCHAR(25) 员工名称
department_id INT(11) 所在部门编号
salary FLOAT 工资

2)步骤

----选择/新建要创建表的数据库

mysql> create database basics;
Query OK, 1 row affected (0.02 sec)

mysql> use basics;
Database changed

----创建表的语句

mysql> create table employees
-> (
-> employee_id int(11),
-> employee_name varchar(25),
-> department_id int(11),
-> salary float
-> );
Query OK, 0 rows affected (0.16 sec)

----验证表是否创建成功

mysql> show tables;
+------------------+
| Tables_in_basics |
+------------------+
| employees |
+------------------+
1 row in set (0.00 sec)


2 使用主键约束(Pirmary Key Constraint)

主键,又称为主码,是表中一列或多列组成。主键约束要求主键列的数据唯一,并且不允许为空。主键能够唯一地标识表中的一条记录。主键分为两种类型:单列主键和复合主键。

2.1  单列主键(可以在创建表时指定,也可以在表级别约束处指定)

2.1.1 创建表时指定

2.1.1.1 语法:

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

2.1.1.2 示例: 

mysql> CREATE TABLE department
-> (
-> department_id int(11) PRIMARY KEY,
-> department_name varchar(50),
-> location varchar(200)
-> );
Query OK, 0 rows affected (0.09 sec)

2.1.2 表级别约束处指定

2.1.2.1 语法:

 [CONSTRAINT <约束名> PRIMARY KEY [字段名]

2.1.2.2 示例:

mysql> create table location
-> (
-> location_id int(11),
-> location_name varchar(200),
-> PRIMARY KEY(location_id)
-> );
Query OK, 0 rows affected (0.08 sec)

2.2 复合主键(主键由多个字段组成)

2.2.1 语法

PRIMARY KEY [字段1, 字段2,...字段n]

2.2.2 示例

mysql> create table sales
-> (
-> product_id int(11),
-> region_code varchar(10),
-> quantity int(11),
-> price float,
-> PRIMARY KEY(product_id,region_code)
-> );
Query OK, 0 rows affected (0.09 sec)

3  使用外键约束

3.1 外键说明

  • 外键用来在两个表的数据之间建立连接,它可以是一个列或者多个列。
  • 一个表可以有一个或者多个外键。
  • 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。
  • 定义外键后,不允许删除在另一个表中具有关联关系的行。
  • 主表(父表): 对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。
  • 从表(子表): 对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

3.2 创建外建的语法

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

3.3 示例--需求:创建部门表dept和员工表emp,并在员工表上创建外键

3.3.1 创建主表

mysql> CREATE TABLE dept
-> (
-> id int(11) PRIMARY KEY,
-> name varchar(22) NOT NULL,
-> location varchar(50),
-> description varchar(200)
-> );
Query OK, 0 rows affected (0.07 sec)

3.3.2 创建子表并定义外键约束

mysql> create table emp
-> (
-> id int(11) PRIMARY KEY,
-> name varchar(25),
-> dept_id int(11),
-> salary float,
-> CONSTRAINT fk_emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id)
-> );
Query OK, 0 rows affected (0.11 sec)

3.3.3  重要提示

关联指的是在关系数据库中,相关表之间的联系。它是通过相同或者相容的属性或属性组来表示的。子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配。



4 使用非空约束(Not NULL Constraint)

4.1 说明

非空约束指字段的值不能为空。

4.2 语法

字段名 数据类型 NOT NULL

4.3 示例--定义数据表emp1,指定员工的名称不能为空

mysql> create table emp1
-> (
-> id int(11) primary key,
-> name varchar(25) NOT NULL,
-> deptid int(11)
-> );
Query OK, 0 rows affected (0.07 sec)


5 使用唯一性约束(Unique Constraint)

5.1 说明

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

5.2 列级别定义唯一性约束

语法:

字段名 数据类型 UNIQUE

示例:

mysql> create database dl_table;
Query OK, 1 row affected (0.00 sec)

mysql> use dl_table;
Database changed
mysql> create table department
-> (
-> id int(11) primary key,
-> name varchar(22) UNIQUE,
-> location varchar(50)
-> );
Query OK, 0 rows affected (0.07 sec)

mysql> insert into department(id,name,location) values(1,'david','wx');
Query OK, 1 row affected (0.03 sec)

mysql> insert into department(id,name,location) values(2,'david','sz');
ERROR 1062 (23000): Duplicate entry 'david' for key 'name'

5.3 表级别定义唯一性约束

语法:

[CONSTRAINT <约束名>] UNIQUE(<字段名>)

示例:

mysql> create table bm
-> (
-> id int(11) primary key,
-> name varchar(22),
-> location varchar(20),
-> CONSTRAINT STH UNIQUE(name)
-> );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into bm values(1,'xxx','x');
Query OK, 1 row affected (0.02 sec)

mysql> insert into bm values(2,'xxx','y');
ERROR 1062 (23000): Duplicate entry 'xxx' for key 'STH'

5.4 唯一约束与主键的区别

  • 一个表中可以有多个字段声明为UNIQUE,但是只能有一个主键;
  • 声明为主键的列不允许有空值,但是声明为唯一约束的字段允许空值存在;


6 使用默认约束(Default Constraint)

6.1 说明

默认约束指定某弄的默认值。

6.2 语法规则

字段名 数据类型 DEFAULT 默认值

6.3 示例

mysql> create table employees
-> (
-> id int(11) primary key,
-> name varchar(50) not null,
-> department_id int(11) default 2000,
-> salary float,
-> description varchar(300)
-> );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into employees(id,name) values(1,'david');
Query OK, 1 row affected (0.04 sec)

mysql> insert into employees(id,name) values(2,'louis');
Query OK, 1 row affected (0.04 sec)

mysql> insert into employees(id,name) values(3,'tian');
Query OK, 1 row affected (0.04 sec)

mysql> select * from employees;
+----+-------+---------------+--------+-------------+
| id | name | department_id | salary | description |
+----+-------+---------------+--------+-------------+
| 1 | david | 2000 | NULL | NULL |
| 2 | louis | 2000 | NULL | NULL |
| 3 | tian | 2000 | NULL | NULL |
+----+-------+---------------+--------+-------------+
3 rows in set (0.00 sec)

7 设置表的属性值自动增加

7.1 说明

  • 在数据库中,经常希望在每次插入记录时,系统自动生成字段的主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现;
  • 在MySQL中,AUTO_INCREMENT的初始值是1,每新增加一条记录,字段值自动加1;
  • 一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分;
  • AUTO_INCREMENT约束的字段可是任何整数类型(TINYINT, SMALLINT, INT, BIGINT);

7.2 语法

字段名 数据类型 AUTO_INCREMENT

7.3 示例

mysql> create table product
-> (
-> product_id int(11) primary key AUTO_INCREMENT,
-> product_name varchar(50) not null,
-> description varchar(200)
-> );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into product(product_name, description) values('Mouse','PC Mouse');
Query OK, 1 row affected (0.04 sec)

mysql> insert into product(product_name, description) values('Pen','e-Pen');
Query OK, 1 row affected (0.04 sec)

mysql> insert into product(product_name, description) values('iPhone6 Plus','Apple');
Query OK, 1 row affected (0.03 sec)

mysql> select * from product;
+------------+--------------+-------------+
| product_id | product_name | description |
+------------+--------------+-------------+
| 1 | Mouse | PC Mouse |
| 2 | Pen | e-Pen |
| 3 | iPhone6 Plus | Apple |
+------------+--------------+-------------+
3 rows in set (0.00 sec)



如果您们在尝试的过程中遇到什么问题或者我的代码有错误的地方,请给予指正,非常感谢!

联系方式:david.louis.tian@outlook.com

版权@:转载请标明出处!