## MySQL数据库相关,常用SQL
- [数据库表](#sql-table-)
- 建库
- 建表
- 修改表,新增字段
- 修改表,修改字段
- 删除字段
- [索引](#sql-index-unique-primary-key-)
- [函数](#sql-function-)
- [存储过程](#sql-procedure-)
- [事件](#sql-event-)
- [用户授权](#sql-user-)
#### SQL TABLE 数据库表
``` SQL
-- MySQL 8.0.13
-- 建库
CREATE DATABASE IF NOT EXISTS `dbname` DEFAULT
CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `user`;
-- 建表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,
`username` VARCHAR(16) NOT NULL COMMENT '用户名',
`nickname` VARCHAR(16) NOT NULL COMMENT '昵称',
`pwd` VARCHAR(32) NOT NULL COMMENT '密码',
`score` DECIMAL(16,2) DEFAULT NULL COMMENT '得分',
`balance` INT(11) DEFAULT NULL COMMENT '余额(单位/分)',
`other_info` TEXT DEFAULT NULL COMMENT '其他信息',
`user_type` ENUM('admin','develop','normal') DEFAULT NULL COMMENT '类型',
`update_time` TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '更新时间',
`create_time` TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
PRIMARY KEY (`id`),
-- UNIQUE KEY `username` (`username`),
KEY `nickname`(`nickname`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-- 修改表,新增字段
ALTER TABLE `dbname`.`user`
ADD COLUMN `last_login_time` TIMESTAMP(3) DEFAULT NULL COMMENT '最后登陆时间'
AFTER `user_type`;
-- 修改表,修改字段
ALTER TABLE `dbname`.`user`
MODIFY COLUMN `last_login_time` TIMESTAMP(6);
-- 修改表,修改字段名或数据类型
ALTER TABLE `dbname`.`user`
CHANGE `last_login_time` `last_login` TIMESTAMP(6) DEFAULT NULL;
ALTER TABLE `dbname`.`user`
CHANGE `last_login` `last_login` DATETIME NOT NULL;
-- 删除字段
ALTER TABLE `dbname`.`user` DROP COLUMN `last_login`;
```
#### SQL INDEX UNIQUE PRIMARY KEY 索引
``` SQL
-- 创建索引 ALTER TABLE
-- 普通索引
ALTER TABLE `dbname`.`user` ADD INDEX `index_last_login` (`last_login`);
-- 唯一索引
ALTER TABLE `dbname`.`user` ADD UNIQUE (`username`);
-- 主键索引
ALTER TABLE `dbname`.`user` ADD PRIMARY KEY ('id');
-- 创建索引 CREATE
CREATE INDEX `index_username` ON `dbname`.`user` (`username`);
CREATE UNIQUE INDEX `un_username` ON `dbname`.`user` (`username`);
-- 删除 索引
DROP INDEX `index_username` ON `dbname`.`user`;
ALTER TABLE `dbname`.`user` DROP INDEX `index_username`;
ALTER TABLE `dbname`.`user` DROP PRIMARY KEY;
```
#### SQL FUNCTION 创建函数
```SQL
DROP FUNCTION IF EXISTS `fun_get_value`;
DELIMITER ;;
-- 创建函数
CREATE DEFINER=`root`@`%` FUNCTION `fun_get_value`(u float , v float )
RETURNS decimal(16,4)
BEGIN
return cast(sqrt(u+v) as decimal(16,4));
END;;
DELIMITER;
```
#### SQL PROCEDURE 创建存储过程
``` SQL
DROP PROCEDURE IF EXISTS `proc_insert_data`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `proc_insert_data`(
p_1 VARCHAR(6), -- 参数
p_2 DATETIME, -- 参数
p_3 INT,-- 参数
OUT p_4 INT
)
BEGIN
SET @time = NOW();
-- 操作
END;;
DELIMITER;
```
#### SQL EVENT 创建事件
``` SQL
DROP EVENT IF EXISTS `job_load_data`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` EVENT `job_load_data`
ON SCHEDULE EVERY 10 MINUTE STARTS '2021-01-01 00:00:00'
ON COMPLETION PRESERVE
ENABLE
DO BEGIN
call `xxxxx`(); -- 执行
END;;
DELIMITER;
```
#### SQL USER 用户/授权
```SQL
-- 创建
CREATE USER 'root_test'@'%' IDENTIFIED BY 'adong98765';
-- 修改
ALTER USER 'root_test'@'%' IDENTIFIED BY '123456';
-- 授权
GRANT ALL PRIVILEGES ON *.* to 'root_test'@'%';
-- 授权
GRANT SELECT ON *.* TO 'root_test'@'%';
-- 生效
FLUSH PRIVILEGES;
```