MySQL服务的启动和停止
- 计算机-管理-服务,找到你的MySQL服务,手动启动
- (管理员)命令行: 启动:net start 服务名 eg:net start MySQL
停止:net stop 服务名 eg:net stop MySQL
MySQL服务端的登陆和退出
- MySQL自带的命令行
- Windows powershell / 命令行
启动:mysql -h 主机名 -P 端口 -u 用户名 -p
Eg:mysql -h localhost -P 3306 -u root -p
退出:exit或Ctrl+C
常用命令
- 显示已创建的数据库:
show databases;
- 打开数据库:
use [数据库名];
eg: use text;
- 查看已建立的表:
show tables ; (已打开的数据库中的表)
show tables from [数据库名];
- 查看当前所在的库:
select database();
- 在当前数据库创建表:
create tables [表名](
[列名] [类型],
……);
Eg:create tables stuinfo(
id int,
name varchar(20));
- 查看中表的结构:
desc [表名];
- 查看表中的数据:
select * from [表名];
- 查看MySQL版本:
MySQL服务端 select version()
Powershell mysql – version
MySQL的语法规范
不区分大小写,建议命令关键字大写、表名列名小写
每条命令用分号结尾
每条命令根据需要,可以进行换行或缩进
注释
a) 单行注释: #注释 或 – 注释
b) 多行注释: /* 注释 */
Centos7安装和配置MySQL
配置教程: https://segmentfault.com/a/1190000020739817?utm_source=tag-newest
1.安装mysql-server
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum install mysql-community-server
2.初始化配置
systemctl start mysqld.service #启动mysql-server
netstat -tnlp | grep 3306 #查看是否启动成功
grep “password”/var/log/mysqld.log #查询root密码
mysql -u root -p #登陆mysql
ALTER USER 'root'@'localhost' IDENTIFIED BY '@ABcd123456' #重设密码
关于 mysql 密码策略相关参数;
SHOW VARIABLES LIKE 'validate_password% #查看密码格式
set global validate_password_policy=LOW;
set global validate_password_length=6;
1)、validate_password_length 固定密码的总长度;
2)、validate_password_dictionary_file 指定密码验证的文件路径;
3)、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
4)、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
6)、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;
MySQL配置
配置文件:/etc/my.cnf
日志文件:/var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
DDL数据定义语言
库的管理
- 库的创建
create database if not exists 库名;
#案例:创建库books
CREATE DATABASE IF NOT EXISTS books;
- 库的修改
alter database 库名;
- 库的删除
drop database if exists 库名;
表的管理
- 表的创建
Create table 表名(
列名 类型,
……
)
#案例:创建表book
CREATE TABLE book(
id INT,#编号
bName VARCHAR(20),#书名,最多20个字符
price DOUBLE,#价格
authorId INT,#作者编号
publishDate DATETIME#出版日期
);
DESC book;#查看
- 表的修改
Alter table 表名 add/drop/modify/change column 列名
#①修改列名
ALTER TABLE book CHANGE COLUMN publishDate pubDate DATETIME;
#②修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubDate TIMESTAMP;
#③添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE;
#④删除列
ALTER TABLE author DROP COLUMN annual;
#⑤修改表名
ALTER TABLE author RENAME TO book_author;
- 表的删除
drop table 表名;
- 表的复制
复制author这个表:
#1、仅仅复制表的结构
CREATE TABLE copy1 LIKE author;#复制author表的结构,并命名为copy1
#2、复制表的结构+数据
CREATE TABLE copy2
SELECT * FROM author;
#3、只复制部分数据
CREATE TABLE copy3
SELECT id,au_name
FROM author
WHERE nation='中国';
#4、仅仅复制某些字段
CREATE TABLE copy4
SELECT id,au_name
FROM author
WHERE 0;
#只想要结构,不要数据,所以复制数据的条件恒不成立
常见数据类型
- 数值型:
整型:tinyint smallint mediumint int/interger bigint
浮点型:float(M,D) double(M,D)
定点型:dec(M,D) decimal(M,D)
M:整数部位+小数部位 的长度 D: 小数部位 M和D都可以省略 - 字符型
较短的文本:char(M) varchar(M) M最大长度
较长的文本:text blob - 日期型:
date 只保存日期
time 只保存时间
year 只保存年
datetime 保存日期+时间 8字节 1000-9999年 不受时区影响
timestamp 保存日期+时间 4字节 1970-2038年 受时区影响
常见约束
CREATE TABLE 表名(
字段名 字段类型 列级约束
字段名 字段类型,
表级约束
);
含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性
分类:六大约束
- not null:非空,用于保证该字段的值不能为空。比如姓名、学号等
- default:默认,用于保证该字段有默认值。比如性别
- primary key:主键,用于保证该字段的值有唯一性,并且非空。比如学号
- unique:唯一,保证该字段的值有唯一性,可以为空。比如座位号
- check:检查约束【mysql不支持】,比如年龄性别
- foreign key:外键,用于限制两个表的关系,保证该字段值必须来自于主表关联列的值;在从表添加外键约束,用于引用主表中某列的值,比如:员工表的部门编号、工种号
添加约束的时间:
1、创建表时
2、修改表时
约束的添加分类:
1、列级约束:六大约束语法上都支持,但外键约束没有效果
2、表级约束:除了非空、默认约束,其他都支持
CREATE TABLE stuinfo(
id INT PRIMARY KEY,#主键
stuName VARCHAR(20) NOT NULL,#非空
gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查,不过mysql没用
seat INT UNIQUE,#唯一
age INT DEFAULT 18, #默认约束
majorId INT
)
DML数据操作语言
插入:insert
修改:update
删除:delete
插入语句
方式1:
insert int0 表名(列名,…) value(值1,…)
#1、插入的值的类型要与列的类型一致或兼容
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);
#2、不可以为null的列必须插入值,可以为null的列如何插入值?
#方式一:列名写上,值为null
#方式二:列名省略,值省略
INSERT INTO beauty(id,NAME,sex,borndate,phone,boyfriend_id)
VALUES(15,'杨幂','女','1986-9-12','1898888888',2);
#3、列的顺序可以调换
INSERT INTO beauty(NAME,sex,id,phone)
VALUES('蒋欣','女',16,'110');
#4、列数和值的个数必须一致
#5、可以省略列名,默认是所有列,且顺序是列的顺序
方式二:
insert int0 表名
set 列名=值,列名=值,……
INSERT INTO beauty
SET id=17,NAME='刘涛',phone='999';
两者比较:
- 方式一支持插入多行
INSERT INTO beauty
VALUES(13,'唐艺昕1','女','1990-4-23','1898888888',NULL,2),
VALUES(18,'唐艺昕2','女','1990-4-23','1898888888',NULL,2),
VALUES(19,'唐艺昕3','女','1990-4-23','1898888888',NULL,2);
- 方式一支持子查询
INSERT INTO beauty(id,NAME,phone)
SELECT 26,'宋茜','11809866';
#把这个查询语句的结果集插入到beauty
修改语句
- 修改单表的记录
update 表名
set 列=新值,列=新值,...
where 筛选条件;
#案例1、修改beauty表中姓唐的女生电话为138277777
UPDATE beauty SET phone='138277777'
WHERE NAME LIKE '唐%';
#案例2:修改boys表中id号为2的名称为张飞,魅力值为10
UPDATE boys SET boyname='张飞',usercp=10
WHERE id=2;
- 修改多表的记录
update 表1 别名
inner/left/right join 表2 别名
on 连接条件
set 列=值...
where 筛选条件;
#案例1:修改张无忌的女朋友的手机号为1123
UPDATE boys bo
INNER JOIN beauty be
ON bo.id=be.`boyfriend_id`
SET be.phone='1123'
WHERE bo.`boyName`='张无忌';
#案例2:修改 没有男朋友的女神 的男朋友编号 都为张飞的编号
UPDATE boys bo
RIGHT JOIN beauty be
ON bo.id=be.`boyfriend_id`
SET be.boyfriend_id=2
WHERE bo.id IS NULL;
删除语句
- 单表的删除
delete from 表名 where 筛选条件
#案例1:删除手机号以9结尾的女生信息
DELETE FROM beauty WHERE phone LIKE '%9';
- 多表的删除
delete 表1 的别名,表2 的别名
from 表1 的别名
inner/left/right join 表2 别名
on 连接条件
where 筛选条件;
#案例:删除张无忌的女朋友的信息
DELETE be
FROM beauty be
INNER JOIN boys bo
ON be.`boyfriend_id`=bo.`id`
WHERE bo.`boyName`='张无忌';
#案例:删除黄晓明的信息,以及他女朋友的信息
DELETE be,bo
FROM beauty be
INNER JOIN boys bo
ON be.`boyfriend_id`=bo.`id`
WHERE bo.`boyName`='黄晓明';
DQL数据查询语言
简单查询
select 查询列表 from 表名
#1.查询表中的单个字段
SELECT last_name FROM employees;
#2.查询表中的多个字段
SELECT last_name,salary,email FROM employees;
#3.查询表中所有字段(双击左侧)
SELECT * FROM employees ;
#4.查询常量值
SELECT 100;
SELECT 'john';
#(不区分字符和字符串)
#5.查询表达式
SELECT 100%98;
#6.查询函数
SELECT VERSION()
条件查询
select
查询列表
from
表名
where
筛选条件;
分类:
1.按条件表达式筛选
条件运算符: > < = != <>(不等于) >= <=
2.按逻辑表达式筛选
逻辑运算符:&& || !
and or not
作用:连接条件表达式
3.模糊查询
like
between and
in
is null
#1. 按条件表达式筛选
#案例1:查询工资>12000的员工信息
SELECT
*
FROM
employees
WHERE
salary>12000;
#2.按逻辑表达式筛选
#案例1:查询工资在10000到20000之间的员工名,工资和奖金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary>=10000 AND salary<=20000;
#3.模糊查询
/*
like:
①一般和通配符搭配使用
通配符:
% 任意多个字符,包含0个
_ 任意单个字符
*/
#案例1:查询员工名中包含字符a的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%';
#%代表通配符,代表任意个字符
#案例2:查询员工名中第3个字符为n,第五个字符为l的员工名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__n_l%'