帮企网站建设代运营,wordpress 修改注册地址,温州建设网站,如何给自己的网站做优化数据库#xff0c;数据表的基本操作 1 数据库的基本操作1.1 创建数据库1.2 删除数据库 2 数据表的基本操作2.1 创建数据表2.1.1 主键约束2.1.2 外键约束2.1.3 非空约束2.1.4 唯一性约束2.1.5 默认约束2.1.6 自增列 2.2 查看数据表结构2.2.1 查看表基本结构语句DESC2.2.2 查看表… 数据库数据表的基本操作 1 数据库的基本操作1.1 创建数据库1.2 删除数据库 2 数据表的基本操作2.1 创建数据表2.1.1 主键约束2.1.2 外键约束2.1.3 非空约束2.1.4 唯一性约束2.1.5 默认约束2.1.6 自增列 2.2 查看数据表结构2.2.1 查看表基本结构语句DESC2.2.2 查看表详细结构语句SHOW CREATE TABLE 2.3 修改数据表2.3.1 修改表名2.3.2 修改字段的数据类型2.3.3 修改字段名2.3.4 添加字端2.3.5 删除字段2.3.6 修改字段的排列位置2.3.7 更改表的存储引擎2.3.8 删除表的外键约束 2.4 删除表2.4.1 删除没有关联的表2.4.2 删除被其他表关联的主表 1 数据库的基本操作
mysql安装完成后登陆数据库执行命令查看数据库
[rootcentos7 ~]# mysql -u root -pMysql_888执行命令查看数据库。
mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| sys |
--------------------
5 rows in set (0.00 sec)1.1 创建数据库
创建数据库的命令语法格式
creata database database_name;创建数据库TEST并查看数据库TEST的定义
mysql creata database TEST
mysql show create database TEST\G
*************************** 1. row ***************************Database: TEST
Create Database: CREATE DATABASE TEST /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTIONN */
1 row in set (0.00 sec)mysql 1.2 删除数据库
删除数据库的命令语法格式
drop database database_name;删除完成后查看定义会返回ERROR报错。
2 数据表的基本操作
2.1 创建数据表
数据表是属于数据库的在创建对应的数据表之前需要先切换到对应的数据库切换到TEST数据库中。
mysql use TEST;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql 2.1.1 主键约束
在 MySQL 中主键是一种用于唯一标识数据表中每个记录的列或列组合。它是一个特殊的唯一键约束主要用于帮助保证表中每条记录都能被唯一标识并且方便快速地查询。主键的约束支持以下特点
唯一性主键必须唯一标识某个记录不能有重复的值。这可以帮助保证表中每个记录的唯一性和准确性。
非空性主键不允许设置为 NULL 值。该限制可以有效保护表中数据的完整性。
确定性主键值必须是已知的非复合值。因此在数据库表中一个字段最多只能有一个主键。
单字段主键
CREATE TABLE tb_01
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);多字段主键
CREATE TABLE tb_02(
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
PRIMARY KEY(name,deptId)
);2.1.2 外键约束
在 MySQL 中外键是指用来标识两个表之间关系的一种约束。外键通常用于建立表之间的联系它可以帮助保证数据表之间的一致性和完整性。外键的实现需要在表中定义一个特殊的列并将该列与另一个表的主键或唯一键相连。 外键约束支持以下特点
引用完整性防止从表中插入无法与主表关联的行从而确保数据之间的连贯性和一致性。
自动更新和删除当主表的某行被更新或删除时关联的从表的数据也会相应地被自动更新或删除。
创建表tb_03和tb_04并让tb_04的deptId作为外键关联到tb_03的主键id。
CREATE TABLE tb_03
(
id INT(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
location VARCHAR(50)
);CREATE TABLE tb_04
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
);2.1.3 非空约束
MySQL的非空约束是指在创建表时可以指定某一列的数据值不能为NULL。如果试图将NULL值插入到具有非空约束的列中将会产生错误。关键字NOT NULL。
创建一个具有非空约束的表tab_05其中name和age列都不能为NULL。
CREATE TABLE tab_05 (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT NOT NULL
);如果试图向该表中插入一个NULL值MySQL将会报错。例如
INSERT INTO tab_05 (id, name, age)
VALUES (1, NULL, 25);将会产生如下错误
Error Code: 1048. Column name cannot be null2.1.4 唯一性约束
MySQL的唯一性约束用于确保在某个列中不允许有重复的值。也就是说一个唯一性约束不能对整个表启用而只能针对某个或某些列启用。在启用唯一性约束后任何尝试插入具有重复值的记录将会被拒绝。
创建一个具有唯一性约束的表users其中email列不能有重复值。关键字UNIQUE。
CREATE TABLE tab_06 (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(50) UNIQUE,password VARCHAR(50)
);如果试图向该表中插入一个已经存在的email值MySQL将会报错。 例如
INSERT INTO tab_06 (id, name, email, password)
VALUES (1, John, johnexample.com, password);如果之后再次尝试插入相同的email值MySQL将会报错
Error Code: 1062. Duplicate entry johnexample.com for key email2.1.5 默认约束
默认值指的是在插入数据时如果一个列没有明确地指定一个值则将使用指定的默认值来填充该列。如果没有指定默认值则该列将被设置为NULL。
可以在创建表时或使用ALTER TABLE语句时指定列的默认值。
创建表tab_07时可以指定列birthday的默认值为’1990-01-01’
CREATE TABLE tab_07 (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(50),birthday DATE DEFAULT 1990-01-01
);2.1.6 自增列
自增列是一种特殊的列用于自动为每个插入的行生成唯一的数字标识符。自增列通常用作主键列确保每个行都具有唯一的标识符。
在MySQL中可以通过使用AUTO_INCREMENT关键字在列定义中创建自增列。
CREATE TABLE tab_08 (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),email VARCHAR(50)
);还可以使用ALTER TABLE语句将现有的列转换为自增列。例如如果在创建表时未指定AUTO_INCREMENT关键字则可以使用以下命令将其添加到id列中
ALTER TABLE users MODIFY COLUMN id INT AUTO_INCREMENT;需要注意的是自增列必须是主键列的一部分。此外如果您在表中使用多个自增列则每个自增列的值将是唯一的但不一定连续。
最后如果需要知道最后一次插入的自增列值可以使用LAST_INSERT_ID()函数。
INSERT INTO users (name, email)
VALUES (Jane, janeexample.com);SELECT LAST_INSERT_ID();此操作将插入一行数据并返回最后一个自增列值。
2.2 查看数据表结构
2.2.1 查看表基本结构语句DESC
DESC可以查看表的字段信息其中包括字段名字段数据类型是否为主键是否有默认值等。
mysql desc tab_06;
--------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
| id | int | NO | PRI | NULL | |
| name | varchar(50) | YES | | NULL | |
| email | varchar(50) | YES | UNI | NULL | |
| password | varchar(50) | YES | | NULL | |
--------------------------------------------------
4 rows in set (0.00 sec)
2.2.2 查看表详细结构语句SHOW CREATE TABLE
SHOW CREATE TABLE 可以显示创建表时候的create table语句。
mysql show create table tab_06;
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Table | Create Table |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| tab_06 | CREATE TABLE tab_06 (id int NOT NULL,name varchar(50) DEFAULT NULL,email varchar(50) DEFAULT NULL,password varchar(50) DEFAULT NULL,PRIMARY KEY (id),UNIQUE KEY email (email)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)2.3 修改数据表
2.3.1 修改表名
将之前的表tab_06修改为tab_07使用alter table old_tab rename [to] new_tab; 语法。
mysql alter table tab_06 rename to tab_07;
Query OK, 0 rows affected (0.01 sec)mysql show tables;
-----------------
| Tables_in_TEST |
-----------------
| tab_07 |
| tag |
| user |
-----------------
14 rows in set (0.00 sec)2.3.2 修改字段的数据类型
ALTER TABLE语句的基本语法
ALTER TABLE table_name MODIFY column_name new_data_type;其中table_name是要更改列数据类型的表的名称column_name是要更改数据类型的列的名称new_data_type是要为其指定的新数据类型。 现实需要注意在有数据的情况下更改类型的风险。
mysql desc tab_07;
--------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
| id | int | NO | PRI | NULL | |
| name | varchar(50) | YES | | NULL | |
| email | varchar(50) | YES | UNI | NULL | |
| password | varchar(50) | YES | | NULL | |
--------------------------------------------------
4 rows in set (0.00 sec)mysql alter table tab_07 modify name int;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql desc tab_07;
--------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
| id | int | NO | PRI | NULL | |
| name | int | YES | | NULL | |
| email | varchar(50) | YES | UNI | NULL | |
| password | varchar(50) | YES | | NULL | |
--------------------------------------------------
4 rows in set (0.00 sec)mysql alter table tab_07 modify name varchar(100);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql desc tab_07;
---------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
---------------------------------------------------
| id | int | NO | PRI | NULL | |
| name | varchar(100) | YES | | NULL | |
| email | varchar(50) | YES | UNI | NULL | |
| password | varchar(50) | YES | | NULL | |
---------------------------------------------------
4 rows in set (0.00 sec)mysql 2.3.3 修改字段名
ALTER TABLE语句的基本语法
ALTER TABLE table_name CHANGE old_column_name new_column_name column_definition;其中table_name是要更改列名称的表的名称old_column_name是要更改的现有列的名称new_column_name是要为其指定的新名称而column_definition是列类型和属性的定义其中包括数据类型、约束和默认值。
mysql alter table tab_07 change name new_name varchar(100);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql desc tab_07;
---------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
---------------------------------------------------
| id | int | NO | PRI | NULL | |
| new_name | varchar(100) | YES | | NULL | |
| email | varchar(50) | YES | UNI | NULL | |
| password | varchar(50) | YES | | NULL | |
---------------------------------------------------
4 rows in set (0.00 sec)2.3.4 添加字端
ALTER TABLE语句的基本语法
ALTER TABLE table_name ADD column_name column_definition; 其中table_name是要添加新列的表的名称column_name是新列的名称column_definition是新列的数据类型和约束等定义。
mysql alter table tab_07 add school varchar(50);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql desc tab_07;
---------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
---------------------------------------------------
| id | int | NO | PRI | NULL | |
| new_name | varchar(100) | YES | | NULL | |
| email | varchar(50) | YES | UNI | NULL | |
| password | varchar(50) | YES | | NULL | |
| school | varchar(50) | YES | | NULL | |
---------------------------------------------------
5 rows in set (0.00 sec)需要注意以下几点 在执行添加新列的操作时必须是具有足够权限的用户。 在添加新列时可以指定数据类型、约束和默认值等定义如果不指定则会使用默认值或NULL。 添加新列时如果不指定新列的位置默认会将新列添加到表的最后。
如果需要在特定位置添加新列则可以使用ALTER TABLE语句中的AFTER或BEFORE子句来指定新列的位置例如 mysql alter table tab_07 add number varchar(50) after email;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql desc tab_07;
---------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
---------------------------------------------------
| id | int | NO | PRI | NULL | |
| new_name | varchar(100) | YES | | NULL | |
| email | varchar(50) | YES | UNI | NULL | |
| number | varchar(50) | YES | | NULL | |
| password | varchar(50) | YES | | NULL | |
| school | varchar(50) | YES | | NULL | |
---------------------------------------------------
6 rows in set (0.00 sec)
2.3.5 删除字段
ALTER TABLE语句的基本语法
ALTER TABLE table_name DROP column_name; 其中table_name是要删除列的表的名称column_name是要删除的列的名称。
mysql alter table tab_07 drop number;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql desc tab_07;
---------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
---------------------------------------------------
| id | int | NO | PRI | NULL | |
| new_name | varchar(100) | YES | | NULL | |
| email | varchar(50) | YES | UNI | NULL | |
| password | varchar(50) | YES | | NULL | |
| school | varchar(50) | YES | | NULL | |
---------------------------------------------------
5 rows in set (0.00 sec)2.3.6 修改字段的排列位置
ALTER TABLE语句的基本语法
ALTER TABLE table_name MODIFY column_name column_definition FIRST|AFTER column_name2; 其中table_name是要修改列顺序的表的名称column_name是要修改顺序的列的名称column_definition是列的数据类型和约束等定义FIRST和AFTER是指定列的新位置column_name2是新位置的相邻列的名称。
mysql alter table tab_07 modify school varchar(50) first;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql desc tab_07;
---------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
---------------------------------------------------
| school | varchar(50) | YES | | NULL | |
| id | int | NO | PRI | NULL | |
| new_name | varchar(100) | YES | | NULL | |
| email | varchar(50) | YES | UNI | NULL | |
| password | varchar(50) | YES | | NULL | |
---------------------------------------------------
5 rows in set (0.00 sec)mysql alter table tab_07 modify school varchar(50) after password;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql desc tab_07;
---------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
---------------------------------------------------
| id | int | NO | PRI | NULL | |
| new_name | varchar(100) | YES | | NULL | |
| email | varchar(50) | YES | UNI | NULL | |
| password | varchar(50) | YES | | NULL | |
| school | varchar(50) | YES | | NULL | |
---------------------------------------------------
5 rows in set (0.00 sec)mysql 2.3.7 更改表的存储引擎
ALTER TABLE语句的基本语法
ALTER TABLE table_name ENGINE engine_name;其中table_name是要修改存储引擎的表的名称engine_name是要为表指定的存储引擎例如 InnoDB, MyISAM, MEMORY, CSV 等。
ALTER TABLE tab_07 ENGINE MyISAM;需要注意以下几点 当使用ALTER TABLE语句更改表的存储引擎时必须确保新引擎已经安装。 在执行此操作之前请确保备份数据因为更改存储引擎可能会影响数据完整性。 不是所有的存储引擎都支持同一种特性、功能和约束条件。因此必须谨慎选择存储引擎以确保符合您的业务需求。
如果要为新表指定存储引擎请在CREATE TABLE语句中指定
CREATE TABLE students (...) ENGINE InnoDB;在创建新表时可以通过指定ENGINE参数来指定表的存储引擎。
2.3.8 删除表的外键约束
删除表的外键约束的基本语法
ALTER TABLE 表名 DROP FOREIGN KEY 约束名;其中“表名” 是要删除外键的表的名称“约束名” 是要删除的外键约束的名称。
ALTER TABLE tab_03 DROP FOREIGN KEY fk_emp_dept1;2.4 删除表
2.4.1 删除没有关联的表
使用 DROP TABLE 语句来删除没有关联的表。以下是删除没有关联的表的基本语法
DROP TABLE 表名1表名2... 表名n;2.4.2 删除被其他表关联的主表
数据表存在外键关联的情况下直接删除父表会显示失败原因是直接删除破坏表的参照完整性如果必须要删除可以先删除与他关联的子表再删除父表但是这样删除了两个表中的数据如果要保存其中一个表的数据可以将关联表的外键约束删除取消这样皆可以了。
具体操作参照之前的步骤。