1. 程式人生 > >MySQL-數據表

MySQL-數據表

並且 isam mysql add 分隔 基於 sel class desc

MySQL-數據表

MySQL-CREATE TABLE創建表

要在數據庫中創建一個新表,可以使用MySQL CREATE TABLE語句。

CREATE TABLE [IF NOT EXISTS] table_name(
        column_list                     #在column_list部分指定表的列表。
) engine=table_type;


需要為engine子句中的表指定存儲引擎。可以使用任何存儲引擎,如:InnoDBMyISAMHEAPEXAMPLECSV
ARCHIVEMERGEFEDERATEDNDBCLUSTER。如果不明確聲明存儲引擎,MySQL將默認使用InnoDB。

MySQL-CREATE TABLE語句中為表定義列

MySQL-CREATE TABLE語句中為表定義列語句:

column_name data_type[size] [NOT NULL|NULL] [DEFAULT value] 
[AUTO_INCREMENT]

以上語法中最重要的組成部分是:

1.column_name指定列的名稱。每列具有特定數據類型和大小,例如:VARCHAR(255)

2.NOT NULLNULL表示該列是否接受NULL值。

3.DEFAULT值用於指定列的默認值。

4.AUTO_INCREMENT指示每當將新行插入到表中時,列的值會自動增加。每個表都有一個且只有一個AUTO_INCREMENT

列。

如果要將表的特定列設置為主鍵,則使用以下語法:

PRIMARY KEY (col1,col2,...)

數據表創建實例:

使用CREATE TABLE語句創建這個tasks表

CREATE TABLE IF NOT EXISTS tasks (
  task_id INT(11) NOT NULL AUTO_INCREMENT,
  subject VARCHAR(45) DEFAULT NULL,
  start_date DATE DEFAULT NULL,
  end_date DATE DEFAULT NULL,
  description VARCHAR(200) DEFAULT NULL,
  PRIMARY KEY (task_id)
) ENGINE
=InnoDB;

MySQL-數據表結構修改

MySQL-ALTER TABLE語句

功能介紹:可以使用ALTER TABLE語句來更改現有表的結構。 ALTER TABLE語句可用來添加列,刪除列,更改列的數據類型,添加主鍵,重命名表等等

ALTER TABLE語句語法:

ALTER TABLE table_name action1[,action2,…]

要更改現有表的結構:

首先,在ALTER TABLE子句之後指定要更改的表名稱。

其次,列出一組要應用於該表的操作。操作可以是添加新列,添加主鍵,重命名表等任何操作。ALTER TABLE語句允許在單個ALTER TABLE語句中應用多個操作,每個操作由逗號()分隔。

創建一個名為tasks的新表:

DROP TABLE IF EXISTS tasks;

CREATE TABLE tasks (
    task_id INT NOT NULL,
    subject VARCHAR(45) NULL,
    start_date DATE NULL,
    end_date DATE NULL,
    description VARCHAR(200) NULL,
    PRIMARY KEY (task_id),
    UNIQUE INDEX task_id_unique (task_id ASC)
);

使用MySQL ALTER TABLE語句來設置列的自動遞增屬性

在任務表中插入新行時,task_id列的值會自動增加1。那麽可以使用ALTER TABLE語句將task_id列的屬性設置為AUTO_INCREMENT,如下所示:

ALTER TABLE tasks
CHANGE COLUMN task_id task_id INT(11) NOT NULL AUTO_INCREMENT;

使用MySQL ALTER TABLE語句將新的列添加到表中

由於新的業務需求,需要添加一個名為complete的新列,以便在任務表中存儲每個任務的完成百分比。 在這種情況下,您可以使用ALTER TABLE將新列添加到tasks表中

ALTER TABLE tasks 
ADD COLUMN complete DECIMAL(2,1) NULL
AFTER description;

使用MySQL ALTER TABLE從表中刪除列

假設您不想將任務的描述存儲在tasks表中了,並且必須將其刪除。 以下語句允許您刪除tasks表的description列:

ALTER TABLE tasks
DROP COLUMN description;

使用MySQL ALTER TABLE語句重命名表

ALTER TABLE tasks
RENAME TO work_items;


MySQL-數據表重命名

更改一個或多個表,使用RENAME TABLE語句:

RENAME TABLE old_table_name TO new_table_name;

在執行RENAME TABLE語句之前,必須確保沒有活動事務或鎖定表。

