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;