MySQL---创建数据表

1.创建表的语法形式
2.使用主键约束
3.使用外键约束
4.使用非空约束
5.使用唯一性约束
6.使用默认约束
7.设置表的属性值自动增加

数据表是数据库存储的基本单位,被定义为列的集合。数据在表中按照行和列的格式存储,每一行代表一条唯一的记录,每一列代表记录的一个域。


(1).创建表的语法形式

数据表属于数据库,使用前通过:"USE<数据库名>"指定操作在哪个数据库中,如果没有选择数据库,会抛出"No database selected"错误。

【例】:创建员工(employee)表tb_emp1,表结构如下:

MySQL---创建数据表_第1张图片
第一步:创建数据库,SQL语句如下:

create database test_db;

第二步:选择数据库,SQL语句如下:

 use test_db;

第三步:创建tb_emp1表,SQL语句如下:

mysql> create table tb_emp1
    -> (
    -> id       int(11),
    -> name     varchar(25),
    -> deptID   int(11),
    -> salary   float
    -> );

执行后,创建了一个名为tb_emp1的数据表,使用show tables;语句查看数据表是否创建成功,SQL语句如下:

mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_emp1           |
+-------------------+
1 row in set (0.04 sec)

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

  • 1.要创建的表名,不区分大小写,不能用SQL语言的关键字,如drop,alter,insert等。
  • 2.给出每一个列(字段)的名称和数据类型,如果创建多个列,使用逗号隔开。

(2).使用主键约束

主键又称主码,是表中一列或多列的组合。主键约束要求主键列的数据唯一且不为空。
主键与记录之间是一一对应的,能够加快数据库查询速度。
主键分为单字段主键和多字段联合主键。

单字段主键
主键由一个字段组成,SQL语句格式分为以下两种情况。
方法一.在定义列的同时指定主键:

【例】定义数据表temp_emp2,其主键为id,SQL语句如下:
mysql> create table tb_emp2
    -> (
    -> id int(11) primary key,
    -> name varchar(25),
    -> deptID int(11),
    -> salary float
    -> );
执行后:
Query OK, 0 rows affected (0.16 sec)

方法二:定义完所有列之后指定主键
【例】定义数据表temp_emp3,其主键为id,SQL语句如下:

mysql> create table tb_emp3
    -> (
    -> id int(11),
    -> name varchar(25),
    -> deptID int(11),
    -> salary float,
    -> primary key(id)
    -> );
执行后:
Query OK, 0 rows affected (0.12 sec)

多字段联合主键:
主键由多个字段联合组成。
【例】定义tb_emp4,假设表中没有主键id,为了唯一确定一个员工,可以把name,deptID联合起来作为主键,SQL语句如下:

mysql> create table tb_emp4
    -> (
    -> name varchar(25),
    -> deptID int(11),
    -> salary float,
    -> primary key(name,deptID)
    -> );
执行后:
Query OK, 0 rows affected (0.13 sec)

(3).使用外键约束

1.外键用来在两个表的数据之间建立连接,可以是一列或者多列,一个表可以有一个或多个外键。
2.一个表的外键可以是空值,若不为空,则每一个外键值必须等于另一个表中主键的某个值。
3.外键首先是表中的一个字段,可以不是本表的主键,但要对应另外一个表的主键。
4.外键主要作用:保证数据引用的完整性,定义外键后, 不允许删除在另一个表中具有关联关系的行。(外键作用是保证数据一致性和完整性)

【例】定义数据表tb_emp5,并在其上创建外键约束。

第一步:创建一个部门表tb_dept1.(主表)

mysql>  create table tb_dept1
    -> (
    -> id int(11) primary key,
    -> name varchar(22) not null,
    -> location varchar(50)
    -> );
执行后:
Query OK, 0 rows affected (0.13 sec)

第二步:定义员工表tb_emp5,让它的键deptID作为外键关联到tb_dept1的主键id,SQL语句为:(从表)

mysql> 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)
    -> );
执行后:
Query OK, 0 rows affected (0.16 sec)

constraint fk_emp_dept1 --------外键名,外键约束的名称,一个表中不能有相同名称的外键;
foreign key (deptID)-------字段名,子表需要添加外键约束的字段列;
references tb_dept1(id)------主表名(主键列)

其他注意:

  • 关联指的是在关系型数据库中,关联表之间的联系。它是通过相容或相同的属性或属性组来表示的。
  • 子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果关系不一样,报:"ERROR 1005 (HY000):Can'tcreate table'database.tablename'(errno:150)"

(4).使用非空约束

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

【例】定义数据表tb_emp6,指定员工的名称不能为空,SQL语句如下:
mysql> create table tb_emp6
    -> (
    -> id int(11) primary key,
    -> name varchar(25) not null,
    -> deptID int(11),
    -> salary float
    -> );
执行后:
Query OK, 0 rows affected (0.11 sec)

(5). 使用唯一性约束

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

【方法一】定义temp_dept2,指定部门的名称唯一,SQL语句如下:
```sql mysql> create table tb_dept2 -> ( -> id int(11) primary key, -> name varchar(22) unique, -> location varchar(50) -> ); 执行后: Query OK, 0 rows affected (0.11 sec) ``` 【方法二】定义完所有列之后指定唯一约束,SQL语句如下:
constraint <约束名> unique(name)
mysql> create table tb_dept3
    -> (
    -> id int(11) primary key,
    -> name varchar(22),
    -> location varchar(50),
    -> constraint sth unique(name)
    -> );
执行后:
Query OK, 0 rows affected (0.11 sec)

unique与primary key的区别:

  • 一个表中可以有多个字段声明为unique,但只能有一个primary key声明。
  • 声明为primary key的列不允许有空值,声明为unqique的字段允许空值。

(6). 使用默认约束

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

【例】定义数据表tb_emp7,指定员工的部门编号默认为1111,SQL语句如下:
mysql> create table tb_emp7
    -> (
    -> id int(11) primary key,
    -> name varchar(25) not null,
    -> deptID int(11) default 1111,
    -> salary float
    -> );
执行后:
Query OK, 0 rows affected (0.08 sec)

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

默认的,在MySQL中auto_increment的初始值是1,每新增一条记录,字段值自动加1。
一个表只能有一个字段使用auto_increment约束,且该字段必须为主键的一部分。
auto_increment约束的字段可以是任何的整数类型。

mysql> create table tb_emp8
    -> (
    -> id int(11) primary key auto_increment,
    -> name varchar(25) not null,
    -> deptID int(11),
    -> salary float
    -> );
Query OK, 0 rows affected (0.11 sec)

上述例子执行后,表tb_emp8中的id字段的值在添加记录时会自动增加,插入记录时,默认自增字段id的值从1开始,每次添加一条新纪录,并自动加1,如下所示:

mysql> insert into tb_emp8 (name,salary)
    -> values('lucy',1000),('Lura',1200),('kevin',1500);
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> select * from tb_emp8;
+----+-------+--------+--------+
| id | name  | deptID | salary |
+----+-------+--------+--------+
|  1 | lucy  |   NULL |   1000 |
|  2 | Lura  |   NULL |   1200 |
|  3 | kevin |   NULL |   1500 |
+----+-------+--------+--------+
3 rows in set (0.06 sec)

注意:

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

你可能感兴趣的:(【随便写写】)