MySQL-数据表

Posted Nice1949

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

 

以上是关于MySQL-数据表的主要内容,如果未能解决你的问题,请参考以下文章

从mysql的片段中加载ListView

硬核!管理mysql数据库的工具

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

使用 json rereiver php mysql 在片段中填充列表视图

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段

修改MySQL密码报错“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements“(代码片段