MySQL-數據表
MySQL-數據表
MySQL-CREATE TABLE創建表
要在數據庫中創建一個新表,可以使用MySQL CREATE TABLE
語句。
CREATE TABLE [IF NOT EXISTS] table_name(
column_list #在column_list
部分指定表的列表。
) engine=table_type;
需要為engine
子句中的表指定存儲引擎。可以使用任何存儲引擎,如:InnoDB,MyISAM,HEAP,EXAMPLE,CSV,
ARCHIVE,MERGE,FEDERATED或NDBCLUSTER。如果不明確聲明存儲引擎,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 NULL
或NULL
表示該列是否接受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
的新數據庫,它由兩個表組成:employees
和 departments
創建數據庫
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) );
將樣本數據插入到 employees
和 departments
表中
-- 插入數據到 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);
重命名視圖引用的表
基於employees
和departments
表創建一個名為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
表來獲取id
為1
的員工的數據
CALL get_employee(1);
我們再次將employees
表重新命名為people
表。
RENAME TABLE employees TO people;
最後,調用get_employee
存儲過程來獲取id
為2
的員工信息:
CALL get_employee(2);
MySQL會返回錯誤消息,須手動將存儲過程中的employees
表更改為people
表。
重命名引用外鍵的表
departments
表使用department_id
列鏈接到employees
表。 employees
表中的department_id
列是引用departments
表的department_id
列作為外鍵
如果重命名departments
表,那麽指向departments
表的所有外鍵都不會被自動更新。 在這種情況下,我們必須手動刪除並重新創建外鍵。
RENAME TABLE departments TO depts;
刪除ID
為1
的部門,由於外鍵約束,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,...
以下語句將 people
和 depts
重命名為 employees
和 departments
表:
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-數據表