mysql基本sql语句(整理中)

关系型数据库的SQL语句都可以分为4大类:

1. DDL(数据定义语言)
DDL 主要是指如下的四种SQL 语句,以 CREATE、DROP、ALRET开头和 TRUNCATE TABLE 语句。这里主要说一下 TRUNCATE TABLE ,截断表的数据,也就是删除表中的数据,删除这些数据的时候,系统不做日志,因此无法恢复,删除的速度比较快;而DELETE 语句也是删除表中的记录,但它要写日志,删除的数据可以恢复,数据量大的时候删除比较慢。

2. DML和DQL(数据操纵语言)
它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。

3. TCL(事务处理语言)
事物处理语言是指提交、回滚和保留点3句SQL,既是commit、rollback和savepoint。事务是指一系列的连续的不可分割的数据库操作,这些操作要么同时成功,要么同时失败。oracle 的默认事务模型是显式事务模型,即执行完DML后必须手动提交或回滚。

4. DCL(数据控制语言)
是指授予权限和回收权限语句,既是grant、revoke、deny 等语句。


DML和DQL

新增:

INSERT INTO t1 (field1,field2) VALUE (v001,v002);            // 明确只插入一条Value
INSERT INTO t1 (field1,field2) VALUES (v101,v102),(v201,v202),(v301,v302),(v401,v402);  //批量插入
INSERT INTO t2 (field1,field2) SELECT col1,col2 FROM t1 WHERE //不要加values或value,和插入sql混了
#不要写成:INSERT INTO Table2 (field1,field2,...) VALUES (select value1,value2,... from Table1)

ps:

1 如果value(s)左边的没有指定字段列表,则右边需按表默认字段顺序输入全部字段值

删除:

DELETE FROM table_name //清空表
DELETE * FROM table_name //清空表
DELETE FROM table_name WHERE condition//按条件删除行

修改:

UPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value

查询:

SELECT column_name, column_name FROM table_name;//指定列,没有排除列的写法
SELECT * FROM table_name;//全部列

聚合函数:

//数值类型
avg()
min()
max()
sum()
round(column_name,decimals)

//通用
count()计数

//字符类型
mid(str_column,start,end)截取字符//start从1开始,end可选默认到最后
length(str_column) 长度

//举例
SELECT `category_id`, `name`,LENGTH(`name`) from `votes` GROUP BY `created_by` HAVING mid(`name`,2,8) LIKE '%风格%' ;

条件:

//and和or
SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition

//between
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

//in
SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)

//like
SELECT column_name(s)
FROM table_name
WHERE column_name
LIKE pattern

//group by (按某字段分组,结果集中该字段唯一)
SELECT column_name1,SUM(column_name2)
FROM table_name
GROUP BY column_name1

//having (必须与group by配合使用)
SELECT column_name1,SUM(column_name2)
FROM table_name
GROUP BY column_name1
HAVING SUM(column_name2) condition value

//order by (结果排序)
SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]

//limit 和 offset
SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]  limit 5 offset 5
//必须按 order by limit offset的顺序书写,否则报错,offset从0开始

DDL

新建:create

//新建数据库(完整)
CREATE DATABASE IF NOT EXISTS dbname DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

//新建表格(完整)
DROP TABLE IF EXISTS `city_info`;CREATE TABLE `city_info` (
`ci_id`  int(10) NOT NULL COMMENT '城市ID值' ,//类型,是否空,默认值,注释,字符编码和排比规则5种信息,顺序随意
`ci_province`  int(10) NOT NULL COMMENT '省份外键' ,
`ci_city`  varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '城市名称' ,
PRIMARY KEY (`ci_id`),//主键索引
FOREIGN KEY (`ci_province`) REFERENCES `province_info` (`pr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,//外键索引
[unique|textfull] INDEX `ci_province` (`ci_province`) USING BTREE //[唯一|全文]普通索引
)
ENGINE=InnoDB //表引擎
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci //表数据的字符编码和排序比较规则
COMMENT='城市表' //表注释
AUTO_INCREMENT=123; //自增起始值

//eg (外键失败,其余成功)

CREATE TABLE `member_update_store` (
`id` int(10) NOT NULL COMMENT '自增id' ,
`memberid` int(10) NOT NULL COMMENT '主表会员id' ,
`nickname` varchar(32) default '' NOT NULL COMMENT '昵称' ,
`thumb` varchar(500) default '' NOT NULL COMMENT '头像' ,
`address` varchar(500) default '' NOT NULL COMMENT '地址' ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
COMMENT='会员信息修改暂存表'
AUTO_INCREMENT=1;

//创建索引,可参考:https://blog.csdn.net/u014518337/article/details/88179607
CREATE [UNIQUE|fulltext] INDEX index_name ON table_name (column_name1[,column_name2...])//普通索引,唯一索引,组合索引,全文索引
CREATE [UNIQUE|fulltext] INDEX index_name ON table_name (column_name1 [(length)] [ASC|DESC])//单列索引可以设置索引顺序,字符索引可以设置索引长度

//创建视图
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

删除:drop

//删除数据库
DROP DATABASE [IF EXISTS] database_name

//删除表
DROP TABLE table_name

//删除索引(mysql的语法)
ALTER TABLE table_name DROP INDEX index_name

//删除视图
DROP VIEW <视图名1> [ , <视图名2> …]
//删除字段
ALTER TABLE table_name DROP COLUMN column_name
 

修改:alter

//修改数据库
ALTER DATABASE dbname DEFAULT CHARSET SET utf8 COLLATE utf8_general_ci;

//修改表名
ALTER TABLE table_name rename to new_name;
//修改表全局属性
ALTER TABLE testalter_tbl 
ENGINE=InnoDB //表引擎
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci //表数据的字符编码和排序比较规则
COMMENT='城市表' //表注释
AUTO_INCREMENT=123; //自增起始值

//添加字段
ALTER TABLE table_name 
ADD column_name datatype [default,null,comment,character] [first|after column_name2]
//eg
alter table member add audit_state int(10) default 1 null comment '审核状态'\G;

//1. 添加单个字段
alter table test add c4 varchar(2);

//2. 添加多个字段
alter table test add column sent_blacklist int(11) DEFAULT 0 COMMENT ' 我是注释1', add column sent_notexist int(11) DEFAULT 0 COMMENT '注释2', add column sent_error int(11) DEFAULT 0 COMMENT '注释3';

#对比可以看到,添加多个字段需要"add column 字段名",而单个字段直接"add 字段名"。
#添加多个字段中间的,不能换行添加(会报错);补充:新版mysql已经支持换行

//删除字段 ALTER TABLE table_name DROP COLUMN column_name //修改字段 类型,默认值,是否null,注释,字符编码和排比规则(必须设置字段类型才能成功,即使不修改类型也需要加上datatype) ALTER TABLE table_name MODIFY column_name datatype [default,null,comment,character] //eg alter table member_update_store modify updated_at timestamp default ''\G;
//修改字段名称
ALTER TABLE table_name CHANGE column_name new_name datatype; #datatype必须加上,否则失败

  modify和change的区别:https://www.cnblogs.com/liuurick/p/11627109.html

  modify和change都可以修改表的定义,但是change却需要写两次列名,不是很方便。但是change的优点是可以修改列名称,modify则不能

 

TCL:事务相关

 

DCL:授权相关

 

posted @ 2020-07-01 11:57  小匡程序员  阅读(312)  评论(0编辑  收藏  举报