MySQL常用语句
参考:(30条消息) MySQL常用SQL语句大全_江南极客的博客-CSDN博客_mysql常用sql语句大全
SQL命令构成
(1)数据定义命令DDL(Data Definition Language)
- CREATE–创建数据库中所有对象;
- ALTER–修改表;
- DROP– 删除表。
(2)数据操纵命令DML (Data Manipulation Language)
- INSERT – 插入数据;
- DELETE– 删除数据;
- UPDATE–修改数据;
- SELECT–查询数据。
用户管理
- 新建用户 CREATE USER fifish@localhost IDENTIFIED BY ‘password’;
- 查询用户 SELECT USER,HOST FROM mysql.user;
- 删除用户 DROP USER fifish@localhost;
- 更改密码 SET PASSWORD FOR fifish@localhost=PASSWORD(‘newpassword’);//实操失败
UPDATE mysql.user set PASSWORD=PASSWORD(‘newpassword’) WHERE USER=’fifish’;//实操失败
ALTER USER ‘fifish’@’localhost’ IDENTIFIED BY ‘123’;
刷新 FLUSH PRIVILEGES;
权限管理
SHOW GRANTS FOR fifish@localhost;//查看fifish@localhost权限
GRANT SELECT ON db_name.* TO fifish@localhost;//给fifish@localhost用户db_name数据库的所有权限

REVOKE SELECT ON db_name.* FROM fifish@localhost;//删除fifish@localhost用户db_name数据库的所有权限

数据库操作
- 查看数据库 SHOW DATABASES;
- 创建数据库 CREATE DATABASE db_name;
- 使用数据库 USE db_name; //如果SQL模式中有多个数据库,那么在开始操作之前,需要选择一个将执行操作的数据库。

- 删除数据库 DROP DATABASE db_name;
表操作
创建表
CREATE TABLE table_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, //id值,无符号、非空、递增——唯一性,可做主键。
name VARCHAR(60) NOT NULL
score TINYINT UNSIGNED NOT NULL DEFAULT 0, //设置默认列值
PRIMARY KEY(id)
) ENGINE=InnoDB //设置表的存储引擎,一般常用InnoDB和MyISAM;InnoDB可靠,支持事务;MyISAM高效不支持全文检索
DEFAULT charset=utf8; //设置默认的编码,防止数据库中文乱码
如果有条件的创建数据表还可以使用 >CREATE TABLE IF NOT EXISTS tb_name(……..
1 | tinyint 型的字段如果设置为UNSIGNED类型,只能存储从0到255的整数,不能用来储存负数; |

- 查看数据库中可用的表 SHOW TABLES;
- 查看表的结构 DESCRIBE tb_name;

- 复制表 CREATE TABLE tb_name2 SELECT * FROM tb_name;
- 部分复制 CREATE TABLE tb_name3 SELECT id,name FROM tb_name;

- 创建临时表 CREATE TEMPORARY TABLE tb_name;
- 删除表 DROP [TEMPORARY] TABLE [IF EXISTS] tb_name[, tb_name2];

表重命名 RENAME TABLE tb_name TO newname;
ALTER TABLE tb_name RENAME newname;


修改表 ALTER TABLE tb_name1 ADD [CHANGE, RENAME, DROP]…;
- ALTER TABLE tb_name1 ADD COLUMN address varchar(80) NOT NULL;
- ALTER TABLE tb_name1 DROP address;

- ALTER TABLE tb_name1 CHANGE score score TINYINT(4) UNSIGNED ZEROFILL NOT NULL;

数据操作
- 插入数据 INSERT INTO tb_name1(id,name,score) VALUES(NULL,’张三’,140),(NULL,’李四’,134); //主键id是自增的列,可以不用写。

- 插入检索出来的数据
INSERT INTO tb_name2 (id,name) SELECT id,name FROM tb_name1;

更新数据
UPDATE tb_name1 SET score=145 WHERE id=2;

UPDATE tb_name2 SET columnName=NewValue [WHERE condition];

删除数据 DELETE FROM tb_name WHERE id=2;
条件控制
- WHERE语句 SELECT * FROM tb_name WHERE id=3;
- GROUP BY


- HAVING语句 select from —>where过滤—>group by —>having过滤
having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。

- 相关条件控制符
=、>、<、<>、IN(1,2,3……)、BETWEEN a AND b、NOT、AND 、OR
Linke()用法中 % 为匹配任意、 _ 匹配一个字符(可以是汉字)
IS NULL 空值检测
正则表达式
Mysql支持REGEXP的正则表达式:
>SELECT * FROM tb_name WHERE name REGEXP ‘^[A-D]’ //找出以A-D 为开头的name
特殊字符需要转义。
两表连接查询
select tb_name1.name,tb_name1.class,tb_name2.age from (tb_name1,tb_name2) where tb_name1.name=tb_name2.name;

排序
order by
select tb_name1.name,tb_name1.class,tb_name2.age from (tb_name1,tb_name2) where tb_name1.name=tb_name2.name order by age;

limit

