MySQL-数据表

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的新数据库,它由两个表组成: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);

重命名视图引用的表

基于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,...

以下语句将 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;

 

 
posted @ 2018-01-01 00:47  Nice1949  阅读(303)  评论(0编辑  收藏  举报