详解:
一、 创建数据库表
创建数据库表得先创建或者选择数据库,这样表就包含在当前数据库内,方便后续管理。注意:不要重复创建和选择同一数据库,不然会报错!
1. 创建表的语法形式
语法结构:create
table 表名(字段名1,数据类型 列级别约束条件 默认值,字段名2,数据类型 列级别约束条件 默认值,…表级别约束条件);
案例:创建数据库db_demo1,在数据库中创建表tb_emploee,表中包含字段:id,name,departmentID,salary。
命令语句:
查看当前所有数据库show databases;
创建数据库:create database db_demo1;
选择数据库:use db_demo1;
创建包含字段表:create table tb_employee(id int(11),name varchar(25),departmentIdint(11),salary float);
2. 查看数据库表
语法结构:use 数据库名;
show tables;
案例:查看数据库db_demp1下所有表,SQL语句及运行结果如下:
命令语句:use db_demo1;
show tables;
执行结果:
看到在数据库db_demo1下有一张表tb_employee,注意如果没有选择数据库db_demo1,直接输入show tables;是会报错的,因为数据库不知道你要查看哪个数据库中的表。如下图:
3. 定义主键约束
主键是唯一能够表示一条记录的字段,他们之间是一一对应的关系,就像身份证号码和人之间的关系一样,通过主键可以定义不同数据表之间的关系。主键分为两种类型:单字段主键和多字段联合主键。
(1) 单字段主键
·同时定义单字段主键
语法结构:create table 表名(字段名,数据类型 列级别约束条件 默认值 primary key,…);
案例:定义数据表tb_employee2,主键为id,SQL语句如下:
命令语句:create table tb_employee2(id int(11) primary key,name varchar (25),departmentId int(11),salary float);
执行结果:
·最后定义单字段主键
语法结构:create table 表名(字段名,数据类型 列级别约束条件 默认值,…primary
key (字段名));
案例:定义数据表tb_employee3,主键为id,SQL语句如下:
命令语句:create table tb_employee3(id int(11),name varchar(25),departmentId int(11),salary float,primary key(id));
执行结果:
(2) 多字段联合主键
语法结构:create table 表名(字段名,数据类型 列级别约束条件 默认值,…primary
key (字段1,字段2,…,字段n));
案例:定义数据表tb_employee4,联合主键为name,department,SQL语句如下:
命令语句:create table tb_employee4(name varchar(25),departmentId int(11),salary float,primary key(name,departmentId));
执行结果:
4. 定义外键约束
外键是表中的一个字段,它不是本表的主键,但对应另外一个表的主键,一个表可以有一个或多个外键,多个外键字段名称不能相同。外键用来在两个表之间建立连接,它可以是一列或多列。
外键对应的是参照完整性,一个表的外键可以是空值,如果不为空值,怎每一个外键值必须等于另一个表中主键的某个值。
语法结构:create table 子表名(字段名,数据类型 列级别约束条件 默认值primary key,…constraint 外键约束名称 foreign key(字段) references 父表名(主键字段));
先创建部门表tb_department1:
命令语句:create table tb_department1(id int(11) primary key,name varchar(22) not null,location varchar(50));
案例:定义数据表tb_employee5,让它的键departmentId作为外键连接到tb_department1表的主键id,使用SQL语句如下:
命令语句:create table tb_employee5(id int(11) primary key,name varchar(25),departmentId int(11),salary float,constraint fk_employee_department1 foreign key(departmentId) references tb_department1(id));
执行结果:
5. 定义非空约束
非空约束是指字段的值不能为空,对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据系统会报错。
语法结构:create table 表名(字段1 数据类型 默认值 primary key,字段2 数据类型 默认值 not null,…);
案例:定义数据表tb_employee6,指定员工的名称不能为空,使用的SQL语句如下:
命令语句:create table tb_employee6(id int(11) primary key,name varchar(25) not null,departmentId int(11),salary float);
执行结果如下:
6. 定义唯一性约束
唯一性要求该列唯一,允许为空,但只能出现一个空值,唯一性能确保一列或几列值不重复。
(1) 在定义玩列后直接定义唯一约束,语法如下:
语法结构:create table 表名(字段1 数据类型 默认值 primary key,字段2 数据类型 默认值 unique,…);
案例:定义数据表tb_department2,指定部门的名称唯一,SQL语句如下:
命令语句:create table tb_department2(id int(11) primary key,name varchar(22) unique,location varchar(50));
执行结果如下:
(2) 在定义完所有列之后指定唯一约束,语法规则如下:
语法结构:create table 表名(字段1 数据类型 默认值 primary key,字段2 数据类型默认值 ,…,constraint sth unique(字段1,字段2,…));
案例:定义数据表tb_department3,指定部门的名称唯一,使用的SQL语句如下:
命令语句:create table tb_department3(id int(11) primary key,name varchar(22),location varchar(50),constraint sth unique(name));
执行结果如下:
7. 定义默认值约束
默认约束可以指定某列的默认值,如果男性同学较多,性别就可以默认为“男”,不赋值情况下,会自动默认性别为“男”。语法规则如下:
语法结构:create table 表名(字段1 数据类型 默认值 primary key,字段2 数据类型 default 默认值 ,…);
案例:定义数据表tb_employee7,指定员工部门编号默认为1111,使用的SQL语句如下:
命令语句:create table tb_employee7(id int(11) primary key,name varchar(25) not null,departmentId int(11) default 1111,salary float);
执行结果如下:
8. 定义表属性值的自动增加
在数据库应用中,经常希望在每次插入新纪录时,系统会自动生成字段的主键值,这可以通过为主键添加AUTO_INCREMENT关键字来实现。MySQL中它的初始值默认为1。注意,一个表只能有一个一个字段使用自增约束,且该字段为主键的一部分。它可以是任意的整数类型(tinyint,smallint,int,bigint等)。
语法结构:create table 表名(字段1 数据类型 默认值 primary key auto_increment,字段2 数据类型 默认值 ,…);
案例:定义数据表tb_employee8,指定员工编号自动递增,使用的SQL语句如下:
命令语句:create table tb_employee8(id int(11) primary key auto_increment,name varchar(25) not null,departmentId int(11),salary float);
执行结果如下:
二、 查看数据表结构
1. 查看表的基本结构
用describe/desc查看字段信息,其中包括字段名,字段数据类型,是否为主键、是否有默认值等。
语法结构:describe表名; 或者 desc 表名;
案例:用describe/desc语句查看表tb_employee1和tb_department3的结构,使用的SQL语句如下:
命令语句:describe tb_employee;
desc tb_department3;
执行结果如下:
2. 查看表的详细结构
语法结构:show create table 表名\G;
注意:如果不加\G也可以执行,显示结果可能非常混乱,加上\G之后,可以显示的更加直观,更易于查看。
案例:查看tb_employee2的详细信息。
命令语句:show create table tb_employee2\G;
执行结果如下: