推荐使用mariaDB
操作数据库
创建数据库
CREATE DATABASE xxx;
删除数据库
DROP DATABASE xxx;
查看所有数据库
SHOW DATABASES;
查看指定数据库
SHOW xxx;
打开指定数据库
USE xxx;
查看指定数据库的详细信息
SHOW CREATE DATABASE xxx;
修改指定数据库的字符集
ALTER DATABASE xxx CHARACTER SET gbk COLLATE gbk_bin;
数据表的校对规则,与于指定数据集如何排序
COLLATE=utf8_bin
指定字符集
CHARSET=utf8
查看当前mysql所支持的字符集
SHOW CHARACTER SET;
新建数据表
CREATE TABLE xxx(
id int(4),
email char(20),
status int(2),
code varchar(10)
);
添加数据
INSERT INTO xxx VALUES(
1,
"hallo",
"1",
"xxx"
);
修改数据(根据条件)
UPDATE xxx SET status=1 WHERE id = 4;
删除数据(根据条件)
DELETE FROM xxx WHERE id = 5;
修改字段类型
ALTER TABLE 表名 MODIFY COLUMN 字段名 新数据类型;
查询数据
查询数据表的表结构(字段)
SHOW COLUMNS FROM 表名
查询数据表的数据
SELECT * FROM 表名;
根据条件查询 SELECT * FROM 表名1,表名2;
SELECT * FROM 表名1.id aid,表名2.id bid; // 一次查询多个表,结果是一个二维表,因为表名1和表名2,都是查询id,避免区分不了,使用查询,设置列的别名,便于区分
SELECT * FROM 表名 WHERE id >= 1;
SELECT * FROM 表名 WHERE id IN (1,3,5);
SELECT * FROM 表名 WHERE id BETWEEN 2 AND 7;
SELECT * FROM 表名 WHERE id >= 1 AND name = “xxx”;
SELECT * FROM 表名 WHERE id >= 1 OR name = “xxx”;
SELECT * FROM 表名 WHERE id >= 1 NOT name = “xxx”;
SELECT id name FROM 表名 WHERE name LIKE"a%";
SELECT 字段 FROM 表名 GROUP BY 字段; // 附属功能和DISTINCT一样,有去重功能
SELECT DISTINCT 字段 FROM 表名; // 列出不同的值,功能和查询数据,并且数据不重复
根据要求返回数据
SELECT id FROM 表名;
通过SELECT语句修改列名
SELECT id abc FROM 表名;
通过SELECT语句接WHRE条件
SELECT id FROM 表名 WHERE name = “yes”;
转义和匹配字符串
百分号% 匹配任意长度的字符串,包括空字符串
下划线_ 匹配单个字符串,可以使用多个下划线来指定匹配多长的字符串
转义符\ 用于输出或者匹配特殊字符,例如%和_
排列
SELECT name FROM 表名 ORDER BY id; // 按照id从低到高
SELECT name FROM 表名 ORDER BY id DESC; // 使用DESC倒序
SELECT name FROM 表名 ORDER BY id DESC,gender; // 先按照id倒序,如果有相同的值再按gender排序
ORDER BY 排序(升序(asc)降序(desc))
SELECT 字段 FROM 表名 ORDER BY 字段 (排序方式);
默认的排序是ASC,可以忽略,如果有WHRE语句,那么ORDER BY要放在WHRE后面
SELECT 字段1 , 字段2 , 字段3 FROM 表名; // 返回指定字段下的数据,而不是整个表的数据
SELECT 字段1 , 字段2 别名1, 字段3 FROM 表名; // 使用SELECT查询,并将列名重命名,把字段2改为别名1
SELECT * FROM 表名 ORDER BY DESC LIMIT 5 (OFFSET 1) // 分页返回,每页5条记录,获取第2条的记录(sql的索引从0开始)
SELECT COUNT(*) FROM 表名; // 查询该表有多少条记录
SELECT COUNT(*) 别名 FROM 表名 WHERE 字段 = ‘xxx’; // 查询该表有多少条记录符合要求
SELECT 表名1.字段1 别名1, 表名1.字段2,表名2.字段1 别名2,表名2.字段2 FROM 表名1, 表名2; // 查询多个表的数据
SELECT 别名1.id sid,别名1.name,别名2.id cid, 别名2.name names FROM 表名1 别名1,表名2 别名2; // 效果和上面一样,只是简洁一点
SELECT 别名1.id sid,别名1.name,别名2.id cid, 别名2.name names FROM 表名1 别名1,表名2 别名2 WHERE 别名1.id<10 AND name =“hallo”; // 支持WHERE条件
SQL约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录,有助于快速查找表中的一个特定的记录。 主键必须包含唯一的值,主键列不能包含 NULL 值,每个表只能有一个主键
例如
CREATE TABLE abc(id int NOT NULL,PRIMARY KEY(id));
NOT NULL 约束某列不能存储NULL值,约束字段要包含值,如果不为字段添加值,则无法更新或者插入新的值
例如:
CREATE TABLE abc(id int NOT NULL);
UNIQUE 约束唯一标识数据库表中的每条记录
例如: CREATE TABLE abc(id int NOT NULL,UNIQUE(id));
FOREIGN KEY 约束一个表的值指向另一个表的唯一标识,防止非法数据插入,必须是其指向的表中的值
例如: CREATE TABLE abc(id int NOT NULL,home int,PRIMARY KEY (Id),FOREIGN KEY (home) REFERENCES Persons(home));
ALTER TABLE 子表名 ADD CONSTRAINT 约束名 FOREIGN KEY(子表名字段) REFERENCES 父表名(字段);
DEFAULT 约束向列中插入默认值,确保列中始终有值,而不是NULL值
例如: CREATE TABLE abc(id int DEFAULT ‘0’);
CHECK 约束限制列中的值的范围,当向单个列约束时,那么该列只允许特定的值,当向一个表约束时,那么该约束只会在特定的列中对值进行限制
例如:
CREATE TABLE abc(id int NOT NULL,CHECK(id >0));
添加表级约束 例如:
ALTER TABLE 表名 add UNIQUE(home);
添加表,列级约束
ALTER TABLE 表名 modify id int NOT NULL
移除外建约束
ALTER TABLE 表名 DROP FOREIGN KEY 约束名;
mysql 函数
使用方法,例如:
SELECT 函数(字段) FROM 数据表;
COUNT() 计数
SUM() 求和
AVG() 平均
MAX() 最大
MIN() 最小
COUNT() 返回表的记录数
创建用户,删除用户,修改用户
创建用户
GRANT ALL PRIVILEGES ON . TO ‘a1’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON . TO ‘a1’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
INSERT INTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject,authentication_string) VALUES("%",“a3”,password(“123456”),‘y’,‘y’,‘y’,‘y’);
删除用户
DROP USER ‘a1’@’%’;
DELETE FROM user WHERE user=‘a2’ AND host=’%’;
修改用户密码
管理员修改
UPDATE mysql.user SET password=password(‘123’) WHERE user=‘a3’ AND host=’%’;
SET password FOR ‘a1’@’%’=password(“123”);
root修改
GRANT ALL ON . TO ‘a3’@’%’ IDENTIFIED BY ‘123’;
UPDATE mysql.user SET authentication_string=password(‘123’) WHERE user =‘a1’;
普通用户修改(普通用户只能修改自己的密码)
SET password=password(‘123’);
连接
当想要输出一段数据,但是里面的数据来自不同的表
内连接
SELECT 别名1.id,别名1.name,别名1.id_name别名2.score FROM 表名1 别名1 INNER JOIN 表名2 别名2 ON 别名1.id_name = 别名2.id;
外连接
SELECT 别名1.id,别名1.name,别名1.id_name别名2.score FROM 表名1 别名1 RIGHT OUTER JOIN 表名2 别名2 ON 别名1.id_name = 别名2.id;
内连接和外连接的区别是内连接只返回两个表同时存在的数据,外连接(RIGHT OUTER JOIN)只返回右表都存在的行,外连接(LEFT OUTER JOIN)只返回左表都存在的行
INNER JOIN是选出两张表都存在的记录,LEFT OUTER JOIN是选出左表存在的记录,RIGHT OUTER JOIN是选出右表存在的记录,FULL OUTER JOIN则是选出左右表都存在的记录
视图
CREATE VIEW 视图名(字段1,字段2,字段3) AS SELECT 字段1,字段2,字段3 FROM 表名;
SELECT * FROM 视图名; // 输出视图的数据
可以理解为将表的指定字段来插入到一个“虚拟的表”,视图的字段名和表的字段名可以不一样,用户就查询不到原来的表的结构和接触不了实质上的表
查询视图
DESCRIBE 视图名;
在多表上创建视图
CREATE VIEW 视图名 AS SELECT 字段1,字段2,字段3 FROM 表名1 别名1,表名2 别名2 WHERE 别名1.字段1 = 别名2.字段1 AND 别名2.字段2 = 别名1.字段2 ;
查看当前mysql版本
SELECT VERSION();
查看当前数据库的用户
SELECT USER();
查看数据库的存储路径
SELECT @@DATADIR;
查看mysql的安装路径
SELECT @@BASEDIR
查看mysql的安装操作系统
SELECT @@VERSION_COMPILE_OS
初始数据库默认有4个,其中information_schema是保存着mysql服务器所维护的其他数据库的信息,例如数据库表,数据库名,表的数据类型,以及数据库的权限等等
其中information_schema有73个表,其中最重要的有3个,分别是SCHEMATA和TABLES,以及COLUMNS
SCHEMATA表存储了当前mysql中存储的数据库的信息,指令SHOW DATABASES;的结果来自于该表
TABLES表存储了数据库中的表的信息(视图的信息也存储在该表)
COLUMNS表存储了表的列信息
通过information_schema表来查询
查询有什么数据库
SELECT * FROM information_schema.SCHEMATA;
查询hallo数据库有什么数据表
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA=“hallo”;
查询hallo数据表有哪些列
SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME=“hallo”;
mysql数据库是mysql的核心,其中存储了数据库的用户,权限设置,关键字等等所需要使用和管理的数据
performance_schema数据库存储了mysql服务器运行期间的状态信息,例如执行了那些语句,内存使用了多少等等
sys数据库主要是通过视图的形式将数据库的数据汇总,可用来性能调优和诊断
UNION操作符可以将多个(2个以上)SELECT语句合并在一起,如果出现重复的数据会被忽略(唯一性)
例如:
SELECT id FROM test UNION SELECT id FROM test1 ORDER BY id;
如果需要输出重复的数据,可以使用UNION ALL