您的位置:首页 > 数据库 > MySQL

MySQL数据库操作常用脚本

2015-12-23 13:20 549 查看
1. 查看MySQL数据库表信息:表名、行数和大小等信息

MySQL数据库的表信息存在INFORMATION_SCHEMA库的TABLES表中,可使用如下sql语句查询表信息如表名、行数和大小等。

SELECT
TABLE_NAME,
TABLE_ROWS,
DATA_LENGTH / 1024 / 1024 "DATA_LENGTH(M)",
CREATE_TIME,
TABLE_COLLATION
FROM
INFORMATION_SCHEMA. TABLES
WHERE
TABLE_SCHEMA = 'demo'
ORDER BY
TABLE_ROWS DESC;

说明:TABLE_SCHEMA条件右侧填入要查询的数据库名。

2. 创建表

DROP TABLE IF EXISTS `code_dictionary`;
CREATE TABLE `code_dictionary` (
`id` char(32) NOT NULL COMMENT 'ID',
`code` varchar(32) NOT NULL COMMENT '编码',
`name` varchar(64) NOT NULL COMMENT '名称',
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已删除',
`created_time` datetime NOT NULL COMMENT '创建时间',
`last_modified_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


3. 增加/删除列

alter table table_name add column `column_name` char(32)
DEFAULT '6e5fcd86944441eaa4282f6172f88ab6' COMMENT '编码' AFTER `config`;

alter table table_name drop column `column_name`;

4. 从A表中取数据插入B表

INSERT INTO tableB(user_id, branch_id, created_time, last_modified_time)
SELECT id, 1, now(), now()
FROM tableA WHERE age > 20;
5. mysql删除业务逻辑上重复的记录(需要借助中间表)

DELETE
FROM
user_role
WHERE
id NOT IN (
SELECT
tmp.id
FROM
(
SELECT
min(id) id
FROM
user_role
GROUP BY
role_id,
user_id
) tmp
);
6. 级联更新

UPDATE contest_season s
SET attendee_cnt = (
SELECT
count(DISTINCT user_id)
FROM
contest_detail d
WHERE
d.season_id = s.id
)
WHERE
EXISTS (
SELECT
1
FROM
contest_detail d
WHERE
d.season_id = s.id
);


7. 复制表

-- 复制表结构和数据
create table tableB as select * from tableA;
create table tableB select * from tableA;

-- 复制表结构
create table tableB as select * from tableA where 1=0;
create table tableB select * from tableA where 1=0;

-- 复制表数据(应确保表结构相同,最好写列名,否则复制的列值可能会错乱)
insert into tableB select * from tableA;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: