MySQL数据库 - SQL基础和入门

MySQL数据库 - SQL基础和入门

1. MySQL基础和SQL入门

注释语法

注释语法 说明
-- 空格 单行注释
/* */ 多行注释
# MySQL特有的单行注释
# show databases; 单行注释
-- show databases; 单行注释
/*
多行注释
show databases;
*/

SQL的分类

分类 说明
数据定义语言 简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列 等。
数据操作语 言 简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。
数据查询语 言 简称DQL(Data Query Language),用来查询数据库中表的记录。
数据控制语 言 简称DCL(Date Control Language),用来定义数据库的访问权限和安全级别, 及创建用户。

1.1 DDL操作 - 数据库

以下命令中使用 db 来代替自定义的数据库名

1.1.1 创建数据库
命令 说明
create database db; 创建指定名称的数据库。
create database db character set 字符集; 创建指定名称的数据库,并且指定字符集(一般都 指定utf-8)

示例:

/*
方式1 直接指定数据库名进行创建
默认数据库字符集为:latin1
*/
CREATE DATABASE db1;
/*
方式2 指定数据库名称,指定数据库的字符集
一般都指定为 utf8,与Java中的编码保持一致
*/
CREATE DATABASE db1_1 CHARACTER SET utf8;
1.1.2 查看/选择数据库
命令 说明
use db; 切换数据库
select database(); 查看当前正在使用的数据库
show databases; 查看Mysql中 都有哪些数据库
show create database db; 查看一个数据库的定义信息

示例:

-- 切换数据库 从db1 切换到 db1_1
USE db1_1;
-- 查看当前正在使用的数据库
SELECT DATABASE();
-- 查看Mysql中有哪些数据库
SHOW DATABASES;
-- 查看一个数据库的定义信息
SHOW CREATE DATABASE db1_1;
1.1.3 修改数据库
命令 说明
alert database db character set 字符集; 数据库的字符集修改操作

示例:

-- 将数据库db1 的字符集 修改为 utf8
ALTER DATABASE db1 CHARACTER SET utf8;
-- 查看当前数据库的基本信息,发现编码已更改
SHOW CREATE DATABASE db1;

1.1.4 删除数据库
命令 说明
drop database db; 从MySql中永久的删除某个数据库

示例:

-- 删除某个数据库
DROP DATABASE db1_1;

1.2 DDL操作 - 数据表

1.2.1 MySQL常见数据类型
类型 描述
int 整型
double 浮点型
varchar 字符串类型
date 日期类型,格式yyyy-MM-dd
1.2.2 MySQL详细数据类型
字段类型 说明 字段说明 JAVA类型
char(n) 固定长度 255 java.lang.String
varchar(n) 可变长度 65535 java.lang.String
tinytext 可变长度 255 java.lang.String
text 可变长度 65535 java.lang.String
mediumtext 可变长度 2^24-1 java.lang.String
longtext 可变长度 2^32-1 java.lang.String
date 3字节 yyyy-MM-dd Date
time 3字节 HH-mm-ss Dtae
datetime 8字节 yyyy-MM-dd HH-mm-ss Date
timestamp 4字节 自动存储记录修改时间 java.sql.Timestamp
year 1字节 年份 Date
tinyint 1字节 -128~127 int
smallint 2字节 -32768~32767 int
mediumint 3字节 -8388608~8388607 int
int 4字节 -2147483648~2147483647 int
bigint 8字节 +- 9.22 x 10^18 int
float(m,d) 4字节 m总位数,d小数位 float
double(m,d) 8字节 m总位数,d小数位 double
decimal(m,d) 存储字符串的浮点数 double
  • char类型是固定长度的: 根据定义的字符串长度分配足够的空间
  • varchar类型是可变长度的: 只使用字符串长度所需的空间
//字符串"abc"

x char(10) 占用10个字节
y varchar(10) 占用3个字节
  • char类型适合存储 固定长度的字符串,比如 密码 ,性别一类
  • varchar类型适合存储 在一定范围内,有长度变化的字符串
1.2.3 创建表
1.2.3.1 格式:
CREATE TABLE 表名(
字段名称1 字段类型(长度),
字段名称2 字段类型 注意 最后一列不要加逗号
);

示例:

表名:category
表中字段:
分类ID :cid ,为整型
分类名称:cname,为字符串类型,指定长度20
-- 切换到数据库 db1
USE db1;
-- 创建表
CREATE TABLE category(
cid INT,
cname VARCHAR(20)
);
1.2.3.2 快速创建结构相同表

语法:

create table 新表名 like 旧表名

示例:

