常用sql脚本总结

一、摘要

本文主要以 Mysql 数据库为基础,对常用 SQL 语句进行一次深度总结,由于篇幅较长,难免会有些遗漏的地方,欢迎网友批评指出!

具体内容主要有以下几个部分:

  • 库操作
  • 表操作
  • 数据操作
  • 运算符
  • 视图
  • 函数
  • 存储过程
  • 触发器
  • 序列
  • 用户权限

二、库操作

2.1、新增库

创建数据库比较简单,在创建的时候直接指定字符集、排序规则即可!

CREATE DATABASE IF NOT EXISTS `库名` default charset utf8mb4 COLLATE utf8mb4_unicode_ci;

例子:

CREATE DATABASE IF NOT EXISTS test_db default charset utf8mb4 COLLATE utf8mb4_unicode_ci;
2.2、修改库名

数据库修改库名的有三种方法,如果是MyISAM存储引擎,那么可以直接去数据库目录mv就可以了,如果是Innodb完全不行,会提示相关表不存在。

方法一
RENAME database olddbname TO newdbname

这个语法在 mysql-5.1.7 中被添加进来,到了mysql-5.1.23又去掉了,官方不推荐,会有丢失数据的危险!

方法二

思路是先创建一个新库,之后将旧库的数据导入到新库,即可完成修改库名!

  • 1、创建需要改成新名的数据库。
  • 2、mysqldum 导出要改名的数据库
  • 3、删除原来的旧库(确定是否真的需要)

当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。

例子:

# 将db1库备份到db1.sql文件
mysqldump -u root -p db1 > /usr/db1.sql;

# 导入备份文件到新库db2
mysql -u root -p db2 < /root/db1.sql;

# 删除旧库(如果真的需要)
DROP DATABASE db1;
方法三

直接跑一个 shell 脚本!

#!/bin/bash
# 假设将db1数据库名改为db2
# MyISAM直接更改数据库目录下的文件即可

mysql -uroot -p123456 -e 'create database if not exists db2'
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")

for table in $list_table
do
    mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"
done

其中p123456ppassword的简称,123456表示数据库密码值!

2.3、删除库名

删除库,比较简单,直接删除即可!

DROP DATABASE db1;
2.4、使用库
USE db2;

三、表操作

3.1、创建表
CREATE TABLE ts_user (
  id bigint(20) unsigned NOT NULL COMMENT '编码',
  name varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户姓名',
  mobile varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '手机号',
  create_userid varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建人',
  create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  update_userid varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '更新人',
  update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (id),
  KEY idx_create_time (create_time) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
3.2、修改表名
ALTER  TABLE ts_user RENAME TO ts_new_user;
3.3、删除表
DROP TABLE ts_new_user;
3.4、字段操作
3.4.1、查询表字段
show full columns from ts_user;
3.4.2、新增字段
ALTER TABLE ts_user add column gender tinyint(4) NOT NULL DEFAULT '1' COMMENT '性别,1,男;2,女' AFTER mobile;
3.4.3、修改字段
ALTER TABLE ts_user modify column mobile varchar(30) NOT NULL DEFAULT '' COMMENT '用户手机号';
3.4.4、删除字段
ALTER TABLE ts_user drop column gender;
3.5、索引操作
3.5.1、查询表索引
 SHOW INDEXES FROM ts_user;
3.5.2、新增普通索引
alter table ts_user add index idx_id (id);
3.5.3、新增唯一索引
alter table ts_user add unique idx_id (id);
3.5.4、新增主键索引
alter table ts_user add primary key idx_id (id) ;
3.5.5、新增多列索引
alter table ts_user add index idx_id_name (id,name) ;
3.5.6、新增全文索引
alter table ts_user add fulltext idx_id (id) ;
3.5.7、删除索引
# 删除普通索引
alter table ts_user drop index idx_id;

# 删除主键索引
alter table ts_user drop primary key;

四、数据操作

4.1、查询操作
4.1.1、单表查询
select * from ts_user;

或者

select id, name from ts_user;
4.1.2、关键字查询
  • and 查询
select id, name from ts_user where name = '张三'
  • or 查询
select id, name from ts_user where name = '张三' or name = '李四'
  • in 查询(参数个数不能超过1000)
select id, name from ts_user where name in ('张三', '李四')
  • like 模糊查询(%属于通配符)
select id, name from ts_user where name like '张%'
  • 非空查询
select id, name from ts_user where name is not null
  • 区间字段查询
select id, name, age from ts_user where  age >= 18 and age <= 30
select id, name, age from ts_user where age between 18 and 30
  • 多条件判断
select 
name,
(
case
when scope >= 90 then  '优'
when 80 <= scope < 90 then  '良'
when 80 > scope >= 70  then  '中'
else '差'
end
) as judge
from ts_user
4.1.3、连表查询
  • 左连接查询
select tu.id, tu.name,tr.role_name
from ts_user tu
left join ts_role tr on tu.id = tr.user_id
  • 右连接查询
select tu.id, tu.name,tr.role_name
from ts_user tu
right join ts_role tr on tu.id = tr.user_id
  • 内连接查询
select tu.id, tu.name,tr.role_name
from ts_user tu
inner join ts_role tr on tu.id = tr.user_id
  • 满连接查询
  • <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值