mysql学习(二)控制台执行sql脚本创建表修改表结构

mysql数据库控制套执行sql脚本实现如下三个功能:
1->创建表,并插入数据;
2->执行升级脚本,修改表字段;
3->执行会滚脚本,恢复表字段;

mysql数据库登陆

~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.31-0ubuntu0.18.04.1 (Ubuntu)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| choose             |
| mysql              |
| performance_schema |
| roster             |
| sys                |
+--------------------+
6 rows in set (0.01 sec)

mysql> use choose;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> source /home/lwl/mysqlScript/createTable_ETHIO.sql

创建表

sql脚本内容:

-- 创建表
drop table if exists CREATE_TEST_TABLE;

create table CREATE_TEST_TABLE(
    `COLLECTION_CENTERID` varchar(256),
    `COLLECTION_CENTERNAME` varchar(1024),
    `UBS_FLAG` varchar(1)
    -- `ORG_LEVEL` varchar(8)
);

alter table CREATE_TEST_TABLE add constraint PK_CREATE_TEST_TABLE primary key (`COLLECTION_CENTERID`);

insert into CREATE_TEST_TABLE(`COLLECTION_CENTERID`, `COLLECTION_CENTERNAME`, `UBS_FLAG`) values ('CC20210228-1', 'CC20210228-CC20210228-1', 'N');
insert into CREATE_TEST_TABLE(`COLLECTION_CENTERID`, `COLLECTION_CENTERNAME`, `UBS_FLAG`) values ('CC20210228-2', 'CC20210228-CC20210228-2', 'N');
insert into CREATE_TEST_TABLE(`COLLECTION_CENTERID`, `COLLECTION_CENTERNAME`, `UBS_FLAG`) values ('CC20210228-3', 'CC20210228-CC20210228-3', 'N');
insert into CREATE_TEST_TABLE(`COLLECTION_CENTERID`, `COLLECTION_CENTERNAME`, `UBS_FLAG`) values ('CC20210228-4', 'CC20210228-CC20210228-4', 'N');

commit;
mysql> source /home/lwl/mysqlScript/createTable_ETHIO.sql
mysql> desc CREATE_TEST_TABLE;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| COLLECTION_CENTERID   | varchar(256)  | NO   | PRI | NULL    |       |
| COLLECTION_CENTERNAME | varchar(1024) | YES  |     | NULL    |       |
| UBS_FLAG              | varchar(1)    | YES  |     | NULL    |       |
+-----------------------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> select * from CREATE_TEST_TABLE;
+---------------------+-------------------------+----------+
| COLLECTION_CENTERID | COLLECTION_CENTERNAME   | UBS_FLAG |
+---------------------+-------------------------+----------+
| CC20210228-1        | CC20210228-CC20210228-1 | N        |
| CC20210228-2        | CC20210228-CC20210228-2 | N        |
| CC20210228-3        | CC20210228-CC20210228-3 | N        |
| CC20210228-4        | CC20210228-CC20210228-4 | N        |
+---------------------+-------------------------+----------+
4 rows in set (0.00 sec)

升级脚本

升级脚本内容如下

-- 升级脚本
delimiter $$
drop procedure if exists UPDATE_TEST_TABLE$$
create procedure UPDATE_TEST_TABLE()
begin
    declare c_count int;
    select count(1) from information_schema.columns where table_name = 'CREATE_TEST_TABLE' and column_name = 'ORG_LEVEL' into c_count;
    if c_count = 0 then
        set @alterTableSql = concat( "alter table CREATE_TEST_TABLE add column ORG_LEVEL varchar(8)" );
        prepare stmt from @alterTableSql;
        execute stmt;
        deallocate prepare stmt;
    end if;

    select count(1) from information_schema.columns where table_name = 'CREATE_TEST_TABLE' and column_name = 'COLLECTION_CENTERID' into c_count;
    if c_count > 0 then
        set @alterTableSql = concat("alter table CREATE_TEST_TABLE modify COLLECTION_CENTERID VARCHAR(252)");
        prepare stmt from @alterTableSql;
        execute stmt;
        deallocate prepare stmt;
    end if;
end$$

call UPDATE_TEST_TABLE()$$
drop procedure UPDATE_TEST_TABLE$$
delimiter ;
mysql> source /home/lwl/mysqlScript/table_TEST_TABLE_update.sql
Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.04 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> select * from CREATE_TEST_TABLE;
+---------------------+-------------------------+----------+-----------+
| COLLECTION_CENTERID | COLLECTION_CENTERNAME   | UBS_FLAG | ORG_LEVEL |
+---------------------+-------------------------+----------+-----------+
| CC20210228-1        | CC20210228-CC20210228-1 | N        | NULL      |
| CC20210228-2        | CC20210228-CC20210228-2 | N        | NULL      |
| CC20210228-3        | CC20210228-CC20210228-3 | N        | NULL      |
| CC20210228-4        | CC20210228-CC20210228-4 | N        | NULL      |
+---------------------+-------------------------+----------+-----------+
4 rows in set (0.01 sec)

mysql> desc CREATE_TEST_TABLE;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| COLLECTION_CENTERID   | varchar(252)  | NO   | PRI | NULL    |       |
| COLLECTION_CENTERNAME | varchar(1024) | YES  |     | NULL    |       |
| UBS_FLAG              | varchar(1)    | YES  |     | NULL    |       |
| ORG_LEVEL             | varchar(8)    | YES  |     | NULL    |       |
+-----------------------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

回滚脚本

脚本内容如下:

-- 回滚脚本
delimiter $$
drop procedure if exists UPDATE_TEST_TABLE$$
create procedure UPDATE_TEST_TABLE()
begin
    declare c_count int;
    select count(1) from information_schema.columns where table_name = 'CREATE_TEST_TABLE' and column_name = 'ORG_LEVEL' into c_count;
    if c_count > 0 then
        set @alterTableSql = concat( "alter table CREATE_TEST_TABLE drop column ORG_LEVEL" );
        prepare stmt from @alterTableSql;
        execute stmt;
        deallocate prepare stmt;
    end if;

    select count(1) from information_schema.columns where table_name = 'CREATE_TEST_TABLE' and column_name = 'COLLECTION_CENTERID' into c_count;
    if c_count > 0 then
        set @alterTableSql = concat("alter table CREATE_TEST_TABLE modify COLLECTION_CENTERID VARCHAR(256)");
        prepare stmt from @alterTableSql;
        execute stmt;
        deallocate prepare stmt;
    end if;
end$$

call UPDATE_TEST_TABLE()$$
drop procedure UPDATE_TEST_TABLE$$
delimiter ;
mysql> source /home/lwl/mysqlScript/table_TEST_TABLE_rollback.sql
Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> desc CREATE_TEST_TABLE;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| COLLECTION_CENTERID   | varchar(256)  | NO   | PRI | NULL    |       |
| COLLECTION_CENTERNAME | varchar(1024) | YES  |     | NULL    |       |
| UBS_FLAG              | varchar(1)    | YES  |     | NULL    |       |
+-----------------------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> select * from CREATE_TEST_TABLE;
+---------------------+-------------------------+----------+
| COLLECTION_CENTERID | COLLECTION_CENTERNAME   | UBS_FLAG |
+---------------------+-------------------------+----------+
| CC20210228-1        | CC20210228-CC20210228-1 | N        |
| CC20210228-2        | CC20210228-CC20210228-2 | N        |
| CC20210228-3        | CC20210228-CC20210228-3 | N        |
| CC20210228-4        | CC20210228-CC20210228-4 | N        |
+---------------------+-------------------------+----------+
4 rows in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值