1. cmd 启动数据库
1.1 net start mysql
停止数据库
1.2 net stop mysql
1.3 进入mysql管理终端:mysql -u root -p
tips:第一次没有设置密码直接空格进入
1.4 连接到Mysql服务的指令
mysql -h 主机IP -P 端口 -u 用户名 -p密码
tips:
-p密码间无空格
若无-h和-P默认是本地主机和3306端口
mysql -u root -ppassword
//等价于
mysql -h 127.0.0.1 -P 3306 -u root -ppassword
实际中会改掉端口3306以防恶意攻击
2.数据库图形化管理工具
Navicat(p734)
SQLyog(p735)
3. 表的本质仍然是文件
4.SQL语句分类
DDL:数据定义语句(create表、库)
DML:数据操作语句(增加、修改、删除)
DQL:数据查询语句(select)
DCL:数据控制语句(管理数据库)
4. SQL语句
4.1 CREATE DATASET db_name CHARACTER SET utf8 COLLATE utf8_bin
#创建名为db_name的数据库,并把基字符集设为utf8,数据库排序规则设为utf8_bin
4.2 SHOW DATABASES
#显示所有的数据库名称
4.3 SHOW CREATE DATABASE db_name
#显示创建数据库时的命令
4.4 DROP DATABASE db_name
#删除数据库
4.5 备份数据库
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql
(在DOS执行)
4.6 恢复数据库
Source 文件名.sql
5. 表的相关操作
5.1 创建表
CREATE TABLE table_name
(
field1 datatype,
field2 datatype
)CHARACTER SET 字符集 COLLATE 校对规则 ENGINE 引擎;
#tips:CHARACTER SET 字符集 COLLATE 校对规则 ENGINE 引擎可以不写,会设为默认,但“;”必须加,否则会报错
5.2 Mysql 常用数据类型(列类型)
5.3 插入
#创建表
CREATE TABLE `emp`(
id INT,
`name` VARCHAR(32),
sex CHAR(1),
birthday DATE,
entry_date DATETIME,
job VARCHAR(32),
salary DOUBLE,
`resume` TEXT);
#插入
INSERT INTO `emp`
VALUES(20, 'alan', '男', '2000-11-11', '2010-11-10 11:11:11', 'waiter', 4000, 'hello');
SELECT * FROM `emp`;
5.4 修改表
使用ALTER TABLE 语句追加、修改、或删除列
#增添列
ALTER TABLE emp
ADD lover VARCHAR(32) NOT NULL DEFAULT '' AFTER RESUME
#修改列 以什么为索引?
ALTER TABLE emp
ADD lover VARCHAR(64) NOT NULL DEFAULT '' AFTER RESUME
#删除特定列(列名)
ALTER TABLE emp
DROP sex
#修改表名
RENAME TABLE emp to employee
#修改表的字符集为utf8
ALTER TABLE employee CHARACTER SET utf8
#列名job修改为user_job
ALTER TABLE employee CHANGE `job` user_job VARCHAR(32) NOT NULL DEFAULT ''
DESC table_name --显示表结构,可以查看表的所有列
6. 数据库记录(行)的增删查改CRUD:creat,read,update,delete
6.1 添加数据INSERT
INSERT INTO goods (id, goods_name, price)
VALUES(10, 'huawei', 2000)
#添加数据tips:
#字符和日期型数据应包含在单引号里
#如果是给表中所有字段添加信息,可以不写前面的字段名称
#插入记录时不给定某个字段值,则默认为NULL(如果该字段不设为不允许为NULL的话)
#插入多条记录
INSERT INTO goods (id, goods_name, price)
VALUES(20, 'Apple', 3000)(30, 'vivo', 4000)
6.2 更新语句UPDATE
#没有WHERE语句限定将所有的price字段值改为3000
UPDATE goods
SET price=3000
#该特定的记录
UPDATE goods
SET price=3000
WHERE goods_name='huawei'
#在原数据上添加 更新为5000
UPDATE goods
SET price=price+2000
WHERE goods_name='huawei'
#修改多个列的值
UPDATE goods
SET price=6000, id=303
WHERE goods_name='huawei'
6.3删除语句DELETE
#删除特定记录
DELETE FROM goods
WHERE goods_name='vivo';
#删除表中所有记录
DELETE FROM goods;
#删除表
DROP TABLE employee;
6.4 SELECT语句
CREATE TABLE Student(
id INT,
`name` VARCHAR(64),
math INT,
English INT,
gym INT)
INSERT INTO Student
VALUES(001, 'alan', 89, 97, 96),(002, 'alam', 95, 92, 93),(003, 'alamd', 90, 85, 94)
#显示学生名字和总分,表头为SELECT的字段名称
SELECT `name`, (math+English+gym) FROM Student
#显示学生名字和总分并指定每列的表头
SELECT `name` AS 'Name', (math+English+gym) AS total_score FROM Student
#SELETE [DISTINCT] *|{column1,column2..} FROM table_name;
#*代表查找所有列
#DISTINCT可选,指显示结果时,是否去掉重复数据(要查询的每个字段都相同才会去重)
WHERE
SELECT `name` FROM Student WHERE (math+English+gym)>200 AND math<gym AND `name` LIKE 'al%'
#查找总分大于200并且数学成绩低于体育并且名字前两个字母是'al'的学生
#%表示模糊查询
order by指定排序的列,排序的列既可以是表中的列名,也可以是SELECT语句后指定的列名,ASC升序(默认),Desc降序
order by位于SELECT语句的结尾。
SELECT `name` FROM Student WHERE math BETWEEN 90 AND 95 ORDER BY English DESC
6.5 统计函数
CREATE TABLE t1(
`name` VARCHAR(20),
math INT,
English INT,
gym INT);
INSERT INTO t1 VALUES('Tom', 90, 89, 80);
INSERT INTO t1 VALUES('Alan', 99, 97, 93);
INSERT INTO t1 VALUES('Jack', 96, 94 ,91);
INSERT INTO t1 VALUES(NULL, NULL, NULL, NULL);
INSERT INTO t1 VALUES('Mary', 96, 89, 86);
INSERT INTO t1 VALUES('Ted', 98, 86, 87);
SELECT * FROM t1
SELECT COUNT(*) FROM t1
SELECT * FROM t1
DROP TABLE t1
SELECT COUNT(`name`) AS 'student' FROM t1
SELECT COUNT(*) FROM t1
#COUNT(*)返回满足条件的记录的行数
#COUNT(`name`)统计满足条件的某列有多少个,但是会排除值为null的情况
SELECT SUM(math) FROM t1
#SUM函数用于求和,仅对数值起作用
SELECT SUM(math), SUM(English), SUM(gym) FROM t1
#对多列求和
SELECT AVG(math) FROM t1
#求均值
SELECT MAX(math) FROM t1
#求最大值
SELECT MIN(gym) FROM t1
#求最小值
6.6 分组GROUP BY ‘列名’
#即将‘列名‘相同的字段值放在一起
HAVING对分组结果过滤筛选
#计算每个部门的最高工资和平均工资,在使用AVG()、MAX()函数时必须指定GRUOP BY
SELECT AVG(sal),MAX(sal),depno
FROM emp GROUP BY depno;
#平均工资保留两位小数
SELECT FORMAT(AVG(sal), 2), MIN(sal), depno
FROM emp GROUP BY depno;
#查找平均工资小于2000的部门
SELECT FORMAT(AVG(sal), 2) ,depno FROM emp GROUP BY depno HAVING AVG(sal)<2000
7.字符串相关函数
#字符串操作
#返回字符串的字符集
SELECT CHARSET(ename)FROM emp;
#拼接字符串
SELECT CONCAT(ename, 'job is: ', job) FROM emp;
#INSTR(string, substring)返回substring在string中出现的位置,没有返回0,从1开始算
#DUAL可以作为测试表使用,即不需要从特定表提取字段时使用DUAL表
SELECT INSTR('hanshunping','han') FROM DUAL
#UCASE(string)转换成大写,不改变原表内容
SELECT UCASE(ename) FROM emp;
SELECT * FROM emp;
#LCASE(string)转换成小写
SELECT LCASE(ename) FROM emp;
#LEFT(string, length)从string中的左边起取length个字符
#RIGHT(string, length)从string中的右边起取length个字符
SELECT LEFT(ename,2) FROM emp;
#LENGTH(string) 返回string的长度,按字节
SELECT LENGTH(ename) FROM emp;
#REPLACE(str, search_str, replace_str)
#在str字段中,将search_str替换为replace_str,并不会替换原表内容
SELECT ename, REPLACE(job, 'MANAGER', '经理') FROM emp;
#逐字符比较两字符串,前者大返回1,后者大返回-1,相等返回0
SELECT STRCMP('alanm', 'alan') FROM DUAL
#SUBSTRING(str, position, [,length])从字符串的指定位置截取子串
SELECT SUBSTRING(ename, 1, 2) FROM emp;
#去除前端或者后端或者全部空格
SELECT LTRIM(' alan') FROM DUAL;
SELECT RTRIM('alan ') FROM DUAL;
SELECT TRIM(' alan ') FROM DUAL;
#以首字母小写显示所有员工的emp表的姓名
SELECT CONCAT(LCASE(SUBSTRING(ename,1,1)),SUBSTRING(ename,2)) FROM emp
8. 数学相关函数
略。
9. 时间日期相关函数
略。
10. 加密和系统函数
略。
11. 流程控制函数
略。