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;

浙公网安备 33010602011771号