sql数据库入门基础

MySQL服务的启动和停止

  1. 计算机-管理-服务,找到你的MySQL服务,手动启动
  2. (管理员)命令行: 启动:net start 服务名 eg:net start MySQL
    停止:net stop 服务名 eg:net stop MySQL

MySQL服务端的登陆和退出

  1. MySQL自带的命令行
  2. Windows powershell / 命令行
    启动:mysql -h 主机名 -P 端口 -u 用户名 -p
    Eg:mysql -h localhost -P 3306 -u root -p
    退出:exit或Ctrl+C

常用命令

  1. 显示已创建的数据库:
show databases;
  1. 打开数据库:
use [数据库名];			
eg:	use text;
  1. 查看已建立的表:
show tables	;	(已打开的数据库中的表)
show tables from [数据库名];
  1. 查看当前所在的库:
select database();
  1. 在当前数据库创建表:
create tables [表名](
[列名] [类型],
……);

Eg:create tables stuinfo(
							id int,
							name varchar(20));
  1. 查看中表的结构:
desc [表名];
  1. 查看表中的数据:
select * from [表名];
  1. 查看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数据定义语言

库的管理

  1. 库的创建
create database if not exists 库名;
#案例:创建库books
CREATE DATABASE IF NOT EXISTS books;
  1. 库的修改
alter database 库名;
  1. 库的删除
drop database if exists 库名;

表的管理

  1. 表的创建
Create table 表名(
		列名 类型,
		……
)

#案例:创建表book
CREATE TABLE book(
		id INT,#编号
		bName VARCHAR(20),#书名,最多20个字符
		price DOUBLE,#价格
		authorId INT,#作者编号
		publishDate DATETIME#出版日期
);
DESC book;#查看
  1. 表的修改
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;
  1. 表的删除
drop table 表名;
  1. 表的复制
复制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;
#只想要结构,不要数据,所以复制数据的条件恒不成立

常见数据类型

  1. 数值型:
    整型:tinyint smallint mediumint int/interger bigint
    浮点型:float(M,D) double(M,D)
    定点型:dec(M,D) decimal(M,D)
    M:整数部位+小数部位 的长度 D: 小数部位 M和D都可以省略
  2. 字符型
    较短的文本:char(M) varchar(M) M最大长度
    较长的文本:text blob
  3. 日期型:
    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';

两者比较:

  1. 方式一支持插入多行
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);
  1. 方式一支持子查询
INSERT INTO beauty(id,NAME,phone)
SELECT 26,'宋茜','11809866';			
#把这个查询语句的结果集插入到beauty

修改语句

  1. 修改单表的记录
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;
  1. 修改多表的记录
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;

删除语句

  1. 单表的删除
delete from 表名 where 筛选条件

#案例1:删除手机号以9结尾的女生信息
DELETE FROM beauty WHERE phone LIKE '%9';
  1. 多表的删除
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%'
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值