-- 创建一个表结构与 test1 相同的 test2表
CREATE TABLE test2 LIKE test1;
-- 查看表结构
DESC test2;
1.2.4 查看表
命令 说明
show tables; 查看当前数据库中的所有表名
desc 表名; 查看数据表的结构
1.2.5 删除表
命令 说明
drop table 表名; 从数据库永久删除一张表
drop table if exists 表名; 判断表是否存在,存在就删除
1.2.6 修改表
1.2.6.1 修改表名
rename table 旧表名 to 新表名
e.g.
RENAME TABLE category TO category1;
1.2.6.2 修改表的字符集
alter table 表名 character set 字符集
e.g.
alter table category character set gbk;
1.2.6.3 向表中添加列
alert table 表名 add 字段名称 字段类型
e.g.
ALTER TABLE category ADD cdesc VARCHAR(20);
1.2.6.4 修改表中列的数据类型和长度
alter table 表名 modify 字段名称 字段类型
e.g.
ALTER TABLE category MODIFY cdesc VARCHAR(50);
1.2.6.5 修改列名称
alter table 表名 change 旧列名 新列名 类型(长度);
e.g.
ALTER TABLE category CHANGE cdesc description VARCHAR(30);
1.2.6.6 删除列
alter table 表名 drop 列名;
e.g.
ALTER TABLE category DROP description;

1.3 DML 操作表

1.3.1 插入数据(3种方式)

格式:

insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);
1.3.1.1 插入全部字段, 将所有字段名都写出来
INSERT INTO student (sid,sname,age,sex,address) VALUES(1,'孙悟空',20,'男','花果山');
1.3.1.2 插入全部字段,不写字段名
INSERT INTO student VALUES(2,'孙悟饭',10,'男','地球');
1.3.1.3 插入指定字段值
INSERT INTO category (cname) VALUES('白骨精');

注意:

  • 值与字段必须要对应,个数相同&数据类型相同
  • 值的数据大小,必须在字段指定的长度范围内
  • varchar char date类型的值必须使用单引号,或者双引号 包裹
  • 如果要插入空值,可以忽略不写,或者插入null
  • 如果插入指定字段的值,必须要上写列名
1.3.2 更改数据
1.3.2.1 不带条件的修改
update 表名 set 列名 = 值
e.g.
UPDATE student SET sex = '女';
1.3.2.2 带条件的修改
update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值 ]
e.g.
UPDATE student SET sex = '男' WHERE sid = 3;
//一次修改多个列
UPDATE student SET age = 20,address = '北京' WHERE sid = 2;
1.3.3 删除数据
1.3.3.1 删除所有数据
delete from 表名
e.g.
DELETE FROM student;

or

truncate table 表名
e.g.
truncate table student;

推荐第二种truncate,先删除整张表, 然后再重新创建一张一模一样的表. 效率高.

delete from 有多少条记录 就执行多少次删除操作. 效率低

1.3.3.2 删除指定条件的数据
delete from 表名 [where 字段名 = 值]
e.g.
DELETE FROM student WHERE sid = 1;

1.4 DQL 查询表

1.4.1 简单查询
  • 查询列数据
select 列名 from 表名
e.g.
SELECT eid,ename FROM emp;
  • 查询所有数据
select * from 表名
e.g.
SELECT * FROM emp;
  • 别名查询,使用关键字 as

  • 使用去重关键字 distinct

SELECT DISTINCT dept_name FROM emp;
  • 运算查询 (查询结果参与运算)
SELECT ename , salary + 1000 FROM emp
1.4.2 条件查询

格式:select 列名 from 表名 where 条件表达式

p.s. 先取出表中的每条数据,满足条件的数据就返回,不满足的就过滤掉

运算符:

1.4.2.1 比较运算符
运算符 说明
> < <= >= = <> != 大于、小于、大于(小于)等于、不等于
BETWEEN ...AND... 显示在某一区间的值 例如: 2000-10000之间: Between 2000 and 10000
IN(集合) 集合表示多个值,使用逗号分隔,例如: name in (悟空,八戒) in中的每个数据都会作为一次条件,只要满足条件就会显示
LIKE '%张%' 模糊查询
IS NULL 查询某一列为NULL的值, 注: 不能写 = NULL
1.4.2.2 逻辑运算符
运算符 说明
And && 多个条件同时成立
Or 多个条件任一成立
Not 不成立,取反
# 查询员工姓名为黄蓉的员工信息
SELECT * FROM emp WHERE ename = '黄蓉';
# 查询薪水价格为5000的员工信息
SELECT * FROM emp WHERE salary = 5000;
# 查询薪水价格不是5000的所有员工信息
SELECT * FROM emp WHERE salary != 5000;
SELECT * FROM emp WHERE salary <> 5000;
# 查询薪水价格大于6000元的所有员工信息
SELECT * FROM emp WHERE salary > 6000;
# 查询薪水价格在5000到10000之间所有员工信息
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;
# 查询薪水价格是3600或7200或者20000的所有员工信息
-- 方式1: or
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
-- 方式2: in() 匹配括号中指定的参数
SELECT * FROM emp WHERE salary IN(3600,7200,20000);

模糊查询 通配符

通配符 说明
% 表示匹配任意多个字符串
_ 表示匹配 一个字符
# 查询含有'精'字的所有员工信息
SELECT * FROM emp WHERE ename LIKE '%精%';
# 查询以'孙'开头的所有员工信息
SELECT * FROM emp WHERE ename LIKE '孙%';
# 查询第二个字为'兔'的所有员工信息
SELECT * FROM emp WHERE ename LIKE '_兔%';
# 查询没有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NULL;
-- SELECT * FROM emp WHERE dept_name = NULL;
# 查询有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NOT NULL;
posted @ 2020-10-22 23:38  Pengc931482  阅读(176)  评论(0)    收藏  举报