启动MySQL服务:1.cmd---services.msc ; 2. cmd---"net start mysql (net stop mysql) " . (mysql 对应服务器名字).
登录MySQL数据库: 1.windows方式登录:"mysql -h hostname -u usename -p". 2.使用MySQL Commande Line Client 登录; 3.图形管理工具登录.
创建数据:“CREATE DATABASE DBname;".
使用数据库:"USE DBname;".
查看系统中所有的数据库:"SHOW DATABASES;"
查看数据库中的表"show tables from BDname"
查看表中的列“show columns from TABLEname”
查看数据库信息:"SHOW CREATE DATABASE DBname".
查看引擎:"SHOW VARIABLES LIKE 'storage_engine';".
创建表:CREATE TABLE <表名>
(
字段名1,数据类型[列级别约束条件][默认值],
字段名2,数据类型[列级别约束条件][默认值],
……
[表级别约束条件]
);
删除表:"DROP TABLE [IF EXISTS]表1,表2,……表n;"
约束条件:
CREATE TABLE <表名>
(
字段名1,数据类型 PRIMARY KEY, //主键
字段名2,数据类型 NOT NULL, //非空
字段名3,数据类型 UNIQUE, //唯一
字段名4,数据类型 DEAFAULT 默认值, //默认
字段名5,数据类型 AUTO_INCREMENT, //自动增加
……
PRIMARY KEY(字段名1,字段名2,……) //主键
[CONSTRAINT<外键名>] FOREIGN KEY 字段名1[,字段名2,……] REFERENCES<主表名> 主键列1[,主键列2,……] //外键
);
查看数据表结构: "DESCRIBE/DESC 表名;".
查看表详细结构:"SHOW CREATE TABLE <表名\G>;".
修改表名:" ALTER TABLE <旧表名> RENAME [TO] <新表名>;"
修改字段数据类型:"ALTER TABLE<表名> MODIFY <字段名> <数据类型>;"
修改字段名:"ALTER TABLE <表名> CHANGE <旧字段名><新字段名><新数据类型>" //<新数据类型>不能为空
添加字段:"ALTER TABLE <表名> ADD< 新字段名><数据类型>[约束条件][FIRST | AFTER 已存在段名字]".
删除字段:"ALTER TABLE <表名> DROP <字段名>;"
修改字段排列位置:"ALTER TABLE <表名> MODIFY <字段1><数据类型> FIRST | AFTER <字段2>;"
更改表的存储引擎:"ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;"
删除表的外键约束:”ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;“
------------------------------------------------------------------数据类型----------------------------------------------------------------------------------------
整形
TINYINT | 1B |
SMALLINT | 2B |
NEDIUMINT | 3B |
INT(INTEGER) | 4B |
BIGINT | 8B |
FLOAT | 4B |
DOUBLE | 8B |
DECIMAL(M,D),DEC | M+2B |
YEAR | YYYY | 1B |
TIME | HH:MM:SS | 3B |
DATE | YYYY-MM-DD | 3B |
DATETIME | YYYY-MM-DD HH:MM:SS | 8B |
TIMESTAMP | YYYY-MMM-DD HH:MM:SS | 4B |
二进制0
BIT(M) | (M+7)/8 B |
BINARY(M) | M B |
VARBINARY(M) | M+1 B |
TNYBLOB(M) | L+1 |
BLOB(M) | L+2 |
MEDIUMBLOB(M) | L+3 |
LONGBLOB(M) | L+4 |
数学函数
绝对值ABS(x),圆周率PI(),平方根SQRT(x),求雨函数MOD(x,y),获取整数CEIL(x),CEIL(x),FLOOR(x),随机数RAND(),RAND(x),四舍五入ROUND(x),ROUND(x,y)TRUNCATE(x,y)
符号函数SIGN(x),幂运算函数POW(x,y),POWER(x,y),EXP(x),对数运算函数LOG(x),LOG10(x),角度弧度转换RADIANS(x),DEGREES(x)
字符串函数
计算字符串字符个数CHAR_LENGTH(str),字符串长度LENGTH(str),合并字符串CONCAT(s1,s2,...),CONCAT(x,s1,s2,...),替换字符串INSERT(s1,x,len,s2),
字母大小写转换LOWER(str) / LCASE(str), UPPER(str) / UCASE(str),获取指定长度字符串LEFT(s,n),填充字符串函数LPAD(s1,len,s2), RPAD(s1,len,s2),
删除空格函数LTRIM(s), RTRIM(s), TRIM(s),删除指定字符串TRIM(s1 FROM s),重复生成字符串REPEAT(s,n),空格函数SPACE(n),替换函数REPLACE(s,s1,s2)
比较字符串大小函数STRCMP(s1,s2),获取子串函数SUBSTRING(s,n,len),匹配子串开始位置的函数LOCATE(str1,str2) / POSITION(str1 IN str2) / INSERT(str,str1),
逆序串REVERSE(s),返回指定位置的字符串函数ELT(n,str1,str2,str3),返回指定字符串位置的函数FIELD(s,s1,s2)
--------------------------------------------------------------------------查询---------------------------------------------------------------------------------
基本查询:
1.SELECT 字段1,字段2,……字段n FROM 表名;
2.SELECT * FROM 表名; (*通配符查询所有字段)
WHERE 查询条件:
1.操作符=,<>/!= ,<,<=,>,>=,BETWEEN)
2.带IN / NOT IN关键字的查询( 用括号将检索条件括起来)
SELECT s_id,f_name,f_price
FROM fruits
WHERE s_id IN(102,103)
ORDER BY f_name;
3.BETWEEN AND: WHERE BETWEEN value1 AND value2;(包含value1,2)
NOT BETWEEN AND (不包含v1,v2)
4.LIKE搭配通配符
4.1 百分号'%' 匹配任意长度的字符
SELECT f_id,f_name
FROM fruits
WHERE f_name LIKE 'a%';
ps: 以a开头:a%
以a结束:%a
包含a: %a%
以a开头以b结尾:a%b
4.2下划线通配符'_',一次只能匹配一个字符 WHERE LIKE '_____y';
5.查询空值 IS NULL / NOT IS NULL;
WHERE value IS NULL;
6. AND / OR 可以增加查询条件;PS:用IN可以达到OR的效果,但是IN速度快于OR,AND,OR可以一起使用且AND优先级较高;
查询显示
1.查询结果不重复 SELECT DISTINCT 字段名 FROM 表名;
2.ORDER BY 排序
SELECT *
FROM tables
ORDER BY value1[(DESC | ASC)],value2[(DESC | ASC)],...,value n[(DESC | ASC)];
分组GROUP BY
函数:
COUNT()
count(*)计算表中的总行数:SELECT count(*) AS newrow FROM table;
内连接查询
(1) SELECT suppliers.s_id,s_name,f_name,f_price
FROM fruits,suppliers
WHERE fruits.s_id = suppliers.s_id;
(2) SELECT suppliers.s_id,s_name,f_name,f_price
FROM fruits INNER JOIN suppliers
ON fruits.s_id = suppliers.s_id;
自连接查询
SELECT f1.f_id,f_name
FROM fruits AS f1, fruits AS f2
WHERE f1.f_id = f2.f_id AND f2.f_id='a1';
左连接(右)
SELECT customers.c_id,orders.o_num
FROM customers LEFT(RIGHT) OUTER JOIN orders
ON customers.c_id = orders.c_id;
带ANY, ALL子查询
SELECT num1 FROM tb1 WHERE num1> ANY(ALL) (SELECT * FROM tb2);
带EXISTS子查询(NO EXISTS同理)
SELECT * FROM fruits
WHERE EXISTS
(SELECT s_name FROM suppliers WHERE s_id = 107);
首先判断子查询,如果为true则进行外部查询,否则外层语句不进行查询