MariaDB 表的基本操作(3)
在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位,数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的、每一行代表一条唯一的记录,每一列代表记录中的一个域.
创建数据表
在创建完数据库之后,接下来的工作就是创建数据表.所谓创建数据表,指的是在已经创建好的数据库中建立新表,创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)约束的过程,本节将介绍创建数据表的语法形式、如何添加主键约束、外键约束、非空约束等.
在创建表之前,应使用use <数据库名称>,进入一个数据库,以下是一个数据表创建的语法规则:
create table <表名>
(
字段名1,数据类型 [列级别约束条件] [默认值],
字段名2,数据类型 [列级别约束条件] [默认值],
字段名3,数据类型 [列级别约束条件] [默认值],
......
[表级别约束条件]
);
使用create table 创建表,必须指定以下信息:
1.要创建的表名称,不区分大小写,且不能使用SQL语句中的关键字
2.数据表中的每一个列(字段),的名称和数据类型,如果创建多列,要用逗号隔开
实例: 根据以下表结构信息,创建一个员工表tb_user,并查看规则.
| 字段名称 | 数据类型 | 备注 |
|---|---|---|
| id | INT(11) | 员工编号 |
| name | VARCHAR(25) | 员工名称 |
| deptId | INT(11) | 所在部门编号 |
| salary | FLOAT | 工资 |
1.首先我们先来创建一个lyshark的数据库,用来存储表结构,并指定采用utf8编码.
MariaDB [(none)]> create database lyshark charset utf8;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| lyshark |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.01 sec)
MariaDB [(none)]>
2.进入lyshark这个数据库,并更具题目要求创建这个表结构.
MariaDB [(none)]> use lyshark
Database changed
MariaDB [lyshark]> create table tb_user
-> (
-> id int(11),
-> name varchar(25),
-> deptId int(11),
-> salary float
-> );
Query OK, 0 rows affected (0.01 sec)
3.查看这个数据表,已经创建成功啦.
MariaDB [lyshark]> show tables;
+-------------------+
| Tables_in_lyshark |
+-------------------+
| tb_user |
+-------------------+
1 row in set (0.00 sec)
MariaDB [lyshark]> desc tb_user;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
MariaDB [lyshark]>
◆使用主键约束◆
主键,又称为主码,是表中一列或多列的组合.主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空.主键能够唯一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度.主键和记录之间的关系如同身份证和人之间的关系,它们之间是一一对应的.主键分为两种类型:单字段主键和多字段联合主键.
定义单字段主键
实例: 定义一个数据表tab_1将id字段定义为主键primary key,其SQL语句的写法如下:
MariaDB [lyshark]> create table tab_1
-> (
-> id int(10) primary key,
-> name varchar(20),
-> deptid int(10),
-> salary float
-> );
Query OK, 0 rows affected (0.01 sec)
MariaDB [lyshark]>
查看一下表结构,会发现在id字段上多出来一个key,这就把它定义成主键了.
MariaDB [lyshark]> desc tab_1;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(10) | NO | PRI | NULL | | #注意此处key列表,出现了主键标识
| name | varchar(20) | YES | | NULL | |
| deptid | int(10) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
在定义主键约束时,还可以在表结构定义完成以后,在最后指定主键id.
MariaDB [lyshark]> create table tab_2
-> (
-> id int(10),
-> name varchar(20),
-> deptid int(10),
-> salary float,
-> primary key(id)
-> );
Query OK, 0 rows affected (0.01 sec)
定义多字段主键
实例: 定义数据表tab_3,将name字段与deptid字段组合在一起,成为tab_3的多字段联合主键.
MariaDB [lyshark]> create table tab_3
-> (
-> name varchar(20),
-> deptid int(10),
-> salary float,
-> primary key(name,deptid)
-> );
Query OK, 0 rows affected (0.00 sec)
查看一下结构吧:
MariaDB [lyshark]> desc tab_3;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(20) | NO | PRI | | |
| deptid | int(10) | NO | PRI | 0 | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
◆使用外键约束◆
外键用来在两个表的数据之间建立链接,它可以是一列或者多列.一个表可以有一个或多个外键,外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值.
外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键.外键主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行.外键的作用是保持数据的一致性、完整性.
主表(父表):两个具有关联关系的表,相关联字段中,主键所在的那个表既是主表.
从表(子表):两个具有关联关系的表,相关联字段中,外键所在的那个表既是从表.
创建外键的语法规则:
[constraint <外键名>] foreign key 字段名1 [,字段名2,......]
peferences <主表名> 主键列1 [,主键列2,....]
实例: 创建一个tb_dept指定为主表,把tb_emp指定为从表,将两表指定字段相关联.
1.首先创建一个部门表tb_dept,表结构如下所示.
| 字段名称 | 数据类型 | 备注 |
|---|---|---|
| id | INT(11) | 部门编号 |
| name | VARCHAR(22) | 部门名称 |
| location | VARCHAR(50) | 部门位置 |
MariaDB [lyshark]> create table tb_dept
-> (
-> id int(11) primary key,
-> name varchar(22) NOT NULL,
-> location varchar(50)
-> );
Query OK, 0 rows affected (0.01 sec)
2接着定义数据表tb_emp,让它的deptid字段,作为外键关联到tb_dept的主键id字段上,SQL语句如下:
MariaDB [lyshark]> create table tb_emp
-> (
-> id int(10) primary key,
-> name varchar(25),
-> deptid int(10),
-> salary float,
-> constraint fk_empdept foreign key(deptid) references tb_dept(id)
-> );
Query OK, 0 rows affected (0.00 sec)
以上语句执行成功后,在表tb_emp上添加了名称为fk_empdept的外键约束,外键字段为deptid,其依赖于tb_dept表中的,主键id.
查看一下结构,理解下吧:
MariaDB [lyshark]> desc tb_dept;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | NO | | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
MariaDB [lyshark]> desc tb_emp;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(10) | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptid | int(10) | YES | MUL | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
MariaDB [lyshark]>
◆使用非空约束◆
非空约束(Not Null Constraint)指定字段的值不能为空,对于使用非空约束的字段,如果用户不给指定数值,则报错.
非空约束语法规则:
字段名 数据类型 not null
实例:定义数据表tab_4,指定员工名称不能为空,SQL语句如下,执行后则name字段将不能为空:
MariaDB [lyshark]> create table tab_4
-> (
-> id int(10) primary key,
-> name varchar(20) not null,
-> salary float
-> );
Query OK, 0 rows affected (0.00 sec)
### ◆使用唯一约束◆
唯一性约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值,唯一约束可以确保数据不重复.
在定义是完列表之后直接指定唯一约束,语法如下:
字段名 数据类型 unique
实例1: 创建tab_5表,并指定字段name为唯一约束,SQL语句如下:
MariaDB [lyshark]> create table tab_5
-> (
-> id int(10) primary key,
-> name varchar(20) unique,
-> location varchar(50)
-> );
Query OK, 0 rows affected (0.01 sec)
实例2: 还可以在定义完字段,以后来指定约束条件.
MariaDB [lyshark]> create table tab_6
-> (
-> id int(10) primary key,
-> name varchar(20),
-> location varchar(50),
-> constraint sth unique(name)
-> );
Query OK, 0 rows affected (0.00 sec)
unique和primary key区别:一个表可以有多个字段声明成unique,但只能有一个primary key声明.
◆使用默认约束◆
默认约束(Default Constraint)也就是指定默认值,如果不填写则自动使用默认值.
默认约束语法规则如下:
字段名 数据类型 default 默认值
实例: 定义一个表名称tab_7并指定salary自动默认工资为500,如不填写此项默认是500.
MariaDB [lyshark]> create table tab_7
-> (
-> id int(10) primary key,
-> name varchar(20) not null,
-> salary float default 500
-> );
Query OK, 0 rows affected (0.00 sec)
◆设置表自增长◆
在数据库应用中,经常希望在每次插入新记录时,系统自动生成字段的主键值.可以通过为表主键添加AUTO_INCREMENT关键字来实现.默认的,在MySQL中AUTO_INCREMENT的初始值是1,每次新增一条记录,字段值自动增加1,一个表只能有一个字段使用AUTO_INCREMENT约束,且字段必须为主键的一部分.
设置表的自增长语法规则如下:
字段名 数据类型 auto_increment
实例: 定义一个数据表tab_8指定id员工编号为自动增长模式,SQL语句如下:
MariaDB [lyshark]> create table tab_8
-> (
-> id int(10) primary key auto_increment,
-> name varchar(20) not null,
-> salary float
-> );
Query OK, 0 rows affected (0.01 sec)
此处我们插入一些数据,但是不写ID编号这一栏.
MariaDB [lyshark]> insert into tab_8(name,salary) values('lyshark',1000),('admin',200);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
接着查看一下插入的数据,你会发现ID这一个字段已经自动填充上了.
MariaDB [lyshark]> select * from tab_8;
+----+---------+--------+
| id | name | salary |
+----+---------+--------+
| 1 | lyshark | 1000 |
| 2 | admin | 200 |
| 3 | lyshark | 1000 |
| 4 | admin | 200 |
+----+---------+--------+
4 rows in set (0.00 sec)
## 查询表结构
使用SQL语句创建好数据表之后,可以查看表结构的定义,以确认表的定义是否正确.在MySQL中,查看表结构可以使用describe和show create table语句.
◆desc查询表结构◆
先来看一下语法格式:
describe 表名称; or desc 表名称;
实例: 查询tab_8数据表的表结构.
MariaDB [lyshark]> describe tab_8;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
MariaDB [lyshark]> desc tab_8;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
MariaDB [lyshark]>
◆show查询表结构◆
先来看一下语法格式:
show create table <表名> \G
实例: 显示tab_8表的详细数据信息.
MariaDB [lyshark]> show create table tab_8 \G
*************************** 1. row ***************************
Table: tab_8
Create Table: CREATE TABLE `tab_8` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`salary` float DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
注释: 当然也可以查询一个数据库啦,比如查询lyshark这个数据库的创建信息.
MariaDB [lyshark]> show create database lyshark;
+----------+--------------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------------+
| lyshark | CREATE DATABASE `lyshark` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)
## 修改数据表
修改表指的是修改数据库己经存在的数据表的结构.MySQL使用alter table语句修改表,常用的修改表的操作有:修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等.
◆修改表名称◆
如果一个数据表名称需要修改肿莫办,MySQL中是通过alter table语句来实现表名称的修改的,语法规则如下:
alter table <旧表名> rename [to] <新表名>;
实例: 将数据表tab改名成tab_lyshark.
MariaDB [lyshark]> show tables;
+-------------------+
| Tables_in_lyshark |
+-------------------+
| tab |
| tab_8 |
+-------------------+
2 rows in set (0.00 sec)
MariaDB [lyshark]> alter table tab rename to tab_lyshark; #将tab表改成tab_lyshark
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> show tables;
+-------------------+
| Tables_in_lyshark |
+-------------------+
| tab |
| tab_lyshark |
+-------------------+
2 rows in set (0.00 sec)
◆修改字段名◆
上面的小例子是修改表的名称,当我们想要修改字段名称时,可以使用以下SQL语句:
alter table <表名> change <旧字段名> <新字段名> <新数据类型>
#旧字段名:指修改前的字段名 新字段名:指修改后的字段名 新数据类型:指修改后的数据类型
实例: 将表tab_test的salary字段名改为lyshark并修改数据类型为varchar(30).
MariaDB [lyshark]> desc tab_test;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
MariaDB [lyshark]> alter table tab_test change salary lyshark varchar(30); #将字段名salary改为lyshark数据类型改成varchar(30)
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
MariaDB [lyshark]>
◆修改字段类型◆
每个字段都会有自己的数据类型,加入有一天你需要修改字段的数据类型,可以使用以下SQL语句:
alter table <表名> modify <字段名> <数据类型>
# 表名:指的是欲修改的表名称 字段名:欲要修改的字段名 数据类型:你要修改成的类型
实例: 将表tab_test的name字段数据类型由varchar(20)修改为varchar(40)
MariaDB [lyshark]> desc tab_test;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
MariaDB [lyshark]> alter table tab_test modify name varchar(40); #将类型从varchar(20)改成varchar(40)
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> desc tab_test;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
MariaDB [lyshark]>
◆添加一个字段◆
随着业务的需求变化,可能需要在已经存在的表中添加新的字段,一个完整字段包括,字段名,数据类型,完整性约束,添加字段的SQL语法规则如下:
alter table <表名> add <新字段> <数据类型>
# 表名:指定表名称 新字段:欲要添加的新字段 数据类型:指定添加的类型
# [约束条件] [first | after 已存在字段名]:指的是插入在那个字段前或者后.
在末尾添加: 添加无完整约束条件的字段,在tab_test表中添加一个int类型字段manager
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
MariaDB [lyshark]> alter table tab_test add manager int(10); #添加一个manager字段,类型为int
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
MariaDB [lyshark]>
在末尾添加: 添加有完整性约束条件的字段,在tab_test表中添加clound字段,类型为varchar(20)
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
MariaDB [lyshark]> alter table tab_test add clound varchar(20) not null; #添加一个clound字段,并且不允许为空
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
| clound | varchar(20) | NO | | NULL | |
+---------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
在表开头添加: 在tab_test表的第一列添加一个新字段,字段名wang类型int(4)
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
| clound | varchar(20) | NO | | NULL | |
+---------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
MariaDB [lyshark]> alter table tab_test add wang int(4) first; #在表的第一列添加一个字段名称是wang,类型是int
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| wang | int(4) | YES | | NULL | |
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
| clound | varchar(20) | NO | | NULL | |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
指定位置添加: 在tab_test表的指定位置添加一个字段,在name列的后面插入一个xxxx字段类型为int
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| wang | int(4) | YES | | NULL | |
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
| clound | varchar(20) | NO | | NULL | |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
MariaDB [lyshark]> alter table tab_test add xxxx int(4) after name; #在name字段后面插入一个xxxx,类型int
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| wang | int(4) | YES | | NULL | |
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| xxxx | int(4) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
| clound | varchar(20) | NO | | NULL | |
+---------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
◆删除一个字段◆
有时候我们需要删除指定无用字段,删除字段是将数据表中的某个字段从表中移除,这里可以使用alert table drop命令来完成,SQL语法格式如下:
alter table <表名> drop <字段名>
实例: 删除tab_test表中的clound字段.
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| wang | int(4) | YES | | NULL | |
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| xxxx | int(4) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
| clound | varchar(20) | NO | | NULL | |
+---------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
MariaDB [lyshark]> alter table tab_test drop clound; #删除指定字段 clound
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| wang | int(4) | YES | | NULL | |
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| xxxx | int(4) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
◆修改字段排列位置◆
对于一个表来说,在创建的时候,字段在表中的排列顺序就已经确定了,有时候,我们还需要对其进行微调,我们可以这样写SQL语句如下:
alter table <表名> modify <字段1> <数据类型> first | after <字段2>
#上面说明,将字段1放到<first|after>字段2的前面或后面
修改到第一列: 将tab_test表中的lyshark字段移动到第1列
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| wang | int(4) | YES | | NULL | |
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| xxxx | int(4) | YES | | NULL | |
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
MariaDB [lyshark]> alter table tab_test modify lyshark varchar(30) first; #将lyshark字段调整到最顶端的位置
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| lyshark | varchar(30) | YES | | NULL | |
| wang | int(4) | YES | | NULL | |
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| xxxx | int(4) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)
修改到指定位置: 把tab_test表中的manager字段放到lyshark字段的后面
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| lyshark | varchar(30) | YES | | NULL | |
| wang | int(4) | YES | | NULL | |
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| xxxx | int(4) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
MariaDB [lyshark]> alter table tab_test modify manager int(10) after lyshark; #把manager字段放到lyshark字段的后面
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| lyshark | varchar(30) | YES | | NULL | |
| manager | int(10) | YES | | NULL | |
| wang | int(4) | YES | | NULL | |
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(40) | YES | | NULL | |
| xxxx | int(4) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
◆修改表的存储引擎◆
存储引擎是MySQL中的数据存储在文件或者内存中时采用的不同技术实现,可以根据自己的需要,选择不同的引擎,甚至可以为每一张表选择不同的存储引擎.MySQL中主要存储引擎有:MyISAM、InnoDB、MEMORY、BDB、FEDERATED等.可以使用show engines语句查看系统支持的存储引擎.如下表是MySQL所支持的存储引擎.
| 引擎名称 | 是否支持 |
|---|---|
| FEDERATED | 否 |
| MRG_MYISAM | 是 |
| MyISAM | 是 |
| BLACKHOLE | 是 |
| CSV | 是 |
| MEMORY | 是 |
| ARCHIVE | 是 |
| InnoDB | 默认 |
| PERFORMANCE_SCHEMA | 是 |
更改一个表的存储引擎,可以使用的SQL语法规则:
alter table <表名> engine=<更改后的存储引擎名称>
更改引擎: 修改tab_test表的默认存储引擎为MyISAM
1.首先我们可以使用show create table先查看一下当前的存储引擎是什么,可以看到默认引擎是InnoDB
MariaDB [lyshark]> show create table tab_test \G
*************************** 1. row ***************************
Table: tab_test
Create Table: CREATE TABLE `tab_test` (
`lyshark` varchar(30) DEFAULT NULL,
`manager` int(10) DEFAULT NULL,
`wang` int(4) DEFAULT NULL,
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
`xxxx` int(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
2.接着执行修改命令,并查看一下变化.
MariaDB [lyshark]> alter table tab_test engine=MyISAM;
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> show create table tab_test \G
*************************** 1. row ***************************
Table: tab_test
Create Table: CREATE TABLE `tab_test` (
`lyshark` varchar(30) DEFAULT NULL,
`manager` int(10) DEFAULT NULL,
`wang` int(4) DEFAULT NULL,
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
`xxxx` int(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 #可以看到已经改变了
1 row in set (0.00 sec)
◆删除表的外键约束◆
对于数据库定义的外键,如果不需要可以将其删除掉,外键一旦删除,就会解除主表和从表的关联关系,MySQL中删除外键的语法如下:
alter table <表名> drop foreign key <外键约束名>
#外键约束名:指的是在定义表时constraint关键字后面的参数
删除外键: 删除tb_emp的外键约束
1.先来查看一下表的外键约束.
MariaDB [lyshark]> desc tb_emp;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(10) | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptid | int(10) | YES | MUL | NULL | | #外键标识MUL
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
MariaDB [lyshark]> show create table tb_emp \G
*************************** 1. row ***************************
Table: tb_emp
Create Table: CREATE TABLE `tb_emp` (
`id` int(10) NOT NULL,
`name` varchar(25) DEFAULT NULL,
`deptid` int(10) DEFAULT NULL,
`salary` float DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_empdept` (`deptid`),
CONSTRAINT `fk_empdept` FOREIGN KEY (`deptid`) REFERENCES `tb_dept` (`id`) #这里foreign key指定了外键
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
2.使用drop foreign key命令删除外键
MariaDB [lyshark]> alter table tb_emp drop foreign key fk_empdept; #删除tb_emp表中的外键fk_empdept
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> show create table tb_emp \G
*************************** 1. row ***************************
Table: tb_emp
Create Table: CREATE TABLE `tb_emp` (
`id` int(10) NOT NULL,
`name` varchar(25) DEFAULT NULL,
`deptid` int(10) DEFAULT NULL,
`salary` float DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_empdept` (`deptid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 #此时已经没有foreign key 这一项了,说明删除成功
1 row in set (0.00 sec)
## 删除数据表
删除数据表就是将数据库中已存在的表从数据库移除,需要注意的是,在删除表的同时,表的定义和表中的所有数据均会被删除,因此再删除之前,最好做好备份,删除的SQL语法如下:
drop table [if exists] 表1,表2,.....表n
#参数 if exists=删除前判断删除的表是否存在,如果表不存在会报错。
删除表: 删除指定表tab_test
MariaDB [lyshark]> show tables;
+-------------------+
| Tables_in_lyshark |
+-------------------+
| tab_test |
| tb_dept |
| tb_emp |
+-------------------+
10 rows in set (0.01 sec)
MariaDB [lyshark]> drop table if exists tab_test;
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> show tables;
+-------------------+
| Tables_in_lyshark |
+-------------------+
| tb_dept |
| tb_emp |
+-------------------+
10 rows in set (0.01 sec)
参考文献:mysql5.7从入门到精通
MariaDB 表的基本操作(3)的更多相关文章
- Mariadb/MySQL数据库单表查询基本操作及DML语句
Mariadb/MySQL数据库单表查询基本操作及DML语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一数据库及表相关概述 1>.数据库操作 创建数据库: CREATE ...
- MySQL学习笔记02_数据库和表的基本操作
02_1 操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[, create_specifica ...
- mysql(三) 数据表的基本操作操作
mysql(三) 数据表的基本操作操作 创建表,曾删改查,主键,外键,基本数据类型. 1. 创建表 create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGIN ...
- SQL Fundamentals: 表的创建和管理(表的基本操作,闪回技术flashback,表结构修改)
SQL Fundamentals || Oracle SQL语言 1.表的基本操作 (CREATE TABLE, DROP TABLE,TRUNCATE TABLE, RENAME tablename ...
- MySQL<数据库和表的基本操作>
数据库和表的基本操作 数据库基础知识 创建数据库 就是在数据库系统中划分一块存储数据的空间 CREATE DATABASE itcast; 查看数据库 SHOW CREATE DATABASE 数据库 ...
- mysql数据库表的基本操作sql语句总结
1,命令行登录命令 mysql -h localhost -u root -p C:\Users\lenovo>mysql -u root -p Enter password: ***** We ...
- 菜鸟崛起 DB Chapter 5 MySQL 5.6数据库表的基本操作
5 数据库表的基本操作 在数据库中,数据表是数据库中最重要.最基本的操作对象,是数据存储的基本单位.数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的.每一行代表一条唯一的记录,每一列代 ...
- 顺序表的基本操作【c语言】【创建、插入、删除、输出】
作为数据结构初学者,上课时对一些知识点掌握得不是很透彻,所以利用课余时间通过微博平台总结所学知识,加深对知识的见解,记录学习历程便于后需要时参考. #include<stdio.h> #i ...
- MySQL数据库 | 数据库和数据表的基本操作
第一篇博文,一个小小的纪念仪式^-^ 以下正文 一.数据库的基本操作 --数据库的操作 --连接数据库 mysql -uroot -p密码 mysql -uroot -pmysql --退出数据库 e ...
随机推荐
- Sencha extjs 的安装
delphi 的母公司Idera 突然就把sencha extjs 收购了,这确实是一个很好的消息,意味着delphi 开始在web方面开始发力, 目前delphi 集成extjs 的呼声越来越强烈, ...
- 代理设计模式 (静态代理设计模式)+ 动态代理(JDK和Cglib)
一.代理设计模式 1.设计模式:前人总结一套解决特定问题的代码 2.代理设计模式优点: 2.1 保护真实对象 2.2 让真实对象职责更明确 2.3 扩展 3.代理设计模式 3.1 真实对象(老总) 3 ...
- 使用Spring 简化MyBatis
1.导入mybatis所有的jar 和 spring 基本包,spring-jdbc,spring-tx,spring-aop,spring整合mybatis的包等. 2.编写spring配置文件ap ...
- 2018.11.30 spoj220 Relevant Phrases of Annihilation(后缀数组+二分答案)
传送门 代码: 先用特殊字符把所有字符串连接在一起. 然后二分答案将sasasa数组分组. 讨论是否存在一个组满足组内对于每一个字符串都存在两段不相交字串满足条件. #include<bits/ ...
- 2018.11.01 bzoj4325: NOIP2015 斗地主(贪心+搜索)
传送门 原来一直以为是一道大模拟. 没想到是一道搜索+最优性剪枝 如何搜最优呢? 我们考虑怎么最快出完. 大概是应该尽量出当前能出出去最多的吧. 于是我们选择优先出顺子. 这样做有什么好处呢? 我们会 ...
- tomat修改启动路径
https://blog.csdn.net/axela30w/article/details/76546735
- 黑白二值图像周长测量--C#实现
假设是单像素线白色用1(对应RGB(255,0,0))表示,背景用0(对应RBG(0,0,0))表示. 考虑3种类型的边界 水平方向 0->1 1->0 类似垂直方向也是0-> ...
- 【转载】Impala和Hive的区别
Impala和Hive的关系 Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中.并且im ...
- s5-14 链路状态路由选择
为什么DV逐渐让位于LS? DV 站的不高,看得不远 完全相信邻居 LS 想办法站得高,看更远 多高.多远? 怎么做? 链路状态路由(Link State) 主要思想 发现 它的邻 ...
- 深入理解,函数声明、函数表达式、匿名函数、立即执行函数、window.onload的区别.
一.函数声明.函数表达式.匿名函数1.函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 2.函数表达式 var fnNam ...