MYSQL基础语法
什么是数据库
存储数据的仓库,本质也是一个文件
存储数据的方式
1.数据保存在内存
存储速度快
断电/程序退出,数据就清除了,内存价格贵
2.数据保存在普通文件
永久保存
增删改查效率低
3.数据保存在数据库中
永久保存
SQL语句方便操作数据库,数据库是对大量信息进行管理的高效的解决方案
常见数据库
Oracle:大型收费数据库
MYSQL:开源免费中小型数据库
DB2 , SQLServer, SyBase, SQLite
MySQL的启动和关闭
启动:
net stop mysql
停止:
net start mysql
退出:
exit
登录:
mysql -u账号 -p密码
mysql -hip地址 -u账号 -p密码
SQL语句的分类和语法
SQL作用
通过SQL语句可以方便操作数据库、表、数据。
SQL是数据库管理系统都需要遵循的规范。不同数据库上产厂商都支持SQL语句。
SQL语句分类
-
DDL数据定义语言
用来定义数据库对象。关键字:create,drop,alter等
-
DML数据操作语言
用来对数据进行增删改。关键字:insert,delete,update等
-
DQL数据查询语言
对数据进行查询。关键字:select
-
DCL数据控制语言
SQL通用语法
-
SQL可以单行或者多行书写,以分号结尾。
-
可以使用空格缩进增强语句可读性。
-
MySQL数据库SQL语句不区分大小写,关键字建议大写。
-
3种注释
单行注释:-- 注释
多行注释:/* 注释 */
MYSQL特有单行:#注释
DDL创建数据库(重要)
-
直接创建数据库
CREATE DATABASE 数据库名;
-
判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
-
创建数据库并指定字符集为gbk
CREATE DATABASE 数据库名 DEFAULT CHARACTER SET gbk;
DDL修改和删除数据库(重要)
-
修改
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 新字符集;
-
删除
DROP DATABASE 数据库名;
DDL查看数据库
-
查看
SELECT DATABASE();
-
切换
USE 数据库名;
DDL操作表
前提先使用某个数据库
创建表
CREATE TABLE 表名(
字段名1 字段类型1,
字段名2 字段类型2
);
MySQL数据类型
常用数据类型:int,double,varchar,date
查看表
SHOW TABLES;
查看表结构
DESC 表名;
查看创建表的SQL语句
SHOW CREATE TABLE 表名;
删除表
快速创建一个表结构相同的表
CREATE TABLE 表名 LIKE 其他表;
-
直接删除表
DROP TABLE 表名;
-
判断是否存在并删除
DROP TABLE IF EXISTS 表名;
DDL修改表结构
-
添加表一列
ALTER TABLE 表名 ADD 字段名 字段类型;
-
修改字段类型
ALTER TABLE 表名 MODIFY 字段名 新类型;
-
修改字段名和类型
ALTER TABLE 表名 CHANGE 字段名 新字段名 新类型;
-
删除一列
ALTER TABLE 表名 DROP 字段名;
DML插入纪录(重要)
插入全部字段
-
所有字段名都写出来
INSERT INTO 表名(字段名1,字段名2,字段名3,...)VALUES(值1,值2,值3,...);
-
不写字段名
INSERT INTO 表名 VALUES(值1,值2,值3,...);
插入部分字段
INSERT INTO 表名(字段名1,字段名2,...)VALUES(值1,值2,...);
注意
- 字段和值要对应,(类型、数量)
- 值的大小要在字段范围内
- 除了数值类型,其他类型一定要有引号,建议单引号
- 如果插入空值,可以不写字段或对应值写NULL
DOS命令窗口操作数据乱码问题
DOS命令窗口编码为GBK
解决方案:
-
快捷设置
DOS命令行输入 set name gbk;
临时方案,退出dos命令行就失效了,每次要重新配置。
-
修改MySQL配置文件[不建议]
DML更新记录表
-
不带条件修改数据
UPDATE 表名 SET 字段名=新的值;
-
带条件修改
UPDATE 表名 SET 字段名=新的值 WHERE 条件;
DML删除数据
-
指定条件删除
DELETE FROM 表名 WHERE 条件;
-
没有条件删除
DELETE FROM 表名;
主键约束(重要)
作用
通过主键区分数据
通常不用业务字段作为主键,单独给每张表设计一个id字段,把id作为主键。只要不重复且非空。
创建主键
主键:PRIMARY KEY
特点
- 必须包含唯一的值(不能重复)
- 主键不能有NULL
创建主键方式
-
创建表的时候添加主键
CREATE TABLE 表名( 字段名 字段类型 PRIMARY KEY );
-
在已有表中添加主键(不常用)
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
主键自增(重要)
字段名 字段类型 PRIMARY KEY AUTO_INCREMENT
-- 类型必须是数值型才能自增
DELETE和TRUNCATE的区别
delete只会删除表数据,表信息还在
truncate摧毁表并重建
唯一约束
让字段唯一,不能重复
字段名 字段类型 UNIQUE
非空约束
字段名 字段类型 NOT NULL
主键唯一非空,普通字段加非空唯一约束有区别吗?
一张表中只能有一个主键
一张表中可以有多个唯一和非空字段
主键才能自增,普通字段不能自增
默认值约束
如果这个字段不设置值,就是默认值
字段名 字段类型 DEFAULE 值
DQL没有条件的查询(重要)
查询不会更改数据。
普通查询
SELECT 字段名1,字段名2,... FROM 表名
SELECT * FROM 表名
别名查询
SELECT 字段名 AS 别名 FROM 表名 AS 别名
-- AS可以省略
清除重复值
SELECT DISTINCT 字段名 FROM 表名
查询结果参与式运算
SELECT 字段+数值 FROM 表名;
SELECT 字段+字段 FROM 表名;
蠕虫复制
将一张表的数据复制,插入到另一张表中
INSERT INTO 表名1 SELECT * FROM 表名2
具体操作
INSERT INTO 表名1(字段1,字段2) SELECT 字段1,字段2 FROM 表名2
DQL查询语句-条件查询(重要)
SELECT * FROM 表名 WHERE 条件
-- 比较运算符
< > <= >= != <>
-- 逻辑运算符
&& AND || OR !
IS NOT NULL
IN关键字
SELECT * FROM 表名 WHERE 字段名 IN (值1,值2)
SELECT * FROM 表名 WHERE 字段名 NOT IN (值1,值2)
BETWEEN AND
SELECT * FROM 表名 WHERE 字段名 BETWEEN 值1 AND 值2
-- 前后开区间
模糊查询(重要)
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串通配符';
-- %表示任意多个字符
-- _表示一个字符
查询语句-排序(重要)
单列排序ORDER BY
SELECT * FROM 表名 ORDER BY 字段名 ASC|DESC;
--ASC升序
--DESC降序
--不写默认升序
组合排序
SELECT * FROM 表名 ORDER BY 字段1 ASC|DESC,字段2 ASC|DESC;
-- ASC升序
-- DESC降序
-- 不写默认升序聚合函数
查询语句-聚合函数(重要)
五个聚合函数
count
:统计指定记录数,纪录为NULL不统计sun
:计算指定列的数求和,如果不是数值类型,计算结果为0max
:最大值min
:最小值avg
:平均值
聚合函数写在字段名的地方
聚合函数是以列为单位操作
SELECT 聚合函数 FROM 表名
查询语句-分组 (重要)
SELECT 字段 FROM 表 GROUP BY 字段 WHERE 条件 HAVING 条件
having与where的区别
- having是分组后进行过滤
- where是分组前过滤
- having后可以使用聚合函数
- where后不能使用聚合函数
查询语句-limit(重要)
SELECT * FROM 表名 LIMIT 跳过的条数,显示的条数