数据表是数据库存储的基本单位,被定义为列的集合。数据在表中按照行和列的格式存储,每一行代表一条唯一的记录,每一列代表记录的一个域。
(1).创建表的语法形式
数据表属于数据库,使用前通过:"
USE<数据库名>
"指定操作在哪个数据库中,如果没有选择数据库,会抛出"No database selected"错误。
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创建表时,必须指定以下信息:
(2).使用主键约束
主键又称主码,是表中一列或多列的组合。主键约束要求主键列的数据唯一且不为空。
主键与记录之间是一一对应的,能够加快数据库查询速度。
主键分为单字段主键和多字段联合主键。
单字段主键
主键由一个字段组成,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_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).使用非空约束
非空约束:指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
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). 使用唯一性约束
唯一性约束要求该列唯一,允许为空,但只能出现一个空。
唯一约束可以确保一列或者几列不出现重复值。
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的区别:
(6). 使用默认约束
默认约束指定某列的默认值。
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)
注意: