1. 程式人生 > 實用技巧 >mysql資料庫及表的基本操作

mysql資料庫及表的基本操作

1. 資料庫操作

1.1 建立資料庫

# 建立資料庫
mysql> create database db_test; 

# 檢視建立好的資料庫
mysql> show create database db_test\G
*************************** 1. row ***************************
       Database: db_test
Create Database: CREATE DATABASE `db_test` /*!40100 DEFAULT CHARACTER SET utf8 */

# 使用db_test資料庫
mysql> use db_test;

1.2 刪除資料庫

mysql> drop database db_test;

1.3 顯示資料庫資訊

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_msyql8        |
+--------------------+
6 rows in set (0.01 sec)

2. 資料庫表操作

2.1 建立資料庫表

建立資料庫表的基本語法規則如下:

2.1.1 表的基本建立

# 基本建立tb_emp1表
mysql> create table tb_emp1
(
 	id int(11),
	name varchar(25),
 	deptId int(11),
	salary float
 );
 Query OK, 0 rows affected (0.34 sec)
 
 # 檢視所有的表
 mysql> show tables;
+-------------------+
| Tables_in_db_test |
+-------------------+
| tb_emp1           |
+-------------------+
1 row in set (0.01 sec)

2.1.2 對錶欄位進行約束

方式一:

CREATE TABLE tb_emp2
(
	id INT(11) PRIMARY KEY AUTO_INCREMENT, 	# 主鍵,自增約束(自增欄位必須為整數)
	name VARCHAR(25) NOT NULL,				# 不為空約束
	deptId INT(11) UNIQUE,					# 唯一性約束
	salary FLOAT DEFAULT 0.0				# 預設值約束
 );

方式二:

CREATE TABLE tb_emp3
(
	id INT(11) AUTO_INCREMENT,
	NAME VARCHAR(25) NOT NULL,
	deptId INT(11),
	salary FLOAT DEFAULT 0.0,
	PRIMARY KEY(id),# 主鍵約束
	CONSTRAINT costum_name_for_unique UNIQUE(deptId),# 唯一性約束
	CONSTRAINT costum_name_for_foreign_key FOREIGN KEY (deptId) REFERENCES tb_emp2(id) 
    # 外來鍵約束:定義名稱為costum_name_for_foreign_key外來鍵,tb_emp3的deptId作為外來鍵關聯到tb_emp2表的主	   鍵id
 );

2.1.3 查看錶的結構

# 查看錶的基本結構:desc 表名; 或 describe 表名; 
mysql> describe tb_emp3; 
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(25) | NO   |     | NULL    |                |
| deptId | int(11)     | YES  | UNI | NULL    |                |
| salary | float       | YES  |     | 0       |                |
+--------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

# 查看錶詳細結構: 末尾+\G目的是清晰直觀的顯示結果
mysql> show  create table tb_emp3\G
*************************** 1. row ***************************
       Table: tb_emp3
Create Table: CREATE TABLE `tb_emp3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `costum_name_for_unique` (`deptId`),
  CONSTRAINT `costum_name_for_foreign_key` FOREIGN KEY (`deptId`) REFERENCES `tb_emp2` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

2.2 修改資料表

2.2.1 修改表名

ALTER TABLE <舊錶名> RENAME [TO] <新表名>;TO為可選引數,選不選無所謂

mysql> alter table tb_emp2 rename tb_emp4;

2.2.2 修改欄位資訊

ALTER TABLE <表名> MODIFY <欄位名> <資料型別>

ALTER TABLE <表名> CHANGE <舊欄位名> <新欄位名> <新資料型別>;

# 修改欄位name的大小為100字元
mysql> alter table tb_emp4 modify name varchar(100);
Query OK, 0 rows affected (0.92 sec)

# 修改欄位名稱:將name修改為emp_name並重新指定大小為varchar(50)
mysql> alter table tb_emp4 change name emp_name varchar(50);
Query OK, 0 rows affected (0.75 sec)

2.2.3 新增欄位

ALTER TABLE <表名> ADD <新欄位名> <資料型別> [約束條件] [FIRST| AFTER已存在欄位名];

新欄位名為需要新增的欄位的名稱;“FIRST”為可選引數,其作用是將新新增的欄位設定為表的第一個欄位;“AFTER”為可選引數,其作用是將新新增的欄位新增到指定的“已存在欄位名”的後面。

# 新增欄位managerId
mysql> alter table tb_emp4 add managerId int(10);
Query OK, 0 rows affected (0.61 sec)

# 檢視新增結果
mysql> desc tb_emp4;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| emp_name  | varchar(50) | YES  |     | NULL    |                |
| deptId    | int(11)     | YES  | UNI | NULL    |                |
| salary    | float       | YES  |     | 0       |                |
| managerId | int(10)     | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

2.2.4 修改欄位的排列位置

ALTER TABLE <表名> MODIFY <欄位1> <資料型別> FIRST| AFTER <欄位2>;

2.2.5 刪除欄位

ALTER TABLE <表名> DROP <欄位名>;

mysql> alter table tb_emp4 drop managerId;
Query OK, 0 rows affected (0.69 sec)

2.2.6 修改儲存引擎

ALTER TABLE <表名> ENGINE=<更改後的儲存引擎名>;

# mysql8預設使用InnoDB儲存引擎
mysql> alter table tb_emp1 engine=MyISAM;

# 查看錶的資訊
mysql> show create table tb_emp1\G
*************************** 1. row ***************************
       Table: tb_emp1
Create Table: CREATE TABLE `tb_emp1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

2.2.7 刪除表的外來鍵約束

ALTER TABLE <表名> DROP FOREIGN KEY <外來鍵約束名>;

mysql> alter table tb_emp3 drop foreign key costum_name_for_foreign_key;

2.3 刪除資料庫表

2.3.1 刪除沒有被關聯的表

DROP TABLE [IF EXISTS] 表1,表2,…表n;

mysql> drop table if exists tb_emp1;  

2.3.2 刪除被關聯的表

# 相關聯的兩個表為主表和子表,刪除的情況有
# 1.先刪除子表,後刪除主表
# 2.刪除主表,保留子表:可以先刪除兩個表之間的外來鍵關係,後執行刪除操作。