1、操作数据库
- 连接数据库:
mysql -uroot -p123123
- 显示已经存在的数据库:
show databases;
-
创建数据库:
create database mydb1;
create database mydb2 character set gbk;
show create database mydb2;
查看前面创建的mydb2数据库的定义信息
create database mydb3 character set gbk COLLATE gbk_chinese_ci;
- 带校验规则的数据库
- collate 关键字;gbk_chinese_ci校验规则
-
修改数据库:
alter database mydb2 character set utf8
- 使用数据库:
use mydb1;
- 删除数据库:
drop database mydb3;
- 查看当前使用的数据库:
select database();
2、操作表
- 创建表:
create table emp(id int(4)not null,name varchar(20) not null,primary key(id));
- 显示表:
show tables;
- 查看表的字段信息:
DESC emp;
- 查看表格的创建细节:
show CREATE TABLE user;
show CREATE TABLE user\G;
格式化显示结果
- 对表的列操作:
ALTER TABLE emp ADD image blob;
添加列ALTER TABLE emp MODIFY job varchar(60);
修改列job的类型长度ALTER TABLE emp DROP image;
删除列ALTER TABLE user CHANGE name username varchar(100);
修改name列为usename
- 表名改为user:
rename TABLE emp TO user;
- 修改表的字符集为gbk:
ALTER TABLE user CHARACTER SET gbk;
- 删除表:
DROP TABLE user;
3、DML数据操作(对表增、删、改)
- 在mysql中,字符串类型和日期类型都要用单引号括起来。'tom' '2015-09-04'
- 空值:null
-
insert 插入数据(如果插入空值,请使用null):
INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
insert emp values(id,name);
insert into emp values(id,name);
insert into emp(id) values(id,);
insert into emp values(id,name),(id1,name1),(id2,name2);
批量插入
-
修改数据:
UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值
updata emp set name = '小强' where id = 1003;
- 删除数据:
DELETE FROM 表名 【WHERE 列名=值】
delete from emp where id = 1003;
truncate TABLE emp;
- DELETE 删除表中的数据,表结构还在;删除后的数据可以找回,TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。删除的数据不能找回。执行速度比DELETE快。
4、DQL数据查询(查)
- 数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
- 查询返回的结果集是一张虚拟表。
- 查询数据:
SELECT 列名 FROM表名 【WHERE --> GROUP BY -->HAVING--> ORDER BY-->LIMIT】
select * from emp;
- 条件查询where
- =、!=、<>、<、<=、>、>=;
- BETWEEN…AND;
- IN(set) not in(set)
- IS NULL; IS NOT NULL
- and
- or
- not
- 模糊查询like
- _ 任意一个字符
- % 任意0~n个字符
- 字段控制查询(去重、判断null)
SELECT distinct name FROM emp;
去除name重复记录SELECT *,sal+IFNULL(comm,0) FROM emp;
sal是薪水 comm佣金,判断佣金为null则转换成数值0SELECT *, sal+IFNULL(comm,0) AS total FROM emp;
起别名SELECT *,sal+IFNULL(comm,0) total FROM emp;
as可以省略
- 排序
- order by 列名 asc(默认升序) desc
SELECT * FROM emp ORDER BY sal DESC,empno ASC;
sal相同时,按empno降序排列
- 聚合函数
- COUNT():统计指定列不为NULL的记录行数
SELECT COUNT(*) AS cnt FROM emp;
查询emp表中记录数SELECT COUNT(comm) cnt FROM emp;
查询emp表中有佣金的人数
- MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
- MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
SELECT MAX(sal), MIN(sal) FROM emp;
- SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
- AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
SELECT SUM(sal+IFNULL(comm,0)) FROM emp;
查询所有雇员月薪+佣金和
- COUNT():统计指定列不为NULL的记录行数
- 分组查询GROUP BY having
- 注:凡和聚合函数同时出现的列名,一定要写在group by 之后
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
查询每个部门的部门编号以及每个部门的人数SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;
查询工资总和大于9000的部门编号以及工资和- having与where的区别:
- having是在分组后对数据进行过滤。
- where是在分组前对数据进行过滤
- having后面可以使用聚合函数(统计函数)
- where后面不可以使用聚合函数
- limit
- LIMIT用来限定查询结果的起始行,以及总行数
SELECT * FROM emp LIMIT 0, 5;
查询5行记录,起始行从0开始- 查询代码的书写顺序和执行顺序
- 查询语句书写顺序:select – from- where- group by- having- order by-limit
- 查询语句执行顺序:from - where -group by - having - select - order by-limit
5、数据的完整性
- 作用:保证用户输入的数据保存到数据库中是正确的
- 确保数据的完整性 = 在创建表时给表中添加约束
- 完整性的分类
- 实体完整性
- 域完整性
- 引用完整性
1、实体完整性
- 实体:即表中的一行(一条记录)代表一个实体(entity)
- 实体完整性的作用:标识每一行数据不重复。
- 约束类型:
- 主键约束(primary key)
CREATE TABLE student(Id int primary key,Name varchar(50));
CREATE TABLE student(id int,Name varchar(50),Primarykey(id));
此种方式优势在于,可以创建联合主键,如下例:CREATE TABLE student(id int,Name varchar(50),Primary key(id,name));
CREATE TABLE student(Id int,Name varchar(50));
ALTER TABLE student ADD PRIMARY KEY (id);
- 唯一约束(unique)
CREATE TABLE student(Id int primary key,Name varchar(50)unique);
- 自动增长列(auto_increment)
- 给主键添加自动增长的数值,列只能是整数类型,但是如果删除之前增长的序号,后面再添加的时候序号不会重新开始,而是会接着被删除的那一列的序号
CREATE TABLE student(Id int primary key auto_increment,Name varchar(50));
- 主键约束(primary key)
2、域完整性
- 域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较
- 域代表当前单元格
- 域完整性约束:数据类型 非空约束(not null) 默认值约束(default)
3、引用完整性
- 要有外键必须先有主键,主键和外键的类型必须一致
ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);
Navicat使用
- 连接数据库
- 连接名:给要连接的数据哭起一个名字(连接的是数据库服务器,不是某一个数据库)
- 主机名或IP地址:loaclhost
- 端口:3306
- 用户名:
- 密码:
卸载
1.停止mysql服务 net stop mysql 启动mysql服务 net start mysql
2.卸载mysql
3.找到mysql 安装目录下的 my.ini datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
修改密码
* 安装成功了打开cmd --> mysql -uroot -p你的密码
* 修改mysql root用户密码
* 1) 停止mysql服务 运行输入services.msc 停止mysql服务
或者 cmd --> net stop mysql
* 2) 在cmd下 输入 mysqld --skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口)
* 3) 新打开cmd 输入mysql -u root -p 不需要密码
use mysql;
update user set password=password('abc') WHERE User='root';
* 4) 关闭两个cmd窗口 在任务管理器结束mysqld 进程
* 5) 在服务管理页面 重启mysql 服务
密码修改完成