mysql数据库学习
Mysql:数据库软件
安装:
卸载:
1.关闭mysql服务
1.手动关闭:我的电脑-->右键-->管理
2.cmd-->services.msc,打开服务面板
3.cmd-->net stop mysql。(注意获取cmd管理员权限)
2.卸载
3.删除数据存储文件
* 找到mysql的安装目录。中my.ini文件
datadir目录,删除
* 使用:
* 登陆数据库:
cmd-->mysql -uroot -p你自己的密码
* 服务:系统后台进程
* 启动服务: net start mysql
* 停止服务: net stop mysql
* 配置:
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 服务
* SQL:结构化查询语言
* 概念:通过sql语言可以操作所有的关系型数据库。每种数据库之间会存在差异,称为 "方言"
* sql分类:
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
* DDL:操作数据库 和 表
* 操作数据库:
* 创建:create database 数据库名称;
* 删除:drop database 数据库名称;
* 修改:alter database mydb1character set 要修改的字符集名称
* 查询:show databases; -- 查询所有数据库的名称
show create database 数据库名称; -- 查询创建数据库语句
* 操作表:
* 创建:
* 列的数据类型:
* int:整型 id int,
* double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
money double(5,2)
char:固定长度字符串类型;
name char(10) "张三"
* varchar:可变长度字符串类型;
name varchar(10) "张三"
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
* timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss
* 如果该类型的字段不给赋值,则默认当前时间
* 语法:
create table 表名(
列名1 类型1,
列名2 类型2,
...
列名n 类型n
);
create table student(
sname varchar(20),
age int,
gender varchar(6)
);
* 删除:drop table 表名;
* 修改:
1. 修改之添加列:给stu表添加classname列:
ALTER TABLE stu ADD (classname varchar(100));
2. 修改之修改列类型:修改stu表的gender列类型为CHAR(2):
ALTER TABLE stu MODIFY gender CHAR(2);
3. 修改之修改列名:修改stu表的gender列名为sex:
ALTER TABLE stu change gender sex CHAR(2);
4. 修改之删除列:删除stu表的classname列:
ALTER TABLE stu DROP classname;
5. 修改之修改表名称:修改stu表名称为student:
ALTER TABLE stu RENAME TO student;
* 查询:show tables; -- 查询该数据库下所有表名称
desc 表名; -- 查询表结构
* 注意:操作表之前,应该先选择一个数据库使用:use 数据库名称;
* DML:操作表中的数据
* 增:
* 语法:
* insert into 表名(列名1,列名2,...) values(值1,值2,....);
* 注意:如果表的所有列都添加值,则列名可以省略
insert into stu(sname,age) values("lisi",23);
insert into stu(sname,age,sex) values("zhangsan",23,'1');
insert into stu values("ww",23,'2');
* 删:
* 语法:
* delete from 表名 [where 条件];
* truncate table 表名;-- 删除所有记录
* 先删除表,再创建表。
delete from stu where sname = 'lisi'
* 改:
* 语法:
* update 表名 set 列名1 = 值1 , 列名2 = 值2... [where 条件]
update stu set sex = "1" where sname = "lisi";
update
customer
set
money = 500000
where
id = xxx;
* DQL:查询
* 语法:
SELECT
selection_list /*要查询的列名称*/
FROM
table_list /*要查询的表名称*/
WHERE
condition /*行条件*/
GROUP BY
grouping_columns /*对结果分组*/
HAVING
condition /*分组后的行条件*/
ORDER BY
sorting_columns /*对结果分组*/
LIMIT
offset_start, row_count /*结果限定*/
* 条件查询:where 子句
=、!=、<>(不等于)、<、<=、>、>=;
BETWEEN…AND;
IN(set);
IS NULL;
AND;
OR;
NOT;
* 模糊查询:like
* 通配符
* _:匹配单个任意字符
* %:匹配多个任意字符
* 字段控制:
* 修改字段的别名:AS (可以省略)
* 字段别名:一般运算的字段起别名
* 表起别名:给每一张表起一个别名。简化书写
* 字段运算:
* null参与的运算,结果都为null
* 一般会将null替换为0 : ifnull(字段名称,如果是null的替换值)
* 去除重复记录
* DISTINCT
* DQL:
* 聚合函数:
* 聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
* 分组查询:group by
* 查询的字段:
1.分组字段本身
2.聚合函数
* where和having
* where:在分组之前对条件进行限定。不满足条件,就不会参与分组
* having:在分组之后,对结果集的筛选
* 分页查询:
* limit 开始的记录索引, 每一页显示的条数
开始的记录索引 = (页码-1)*每一页显示的条数
* oracle:rownum
* sqlserver:top
* 完整性约束:
* 在创建表时,给表中字段指定一些规则,用于限制将来的添加数据
* 约束分类:
* 主键约束:非空且唯一 primary key 一般用于定义一条记录的唯一标识
* 主键自增长约束:auto_increment 当主键是数字类型时,如果给定的值为null,可以自动增长
* 非空约束:not null
* 唯一约束:unique
* 外键约束:
* CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid)
外键名称
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键 主键自增长
username VARCHAR(32) UNIQUE, -- 唯一
PASSWORD VARCHAR(32) NOT NULL -- 非空
);
CREATE TABLE emp(
empno INT,
ename VARCHAR(50),
job VARCHAR(50),
mgr INT,
hiredate DATE,
sal DECIMAL(7,2),
comm decimal(7,2),
deptno INT ,
CONSTRAINT fk_t_user FOREIGN KEY(deptno) REFERENCES dept(deptno)
) ;
CREATE TABLE dept(
deptno INT primary key,
dname varchar(14),
loc varchar(13)
);
* 表和表之间的关系
* 一对一:
* 可以给任意一方添加外键。但是一般给主体添加外键
* 一对多 或 多对一:
* 多的一方 外键
* 一的一方 主键
* 注意:主外键的名称可以不一样,但是类型必须一致
* 多对多:
* 需要定义第三张中间表,非别定义两个外键,关联两张表的主键
* 多表查询:
* 等值连接:
SELECT e.*,d.dname,d.loc FROM emp e,dept d WHERE e.deptno = d.deptno;