MySQL RENAME TABLE示例

創建一個名為hrdb的新數據庫,它由兩個表組成:employeesdepartments

技術分享圖片

創建數據庫

CREATE DATABASE IF NOT EXISTS hrdb;

創建表

USE hrdb;

CREATE TABLE departments (
    department_id INT AUTO_INCREMENT PRIMARY KEY,
    dept_name VARCHAR(100)
);

CREATE TABLE employees (
    id int AUTO_INCREMENT primary key,
    first_name varchar(50) not null,
    last_name varchar(50) not null,
    department_id int not null,
    FOREIGN KEY (department_id)
        REFERENCES departments (department_id)
);

將樣本數據插入到 employeesdepartments 表中

-- 插入數據到 departments 表中
INSERT INTO departments(dept_name)
VALUES(Sales),(Markting),(Finance),(Accounting),(Warehouses),(Production);

-- 插入數據到 employees 表中
INSERT INTO employees(first_name,last_name,department_id) 
VALUES(John,Doe,1),
 (Bush,Lily,2),
 (David,Dave,3),
 (Mary,Jane,4),
 (Jonatha,Josh,5),
 (Mateo,More,1);

重命名視圖引用的表

基於employeesdepartments表創建一個名為v_employee_info的視圖

CREATE VIEW v_employee_info as
    SELECT 
        id, first_name, last_name, dept_name
    from
        employees
            inner join
        departments USING (department_id);

v_employee_info視圖中的employees表重命名為people,並查詢視圖的數據。

RENAME TABLE employees TO people;

-- 查詢數據
SELECT 
    *
FROM
    v_employee_info;

使用CHECK TABLE語句來檢查v_employee_info視圖的狀態

CHECK TABLE v_employee_info;
mysql> CHECK TABLE v_employee_info;

需要手動更改v_employee_info視圖,以便它引用people表而不是employees表。


重命名由存儲過程引用的表

如果要重命名由存儲過程引用的表,則必須像對視圖一樣進行手動調整。

首先,將people表重命名為employees表。

RENAME TABLE people TO employees;

創建一個名為get_employee的新存儲過程,該過程引用employees表。

DELIMITER $$

CREATE PROCEDURE get_employee(IN p_id INT)

BEGIN
 SELECT first_name
 ,last_name
 ,dept_name
 FROM employees
 INNER JOIN departments using (department_id)
 WHERE id = p_id;
END $$

DELIMITER;

接下來,執行get_employee存儲過程從employees表來獲取id1的員工的數據

CALL get_employee(1);

我們再次將employees表重新命名為people表。

RENAME TABLE employees TO people;

最後,調用get_employee存儲過程來獲取id2的員工信息:

CALL get_employee(2);

MySQL會返回錯誤消息,須手動將存儲過程中的employees表更改為people表。


重命名引用外鍵的表

departments表使用department_id列鏈接到employees表。 employees表中的department_id列是引用departments表的department_id列作為外鍵

如果重命名departments表,那麽指向departments表的所有外鍵都不會被自動更新。 在這種情況下,我們必須手動刪除並重新創建外鍵。

RENAME TABLE departments TO depts;

刪除ID1的部門,由於外鍵約束,people表中的所有行也應刪除。 但是,我們將department表重命名為depts表,而不會手動更新外鍵,

DELETE FROM depts 
WHERE
    department_id = 1;

MySQL會返回錯誤


重命名多個表

使用RENAME TABLE語句來一次重命名多個表

RENAME TABLE old_table_name_1 TO new_table_name_2,
             old_table_name_2 TO new_table_name_2,...

以下語句將 peopledepts 重命名為 employeesdepartments 表:

RENAME TABLE depts TO departments,
             people TO employees;


使用ALTER TABLE語句重命名表

ALTER TABLE old_table_name
RENAME TO new_table_name;

重命名臨時表示例

第一步,創建一個臨時表,其中包含來自employees表的last_name列的所有唯一的姓氏:

CREATE TEMPORARY TABLE lastnames
SELECT DISTINCT last_name from employees;

第二步,使用RENAME TABLE重命名姓氏表

RENAME TABLE lastnames TO unique_lastnames;

MySQL會返回錯誤消息

第三步,使用ALTER TABLE語句來重命名姓氏表。

ALTER TABLE lastnames
RENAME TO unique_lastnames;

 

MySQL-數據表